首页 > 解决方案 > Openmpi:未知非连续数据的并行 I/O

问题描述

根据官方文档,我们可以简单地使用集体 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 x n 的表。每次,我想从文件中读取一列并计算一些统计数据。我将决定是否需要将其存储在 RAM 上。在这种情况下,我可以过滤一些数据以节省 RAM。最初,我使用 c++ 通过每次读取一列来实现这一点。但我想通过使用多个进程来提高性能。

标签: iompi

解决方案


推荐阅读