我有一个 fortran90 代码(到目前为止)大部分时间都花在 I/O 上,因为需要读取非常大的数据文件(至少 1GB 及以上)。需要写入具有计算结果的较小但仍然较大的数据文件。相比之下,一些快速傅立叶变换和其他计算可以立即完成。我已经并行化(OpenMP)其中一些计算,但考虑到提到的 I/O 问题,性能的整体增益是最小的。
我目前的策略是一次读取整个文件:
open(unit=10, file="data", status="old")
do i=1,verylargenumber
read(10,*) var1(i), var2(i), var3(i)
end do
close(10)
然后对var1
等执行操作。我的问题是是否有使用(最好)OpenMP 的合适策略可以让我加快阅读过程,特别是考虑到数据文件(如果有任何区别)相当大。
我有可能在 Lustre 文件系统上运行这些计算,这在原则上为并行 I/O 提供了优势,尽管对于常规文件系统的通用解决方案将不胜感激。
我的直觉是没有解决这个问题的方法,但我想确定一下。