0

我有 4 个不同长度(n1、n2、n3、n4)的文件(file1、file2、file3、file4),每个文件都包含以下类型的数据:

x1,y1,z1
x2,y2,z2
...
xn,yn,zn

将这些加载到内存中的最快方法是什么 - 可以同时从 4 个较小的数组创建一个大数组(即 totarray(1:n1+n2+n3+n4,1:3))吗?如果这不能在 openmp 中完成 - 最快的方法是什么?目前,我只是遍历每个文件名并将其添加到临时数组的底部,该数组在每次迭代中都填充了新数据。每个文件中有数百万个条目,我想加快读取速度。谢谢

4

1 回答 1

0

除非每个文件都在不同的介质上,否则最快的方法可能是一次读取一个文件,这听起来就像你正在做的那样。在这种情况下,OpenMP 不会帮助您,并且可能会使事情变得更糟,因为线程将竞争单个慢速磁盘。不过,这假设您受 I/O 限制。

但是,您没有指定文件的格式。如果它是二进制格式,那么除非您想从压缩开始,否则您将无法做得更好。但是,如果它是文本格式,由于涉及到所有文本解析,您可能会受到 CPU 的限制,并且只需转换为二进制格式就可能获得巨大的加速。这将比 OpenMP 并行化更有效。

HDF是您可能会考虑的一种很好的二进制格式,但您也可以使用像 fortran“未格式化”文件这样简单的东西。

于 2013-01-09T18:16:26.727 回答