教訓:CPUメーターを立ち上げろ

私はここ十数年間,仕事でマルチプロセッサマシンを使い続けて来た.その場合に重要なことは,CPUの利用率を常に表示させておくことである.リアルタイムに変化している様子を見れば,OSやライブラリの特性や,プログラムの最適化(並列化)の程度が一目瞭然だからである.そのために新しいOSのマシンを入手した時には,そのようなプログラムを探したり,自分で作ったりもしてきた.
最近はそんなことも忘れていて,久しぶりにMac OS Xの「アクティビティモニタ」を立ち上げて感激…だって,デスクトップマシンなのに4コア×2CPU=8なんだもん(以前は2〜4CPU).しかし,いくら研究用だからと言っても,自分のくそ遅いプログラムが1個分しか使っていないので,時間がないというのに,つい並列化に着手してしまった.
修正して走らせると,-x16g(16GB)と指定しているのにヒープが足りない.モニタ用のコードを挿入して調べてみると,なんとサボって粗行列対応していない1GBくらいの二次元配列を各スレッドに渡していたのが原因だった.
仕方がないので,コードを見直した結果いろいろな問題点が明らかになり,結局シンプルで早いコードになり,使用メモリ量も数GB程度に落ち着いた.そのうち,粗行列対応と行列の圧縮を実装すれば,実用にも耐えるだろうけど,今はとりあえず論文優先でこのまま.
やはり,CPUメーターは常に立ち上げておくものだ.