MPI收集稀疏矢量

时间:2013-03-01 22:23:29

标签: c arrays mpi sparse-matrix

您好我有结果bool C数组(sizeResults的大小)并且它非常稀疏,因为大多数值都是false。 我正在使用MPI_GATHER从所有工作人员那里收集这个数组,但这非常耗时...

MPI_Gather(result, sizeResults, MPI_BYTE, result_final, sizeResults, MPI_BYTE, 0, MPI_COMM_WORLD);

有更有效的方法吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

我可以想到几个,取决于你的数组有多稀疏。一个简单的方法是将你的bool数组压缩成一个位数组,将其减少到原始大小的1/8。

你可以做的其他事情:

  1. 而不是Gather bool值本身,Gatherv true值的索引。例如,如果进程具有数组{ T, F, F, F, F, F, T, F, F, T },那么它将发送数组{ 0, 6, 9 }

  2. 如果您想要发挥创意,请将您的数组视为由细分组成,其中细分被定义为true值,后跟所有导致下一个的falsetrue值。{ T, F, F, F, F, F }使用上面的示例,您的3个细分受众群将是{ T, F, F }{ T }Gatherv。现在,每个流程{{1}}所需的只是每个段的长度。公平地说,这通常不比方法1更有效。