トランスピュータ

トランスピュータ (transputer) は、イギリスのブリストルにある半導体企業インモスが1980年代に設計したマイクロプロセッサアーキテクチャである。並列コンピューティング向けにメモリとシリアル通信リンクを内蔵している。
1980年代後半の一時期、トランスピュータは次世代の新たなコンピュータの始まりであると多くの人々が考えた。インモスとトランスピュータはこの期待には応えられなかったが、トランスピュータのアーキテクチャはコンピュータアーキテクチャの様々なアイデアを生み出すきっかけとなり、そのうちのいくつかは現代のシステムで違った形で採用されている。

背景

1980年代初期、従来からのCPUは性能の限界に達しつつあると見られていた。このころまで、製造技術の問題で設計者がチップに載せられる回路の量が制限されていた。しかし、集積回路の製造技術は進歩し続け、逆に設計者が思いつかないほど大量の回路をチップに載せられるようになった。間もなく、伝統的なCISC型デザインは性能の限界に達し、その限界を超えられるのか当時は明らかではなかった。
唯一の道は並列性を高めることだと思われた。複数のマイクロプロセッサを一緒に動作させ、複数のタスクを同時に処理するのである。これにはマルチタスクと呼ばれる手法が可能なマシンがなければならない。マルチタスクはそれ以前のマイクロプロセッサには困難だったが、当時の最新の設計では効率的に実行できた。マルチタスクが全てのオペレーティングシステムの機能となるのは明らかだった。
マルチタスク設計の副次効果として複数のCPU上で複数のプロセスを動作させることができるようになる。これをマルチプロセッシングという。低価格のマイクロプロセッサでマルチプロセッシングを実現すれば、マイクロプロセッサを追加することで簡単に性能を向上させることができる。それは新たに高速なマイクロプロセッサを設計するよりも非常に低コストで実現可能と思われた。
最初のトランスピュータを設計したのはデイヴィッド・メイとロバート・ミルンである。1990年、メイはサウサンプトン大学から名誉博士号を授与され、翌年には王立協会フェローに選ばれ、1992年には英国物理学会からパターソン・メダルを授与されている。当時インモスの技術責任者だったトニー・フュージは、T414トランスピュータ開発により1987年 Prince Philip Designers Prize (en) を授与された。

デザイン

トランスピュータ（トランジスタ+コンピュータの造語）は並列コンピューティングに特化した初めての汎用マイクロプロセッサである。様々な能力や値段のチップを組み合わせて並列コンピュータを構成することが目的だった。各チップがトランジスタのように組み合わされて役割を果たすことからトランスピュータと名づけられた。
当初の計画ではトランスピュータのコストは数ドル/ユニットとすることになっていた。インモスはこれがあらゆる場所で使われることを想定した。コンピュータのメインCPUとしてだけではなく、同じコンピュータのディスクドライブのチャネル・コントローラとしてもである。これらトランスピュータは空き時間を利用して別の仕事をさせることもでき、全体として性能を大幅に向上できると考えられた。
各トランスピュータは単独で動作できるだけの回路を備えていたので、その特長はマイクロコントローラに似ている。トランスピュータ同士は複雑なバス（またはマザーボード）を使わずに簡単に接続することができる。電力供給もクロック供給も簡単である。RAMもRAMコントローラも不要である。さらにはRTOSすら要らない。それらは全て組み込み済みである。

アーキテクチャ

当初のトランスピュータは非常に単純で独特のアーキテクチャであり、小さな領域で高性能を達成することを意図したものだった。マイクロプログラム方式でデータの経路を制御するが、当時の他の設計とは異なり、ほとんどの命令は実行に1サイクルしかかからない。命令コードがマイクロコードROMのエントリポイントの識別に使われ、ROMの出力がそのままデータ経路に供給される。複数サイクルかかる命令の場合、データ経路が最初のサイクルを実行する間、次のサイクルのための4つの考えられるオプションがデコードされる。どのオプションを実際に実行に移すかは、最初のサイクルの終わるころに決定する。これによって、アーキテクチャの汎用性を保ちつつ非常に高速な動作を可能にしている。
当時としてはクロック周波数 20MHz は非常に高速であり、設計者はこの速度のクロック信号を基板上で分配できるかどうかを心配していた。そのため、外部クロックはもっと低い 5MHz とし、それをPLLで4倍にし、必要な内部周波数を得ている。内部のデジタル回路には、一般的な静的な論理回路による方式ではなく、dynamic logic（en:Dynamic logic (digital electronics)）の一種のfour-phase logic（en:Four-phase logic）を使用しているため、単相20MHzのクロックからさらに4つの互いに重ならない位相の信号を生成し、それに合わせて論理演算が行われる。これにより必要な領域を低減しつつ速度を上げている。この手法は限られたトランジスタで機能と性能が得られることから以前はよく使われていたが、自動テストバターン生成（en:automatic test pattern generation）による試験と相性が悪い、などといった短所があるといった理由から、徐々に使われなくなっていった手法である。

リンク

トランスピュータの基本デザインは、他のトランスピュータと接続する4つのシリアルリンクを持っていることである。各リンクは1980年代当時としては非常に高速な 5Mbit/s、10Mbit/s、20Mbit/s といった性能だった。任意個のトランスピュータを長い（最長数十メートル）リンクで接続し、ひとつのコンピュータ"farm"（農場、ファーム）を形成する。例えば、典型的なデスクトップマシンとしては、入出力を処理するふたつのローエンドのトランスピュータを使ってそれらのシリアルリンクを必要な周辺装置に接続し、CPUとしてより高機能なトランスピュータを使用する。
このような方式で構成できるシステムには限界がある。各トランスピュータは1対1で接続されているため、直接つながっていないトランスピュータへの通信メッセージは途中のトランスピュータが中継することになる。この中継が度重なると無視できない遅延が生じる。これを解決するためにインモスは32個のトランスピュータを接続する遅延のないスイッチを提供した。これは、スイッチにスイッチを接続することもできるため、非常に巨大なネットワークを形成できる。

ブート

トランスピュータはネットワークリンクからの信号で起動できるため、ひとつのトランスピュータからの信号でネットワーク上の全トランスピュータを起動することができる。BootFromROM と呼ばれるピンをアサートされたトランスピュータはメモリ先頭2バイトを読み込んで命令ポインタに格納し、処理を開始する。このピンがアサートされない場合、4つあるリンクのいずれかに送られてきた1バイトのデータが、その後ダウンロードされてくるブートストラップの長さを示しており、ブートストラップのコードはそのトランスピュータのメモリ先頭にセーブされ、実行される。0と1は特別な長さであり、PEEKとPOKEとして予約されている。これらを使うとブートされていないトランスピュータの持つRAMの内容を調べたり、書き換えたりできる。PEEKの後にはアドレス指定が続き、POKEの後にはアドレスと書き込むべきデータが続く。

スケジューラ

リンクをサポートしたため、通信トラフィックをスケジュールする新たな回路が必要となった。通信結果を待っているプロセスは自動的にポーズ状態となってネットワーク回路がリードやライトを終えるのを待つ。そうすると他のプロセスが走行を開始する。リアルタイム性とマルチプロセッシング動作を向上させデッドロックを防ぐため、ふたつの優先度レベルをサポートしている。ひとつのトランスピュータ上で動作するふたつのプログラムが互いに通信する場合、メモリ上の「仮想ネットワークリンク」を使うことができる。プログラムが入力や出力を要求してその処理を待つ間ポーズすると、オペレーティングシステムが調停回路を使ってそれを処理する。トランスピュータのオペレーティングシステムはスケジューリングを行う必要がない。ある意味ではチップ自身がOSを内部に持っていると考えることができる。
このような機能を全てシングルチップに組み込むため、トランスピュータのコア部分は一般のCPUよりも単純になっている。命令セットが小さいためRISCとも言われるが、マイクロプログラム方式であり、レジスタは少なく、メモリとメモリを扱う命令があるため、設計自体はまさしくCISCである。レジスタが多数あるロード/ストア型の RISC CPU とは異なり、トランスピュータには3つのデータレジスタしかなく、それらがスタックのように振る舞う。さらにワークスペース・ポインタがメモリ上のスタックを指していて、Load Local 命令と Store Local 命令で容易にアクセスできる。これによりコンテキストスイッチが非常に高速化された。単にワークスペース・ポインタを別のプログラム用のアドレスに書き換えるだけで済んだのである。このような設計は当時それほど珍しいものではなく、TMS9900なども同様である。3本のレジスタスタックの内容はジャンプ命令などでも保証されず、コンテキストスイッチの際にも内容の保持は保証されない。

命令セット

トランスピュータの命令は8ビット長でそれがふたつのニブルに分けられる。前半は命令コードで、後半がオペランドである。前半のニブルで16種類の基本命令コードを表しており、Minimal Instruction Set Computer (MISC) としても商用化されたものとしては非常に命令数が少ない。後半のニブルは1つの定数値オペランドであり、ワークスペース・ポインタ相対オフセットを表していることが多い。2つの命令コード（PFIXとNFIX）はニブル以上のオペランドを構成するのに使われる。OPR (Operate) という命令コードは追加の命令をサポートするもので、オペランドをオペランドのない拡張命令コードとして処理する。この手法を使えば容易に命令セットを拡張でき、新たなトランスピュータの実装で命令を追加可能である。

TRAM

マルチ-トランスピュータ・システムのプロトタイピング・構築・構成の手段として、インモスは1987年に TRAM (TRAnsputer Module) 規格を導入した。TRAMはトランスピュータを搭載したドーターボードであり、オプションで外部メモリや周辺デバイスを搭載し、規格化された単純なコネクタで電源やリンク、クロックやシステム信号を供給するようになっている。様々な大きさのTRAMが定義されており、サイズ1（3.66インチ×1.05インチ）からサイズ8（3.66インチ×8.75インチ）まである。インモスは各種ホストバスに装着するTRAMマザーボードも開発しており、ISA用、MicroChannel用、VMEバス用などがあった。TRAM間のリンクは 10Mbit/s または 20Mbit/s で動作する。

ソフトウェア

トランスピュータは、CSP プロセス計算に基づくプログラミング言語Occamを使ってプログラミングされる。実際、トランスピュータはOccamを動作させるために作られたと言っても過言ではない。同様にCISCデザインのプロセッサはPascalやC言語のような高級言語を動作させるよう設計されている。Occamは並行性をサポートしており、プロセス間およびプロセッサ間の通信を言語仕様としてサポートしている。チップと言語が並列性と通信をサポートしていたので、デバイスコントローラのようなプログラムを書くのは極めて簡単である。ほとんどのプログラムは入出力としてシリアルポートを使い、データが無ければ自動的にスリープする。
初期のOccam開発環境としてインモスは D700 Transputer Development System (TDS) を用意した。エディタ、コンパイラ、リンカ、デバッガを統合した環境である。TDS自体もOccamで描かれたトランスピュータ用アプリケーションである。TDSのテキストエディタはコード折りたたみが可能で、コードの構造をより明確に見せることができる。しかし、プログラミング言語も開発環境も独特なものだったため、トランスピュータ普及にはあまり貢献しなかった。後にインモスは、より一般的なクロスコンパイラ環境 occam 2 Toolsets をリリースした。
C言語、FORTRAN、Ada、Pascalといったもっと一般的なプログラミング言語も後にインモスやサードパーティからリリースされている。これらはOccamほど洗練されてはいないが、Occamのような並行性と通信機能を提供すべく何らかの拡張やライブラリを含んでいた。
トランスピュータには仮想記憶サポート機能がなく、Unix系OSなどの移植が難しかった。それでも MINIX や Idris といったUnix系OSが移植されている。また、Unix系分散オペレーティングシステム HeliOS はマルチ-トランスピュータ・システム向けに設計されたOSである。

実装

最初のトランスピュータは1983年に発表され、1984年にリリースされた。
マイクロコントローラ的な役割を果たすデバイスとするため、2KバイトのRAMを内蔵し、追加のRAMを簡単に接続するためのRAMコントローラを内蔵していた。他の設計と全く違う点は、I/Oが全てシリアルリンクに何らかのハードウェアを追加することで接続するようになっていた点である。一般のマイクロプロセッサの割り込みに相当する1本の"Event"ラインを持っていた。 これが一種のチャネルとしても動作し、プログラムをこの"Event"ラインから入力することができ、"Event"ラインをアサートすることで処理を開始した。
全てのトランスピュータは外部から 5MHz のクロックを供給され、内部でそれを何倍かにして動作している。
このトランスピュータはMMUや仮想記憶機構を持っていなかった。
開発中止されたT9000を除き、トランスピュータは3つのグループに分けられる。16ビットの T2 シリーズ、32ビットの T4 シリーズ、64ビットの IEEE 754 浮動小数点数をサポートした32ビットの T8 シリーズである。

T2: 16ビット

プロトタイプの16ビットのトランスピュータはS43と言い、スケジューラやリンク上のDMA制御ブロック転送機構を持っていなかった。T212とM212（ディスク・コントローラ）が16ビット製品としてリリースされている。T212は 17.5MHz と 20MHz で動作する。後継の T222 にはオンチップの 2kB から 4kB のRAMが搭載されている。さらに後継の T225 もリリースされており、デバッグ用ブレークポイント機能をサポートし、T800 で導入した拡張命令もサポートしていた。T222 と T225 はどちらも 20MHz で動作する。

T4: 32ビット

最初の製品としては、T414が32ビットだった。本来はチップ上のRAMを4kB搭載した T424 がリリースされる予定だったが、製造上の問題からRAMを 2kB に縮小した T414 がリリースされた。T414 は15MHzと20MHzで動作する。後にRAMを4kBに拡張した T425（20, 25, 30MHz）が登場。こちらはブレークポイント機能とT800の拡張命令をサポートしている。1989年9月にリリースされたT400はT425の廉価版で、動作周波数は20MHz、RAMは2kB、リンク数も4本ではなく2本であり、組み込みシステム市場向けだった。

T8: 浮動小数点演算

第2世代として、1987年にT800が登場した。これは命令が追加されており、IEEE754-1985規格に準拠した64ビットのFPUと浮動小数点数用の追加の3本のレジスタを持っている。また内蔵RAMは4kBで、20MHz か 25MHz で動作する。後継のT801とT805ではブレークポイントをサポートしている。T801ではアドレスバスとデータバスを分離して性能を強化している。T805では30MHz版もリリースされている。
内蔵RAM容量を増やし、リンクを高速化し、命令を追加してマイクロコードを改良したT810が計画されていたが、1990年ごろに中止された。
インモスは他にもサポートチップとして、32ウェイリンクスイッチC004、トランスピュータのシリアルリンクと8ビットデータバスとのインタフェースチップC012といった製品も提供した。

System on a chip

インモスの当初の戦略の一部には、CPUを小さく安価に構成することで、他の論理回路をチップ上に組み込めるようになるという目論見があった。すなわち System-on-a-chip (SOC) であり、今では一般的だが、1980年代初期にはほとんど馴染みのない考え方だった。1983年ごろ、M212 と TV-toy という2つのプロジェクトが始まった。M212はT212コアを使って、シュガートのST-506やST-412といったハードディスクドライブのディスクコントローラを作るプロジェクトである。TV-toyはシンクレア・リサーチとの共同プロジェクトで、テレビゲーム機用チップ開発プロジェクトである。

T400

T212とT414/T424のリンクにはハードウェアのDMAエンジンがあり、他のプロセスを実行中に並行して通信が可能である。T400（トランスピュータ製品にも同名のものがあるが別ものである）はCPU自体がリンク上のデータ転送を扱う方式の設計を指す。4本のリンクに対応するDMAエンジンはCPU本体と同じくらいの回路規模であり、T400ではそれが不要となる。すると、空いた部分を他の用途に使えるので、SOCを実現しやすくなる。TV-toyプロジェクトでこの設計が提案されていたが、プロジェクトは1985年に中止となった。

T100

それまでのSOCプロジェクトは（M212が一時期販売された程度で）あまり成功しなかったが、1987年、8ビット版トランスピュータと状態機械に基づく構成変更可能な論理回路を組合わせるT100プロジェクトが開始された。トランスピュータの命令は基本が8ビットなので、8ビットの倍数の任意のワード長の実装が可能である。T100の目指した市場は、Futurebusなどのバスコントローラや、C011などのリンクアダプターのアップグレードである。T9000のプロジェクト開始と同時にT100プロジェクトは中止となった。なお、このコンセプトは今も生き残っており、XMOSという企業がそのような用途のチップ設計を行っている。

市場

トランスピュータは他の設計に比べてシンプルで強力であるが、本来の目標だった、あらゆる場所で使われるCPUあるいはマイクロコントローラというには程遠い状況だった。当時のマイクロコントローラ市場は8ビット機が優勢で、コストだけが問題だった。そのため、T2シリーズであっても当時の市場では強力すぎ、高価すぎた。
デスクトップやワークステーション市場でもトランスピュータは十分高速と言えた。20MHzで10MIPSを記録している。これは1980年代前半では非常にすばらしい記録であるが、FPUを備えたT800が出荷されたころには他のRISCプロセッサに性能を追い越されていた。性能差はマシン内で複数のトランスピュータを使えば埋められたかもしれないが、T800はひとつ400ドルもしたので、価格性能比で考えれば太刀打ちできなかった。トランスピュータを採用したワークステーションもわずかながら設計されており、Atari Transputer Workstation が知られている。
トランスピュータは超並列コンピューティングの分野である程度成功を収め、1980年代末にいくつかのベンダーがトランスピュータを使った製品をリリースしている。例えば、インモスの元従業員が創設した Meiko、Floating Point Systems、Parasytec、Parsys などである。イギリスの研究機関がトランスピュータを使った並列システムの研究を行った例もあり、ブリストル・ポリテクニック のブリストル・トランスピュータ・センター、エディンバラ大学の Edinburgh Concurrent Supercomputer プロジェクトなどがある。また、DESYの電子・陽子円形加速器 HERA における粒子検出器 ZEUS のデータ収集装置に300個以上のトランスピュータが使われていた。

T9000

インモスはT8シリーズを改良したT9000（開発コード名はH1）を投入した。T9000はT800によく似ているが、いくつかのハードウェアをチップに追加し、スーパースケーラ機構も導入した。初期のモデルとは異なり、T9000は16kBのキャッシュを備えていた。これは従来のようにRAMとしても使用でき、これを制御するためPMIと呼ばれるMMU的な機能も組み込んだ。加えて、高速化のためにT9000はスタックトップの32本分をキャッシュしている（従来は3本）。
T9000は高速化のために5ステージのパイプラインを採用している。特徴的な機能追加として、キャッシュ外のコードのかたまりをグループ化して、それを4バイトの擬似命令にパッケージ化する機能を持っていた。このグループは1サイクルで実行することができた。
リンクシステムもアップグレードされ100MHzとなったが、下位互換性は失われた。この新たなパケットに基づくリンクのプロトコルを DS-Link と呼び、後に IEEE 1355 として標準化される元になった。T9000にはリンクのルーティング用ハードウェア VCP (Virtual Channel Processor) も追加されており、それまでポイントツーポイントだったリンクを真のネットワークに変え、任意の本数の仮想チャネルを物理的なリンク上に構成できるようになった。そのため、プログラムがトランスピュータ間の接続構成（ネットワークレイアウト）を気にする必要がなくなった。DS-Linkに対応して32ウェイクロスバースイッチ C104 とリンクアダプタ C101 などのサポートチップも開発されている。
T9000の開発が遅れたため、リリースしようという時にはすでに他のRISCプロセッサの性能はその先に行っていた。実際、T9000はT800の10倍という性能目標も達成できず、プロジェクトが中止された時点では50MHzで36MIPSの性能だった。あまりに開発が遅れたため、T9000にとって最高のホスト・アーキテクチャはオーバーヘッドプロジェクタだという皮肉まで言われるほどだった。
インモスにはそれ以上開発を続ける資金力がなかったため、会社ごとSGS-Thomson（現 STマイクロエレクトロニクス）に買収された。同社は組み込み市場に注力していたため、買収後T9000の開発は中止され、32ビット版トランスピュータを元にしたマイクロコントローラST20が製造されることになった。これにはT9000向けに開発されていた技術も導入されている。ST20はセットトップボックス用チップセットやGPSアプリケーションなどで使われた。

ST20

厳密にはトランスピュータとは呼べないが、ST20はT2およびT9に強く影響を受けており、後の最後のトランスピュータT450の元になった。ST20は新たに育ちつつあったSOC市場での再利用可能なコアとして設計された。実際、ST20の当初の名称は RMC (Reusable Micro Core) だった。アーキテクチャはT4のものを基本とし、VHDLを使って書き直し、マイクロコード・コンパイラも書き直して最適化している。プロジェクトはT9が多くのアプリケーションにとって大きすぎると判明した1990年ごろ始まったと見られる。実際の設計は1992年中ごろに開始された。最終的な設計はもともとのT4コアとよく似ているが、命令のグループ化やワークスペース・キャッシュといった性能向上策が導入されている。

影響

皮肉なことに、トランスピュータの設計思想だった並列性向上は汎用CPUの中で実現され高速化に寄与している。トランスピュータのような明示的なスレッドレベルの並列性ではなく、命令レベルの並列性を利用するCPU設計である。アウト・オブ・オーダー実行やスーパースケーラが汎用のコンピューティングには適していたと言えるだろう。それによって、一般的なプログラミング言語で書かれた既存のプログラムも高速化の恩恵を受けることになり、トランスピュータのように独自言語でタスクレベルの並列性を意識してコーディングするよりも遥かに効率的である。
それでも、トランスピュータの目指した方向をさらに推し進めた形態としてクラスター・コンピューティングシステムがあり、21世紀に入ってからのスーパーコンピュータはほぼそのような形態が占めている。トランスピュータのシステムとの違いは、各計算ノードに十分なメモリと二次記憶装置が備わっている点で、一般的なOSが動作し、一般的なネットワークインタフェースを使っている。ノードが複雑化した結果、そういったシステムで並列性を統合するソフトウェアはトランスピュータのそれより遥かに複雑化している。
トランスピュータの動機となった事柄は根本的には解決されておらず、その後20年間以上にわたってチップのトランジスタ数が倍増していくことでなんとかごまかしてきた。しかし、ついにはチップの規模拡大（とルール縮小）に限界が見え始めてきた。電力消費量とそれに起因する発熱の問題から、クロック周波数を上げることが現実的でなくなってきた。そのため、業界はかつてインモスが提案したことのエッセンスを若干異なった形（マルチコアなど）で実現する方向に向かっている。
また、トランスピュータとインモスはコンピュータ業界に影響を及ぼしただけでなく、ブリストルがイギリスにおけるマイクロエレクトロニクスの中心地となる基礎を築いた。

今もトランスピュータを使っているプラットフォーム

宇宙探査機HETE-2には、トランスピュータT805が4個とDSP56001が8個搭載されていて、約100MIPSの性能を発揮している。
小型衛星プラットフォームMYRIADEにはトランスピュータT805が使われていて、約4MIPSの性能である。