2017-06-22 19 views
0

ディスクには〜1000のHDF5ファイルが保存されています。それぞれがメモリにロードするのに約10ミリ秒かかります。そのため、私は線形性能を向上させるために、それらを並列にロードする最良の方法が何であるか疑問に思っていました。Python - hdf5ファイルを並列に読む

私はマルチプロセッシングを試しましたが、プロセスをセットアップするオーバーヘッドのためにそれらをシリアルにロードするよりも遅くなります。私はCythonを見てきました、特にprangeですが、それを速くするために最適化するのに問題がありました。任意のポインタが評価されるだろう!

+0

並列処理は処理時間を短縮するだけで、ディスクアクセス時間は短縮されないため、処理速度が向上するとは思いません。私は代わりにzipファイルにファイルを格納してパフォーマンスを得ることをお勧めします。 –

+0

10msのすべてがディスクから読み取られている場合は、最初に処理を高速化することは可能でしょうか?あなたが100%の帯域幅を使用しているなら、何かできることはないと思いますよね? – JohanL

+0

Cythonを使用してGILをマルチスレッド化することはできませんか?理論的には、IOバインドされたタスクの並列処理が可能になり、パフォーマンスが向上しますか? – Michael

答えて

0

これはmapreduceの仕事のように聞こえますが、マシンが1台しかなければパイプを使うことをお勧めします。 1つのスクリプトを書いてファイルを開き、stdoutにデータを出力し、別のスクリプトでstdinからデータを読み込み、処理します。あなたはscript1をscript2にリダイレクトします。

# script1.py 
FILES_TO_READ = ... 
for filename in FILES_TO_READ: 
    # open the file 
    # do work 
    # print data 

# script2.py 
while True: 
    line = input() 
    # do work 

$> ./script1.py | ./script2.py 
関連する問題