如何使用并行计算计算图像的直方图?串行图像的直方图很容易,但我对并行计算它一无所知。
任何想法、算法、源代码或有用的链接将不胜感激。
我正在使用 MPI。
如何使用并行计算计算图像的直方图?串行图像的直方图很容易,但我对并行计算它一无所知。
任何想法、算法、源代码或有用的链接将不胜感激。
我正在使用 MPI。
这是想法:
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);
之后,完整的全局直方图将在histogram
0 级进程的数组中。
我只能猜测你在寻找什么。让我给你一个算法的简要概述:
每个节点计算一个直方图。在最后一步中,通过将它们加在一起来减少它们。最终的总和可以根据工作量一次又一次地拆分。
这种方法类似于map/reduce。