簡體   English   中英

如何確保多過程計算中結果的可重復性

[英]How to ensure repeatability of results in multi-process computation

我有多個並行運行的MPI進程,所有這些進程都訪問共享內存並執行以下操作:

sem_wait(sem);   
shmid = shmget(key, sizeof(int), 0777)) < 0)        
shm = shmat(shmid, NULL, 0);
printf("process id = %d, shm = ",rank, *shm);//rank from MPI_Comm_rank()
new_val = *shm+1; 
*shm = new_val; 
sem_post(sem);

這段代碼是我無法在此處輸入的更大代碼的一部分,因此我只給出了一小部分,我認為需要更改。

我得到以下結果(首次運行):

process id = 1 shm = 1
process id = 2 shm = 2
process id = 3 shm = 3
process id = 4 shm = 4
process id = 5 shm = 5

我得到以下結果(第二次運行):

process id = 2 shm = 1
process id = 3 shm = 2
process id = 1 shm = 3
process id = 5 shm = 4
process id = 4 shm = 5

同樣,對於不同的運行,結果也不同。

是否可以通過每次生成相同值的方式更改代碼?

我正在Linux環境中使用C。

我非常需要代碼中的可重復性。 任何形式的幫助將不勝感激。 謝謝 !

在不考慮這是否是一個好主意的情況下,似乎您希望確定各個過程之間的系統調用順序。 使用MPI完全可以實現-例如:

for (int ii = 0; ii < MPI_Comm_size(); ii++) {
    if ii == MPI_Comm_rank() {
        // attach shmem
    }
    MPI_Barrier(MPI_COMM_WORLD);  
}

這將使進程“輪流”附加到共享內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM