0

長さが異なる (n1、n2、n3、n4) の 4 つのファイル (file1、file2、file3、file4) があり、それぞれに次の種類のデータが含まれています。

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

これらをメモリにロードする最も速い方法は何ですか?4 つの小さな配列から 1 つの大きな配列 (つまり、totarray(1:n1+n2+n3+n4,1:3)) を同時に作成できますか? これが openmp で実行できない場合 - これを実行する最速の方法は何ですか? 現時点では、各ファイル名をループして、各反復で新しいデータで埋められる一時配列の末尾に追加するだけです。各ファイルには何百万ものエントリがあり、この読み取りを高速化したいと考えています。ありがとう

4

1 に答える 1

0

各ファイルが異なるメディア上にない限り、これを行う最も速い方法は、ファイルを 1 つずつ読み取ることです。これは、あなたが行っているように聞こえます。この場合、OpenMP は役に立たず、スレッドが単一の低速ディスクを求めて競合するため、状況が悪化する可能性があります。ただし、これは、I/O バウンドであることを前提としています。

ただし、ファイルの形式は指定しません。バイナリ形式の場合、圧縮から始めない限り、これ以上のことはできません。ただし、テキスト形式の場合、関連するすべてのテキスト解析のためにおそらく CPU バウンドになり、バイナリ形式に移行するだけで大​​幅な速度向上が得られる可能性があります。これは、OpenMP の並列化よりもはるかに効率的です。

HDFはあなたが検討するかもしれない優れたバイナリ形式ですが、Fortran の「フォーマットされていない」ファイルのような単純なものを使用することもできます。

于 2013-01-09T18:16:26.727 に答える