【发布时间】:2018-07-06 21:23:54
【问题描述】:
我有一个如下的文本文件。
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 列。我需要读取每一列并将其存储在单独的一维数组中。
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 中并行化它。我需要一次读取部分数据并工作(以最大程度地减少工作量,并且主工作者将没有足够的本地内存)。
如何开始一次发送几条数据?
【问题讨论】:
-
我会先将文件分解成更小的文件。例如,512 个 512^2 行的文件。以
sed为例。但是,这种分解本身可能无法并行化。 -
欢迎使用 StackOverflow,请务必使用 tour 并阅读 How to Ask。避免不必要的噪音,如“帮助我”或“提前致谢”,不要将问题标记为“- FORTRAN”,这些标签就是为了这个。
-
在滑动窗口中阅读会有所帮助。但是创建这么多行的 512 个文件会太耗时吗?有没有更简单的方法可以让每个处理器只读取部分数据,然后在以后全局组合?
-
@VladimirF 将编辑它。谢谢!
-
文本文件不适合并行 I/O。每个等级一个文件,或二进制数据 + MPI-IO 是推荐的方式。如果没有,让所有任务读取文本文件并跳过一些行可能是一个较小的邪恶。
标签: parallel-processing fortran mpi hpc