您好我有结果bool C数组(sizeResults的大小)并且它非常稀疏,因为大多数值都是false。 我正在使用MPI_GATHER从所有工作人员那里收集这个数组,但这非常耗时...
MPI_Gather(result, sizeResults, MPI_BYTE, result_final, sizeResults, MPI_BYTE, 0, MPI_COMM_WORLD);
有更有效的方法吗? 谢谢!
答案 0 :(得分:2)
我可以想到几个,取决于你的数组有多稀疏。一个简单的方法是将你的bool数组压缩成一个位数组,将其减少到原始大小的1/8。
你可以做的其他事情:
而不是Gather
bool值本身,Gatherv
true
值的索引。例如,如果进程具有数组{ T, F, F, F, F, F, T, F, F, T }
,那么它将发送数组{ 0, 6, 9 }
。
如果您想要发挥创意,请将您的数组视为由细分组成,其中细分被定义为true
值,后跟所有导致下一个的false
值true
值。{ T, F, F, F, F, F }
使用上面的示例,您的3个细分受众群将是{ T, F, F }
,{ T }
和Gatherv
。现在,每个流程{{1}}所需的只是每个段的长度。公平地说,这通常不比方法1更有效。