[目次] [1ページ目] [前ページ] [次ページ]
(3/6)

3.大規模シミュレーション

 前章では、光量子科学研究において問題となる物理対象とPIC法を基盤とする運動論シミュレーションのモデルについて述べた。本章では、実際に具体的な問題を解く場合のソフトウェア・ハードウェアを含めたいくつかの条件についてさらに詳しく論じておく。まず、PIC法のコードを使って気体中の相対論的レーザの伝播過程や電子・イオン加速過程を評価することを考える。レーザ(光)というものは、その波の特性上、縦横厚さすべての方向において自身の波長(極短パルスレーザでは、約1ミクロン)の数倍程度までしか集中させることができない。それゆえ、シミュレーションでは最低でも10ミクロン立方程度の大きさが必要である。また、PIC法では、光の波の伝播を正確に計算するにはレーザの1波長を10格子程度、さらに1格子中に電子・イオンはそれぞれ10個程度で表現しなければならない。したがって、格子数で10003、粒子数で200億,言い換えるとプログラムのメモリで1TByte以上必要である。
 このような大規模シミュレーションを実行するためには、従来の高速な中央演算処理装置(CPU)を1つだけ持つ形のスーパーコンピュータを越えたハードウェア=超並列計算機と、極めて困難とされている超並列計算用ソフトウェア開発が不可欠となる。日本原子力研究所関西研究所光量子科学研究センターでは、5年前に当時世界でも有数の計算能力を誇るスカラ超並列計算機"Intel Paragon XP/S75 MP"を大阪府寝屋川市に導入し、昨年度その後継として京都府木津町の光量子科学研究センターに"Compaq ES40/227 SCシリーズ"を導入した。このシステムは、最大720CPU(1.20TFLOPS,1.44TByte)の超大規模計算ができるように運用されている。


図4 前システム"Intel Paragon XP/S75 MP"と現システム"Compaq ES40/227 SCシリーズ"

 現在までに、前計算機システムでは計算不可能であった2次元大規模計算や3次元計算が行われ、いくつかの新しい結果が生まれつつある。演算速度に関しても、前システムの10倍から20倍の性能が調達時のベンチマークやその後のユーザからの結果から確かめられている。

 ところで、大規模シミュレーションについて上記の議論では、単純にメモリの大きさと大規模化が比例していてソフトウェア的な工夫がないかのように思われがちであるので、現在までの技術の変遷とこれから将来に達成されるべき技術について以下で簡単に触れておく。

 まず、5年前は、ほとんどのシミュレーションコードは、単一CPUのベクトル計算機向けにプログラミングされていた。無限とも思われるメモリ容量と超高速頭脳を持った計算機は、それまでの長い間メモリ確保の格闘やスカラ型の悩みであるキャッシュミスヒットの悪夢から物理屋を解放してくれた。というより、これ以前では、ほとんどの物理屋は大規模計算など考えもしなかった。ベクトル型計算機の最大の恩恵は、物理屋の数学的思考をそのまま(物理の基本法則のほとんどが単純な配列演算に帰するので)プログラムに反映しても、けっこう高速なプログラムになっていたことである。また、メモリ容量が大きくなっていったので、単純に大規模・多次元計算をしていても新しい発見が次々見つかった時代でもある。今振り返ればこの時代は、物理屋から見ればシミュレーションに関してひとときの平和な時代であったのかも知れない。もちろん、現在、ベクトル計算機の単一のメモリやCPUはその当時からさらに大容量かつ高速にはなっているが、単価ベースでは並列計算機の伸び率から比べると雲泥の差である。

 現在では、どちらにせよ超大規模計算を実施するためには、ベクトル並列型計算機かスカラ超並列計算機のどちらか、すなわち並列計算機に頼るしかない。どちらの計算機を選ぶかは、計算対象とその解法に大きく依存すると思われる。流体法による計算の場合、大規模な計算になればなる程、スカラ特有のキャッシュミスヒットが増大し、実効性能は極端に小さくなってしまうので、現在の価格差を考えてもベクトル並列型計算機の方が優勢なように思われる。もちろん、PIC法のプログラム(ベクトル型計算機用)であっても、その事実はかわりない。しかし、前述したようにPIC法では、空間格子の計算ではなく粒子の計算がもっとも負荷が大きいため、スカラ計算機用に配列の宣言を変更することで、キャッシュミスヒットを効果的に減らすことができる。実際に、ベクトル型PIC法をスカラ型PIC法に変更することで60%以上の速度向上が見られた。結果として、単一スカラ型計算機で論理性能の55%以上の実効性能を引き出すことができることになった。また、光量子科学研究におけるPIC法では、より現実的な相互作用(衝突、イオン化など)をモデリングするためにMonte-Calro法を多用しているため、ベクトル型計算機に対してのスカラ型計算機の優位性はさらに強固なものになっている。これからの傾向についても、流体に見られるような大規模な偏微分方程式の差分が主要な演算コストである問題は、これからもベクトル並列型計算機の方が有利で、PICや分子動力学のような常微分方程式系は、スカラ超並列計算機の方が有利であると思う。しかし、ベクトル並列計算機は、アメリカをはじめ海外ではもはや開発されていないことを考慮すると、偏微分方程式の解法を如何にしてスカラ計算機に適したアルゴリズムに変更できるかが重要なテーマであると考えられる。

 最後に、並列化技術に関していくつかの指摘と今後の展望を述べてこの章を結ぶ。現在のプログラムの並列化は、もっぱら人力に頼っている状況である。確かに、HPFやOpenMPなどの自動並列化言語の開発やSMPのような共有メモリ領域に対するスレッドをCPUで自動的にロードバランスさせる方法等でプログラミングの負荷を減らせる努力は続けられている。論理性能が10倍になって、実効性能が3倍で許容できるような場合(マーケティング的にはここが最大顧客であろう)は、これでよい。しかしながら、これらの方法では前段で述べたような論理性能に匹敵するような性能を達成することが困難と言うより不可能となってしまうのが現状である。「できるだけ大規模に」という大規模シミュレーションの本来の性向を考えると、マニュアルプログラミングで回避できるのに自動化でそれを台無しにするということは、許容できない問題である。したがって、大規模シミュレーションを目指す最先端シミュレーションでは、今後も常にマニュアルプログラミングによる並列化・高速化は必要であると思われる。

 このように悲観的な意見ばかり述べると並列化の将来はないように聞こえるかも知れないが、実際にはもう少し楽観的に考えられる兆しもある。実際に、並列プログラミングを行うとマニュアルプログラミングと言えど科学技術用計算の場合は、大抵領域分散なのでたいした種類があるわけではない。現在のプログラムを振り返ってみても、並列=通信と考えるといくつかの種類のI/O、エラー処理によるプログラム停止、領域分割からくるノード境界量の授受、ノード境界を跨ぐ粒子の授受程度である。これらは、極めて汎用性のある問題で流体コードや分子動力学コードでも同様のプログラムを用いることができるはずである。この手の問題は、ベクトルプログラムの時にも存在した。特に、PIC法では、粒子の運動量を空間格子に割り付ける(電流の計算)時に、そのままでは参照関係が問題で、ベクトル化できなかったが、ベクトル化作業領域を設ることで、強制的にベクトル化ができるプログラミング技法が開発され、皆がそれを使っていた。並列計算でもこれと同様程度の問題しかないように思われる。たぶん、並列化計算の障壁はアルゴリズムの問題と言うより、プログラマーの思考回路の問題と思われる。従来、プログラムを設計する時には、頭の中でにしろフローチャートやパッドなどでおよその骨組みを描いてから開発を行っていたはずである。また、デバッグの時も同様であった。しかし、これに対応する並列化の場合の手続きが極めて貧弱なのである。確かに、同期、非同期やノード間の関係を記述するプログラム設計書がないのである。並列プログラムの簡単な設計書ができてその使い方に熟知すれば、ベクトル計算機のときと同程度の閾値で、並列計算ができるように思われる。蛇足ではあるが、並列化のためのアルゴリズム開発は十分に行われており、並列計算をしている人は既に十分の恩恵を受けていることも付け加えておく。例えば、ポアッソン型方程式の解法は、N2オーダの通信の高速フーリエ変換からNオーダの通信の双極モーメント法へ移行し、また、PIC法で使われていたFFTは、完全局所化アルゴリズムを利用することで並列化に適さないアルゴリズムの多くは既に駆逐されている。



[目次] [1ページ目] [前ページ] [次ページ]