【前へ】

第3章 ハイエンドコンピューティング研究開発の動向

6. 軽いベクトル機構
 
現在のベクトル型計算機は重厚長大なものと考えている人が多い。現在存在するベクトル型計算機の特色について考えて見る。

(1)プロセッサへのデータ供給能力が大きい。これを実現するために、ベクトル計算機のコストが高くなっている。

(2)ベクトルレジスタというプロセッサに近い高速メモリをもっている。しかし、その量はキャッシュメモリよりは小さい。

(3)ベクトル命令では1回に扱えるデータが大きい。ベクトル計算機ではベクトル化がうまく出きるとFLOPS値は上がるがMIPS値は低下する。すなわち、ベクトル命令で一度に多くのデータを処理できるため、実行命令数は少なくて良い。

(4)ベクトルレジスタのデータはユーザの意思で再利用が可能。

(1)はベクトル計算機のコスト高の原因である。しかし、ベクトル計算機のメリットはベクトルレジスタを使うことにより、メモリの遅さを隠蔽する効果を期待するのであれば、この部分はコストが多大にならない範囲で妥協した「軽い」ベクトル計算機があっても良いのではないか?CRAYには擬似ベクトルというベクトルレジスタの使い方があった。ベクトル化はできない計算を、データだけベクトルレジスタに入れ、計算はスカラーでやる方式であった。これでもかなりの効果があった。計算のベクトル化よりも、データ転送のベクトル化の方が効果があった。ベクトル機能をメモリの遅さを隠蔽させることに中心を置いた方式を考える。
 また、実行する命令数が減少するのも、メモリへのアクセスが減り、高速化への効果もある。

7. ユーザにとって望ましい計算機
 計算機のユーザにとって望ましい計算機について考えてみる。以下のような要件が必要である。重複する項目もあるが、色々な角度から考える。

(1)正しい結果を与えてくれる。
(2)高速化を行ったプログラムの資産が生きる。
(3)プログラマの意思が尊重される。
(4)高速化のコストが小さい。
(5)半導体技術が進歩した場合、自然にその効果を享受できる。

 このような用件を満たす計算機について考えてみる。(1)については自明である。(2)については、キャッシュ機構はメモリの容量が変わることによって高速化の効果が変わってしまうため、十分な性能を発揮させるためには高速化の変更が必要になる。この条件に反する。(3)はキャッシュ機構がプログラマのやりたいことを阻むことを懸念している。これは、高速化のコストにも反映する。
 現在のプロセッサは、ほとんどが、1つのLSIで作製することができるようになっている。半導体技術が進歩すると、1つのLSIの中に入れることができるゲート数が増加する。そのような場合に、自然に増えたゲート数の効果を享受できることが望ましい。あまり大きな変更をしなくても、ゲート数の増加の効果で、自然に速くなる方式であって欲しい。すなわち、時間が経つと1つのLSIに入れることができるゲート数が増加することを前提にしたアーキテクチャであるべきである。現在は増加したゲート数が安易にキャッシュメモリの量を増やすことに使われている。それは、計算機が変わるとプログラマに高速化の変更を強いることになる。
 上記の用件を満たす1つの考え方を例として述べる。新たなプロセッサを作成するのは非常なコストが掛かるので、それも考慮し、なるべくシンプルなものを考える(リスクプロセッサの原点?)。
 また、マイクロプロセッサで良く性能比較に使われる「クロック」であるが、クロックは何をベースにするかで大きく異なる。例えば、パイプライン化されたプロセッサの場合、パイプラインの段数を深くすることで見かけのクロックを速くすることは、難しいことではない。例えば、クロックが2GHzで、乗算を10段のパイプラインで計算するプロセッサと1GHzで5段のパイプラインで計算するプロセッサは、1つの乗算で見る限り同じ性能である。したがって、基本的にLSIの性能を比較するにはゲートあたりの遅延を使うのが公平であろう。同じゲート遅延のLSIであっても、クリティカルパスを減らすことで、実際のプロセッサの性能を上げることができるであろう。キャッシュ機構のコヒーレンシィをとる部分は、クリティカルパスになると予想できる。したがって、キャッシュ機構を無くすことで、クリティカルパスを減らせるのではなかろうか?

8. 素人のたわごと?
 以上のようなことを考慮して、1つの計算機のアイデアを考えて見た。計算機設計の素人の発想であるので、具体的なことはともかくとして、1つの考えかたとして見ていただきたい。対象としては、科学・技術計算のハイパフォーマンスコンピューティング(HPC)を考える。
 プロセッサに比較して、メモリが遅いことは残念ながら受け入れることとする。現在のプロセッサの場合、階層的なメモリ構成になっている。

 現在のメモリでは、高速性と容量(コスト)は相反する要素である。従って、なんらかの形での階層的なメモリ構造は受け入れざるを得ない。しかし、キャッシュ機構は投機的な機構で、HPC分野では障害が多い。そこで、場所により速度に差のあるメモリ構成を考える。

と同じ順序で速度差のあるメモリ要素を下記のように配置する。番地が小さいところほど速いメモリを配置する。

 このようにすると、LSIの集積度が上がると、各レベルの境界が移動する。そのような状況も踏まえたアーキテクチャにしたい。そのためには、上記のレジスタ、プロセッサ内のメモリ、プロセッサ外のメモリ、DRAMに連続した番地を振ることにする。ユーザは、低い番地ほど速いメモリだということを理解し、プログラムを書くことにする。これを支援するために、コンパイラ、アセンブラでデータをメモリ上のどこに配置するかというディレクティブをサポートする。このようにすれば、LSIの集積度が上がった場合でも、再コンパイル程度で集積度の向上の恩恵を得ることができるのではないか。本当に自分でプログラムを書いているユーザは、自分が使っているデータのどれが頻繁に使われるかを理解しているはずなので、ユーザにとって負担にはならない。
 多くのレジスタ、メモリを実装すると、レジスタやメモリを指定する部分(ビット数)が大きくなり、命令語長も長くなってしまう。レジスタ数は256個とし、8ビットで1つのレジスタを指定することにする。レジスタの種類は8ビット、16ビット、32ビット、64ビット、128ビットとする。8ビットは文字処理用、16ビットは短長の整数、漢字等を想定する。32ビット、64ビットは整数と浮動少数点数を想定し、128ビットは浮動少数点数を想定する。
 プロセッサ内のメモリは、4Mバイト、プロセッサ外の高速メモリは64Mバイトを、DRAMは8Gバイト以上を想定する。プロセッサ内のメモリにレジスタを配置する。

これらの配置の自由度を増すため、レジスタのスタート・アドレス・レジスタ、レジスタ数・レジスタを用意する。この自由度を増すための仕様は、インプリメントの際に決定することにする。
 このスカラー・レジスタ群の後にベクトルレジスタを配置する。ベクトルレジスタの数は16個(4ビット)とする。ベクトル・データ長レジスタを用意し、32ビットデータ、64ビットデータ、128ビットデータ、256ビットデータをサポートする。このベクトル機構は従来のような重厚長大なものを狙うのではない。長いベクトル長のデータのロード/ストアを可能にすることにより、メモリのレーテンシィを隠蔽することと、1つの命令で多数のデータを処理することによる効果を目的とする。数%のゲートの増加で、150%の性能向上が得られれば良いとする発想である。
 利用可能なゲートを如何に使うかという視点が重要であると考える。「与えられた面積(体積)に実装可能なゲートをどのように使うか」というクイズである。そのクイズの1974年の時点での、最高の回答が、CRAY-1であったと思う。
 異種メモリの組合は、歴史的には結構なされている。たとえば、HITAC-401では、コアメモリとドラムが使われていたようである。4,096語以下は、コアメモリで、それより上はドラムであったようである。また、CDC7600やFACOM230-75では、通常のメモリ(SCM)とLCM(FORTRANのCOMMONだけで使えるメモリ)があった。CRAY-2ではローカル・メモリ(16ビット・アドレッシング:SRAM)とコモン・メモリ(32ビット・アドレッシング:DRAM)という構成であった。
 この方式は、タスク切り替えに向いていない。しかし、HPC分野でひたすら計算をすることを目的としている。このような例はCDC6600で、セントラル・プロセッサは演算だけに専念し、割り込み処理も行わなかった。割り込み処理や入出力処理は、ペリフェラル・プロセッサ(pp)が行っていた。HPC分野を狙うプロセッサであるため、設計コストが小さいことが重要であろう。

9. まとめ
 計算機設計には素人である一人のユーザのたわごとについて述べてきた。前項で述べた計算機は、計算機設計の専門家からは、問題だらけであろう。前項に述べた計算機の具体的な形ではなく、その後ろにある考え方を今後の計算機の参考にしていただければ幸いである。参考にしていただきたい考え方は以下の点である。

10. おまけ
 
高性能の計算機を使いこなすためには、対象となる問題の記述も非常に重要である。この部分のユーザの負荷を軽減し、マクロなレベルで記述することにより、高速化も容易になる。
 残念ながら、現在のプログラムの作成は、殆どがFORTRANやCのような手続き型言語で行われている。しかし、本当のエンドユーザにとっては、大規模プログラムの作成には負担が大きい。これを回避するためには、問題向き言語のような、人間の思考に近いモデルの記述が重要である。問題向き言語の例としては、CSMP-V(連続系シミュレーション言語:制御系向け言語)やDEQSOL(偏微分方程式向け問題向き言語)等がある。

振動子モデルを問題向き言語で記述した例

【次へ】