2012年6月7日木曜日

OpenMP + HyperThreading

今NHモデルを使った系統解析ソフトウェアの並列化をやっているのだが、どうもOpenMPによる並列化でインテルのCPUのHyperThreadingをオンにしたままにすると、物理コア分までしか効率よく並列化ができないらしい。

自分のマシンがi7 960で、4 core使った並列解析までなら、スケーラビリティが良好だったのに、8 coreにしたとたんシングルスレッドのときよりも遅くなった。なんでやろ、と悩んでTMさんに相談したら↑のような問題らしい。

まあ、OpenMPの並列化だとメインには共有メモリ型のシステムでの並列化を前提にするから(一応分散メモリ型のシステムに適用することもできるらしいけど)、そもそもそこまでコア数は稼げないんですよね。一応OpenMPではうまく並列化できたみたいだから、次はMPIかXMPに挑戦することになるのかな。

とりあえず現状ではソースコードの中でサイトごとの尤度を計算するところを弄っているので、NHモデルを使うことで出てくる置換プロセスの不可逆性の問題には影響受けない部分で並列化していますが、CS的な観点からの要求では、置換プロセスの不可逆性も考慮しつつそこをダイレクトに並列化できるテクニックだったり、探索まで含めてnested-paralellizationが実現できるようなテクニックが必要なようです。う~ん難しそう。


しかし、MPIといえばPhyloBayesのMPI版はちょっと期待はずれな感じ。ちょっとスケーラビリティ悪すぎですね。12 core使ってもシングルスレッドの時と比べて体感3~4倍くらいしか速くなってないような気がします。今やってるデータ解析だとこれでも2~3か月かかっちゃいますよ。どーしよ。


解析面ではちょこちょこタスクが溜まってきた感じですが、とりあえず今日明日は論文関係の仕事を早く片付けないと。今日で共同研究の初稿書いて、明日はproofのチェックととーけーすーりのrevise終わらせなきゃ。。。

0 件のコメント: