在MPI集体通信中分配指针。

问题描述 投票:0回答:1

我想知道当发送缓冲区在根目录下分配,但在其他行列中没有分配时,MPI集体通信如Bcast、Scatter、Gather等如何处理。

比如说

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_countinteCount 只在 MASTER.

我是否也应该分配发送缓冲区,即使它们没有在其他行列中使用?

c++ malloc buffer mpi scatter
1个回答
2
投票

摘自MPI 3.1标准(5.6章第160页)

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

[...]

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

同样的故事也适用于 MPI_Gather() 而代 recv*send*.

所有 争论的重要性。MPI_Bcast() 缓冲区在根级上是发送缓冲区,其他级上是接收缓冲区)。

© www.soinside.com 2019 - 2024. All rights reserved.