新しいプログラムを作ったとき、いろいろなパラメータで実験してどのようなパラメータのときどれくらいの計算時間がかかっているのか計測することがよくある。
これを測定するのに一つ一つ結果の出力から時間を取り出して集める必要がある。この処理をするのに数個なら手動でやることもできるが、パラメータの組み合わせが大量ある場合は、とても手でできないのでスクリプトで処理する。このような処理をやるのにパラメータの生成や結果のパース、結果の収集などのスクリプトを書かないといけない。このような処理は共通して使いまわせることが多い気がするのでライブラリを作ることができないかなぁと思っているところにmafというものがあるのを見つけて使ってみた。
現状のmafのサンプルで計算時間の測定のサンプルがまだなかったので作ってみた。
mafについて
詳しくはここ( http://research.preferred.jp/2013/12/maf/ ) を読んでもらうことが一番だが、簡単にいうとwafというpythonで書かれたビルドシステムを拡張して作られた実験支援のツールである。
これを使うとパラメータの組み合わせを簡単に列挙できたり、実験結果を簡単にまとめられたりできる。
ステキ!
wscriptと実験結果
mafはwafと同様にwscriptというmakeコマンドでいうところのMakefileを書く必要がある。
wscript等は以下のところにある。
https://github.com/shu65/maf_measure_computing_time
このwscriptでは"sleep 0", "sleep 1", "sleep 2"を3回ずつ実行して、timeコマンドを使って時間計測し、それぞれのパラメータで平均計算時間を計算するというとっても簡単なサンプルになっている。
git cloneをした後の実行方法は以下の通り。
cd maf_measure_computing_time
./waf configure
./waf experiment -j 1
最後の"-j 1"がないと複数の組み合わせのパラメータの実験を同時に実行して正確な計算時間の測定ができなくなってしまうので注意。
最後に
現状、時間計測するところだけ並列実行したくないのだが、それがwscriptで指定できないので、今後はこのあたりを改良してPull Request送りたいなぁ・・・