atomic - mpi 原子读/修改/写

标签 atomic mpi

有没有一种简单的方法可以在 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/

相关文章:

c - MPI_COMM_WORLD 不是常量吗?

C++11内存模型: why can't compiler move statements across load() operations during optimization?

java - 编写一个包含整数的 ArrayList,该整数将被并发访问

java - AtomicLong 可能出现竞争条件吗?

python - 使用 Python/Boto 更新 DynamoDB 原子计数器

compiler-errors - 在LAN中运行MPI群集程序时出错

c++ - 将 MPI_Bcast 用于

compiler-errors - Fortran MPI-无法在新服务器上使用现有代码库

c - 是否可以使用 C 在 MPI 中使用 MPI_Datatype 发送嵌套结构

c - 如何初始化和使用 C11 _Atomic 变量?