Io Openmpi:未知非连续数据的并行I/O

Io Openmpi:未知非连续数据的并行I/O,io,mpi,Io,Mpi,根据官方文件,我们可以简单地使用集体I/O来提高性能。例如,我可以使用n个进程读取具有不同偏移量的相同文件,如下程序所示 MPI_File fh; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); bufsize = FILESIZE/nprocs; buf = (int

根据官方文件,我们可以简单地使用集体I/O来提高性能。例如,我可以使用n个进程读取具有不同偏移量的相同文件,如下程序所示

MPI_File fh;
MPI_Status status;

MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);

bufsize = FILESIZE/nprocs;
buf = (int*) malloc(bufsize);
nints = bufsize / sizeof(int);

MPI_FILE_open(MPI_COMM_WORLD, "data.txt", MPI_MODE_RDONLY, MPI_INFO_NULL, &fh);
MPI_FILE_seek(fh, rank*bufsize, MPI_SEEK_SET);
MPI_FILE_read(fh, buf, nints, MPI_INT, &status);
MPI_FILE_close(&fh);

然而,我的问题是如何处理未知的非连续性。例如,我有一个大小为m×n的表。每次,我都想从文件中读取一列并计算一些统计数据。我将决定是否需要将其存储在RAM上。在这种情况下,我可以过滤一些数据来保存RAM。最初,我使用C++来实现这一点,每次读取一列。但是我想通过使用多个进程来提高性能。

MPI\u File\u read()
不是一个集合子例程。@GillesGouaillardet很抱歉我的误解。那么我如何才能正确地解决这个问题呢?列是非连续的,但却是正则的。使用派生数据类型和
MPI\u File\u set\u view()
可以解决问题。@GillesGouaillardet但在我将数据读入RAM之前,我们不知道是否需要此列。所以您总是需要此列,问题已解决!如果没有,我将不得不看到一些更多的代码来理解您的意图和建议。