2011年6月20日月曜日

メモリの使い方

大規模配列データを使って系統解析をやりたい場合に問題になるのが、一つ目にはCPUの数(とその性能)、二つ目にはメモリの容量である。

去年筑波に来たMティンも、「クラスタで解析走らせようとしたらメモリが足りないって言われたんだ○ァック!」みたいなことを言っていた覚えがあるし、自分の解析でもメモリの問題には何度か直面したことがある。

特にMrBayesなんかはメモリ喰いだろう。そんなにでかくないデータでも、MCMCの本数や交換効率などを変化させると、10GB以下のメモリ容量では対処できないこともある。

昨今に至ってはメモリの容量など諭吉の数人も集まれば大方簡単に解決できる問題ではあるのだが、それでもソフトウェアを開発する側としては動的メモリアロケーションを如何に工夫するのかというのは根本的に重要な課題だと思う。

リンク先にある論文は、尤度計算の際にページング方式による動的メモリアロケーションを行うことで、メモリをより効率的に使うことが出来るようになることを示したもの。ページング形式では、簡単に言えばプログラムの使用するメモリ(論理メモリ及び物理メモリ)をページと呼ばれる細かい単位に分割して管理する。

この方式の利点は二つある。

一つには、ページング方式ではそれぞれのページが連続的に確保されなくてもよいため、細かな未使用領域が残ってしまうことによるメモリ断片化が起こらなくてすむということである。

二つ目には、ページング方式をとることで仮想記憶の概念が導入できることである。これにより、実際のメモリ容量よりもさらに大きな仮想メモリ空間を使用することが可能となる。(ここらへんコンピュータアーキテクチャの授業でやったけど忘れてもうた)

メモリ管理の効率を追求することは単に「データが解析できるできない」の境界線をずらすだけではなく、手持ちのデータをどれだけ高速に解析するかということ自体にも関わってくる。

現状存在する系統解析ソフトウェアがこの点をどれだけ意識したものなのかは自分の勉強不足故分からないが、この命題は解析するデータ量の増加、及び数値計算技術や計算機のハード的な進歩と共に、存在し続けるのだろうと思う。


0 件のコメント: