MPI_ACCUMULATE 和 MPI_REPLACE 总是比 MPI_PUT 更好的选择吗

问题描述 投票:0回答:1

我正在经历 MPI-3 中引入的累积和原子 MPI RMA 调用。阅读后我发现有一个 MPI_REPLACE 运算符可以在 MPI_Accumulate 中使用它来执行与 MPI_PUT 类似的功能。 根据我在阅读并发 MPI_ACCUMULATE 调用后的理解,并发 MPI_PUT 调用并不是错误的。因此,在我的应用程序中,每当我想更新数据时,我都会为 MPI_PUT 使用 EXCLUSIVE_LOCK。但这会导致严重的性能下降,因为即使对目标进程上不同内存位置的更新也会按顺序发生。因此,由于 SHARED_LOCK 对 MPI_ACCUMULATE 有效,因此在 SHARED_LOCK 内使用 MPI_ACCUMULATE 和 MPI_REPLACE 总是比使用 MPI_PUT 和 EXCLUSIVE_LOCK 更好?还是我误会了什么? 还有一点类似的是 MPI_GET_ACCUMULATE 和 MPI_NO_OP 总是比 MPI_GET 好?

所以基本上我的问题是将删除当前由 EXLUSIVE LOCK 同步的所有 MPI_PUT 调用,并将它们替换为 MPI_ACCUMULATE 和由 SHARED_LOCK 同步的 MPI_REPLACE 一个有效且更好的替代方案......因为它消除了整体上获得 EXCLUSIVE LOCK 的需要目标过程窗口。

parallel-processing mpi atomic distributed-system mpi-rma
1个回答
0
投票

MPI_ACCUMULATE
MPI_REPLACE
是原子放置,一般来说既不好也不坏,但它们几乎肯定比
MPI_PUT
在需要逐元素原子性时使用独占锁更好。

MPI-3 RMA 的推荐模型是在窗口的生命周期内使用

MPI_WIN_LOCK_ALL
,并使用逐元素 RMA 操作或某种形式的互斥(在 https://stackoverflow.com/a/75927929 中提到/2189128) 其他任何东西。

使用

MPI_WIN_FLUSH(_LOCAL)(_ALL)
来实现适当的同步而不终止纪元。如果您只关心重用缓冲区,或者如果 RMA 操作具有往返语义(例如 get、get_accumulate、fetch_and_op、compare_and_swap),请使用
_LOCAL
版本。使用
_ALL
版本完成窗口中的所有目标,而不是只完成一个。

© www.soinside.com 2019 - 2024. All rights reserved.