バレルプロセッサ(英: Barrel processor)は、実行するスレッドをサイクルごとに切り替える、コンピュータのプロセッサである。同じ、あるいは似たような機構を指す語として、"インターリーブ(inerleaved)"や"細粒度(fine-grained)"あるいは一時マルチスレッディングなどといった語もある(観点の違いなどによる)。
現代のスーパースケーラアーキテクチャにおける同時マルチスレッディングとは異なり、1サイクルに複数の命令を実行できるものではない。
たとえば、CDC 社の Cyber コンピュータのあるものは、一つのスレッドに処理が戻る前に、20の異なるスレッドのそれぞれから1つずつ命令を実行した。また、Ubicom 社の IP3023 プロセッサは、一つのスレッドに処理が戻る前に、8つの異なるスレッドのそれぞれから1つずつ命令を実行した。
プリエンプティブ・マルチタスクのように、各実行スレッドは、プログラムカウンタやそれ以外のハードウェアレジスタ(各スレッドのarchitectural state)を割り当てられる。バレルプロセッサは、他のスレッドが順番を待っている間、一つのスレッドを通例数百から数千サイクル実行し続けるプリエンプティブ・マルチタスクマシンとは異なり、各スレッドが一つの命令を N サイクルごとに実行することを保証することができる。
C-slowing と呼ばれる技術により、通常のシングルタスクプロセッサの設計から、対応するバレルプロセッサの設計を自動的に生成することができる。この方法で生成された n-way のバレルプロセッサは、それぞれがオリジナルのおよそ 1/n のスピードで動作するオリジナルのシングルタスクプロセッサを n 個コピーしたマルチプロセッサのように動作する。
シングルスレッドのプロセッサとの比較
シングルスレッドのプロセッサに対する利点
シングルタスクのプロセッサはキャッシュミス や パイプラインストールが発生した場合、有用な処理を行うことなく待機することに長い時間を費やす。
シングルタスクプロセッサに対しバレルプロセッサを採用することによる利点には下記のものがある:
- ストールしたスレッドが待機している間、他のスレッド上の意味のある作業を実行する能力
- n-way バレルプロセッサを n-deep のパイプラインで設計することは、シングルタスクプロセッサの設計より大幅に簡潔なものでよい。バレルプロセッサはパイプラインストールを生じることはなく、フィードフォワードの回路が必要ないためである
- リアルタイムアプリケーションにとっては、バレルプロセッサは他のスレッドに何が起きていても、たとえスレッドが無限ループ内でデッドロックしていたり、ハードウェア割り込みが連続して入るような場合でも、"リアルタイム"スレッドを正確なタイミングで実行することを保証できる
シングルスレッドのプロセッサに対する欠点
バレルプロセッサにはいくつかの欠点もある。
- すべてのスレッドが同じキャッシュを共有するようにするか、トランジスタ数(すなわちコスト)を増大させて、各実行スレッドごとに一単位のキャッシュを用意する必要がある。しかし、ほとんどのバレルプロセッサの実装はハードリアルタイムの組み込みシステムであり、メモリアクセスのコストは通常キャッシュの動作の最悪のケースを想定して計算されるため、あまり大きな問題ではない。
- 各スレッドの状態は、コストがかかるチップ外でのコンテキストスイッチングを避けるため、チップ上(通常レジスタ内に)になければならない。そのため典型的なプロセッサと比較して多数のレジスタを必要とする。
関連項目
外部リンク