Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
Parallel processing Sendrecv_是否替换冗余?_Parallel Processing_Mpi - Fatal编程技术网

Parallel processing Sendrecv_是否替换冗余?

Parallel processing Sendrecv_是否替换冗余?,parallel-processing,mpi,Parallel Processing,Mpi,与正常的Sendrecv操作不同,我理解_replace使用相同的内存位置、计数和数据类型 经过一些阅读,我发现它应该可以防止缓冲区重叠,但Sendrecv不能也起到同样的作用吗 有人能解释一下手术后数据的变化吗 典型的用法示例将非常有用 谢谢把MPI\u SENDRECV\u REPLACE看作是一个方便的功能MPI_SENDRECV要求两个缓冲区不相交-不能在重叠的缓冲区上运行。这转化为需要一个单独的接收缓冲区,即使人们真正想要实现的是将发送缓冲区的内容与另一列的内容交换。为了使用MPI\u

与正常的Sendrecv操作不同,我理解_replace使用相同的内存位置、计数和数据类型

经过一些阅读,我发现它应该可以防止缓冲区重叠,但Sendrecv不能也起到同样的作用吗

有人能解释一下手术后数据的变化吗

典型的用法示例将非常有用


谢谢

把MPI\u SENDRECV\u REPLACE看作是一个方便的功能
MPI_SENDRECV
要求两个缓冲区不相交-不能在重叠的缓冲区上运行。这转化为需要一个单独的接收缓冲区,即使人们真正想要实现的是将发送缓冲区的内容与另一列的内容交换。为了使用
MPI\u SENDRECV
实现这样的交换,可以执行以下操作(在伪代码中):

这可能会变得单调乏味,尤其是在整个程序的多个位置需要时,更重要的是,如果数据类型是非连续的(即C/C++中矩阵的一列)。解决方案是使用
MPI\u SENDRECV\u REPLACE
,它在内部执行与上述伪代码等效的操作,并正确处理非连续类型


我很难想出这样一个交换的常见用例。在大多数情况下,例如对于halo交换,通常使用不相交的缓冲区进行发送-接收操作就足够了。

MPI\u SENDRECV\u REPLACE
视为一种方便的功能
MPI_SENDRECV
要求两个缓冲区不相交-不能在重叠的缓冲区上运行。这转化为需要一个单独的接收缓冲区,即使人们真正想要实现的是将发送缓冲区的内容与另一列的内容交换。为了使用
MPI\u SENDRECV
实现这样的交换,可以执行以下操作(在伪代码中):

这可能会变得单调乏味,尤其是在整个程序的多个位置需要时,更重要的是,如果数据类型是非连续的(即C/C++中矩阵的一列)。解决方案是使用
MPI\u SENDRECV\u REPLACE
,它在内部执行与上述伪代码等效的操作,并正确处理非连续类型

我很难想出这样一个交换的常见用例。在大多数情况下,例如对于halo交换,使用不相交缓冲区的常规发送-接收操作就足够了

populate data buffer "data"
allocate receive buffer "recv"
call MPI_SENDRECV(data, count, type, recv, count, type)
copy "recv" over "data"
deallocate "recv"