使用嵌套隐式循环将二维数组写入未格式化文件的最佳方法
Optimal way to write 2d array into unformatted file using nested implicit loops
我有一段代码将二维数组 var
写入 Fortran 未格式化文件。
我更喜欢逐行编写。因此,我需要以非最佳顺序循环,因为建议先在外部维度上循环。
write(fileid, pos = pos) ((var(i,j),j=1,size(var,2)),i=1,size(var,1))
我想知道转换我写入文件的方式是否会更优化,或者这是否没有必要,因为 I/O 进程应该支配 cache/memory 访问情况。
我是一名退休的 Fortran 编译器和 I/O 库开发人员,我的经验是编写整个数组会好得多。使用隐含循环,超出内存顺序,通常需要将每个元素单独传输到 I/O 库,每个元素有很多处理开销。写入整个数组可能导致直接从您的数组进行单个 I/O 传输。
鉴于您使用的是未格式化的 I/O,我不明白一次写一行的愿望,除非这将被其他软件读取。
我有一段代码将二维数组 var
写入 Fortran 未格式化文件。
我更喜欢逐行编写。因此,我需要以非最佳顺序循环,因为建议先在外部维度上循环。
write(fileid, pos = pos) ((var(i,j),j=1,size(var,2)),i=1,size(var,1))
我想知道转换我写入文件的方式是否会更优化,或者这是否没有必要,因为 I/O 进程应该支配 cache/memory 访问情况。
我是一名退休的 Fortran 编译器和 I/O 库开发人员,我的经验是编写整个数组会好得多。使用隐含循环,超出内存顺序,通常需要将每个元素单独传输到 I/O 库,每个元素有很多处理开销。写入整个数组可能导致直接从您的数组进行单个 I/O 传输。
鉴于您使用的是未格式化的 I/O,我不明白一次写一行的愿望,除非这将被其他软件读取。