我有一个文本文件,如下所示。
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中并行化这个。我需要一次读取部分数据并进行工作(以最大限度地减少工作量,并且主工作人员也没有足够的本地内存)。
如何从一次发送数据开始?
答案 0 :(得分:0)
通常,并行程序的输入/输出部分不是并行的。
norio建议提前拆分文件。这种预处理不会是平行的。如果您的节点有自己的文件系统,这是有利的。如果您的群集具有共享文件系统,那么所有节点都将在启动时争取文件访问权限。
选项2:当主文件读入文件时,它会分发数据并忘记数据,因此不会耗尽内存。
选项3:每个节点扫描整个文件,忽略未分配给它的行。