有没有一种简单的方法可以在 mpi 中实现原子整数运算(单边)? 我上次看是三年前,mpi 书中的例子实现起来相当复杂。
最佳答案
单方面 MPI 相当复杂,具有大约三种(更像是两种半)不同的机制。
前两种模式是“主动目标同步”,其中目标(目标进程,进行单向调用的进程称为原点)明确声明一个纪元,在此期间它的窗口(“共享”区域)暴露了。然后,您可以区分集体声明的这个纪元 (MPI_Win_fence
) 和它是一个组的本地纪元 (MPI_Win_start
/post
/等待
/完成
调用)。
通过 MPI_Win_lock
/unlock
调用完成了一些接近真正的单方面的事情,其中源锁定目标上的“共享”区域以获得对其的独占访问.这称为“被动目标同步”,因为目标完全不知道其共享区域发生的任何事情;这需要在目标上运行一个守护进程。
到目前为止,MPI-2 的状态。不幸的是,您只能在锁定/解锁时期读取或写入,但不能同时读取或写入,因此无法以直接的方式进行原子获取和任何操作。这在 MPI-3 中得到了解决,它具有 MPI_Fetch_and_op
指令。
例如,如果您使用 MPI_REPLACE
,您会读取“共享”内存中的区域,并用您指定的内容覆盖它。这足以实现原子操作。
关于atomic - mpi 原子读/修改/写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2901978/