0

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

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

有没有更有效的方法来做到这一点?谢谢!

4

1 回答 1

2

我可以想到几个,具体取决于您的数组的稀疏程度。一种简单的方法是将您的布尔数组压缩成一个位数组,将其减少到其原始大小的 1/8。

你可以做的其他事情:

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

  2. 如果您想获得创意,请将您的数组视为由段组成,其中段定义为一个true值,其后是false通向下一个值的所有true值。使用上面的示例,您的 3 个段将是{ T, F, F, F, F, F }{ T, F, F }{ T }。现在你需要Gatherv从每个过程中得到每个段的长度。公平地说,这通常并不比方法 1 更有效。

于 2013-03-01T23:49:19.687 回答