C++ 在MPI通讯器之间复制数据
我已经将MPI_COMM_WORLD拆分为两个子通讯器,我想将分布在MPI_COMM_WORLD上的一组数据传输到两个子通讯器。在MPI-1.1中实现这一点的最佳方法是什么 例如,有一个数组C++ 在MPI通讯器之间复制数据,c++,c,mpi,C++,C,Mpi,我已经将MPI_COMM_WORLD拆分为两个子通讯器,我想将分布在MPI_COMM_WORLD上的一组数据传输到两个子通讯器。在MPI-1.1中实现这一点的最佳方法是什么 例如,有一个数组A=[1 2 3 4 5 6 7 8]分布在MPI通信世界中的四个MPI进程中,如下所示 rank 0: [1 2] rank 1: [3 4] rank 2: [5 6] rank 3: [7 8] 我将MPI_COMM_WORLD拆分为两个子通讯器,每个子通讯器包含两个MPI进程,并希望我的数据如
A=[1 2 3 4 5 6 7 8]
分布在MPI通信世界中的四个MPI进程中,如下所示
rank 0: [1 2]
rank 1: [3 4]
rank 2: [5 6]
rank 3: [7 8]
我将MPI_COMM_WORLD拆分为两个子通讯器,每个子通讯器包含两个MPI进程,并希望我的数据如下所示:
subcommunicator1:
rank 0: [1 2 3 4]
rank 1: [5 6 7 8]
subcommunicator2:
rank 0: [1 2 3 4]
rank 1: [5 6 7 8]
没有一种方法可以将数据从一个通讯器发送到另一个通讯器。在MPI中,通讯器专门设计用于包含组内的通讯。在您的情况下,您需要在拆分
MPI\u COMM\u WORLD
之前分发数据。如何做到这一点将取决于您的数据和期望的分布。您可能需要查看MPI\u分散
,MPI\u聚集
,或者两者兼而有之。没有一种方法可以将数据从一个通信器发送到另一个通信器。在MPI中,通讯器专门设计用于包含组内的通讯。在您的情况下,您需要在拆分MPI\u COMM\u WORLD
之前分发数据。如何做到这一点将取决于您的数据和期望的分布。您可能需要查看MPI\u分散
,MPI\u聚集
,或者两者兼而有之。没有一种方法可以将数据从一个通信器发送到另一个通信器。在MPI中,通讯器专门设计用于包含组内的通讯。在您的情况下,您需要在拆分MPI\u COMM\u WORLD
之前分发数据。如何做到这一点将取决于您的数据和期望的分布。您可能需要查看MPI\u分散
,MPI\u聚集
,或者两者兼而有之。没有一种方法可以将数据从一个通信器发送到另一个通信器。在MPI中,通讯器专门设计用于包含组内的通讯。在您的情况下,您需要在拆分MPI\u COMM\u WORLD
之前分发数据。如何做到这一点将取决于您的数据和期望的分布。你可能需要看看MPI_SCATTER
,MPI_GATHER
,或者两者兼而有之。有一个网站提供了一些非常好的教程:(虽然它是由“Wes”编写的,但它和我不一样)没有一种方法可以将数据从一个通讯器发送到另一个通讯器。当然,每个进程在MPI\u COMM\u WORLD
中保留其成员资格(和等级),以便消息可以在不同(子)通信者的进程之间继续传递?还是我错过了什么?我很久没有使用团体和交流者了。当然,马克,你是对的。创建子通讯器后,可以继续在原始通讯器上发送数据。关键是,你必须在MPI\u COMM\u WORLD
上进行这种数据传输,而不是在你创建的其他通讯器上。韦斯利,谢谢。我希望有一种半自动的方法。我来晚了,我想把MPI_COMM_WORLD和subcommunicator*和一个Intercommunicator(MPI_intercomm_create
)链接起来可能会有帮助。有一个网站提供了一些非常好的教程:(虽然它是由“Wes”编写的,但它和我不一样)没有一种方法可以将数据从一个通讯器发送到另一个通讯器。当然,每个进程在MPI\u COMM\u WORLD
中保留其成员资格(和等级),以便消息可以在不同(子)通信者的进程之间继续传递?还是我错过了什么?我很久没有使用团体和交流者了。当然,马克,你是对的。创建子通讯器后,可以继续在原始通讯器上发送数据。关键是,你必须在MPI\u COMM\u WORLD
上进行这种数据传输,而不是在你创建的其他通讯器上。韦斯利,谢谢。我希望有一种半自动的方法。我来晚了,我想把MPI_COMM_WORLD和subcommunicator*和一个Intercommunicator(MPI_intercomm_create
)链接起来可能会有帮助。有一个网站提供了一些非常好的教程:(虽然它是由“Wes”编写的,但它和我不一样)没有一种方法可以将数据从一个通讯器发送到另一个通讯器。当然,每个进程在MPI\u COMM\u WORLD
中保留其成员资格(和等级),以便消息可以在不同(子)通信者的进程之间继续传递?还是我错过了什么?我很久没有使用团体和交流者了。当然,马克,你是对的。创建子通讯器后,可以继续在原始通讯器上发送数据。关键是,你必须在MPI\u COMM\u WORLD
上进行这种数据传输,而不是在你创建的其他通讯器上。韦斯利,谢谢。我希望有一种半自动的方法。我来晚了,我想把MPI_COMM_WORLD和subcommunicator*和一个Intercommunicator(MPI_intercomm_create
)链接起来可能会有帮助。有一个网站提供了一些非常好的教程:(虽然它是由“Wes”编写的,但它和我不一样)没有一种方法可以将数据从一个通讯器发送到另一个通讯器。当然,每个进程在MPI\u COMM\u WORLD
中保留其成员资格(和等级),以便消息可以在不同(子)通信者的进程之间继续传递?还是我错过了什么?我很久没有使用团体和交流者了。当然,马克,你是对的。创建子通讯器后,可以继续在原始通讯器上发送数据。关键是,你必须在MPI\u COMM\u WORLD
上进行这种数据传输,而不是在你创建的其他通讯器上。韦斯利,谢谢。我希望有一种半自动的方法。我迟到了,我想链接MPI_COMM_WO