从大文件中读取数据

时间:2018-01-27 19:58:23

标签: parallel-processing fortran mpi hpc

我有一个文本文件,如下所示。

0.031 0.031 0.031 1.4998 0.9976 0.5668 0.9659

0.062 0.031 0.031 0.9620 0.7479 0.3674 0.4806 

依旧......

这是一个32 ^ 3网格,这意味着将有32768行。在每一行中,有7列。我需要读取每一列并将其存储在单独的1D数组中。

Fortran代码看起来像

open(unit=1,file='32data.txt') ! that's the filename
do i= 1,32767
read(1,*) x(i),y(i),z(i),norm(i),xv(i),yv(i),zv(i)
end do

我想知道在给出大于此值的文件(比如512 ^ 3)时在MPI中并行化这个。我需要一次读取部分数据并进行工作(以最大限度地减少工作量,并且主工作人员也没有足够的本地内存)。

如何从一次发送数据开始?

1 个答案:

答案 0 :(得分:0)

通常,并行程序的输入/输出部分不是并行的。

norio建议提前拆分文件。这种预处理不会是平行的。如果您的节点有自己的文件系统,这是有利的。如果您的群集具有共享文件系统,那么所有节点都将在启动时争取文件访问权限。

选项2:当主文件读入文件时,它会分发数据并忘记数据,因此不会耗尽内存。

选项3:每个节点扫描整个文件,忽略未分配给它的行。