DenelcorのHEP

これに続いて、1982年に作られたDenelcorの「HEP(Heterogeneous Element Processor)」スパコンでは、メインの計算プロセサが8~50個のスレッドをサイクルごとに切り替えて実行するという方式が取られた。

図1.2 HEPプロセサの構造

HEPプロセサはPSW QUEUEと書かれた「PSW(Program Status Word)」のキューが制御の心臓部である。PSWは実行するプログラムの次の実行する命令アドレスや、使用できるプログラムメモリやレジスタメモリの範囲、演算結果の正、負、ゼロなどのプログラムの状態を示すワードであり、PSWキューは、並列に実行するプログラムの数だけのエントリを持っている。

そして、PSWキューの先頭から取り出したPSWに従って、プログラムメモリから命令を読み出し、命令に従ってレジスタメモリからオペランドを読み、演算ユニットで指定された演算を行い、結果をレジスタメモリに書き戻す。そして、PSWは次の命令を指すように+1され、演算結果の正負なども更新されてPSWキューの最後尾に書き込まれる。この動作をパイプライン的に行い、次々と異なるプログラムのPSWを処理していく。なお、オペランドが揃わないなどで演算を実行できない場合は、そのPSWはそのままキューの最後尾に書き込まれ、次にキューの先頭に来たときに処理されることになる。

キューの物理的な長さから、1つのプロセサが扱えるPSWの数は最大50個で、演算のレーテンシから、少なくとも8個のPSWが無ければならないという制約はあるが、この範囲内では任意個のスレッドを並列して実行できる。

この方式では50個のスレッドをサポートできる量のプログラムメモリやレジスタメモリが必要であるが、命令のデコードや演算を行うハードウェアは1つで済む。

また、スレッド0の命令が浮動小数点演算のように多数のサイクル掛る命令であったとしても、その他のスレッドを実行して、次にスレッド0の実行を行うまでには前のスレッド0の命令の実行は終わっており、データ依存による待ちが生じない。そして、HEPはキャッシュを装備していなかったが、メモリアクセスを行っても、十分な数のスレッドがあれば、その結果は他のスレッドを実行している間にメモリから到着するので、キャッシュが無くてもデータ待ちは発生せず、演算器をフル稼働できるという設計になっていた。

なお、HEPシステムは、このプロセサを最大16個、データメモリモジュールを最大128個、IOキャッシュモジュールを最大4個、スイッチネットワークを使って接続することができるマルチプロセサシステムになっていた。

HEPのアーキテクトは、現在はMicrosoftのテクニカルフェローを務めるBurton Smith氏である。筆者は、最大50個のプロセサは同一でありHeterogeneousではなく、HomogeneousではないかとSmith氏に質問したことがある。そうすると、当時は、国防総省のスパコン契約の獲得を目指しており、何か格好の良い名前が必要ということで、営業担当が、流行だったHeterogeneousという単語を使った。私はこの命名には関与していないという回答であった。

なお、Smith氏は、その後、Tera Computerを設立した。左前になったCrayをTeraComputerが買収したのであるが、社名はより知名度の高いCrayを使うことになりCrayのChief Architectとなった。Crayのビッグデータ向けのCS300スパコンはHEPの流れを汲むマルチスレッドスパコンである。