Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以忽略/抛出MPI_Allgather中的接收数据?_C++_C_Mpi_Parallel Processing - Fatal编程技术网

C++ 是否可以忽略/抛出MPI_Allgather中的接收数据?

C++ 是否可以忽略/抛出MPI_Allgather中的接收数据?,c++,c,mpi,parallel-processing,C++,C,Mpi,Parallel Processing,在MPI中,是否可以在不分配缓冲区的情况下立即抛出接收到的数据?我使用MPI_Allgather从几个进程收集数据,但在某些情况下,一个或多个进程没有有用的数据可发送 我最初的解决办法是让无用的过程结束。但是,如果一个任务在没有调用MPI_Allgather的情况下终止,其余任务将以死锁结束,因为MPI_Allgather会阻塞。为了克服这个问题,我将所有进程保留到最后,但发送从未使用过的垃圾数据 有用的进程保留了一些接收到的数据,而无用的进程则没有。我尝试为recbuf传递空指针,如下所示:

在MPI中,是否可以在不分配缓冲区的情况下立即抛出接收到的数据?我使用MPI_Allgather从几个进程收集数据,但在某些情况下,一个或多个进程没有有用的数据可发送

我最初的解决办法是让无用的过程结束。但是,如果一个任务在没有调用MPI_Allgather的情况下终止,其余任务将以死锁结束,因为MPI_Allgather会阻塞。为了克服这个问题,我将所有进程保留到最后,但发送从未使用过的垃圾数据

有用的进程保留了一些接收到的数据,而无用的进程则没有。我尝试为recbuf传递空指针,如下所示:

MPI_Allgather(&sendbuf, 1, MPI_INT, 0, 1, MPI_INT, MPI_COMM_WORLD);

但它不起作用。我能做些什么来避免收到,或者至少存储无用的数据?

您可以为有用的进程创建一个新组,并在该组上聚集,而不是
MPI\u COMM\u WORLD
您可以为有用的进程创建一个新组,并在该组上聚集,而不是
MPI\u COMM\u WORLD
根据定义,集体是集体,这意味着通信器中的每个进程都必须调用它们。如果您需要对通信器的子集执行集体调用,则必须按照前面的建议创建一个新的通信器

您还可以查看
MPI\u Allgatherv
,看看它是否适合您的应用程序。通过这个集合,您可以指定每个进程将发送多少数据。但是,通信器中的每个进程仍然必须调用
MPI\u Allgatherv
,即使是那些不发送数据的进程。除此要求外,所有流程都必须知道每个流程贡献了多少数据


最后,MPI3很可能包含稀疏的集合操作,这些操作完全按照您的意愿执行。但就目前而言,一个新的通信器可能是最好的方法。

根据定义,集体就是集体,这意味着通信器中的每个进程都必须调用它们。如果您需要对通信器的子集执行集体调用,则必须按照前面的建议创建一个新的通信器

您还可以查看
MPI\u Allgatherv
,看看它是否适合您的应用程序。通过这个集合,您可以指定每个进程将发送多少数据。但是,通信器中的每个进程仍然必须调用
MPI\u Allgatherv
,即使是那些不发送数据的进程。除此要求外,所有流程都必须知道每个流程贡献了多少数据


最后,MPI3很可能包含稀疏的集合操作,这些操作完全按照您的意愿执行。但就目前而言,新的通讯器可能是最好的方法。

+1这是实现只涉及所有进程子集的集体通讯的正确方法。如果非通信进程仍然需要与其他进程同步,则可能还需要一个屏障。+1这是实现仅涉及所有进程子集的集体通信的正确方法。如果非通信进程仍然需要与其他进程同步,则可能还需要设置障碍。