2

如何使用并行计算计算图像的直方图?串行图像的直方图很容易,但我对并行计算它一无所知。

任何想法、算法、源代码或有用的链接将不胜感激。

我正在使用 MPI。

4

2 回答 2

6

这是想法:

MPI_Scatter()首先,使用or MPI_Scatterv()(使用 scatterv 可以将图像分发到不是行数/列数的整数除数的多个进程)按行(如果您在 C 中编程)或按列(如果您在 Fortran 中编程)分散图像)。

然后每个进程计算其图像部分的直方图。local_histogram让直方图存储在256 个元素的整数数组中(我假设图像是灰度的)。

在最后一步,使用求和进行全局归约MPI_Reduce()

MPI_Reduce(local_histogram, histogram, 256, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);

之后,完整的全局直方图将在histogram0 级进程的数组中。

于 2012-05-14T16:19:42.287 回答
1

我只能猜测你在寻找什么。让我给你一个算法的简要概述:

每个节点计算一个直方图。在最后一步中,通过将它们加在一起来减少它们。最终的总和可以根据工作量一次又一次地拆分。

这种方法类似于map/reduce

于 2012-05-14T12:54:53.043 回答