为了让事情变得简单并且为了专注于我的问题的核心,让我们假设由指针变量ptr
在本地寻址的内存位置在几个进程之间共享。我特别使用C/++中的MPI共享内存窗口来分配和共享内存。要具体,让我们说ptr
引用一个浮点变量,所以在当地我们有特定共享内存写入操作(MPI)的同步
float* ptr;
现在假设所有进程尝试写入相同的值const float f
到PTR,即
*ptr = f;
我的问题是:考虑到所有进程试图以相同的方式修改字节的事实,即该事件f
对于每个进程具有相同的值,这个操作是否需要同步或者是否可以同时执行。因此,我的问题归结为:对于并行写入操作浮点变量,是否有竞争条件导致不一致的字节模式的可能性,虽然每个进程都尝试以相同的方式修改内存。即如果我确实知道每个进程都写入相同的数据,那么我可以省略同步吗?
非常感谢您的回答。你能否更详细地说出你的意思是“在不同的流程中调整大小没有意义”?如果我在MPI中实现了正确的同步(这肯定我知道该怎么做),我甚至不会使用同步对象。所以我不明白“能见度,记忆重排”因素如何?我肯定不会使用任何C++标准库功能来解决这个问题。另请注意,冲突在访问数据的不同进程之间,而不是线程之间。 – sperber
这是一个错字,它是“居住”。如果您的MPI提供同步,这是一个不同的问题,我根据您的示例进行了回答,例如,写入来自不同进程的裸指针 –
因此,在使用多个进程写入相同数据的内存重新排序方面会出现什么问题,即组件级别会出现什么问题? – sperber