我有4个不同长度的文件(file1,file2,file3,file4)(n1,n2,n3,n4),每个文件都包含以下类型的数据:
x1,y1,z1
x2,y2,z2
...
xn,yn,zn
将这些加载到内存中的最快方法是什么?可以同时从4个较小的数组创建一个大数组(即totarray(1:n1 + n2 + n3 + n4,1:3))吗?如果在openmp中无法做到这一点 - 最快的方法是什么?目前,我只是循环遍历每个文件名并将其添加到临时数组的底部,该数组在每次迭代中填充新数据。每个文件中有数百万个条目,我想加快读取速度。感谢
答案 0 :(得分:0)
除非每个文件都在不同的介质上,否则执行此操作的最快方法可能是一次读取一个文件,这听起来就像你正在做的那样。在这种情况下,OpenMP将无法帮助您,并可能使事情变得更糟,因为线程将竞争单个慢速磁盘。但这假设您受I / O限制。
但是,您没有指定文件的格式。如果它是二进制格式,那么除非你想从压缩开始,否则你不能做得更好。但是,如果它是文本格式,由于所涉及的所有文本解析,您可能受CPU限制,并且可能仅通过转换为二进制格式就可以获得巨大的加速。这将比OpenMP并行化更有效。
HDF是一个很好的二进制格式,你可以考虑,但你也可以选择像fortran“unformatted”文件这样简单的东西。