MPI多次分散和聚集

MPI多次分散和聚集,mpi,Mpi,我对散射和gatter的理解有问题。假设我有一个表[表大小]。在这个表中,我想对每25个元素做一些计算。我想将它划分到我的MPI中的所有进程中。我试试这样的 MPI_Scatter(table, 25, MPI_INT, tmpTable, 25, MPI_INT, 0, MPI_COMM_WORLD); tmpTable[12] = doTheCalculation(tmpTable); MPI_Gather(tmpTable, 25, MPI_INT, table, 25, MPI_INT,

我对散射和gatter的理解有问题。假设我有一个表[表大小]。在这个表中,我想对每25个元素做一些计算。我想将它划分到我的MPI中的所有进程中。我试试这样的

MPI_Scatter(table, 25, MPI_INT, tmpTable, 25, MPI_INT, 0, MPI_COMM_WORLD);
tmpTable[12] = doTheCalculation(tmpTable);
MPI_Gather(tmpTable, 25, MPI_INT, table, 25, MPI_INT, 0, MPI_COMM_WORLD);

但只有当这个25*进程数=表大小正确时,它才能工作。如果我希望表大小为125,但只运行3个进程,我应该如何继续?我的目标是让流程0和1计数两次(流程0元素1-25,然后是75-100,流程1计数25-50和100-125)。分散和聚集能做到这一点吗?我应该调查别的事情吗?提前感谢

如果您想使用不同的计数进行分散/聚集,则必须使用
MPI\u Scatterv()
MPI\u Gatherv()
。解决您的问题的一个简单方法是
MPI\u Scatterv()
,然后是
MPI\u Scatterv()
,我相信这不可能一次完成。可能是