奇妙なことに、再起動後、私が通常頼ることのない解決策であるファイルごとの読み取り時間は (平均で) ~0.002 秒に短縮され、レンダリング時間は ~0.02 秒です。ファイルの保存に.png
は約 2.6 秒かかるため、全体として、各フレームには約 2.7 秒かかります。
@DrV のアドバイスを受け、
...スクリプトの 4 つのコピー (4 つのコアがあると仮定) を開始し、各コピーは異なる 2.5 x 10^4 セットのイメージにアクセスできます。SSD ディスクでは、これによって I/O シークの大惨事が発生することはありません。
ファイル リストを 8 つのサブリストに分割し、スクリプトの 8 つのインスタンスを実行しました。
@DrV のコメント
また、ファイルが RAM キャッシュにない場合、5.7 MB のファイル読み取りの 0.002 秒の読み取り時間は現実的ではありません。これは、ディスクの読み取り速度が 2.8 GB/秒であることを示しているためです。(高速 SSD は 500 MB/秒に達する場合があります。)
ラップトップ(MacBookPro10,1)の読み取り/書き込み速度のベンチマークを行いました。次のコードを使用して、各ファイルが 5.8 MB (1200*1200*4 = 5,760,000 バイト) になるように、1200*1200 のランダム浮動小数点数 (4 バイト) を持つ 1000 個のファイルを生成し、それらを 1 つずつ読み取り、プロセスのタイミングを計りました。コードは端末から実行され、50 MB またはメモリ以上を占有することはありません (メモリに 5.8 MB のデータ配列を 1 つだけ保持するにはかなりの量ですよね?)。
コード:
#!/usr/bin/env ipython
import os
from time import time
import numpy as np
temp = 'temp'
if not os.path.exists(temp):
os.makedirs(temp)
print 'temp dir created'
os.chdir(temp)
nx = ny = 1200
nof = 1000
print '\n*** Writing random data to files ***\n'
t1 = time(); t2 = 0; t3 = 0
for i in range(nof):
if not i%10:
print str(i),
tt = time()
data = np.array(np.random.rand(nx*ny), dtype=np.float32)
t2 += time()-tt
fn = '%d.bin' %i
tt = time()
f = open(fn, 'wb')
f.write(data)
f.close
t3 += time()-tt
print '\n*****************************'
print 'Total time: %f seconds' %(time()-t1)
print '%f seconds (on average) per random data production' %(t2/nof)
print '%f seconds (on average) per file write' %(t3/nof)
print '\n*** Reading random data from files ***\n'
t1 = time(); t3 = 0
for i,fn in enumerate(os.listdir('./')):
if not i%10:
print str(i),
tt = time()
f = open(fn, 'rb')
data = np.fromfile(f)
f.close
t3 += time()-tt
print '\n*****************************'
print 'Total time: %f seconds' %(time()-t1)
print '%f seconds (on average) per file read' %(t3/(i+1))
# cleen up:
for f in os.listdir('./'):
os.remove(f)
os.chdir('../')
os.rmdir(temp)
結果:
temp dir created
*** Writing random data to files ***
0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 460 470 480 490 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800 810 820 830 840 850 860 870 880 890 900 910 920 930 940 950 960 970 980 990
*****************************
Total time: 25.569716 seconds
0.017786 seconds (on average) per random data production
0.007727 seconds (on average) per file write
*** Reading random data from files ***
0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 460 470 480 490 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800 810 820 830 840 850 860 870 880 890 900 910 920 930 940 950 960 970 980 990
*****************************
Total time: 2.596179 seconds
0.002568 seconds (on average) per file read