MPI 集合通信中的指针分配



我想知道当发送缓冲区在根中分配但未在其他等级中分配时,诸如Bcast,Scatter,Gather等MPI集体通信的行为如何。

例如:

rowptr = (int*)malloc(sizeof(int) * (row_count + 1));
MPI_Scatterv(all_rows, rowCounts, rowDispls, MPI_INT, 
rowptr, row_count, MPI_INT, MASTER, MPI_COMM_WORLD);

其中all_rows仅在MASTER (rank == 0)进程中分配。在这种情况下,MPI 的行为是什么。

或在以下情况下;

MPI_Scatter(eCounts, 1, MPI_INT, &elm_count, 1, MASTER, MPI_COMM_WORLD);

其中eCountsint[]的,elm_countint的,但eCount只在MASTER中分配。

即使发送缓冲区未在其他等级中使用,我是否也应该分配它们?

来自 MPI 3.1 标准(第 5.6 章第 160 页(

对于所有非根进程,将忽略发送缓冲区。

[...]

函数的所有参数在进程根上都很重要,而在其他进程上,只有参数 recvbuf、recvcount、recvtype、root 和 comm 是重要的。

同样的故事MPI_Gather()recv*替换为send*

MPI_Bcast()的情况下,所有参数都很重要(缓冲区是根秩上的发送缓冲区,其他秩上的接收缓冲区(。

相关内容

  • 没有找到相关文章

最新更新