[英]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.