テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

大規模なデータセットでの性能測定と解析

今までの測定はone layer packing実験でN=1000までしか測定してませんでした. 初期のバージョンではN=1000で60秒ほどかかっており, N=10000では数時間かかる可能性があったため容易には実験出来ませんでした. しかし, 改良の結果, N=1000を2秒ほどで計算出来るようになったので, N=10000という大規模なデータセットに挑戦することが出来るようになりました. 以下の図は, N=100から100刻みで10000まで上げていった時の処理時間を示しています.

f:id:akiradeveloper529:20130623082641p:plain

N=10000の場合でも60秒以内に処理出来ています. しかしやはり線形というわけには行きません. 何が問題なのでしょうか?プロファイルをとりましょう.

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
  1480989    2.128    0.000    2.128    0.000 heiankyoview.py:131(copyI)
  1519324   18.822    0.000   18.822    0.000 heiankyoview.py:135(copyJ)

copyIとcopyJで処理時間に9倍ほどの違いがあることが分かります. これらの処理は, numpy上で行/列をまるごと他の行/列にコピーする処理です. メモリ上で連続した領域でコピー出来る場合は高速に処理出来ますが, そうでない場合は時間がとてもかかるということでしょう.

さらに性能を改善するためには, アルゴリズム自体を改善する必要があると思います. いさぎよく諦めましょう.