【发布时间】:2021-03-22 23:20:33
【问题描述】:
考虑以下简单的程序,它将所有等级大于零的进程的等级写入文件:
#include <mpi.h>
int main() {
MPI_Init(NULL, NULL);
int world_rank, world_size;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
MPI_Offset offset;
MPI_Status status;
MPI_File fh;
MPI_File_open(MPI_COMM_WORLD, "myfile", MPI_MODE_CREATE | MPI_MODE_WRONLY,
MPI_INFO_NULL, &fh);
offset = world_rank * sizeof(int);
if (world_rank > 0) {
MPI_File_write_at(fh, offset, &world_rank, 1, MPI_INT, &status);
}
MPI_File_close(&fh);
MPI_Finalize();
return 0;
}
我们在 4 个进程上编译并运行它
mpic++ main.cpp
mpirun --oversubscribe -n 4 a.out
我们用hexdump -C myfile检查写入的文件
00000000 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 |................|
00000010
现在,我从未对第一个整数(也就是前 4 个字节)进行写调用,但它们为零。
我可以确定这些总是零吗?
【问题讨论】:
标签: c++ c mpi hexdump parallel-io