集群节点需要读取输入文件的不同部分——我该如何组织它?

Cluster nodes need to read different sections of an input file - how do I organize it?

我正在尝试在集群环境中读取输入文件。不同的节点将读取它的不同部分。然而,这些部分并没有清楚地分开,而是交错在 "grid".

例如,一个包含 16 个元素(假设为整数)的文件:

0 1 2 3
4 5 6 7
8 9 A B
C D E F

如果我使用四个节点,第一个节点将读取左上角的 2x2 方块 (0,1,4,5),第二个节点将读取右上角的 2x2 方块,依此类推。

我该如何处理?我可以使用 MPI 或 OpenMP。我有两个想法,但我不知道哪个更好:

  1. 每个节点都会打开文件并拥有自己的句柄。每个节点将独立读取文件,只使用它需要的文件部分并跳过其余部分。在这种情况下,使用 fopenMPI_File_open 有什么区别?哪个更好?

  2. 使用一个节点读取整个文件并将输入的每一部分发送到需要它的节点。

关于你的问题,

我不会推荐你提到的第二个选项。即使用一个节点读取然后分配部件。原因是这很慢.. 特别是如果文件很大。在这里你有两倍的开销,首先是让其他进程等待,其次是发送读取的数据。很明显我不行。

关于你的第一个选项,使用 fopen 和 MPI_Fole_open 没有太大区别。但在这里我仍然会建议 MPI_File_open 利用某些功能,如非阻塞 I/O 操作和共享文件指针(让生活更轻松)