如何使用并行计算计算图像的直方图?串行图像的直方图很容易,但我不知道并行计算它。
任何想法,算法,源代码或有用的链接都将不胜感激。
我正在使用MPI。
答案 0 :(得分:6)
这是一个想法:
首先,您使用MPI_Scatter()
或MPI_Scatterv()
按行(如果使用C编程)或按列(如果使用Fortran编程)分散图像(使用scatterv可以将图像分发到多个进程)这不是行/列数的整数除数。
然后每个过程计算其图像部分的直方图。让直方图存储在256个元素的整数数组local_histogram
中(我假设图像是灰度)。
在最后一步,使用MPI_Reduce()
:
MPI_Reduce(local_histogram, histogram, 256, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
之后,完整的全局直方图将位于{0}进程中的histogram
数组中。
答案 1 :(得分:1)
我只能猜到你正在寻找什么。让我给你一个算法的简要概述:
每个节点计算直方图。在最后一步中,通过将它们加在一起来减少所有这些。最终的总和可以再次拆分,一次又一次,取决于工作量。
此方法类似于map/reduce。