すでに述べたように、コンピュータを用いて自然現象のシミュレーションを行 うには高速かつ記憶容量の大きな計算機が必要で、常にその時代の最先端の計 算機が利用されてきた。いや、むしろ、このような計算を行いたいという要求 があって、高速計算機が設計され、計算機技術を押し進めてきたといったほう がよい。これらの高速計算機はスーパーコンピュータともよばれる。計算を 高速化するには、素子を高速化する以外に、(1)ひとつの演算が完了する前 に次の演算を開始するようにするパイプライン方式、(2)多数の演算ユニット を並列に動作させる並列計算方式、(3)特定の問題に対応した専用演算回路を 用いて計算を高速化する方式などがある。参考書としてはたとえば 文献[6]がある。
それぞれの高速化方法の話に入る前に従来の計算機の原理を復習しておく。
従来の電子計算機はフォンノイマンが提唱した原理に基づいて設計されてきた。
その特徴をまとめると次のようになる。
たとえば、ふたつの数の和を求めるというプログラムは単純化した計算機では
次のように計算機のメモリに格納されると考えてよい。ただし LD 命令は2進数
の 0100、ADD 命令は 0010、ST 命令は 0111、EXIT は 0000 であらわされる
ものとした。また、番地は2進数4ビットで表現され、1語は8ビットとした。
ひとつの演算が完了するまで待たずに、次の演算を開始することによって
高速化するという方法である。ちょうど、自動車をひとりの人が全部作るよ
りも多くの人を使って流れ作業にした方が単位時間あたりの生産量が上がる
のと同じ原理である。あるいは、ひとり乗りのエレベータよりもエスカレー
タの方が単位時間に多くの人を運べるということとも通じるところがある。
前の人が上がり切ってしまうのを待たずとも次の人が乗ることができるから
たとえひとりの人が昇るのに30秒かかったとしても15段の階段にひとりずつ
乗っていれば2秒にひとりずつ上の階に上げることができるわけである。
たとえば、小数点つきのふたつの数の和を求めるという演算を考えてみよう。
科学技術計算では小数点つきの数は浮動小数点数として扱われる。浮動小数点
数について十進数の 0.1 を例にして説明する。これを2進数に変換すると
0.00011001100... という無限循環小数になる。この数は
1.1001100... X 2^{-4} のように書くこともできる。このときの
1.1001100... を仮数、2の肩にのっている -4 を指数という。このように
小数点つきの数は、仮数の符号 仮数 X 2^a の形で表現できる。
このような数どうしの和を求める手順は次の4段階からなる。
正規化というのは 1.***** X 2^a の形に揃えることである。浮動
小数点数どうしの和という演算をこれら4つの部分(C,S,A,N)に分けて、従来
のように N が終わるまで待たずにすぐ次の C をはじめることで高速化が
はかれる。このような機能を持った演算装置のことをパイプライン式演算
装置、この方式によるスーパーコンピュータのことをパイプライン式スーパー
コンピュータあるいはベクトル計算機とよんでいる。これに対して、
パイプライン式演算装置を持っていない計算機のことはスカラー計算機と
呼ぶ。パイプライン式スーパーコンピュータの代表が CRAY-1,2, CRAY X-MP,
CRAY Y-MP など CRAY 社のスーパーコンピュータである。
コンピュータの性能をはかるときに、よく MFLOPS (メガフロップス)という
単位が用いられる。これは1秒間に100万回の浮動小数点演算を行うことができ
る能力のことである。最近のワークステーションの性能は約30MFLOPS、
パイプライン式コンピュータでは CRAY EL92(2CPU) で 267MFLOPS、CRAY の
C90 や 富士通VPP500 で1CPUあたり 1.5GFLOPS (=1500MFLOPS) 程度である。
このようにパイプライン式計算機を用いるとスカラー計算機にくらべて計算
速度が10 -- 20 倍はやくなる。パイプライン方式を採用したコンピュータは
1980年頃に製品化され、大学の大型計算機センターなどでも、この方式による
スーパーコンピュータを利用できるようになった。従来のプログラムを少し手直しする
だけで、計算速度が一挙に20倍になった感動を忘れることはできない。ただし、
パイプライン方式のスーパーコンピュータには次のような限界があるため
1CPUで現在あるもの以上の性能を出すことは難しくなってきている。
多数の処理ユニット(Processing Unit: PU と略する)を並列に動作させること
によって高速化する方式である。発想的にはパイプライン方式よりもこちらの
方が自然かもしれない。人間の脳における情報処理なども多数の神経細胞が協
調して並列動作することによって行われているといわれている。技術的には、
パイプライン方式よりもこちらの方が難しく、さまざまな実験、失敗を経てき
た。有名なのが1970年頃にアメリカで開発されたILLIAC-IVである。
当時はまだLSIのような素子技術が未熟であったことと、並列計算に特有な問
題(演算ユニット間の通信がボトルネックになることなど)のために、このプロ
ジェクトは成功したとはいえなかった。このあたりの話は
参考文献[7]に詳しく
書かれている。この教訓から、その後のスーパーコンピュータは当時の技術で
も可能だったパイプライン方式を採用することになった。
ところが、上で述べたように、もはやパイプライン方式では性能向上が限界に
きている。そこで再びさかんになってきたのが並列計算機の開発である。この
背景としては、LSI技術の進歩によって、演算ユニットをLSI化して大量生産す
ることが可能になったこと、LSI化にともなって演算ユニットの信頼性が向上
したことがあげられる。初期の製品の例としては、コネクションマシン
(参考文献[8])や日本
で開発されたPAXなどがある。特に、後者は隣あう格子点間の通信を高速化す
ることに焦点を絞った設計になっていて、流体や電磁流体の計算に適した並列
計算機であった。PAX はその後、進化して素粒子理論の計算のための QCDPAX
が作られた。これは1台あたり30MFLOPS のPUを480個2次元トーラス状に配置
したもので 14GFLOPS の性能を持つ。メモリは 3GB である。PAX の開発に
ついては文献2,3、QCDPAX については文献5を参考にするとよい。
現在、QCDPAX の次の世代の並列計算機として筑波大学計算物理学研究センター
を中心として計算物理学研究のための超並列計算機 CP-PACS (300GFLOPS以上、
メモリは 48GB以上)が開発された。並列化によってパイプライン型スーパーコ
ンピュータの100倍の性能が実現されたわけである。現在、1TFLOPS マシンが
利用可能になっている。2002年には40TFLOPSの性能を持つ地球
シミュレータが完成する予定である。
並列計算機は処理方式によって SIMD (Single Instruction stream
Multiple Data stream) と MIMD (Multiple Instruction stream Multiple
Data stream) に分類される。
メモリの配置に関してもふたつの方式がある。
PUとPUの接続方法については以下のような方法がある。
分散メモリ型の並列計算機では PU間通信がボトルネックになる。たとえば
n個のPUにひとつづつ記憶されている n個のデータの和を求めたいとき、各
PUについてまず左隣のデータとの和を求め、次にふたつ左のPUとの和、4つ左
のPUとの和.... というようにして求めていく方法がある。このときの加算
回数は k=log_2 n 回となって逐次計算機を用いる場合の n 回にくらべて
n が大きければ十分小さくなり並列計算機を使うときわめて高速に処理でき
るように見える。ところが、PUは隣どうししか結ばれていないとして左隣か
らデータを受信するのにかかる時間を a とすると、転送時間は全部で
a + 2a + ... + 2^{k-1} a = (n-1) a であり、a が十分小さくないと並列
計算の有効性が生かせなくなる。流体計算についても同様で PU間通信で境界
のデータを集めてくる時間がPU内部の格子点の値を更新する時間より十分
小さくないと並列計算機を用いてもスピードアップできない。
フォンノイマン型計算機
番地 命令またはデータ
0000 0100 0100
0001 0010 0101
0010 0111 0110
0011 0000 0000
0100 0000 0110
0101 0000 0010
0110 0000 1000
ここで、たとえば0番地の命令は LD 0100 ということで、4番地の内容を
レジスタ(CPU内のメモリ)に読み込むことを意味する。このプログラムを
0000番地から実行すると、0100番地の記憶内容と 0101 番地の記憶内容の和が
0110 番地に保存される。その動作をもう少し細かく見ると、メモリから
CPU内部の命令レジスタに命令がひとつづつ読み込まれ、解釈されて実行
されるという動作が繰り返されている。このように1次元化されたメモリ空間
にプログラムをよみこんで逐次的に命令を実行していくことが、フォンノイマ
ン型計算機の特徴である。この方式は単純なので、電子回路の技術が十分で
なかった時代でもコンピュータを作ることができた。しかしながら、同時に
ひとつの命令しか実行することができないということは、高速化という観点
からは望ましくない。
パイプライン方式
並列処理方式