爲了讓事情變得簡單並且爲了專注於我的問題的核心,讓我們假設由指針變量ptr
在本地尋址的內存位置在幾個進程之間共享。我特別使用C/++中的MPI共享內存窗口來分配和共享內存。要具體,讓我們說ptr
引用一個浮點變量,所以在當地我們有特定共享內存寫入操作(MPI)的同步
float* ptr;
現在假設所有進程嘗試寫入相同的值const float f
到PTR,即
*ptr = f;
我的問題是:考慮到所有進程試圖以相同的方式修改字節的事實,即該事件f
對於每個進程具有相同的值,這個操作是否需要同步或者是否可以同時執行。因此,我的問題歸結爲:對於並行寫入操作浮點變量,是否有競爭條件導致不一致的字節模式的可能性,雖然每個進程都嘗試以相同的方式修改內存。即如果我確實知道每個進程都寫入相同的數據,那麼我可以省略同步嗎?
非常感謝您的回答。你能否更詳細地說出你的意思是「在不同的流程中調整大小沒有意義」?如果我在MPI中實現了正確的同步(這肯定我知道該怎麼做),我甚至不會使用同步對象。所以我不明白「能見度,記憶重排」因素如何?我肯定不會使用任何C++標準庫功能來解決這個問題。另請注意,衝突在訪問數據的不同進程之間,而不是線程之間。 – sperber
這是一個錯字,它是「居住」。如果您的MPI提供同步,這是一個不同的問題,我根據您的示例進行了回答,例如,寫入來自不同進程的裸指針 –
因此,在使用多個進程寫入相同數據的內存重新排序方面會出現什麼問題,即組件級別會出現什麼問題? – sperber