我使用MPI_Barrier的OpenMPI实现有一些同步问题:
int rank;
int nprocs;
int rc = MPI_Init(&argc, &argv);
if(rc != MPI_SUCCESS) {
fprintf(stderr, "Unable to set up MPI");
MPI_Abort(MPI_COMM_WORLD, rc);
}
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
printf("P%d\n", rank);
fflush(stdout);
MPI_Barrier(MPI_COMM_WORLD);
printf("P%d again\n", rank);
MPI_Finalize();
Run Code Online (Sandbox Code Playgroud)
对于mpirun -n 2 ./a.out
输出应为:P0 P1 ...
有时输出:P0 P0再次P1 P1
这是怎么回事?
是否有可能在C中只获得一个int,然后在不读取整个int并将其写回内存的情况下翻转它?
context:试图在pthread中避免过多的锁定/解锁.