マルチスレッドプロセサ

マルチスレッドプロセサは、複数の命令列(スレッド)を並列的に実行するプロセサである。その点では、それぞれが1つの命令列を実行するマルチコアプロセサもマルチスレッドプロセサである。

しかし、以下では、複数のスレッドを実行するにあたり、それらのスレッド間で命令のフェッチ機構や演算器などの実行機構を共用することにより、単一スレッドのマルチコアプロセサよりも、少ないハードウェアでより高い性能を実現するタイプのプロセサについて説明して行く。

CDC 6600のPeripheral and Controlプロセサ

1964年に作られたCDC(Control Data Corporation)6600は、スパコンの天才と言われたSeymour CrayとJames Thorntonがアーキテクトとして設計したマシンで、歴史的に初のOut-of-Order実行機構であるThornton Algorithmを実装したマシンである。

当時は、プロセサがプログラム制御で直接I/O装置を制御していた。しかし、CDC 6600では計算用のプロセサに余計な仕事をやらせずに、OSの実行やI/Oは専用のプロセサを使うという設計が取られた。

各種のI/Oを制御するため、多数のプロセサが必要となるが、多数のプロセサを使うとコストが高くなってしまう。そこで、CDC 6600で取られた方法が、1台のI/Oプロセサハードウェアを10台のI/Oプロセサに見せるという、孫悟空の分身の術である。なお、I/O処理などを担当するプロセサは、正式にはPeripheral and Control Processor(PP)と呼ばれており、次の図のように1個のプロセサが10個のプログラムを並列に実行する。

図1.1 CDC 6600のマニュアルに書かれたPPのBarrel and Slotの説明図に注釈を加えた図

CDC 6600のI/O用プロセサの命令サイクルに比べてメモリのアクセスは10倍程度の時間が掛かったので、Slotと呼ぶ1個のプロセサハードウェアがBarrel(樽)と呼ぶ10個のプログラムカウンタやレジスタを反時計方向に回して切り替えながら命令を実行していく。この方式をCDC 6600ではBarrel and Slotと呼んでいる。なお、この図は8進数で書かれているので、PP番号などは1~7、10、11、12になっている。

各PPは、バレルのレジスタと4K語(1語=12bit)のI/Oメモリを持ち、このI/OメモリはI/Oプログラムの格納や、I/Oのバッファなどに使われる。

最初のサイクルはPP1のレジスタをSlotに接続し、PP1のメモリから命令を読んで処理し、次のサイクルには同様に、PP2の命令を処理し、その次はPP3の命令を処理するという風に10個のPPの命令を順に処理して行く。そして、PP1に戻ったときには、PP1のプログラムの直前の命令のメモリアクセスも終わっているという設計になっている。

この10個のPPの内の、1個のPPはマシン全体の管理を行い、メインプロセサで実行するプログラムを準備したりする。そして、残りのPPはそれぞれのI/Oを制御して入出力を行うという風に使われている。

このようにすると、平均的な命令の実行速度は1/10になるが、メモリアクセスネックにならず10個のプログラムを並列に実行することができる。このように、プログラムカウンタやレジスタは専用のものが必要であるが、1つの命令フェッチ、演算ユニットで10個のプロセサが実現でき、ハードウェアコストを削減することができた。