我試圖重現在此post中提出的問題。以下是我的代碼。根據答案,因爲每個進程都是獨立運行的,所以global_variable
應該在進程1中爲0.然而,進程1也會打印1000.所以在我的理解中,進程是在MPI_Init中產生的,所以如果全局變量是在MPI_Init之前定義的,創建的流程將獲得相同的價值,對吧?我誤解了這篇文章嗎?MPI及其全局變量
#include <stdio.h>
#include <mpi.h>
static int global_variable;
main(int argc, char **argv)
{
int ierr, num_procs, my_id;
global_variable = 1000;
ierr = MPI_Init(&argc, &argv);
/* find out MY process ID, and how many processes were started. */
ierr = MPI_Comm_rank(MPI_COMM_WORLD, &my_id);
ierr = MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
if(my_id == 0) {
printf("%d\n", global_variable);
}
else if(my_id == 1) {
printf("%d\n", global_variable);
}
ierr = MPI_Finalize();
}
想知道,如果你不使用它們,你爲什麼要存儲所有'ierr'返回值? – Kusalananda
@Kusalananda在評論中有一點。而且,與文件I/O無關的MPI調用的默認錯誤處理程序會終止整個作業,因此這些'MPI _...'例程將返回MPI_SUCCESS或根本不返回。除非'MPI_ERRORS_RETURN'錯誤處理程序被**明確**設置,即。 –