# Parallel Operation in the Control Data 6600
## 論文情報
| 項目 | 内容 |
|---|---|
| 著者 | [[James E. Thornton]]([[Control Data Corporation]]、ミネアポリス) |
| 発表 | AFIPS Fall Joint Computer Conference 1964(1964-10-27 〜 29)、Part II、pp. 33-40。Computer History Museum 所蔵の版は誌面ヘッダーに「Spring Joint Computer Conference, 1964」と印字されているが、書誌(Crossref)は Fall Joint Computer Conference の Part II である |
| DOI | 10.1145/1464039.1464045 |
| 種別 | システム紹介(設計思想と構成の記述。性能の実測値は示さない) |
| 原本の性質 | スキャン由来の OCR テキスト。図のラベルは画像で確認した |
論文に Abstract は無く、冒頭は 1960 年夏の開発開始から、第 1 号機の出荷(発表の前月)までの経緯の導入である。
## 概要
[[CDC 6600]] の並列動作の設計を述べた論文である。演算を担う高速な中央プロセッサと、入出力・制御を担う 10 台の周辺・制御プロセッサを中央メモリで分離し、後者は 1 組のハードウェアを時分割して 10 台に見せる。中央プロセッサは 10 個の機能ユニットとレジスタ群、そして命令の衝突を管理する[[スコアボード]]で、プログラムに特別な書き方を求めずに並行実行を得る。
## 問題設定
1960 年の時点で、高度な計算機の主な道は、回路性能の力ずくの向上と、並列動作の 2 つだと著者は見ていた。6600 の計画は、大規模な科学計算と、小規模な問題の時分割の両方を重視した。前者には、大きな中央メモリに接続した高速の浮動小数点中央プロセッサが自明であった。自明でなかったが 6600 の着想に重要だったのは、この中央の演算を周辺の作業から切り離すことである。同時期に高速シリコントランジスタが登場し、回路性能の向上を支えた。
## 提案手法
**システム構成**(図1)。中央メモリと中央プロセッサを中心に、10 台の周辺・制御プロセッサ(PP)が、片側で中央メモリに、反対側で周辺チャネルにつながる。システム全体の実行制御は常に PP のどれか 1 台が持ち、残りは割り当てられた周辺・制御の仕事をする。10 台すべてが 12 本の入出力チャネルを使え、チャネルの「持ち替え」や活動の監視ができる。各 PP は自前のメモリを持ち、重要なシステム制御の作業を隔離し保護する。中央プロセッサは、プログラムごとの再配置レジスタとファイル保護つきで中央メモリから動く。
図1(Figure 1): 6600 の全体構成。中央の中央メモリ・中央プロセッサを、4096 語のコアメモリを持つ 10 台の周辺・制御プロセッサが囲む。
![[_attachments/Parallel-Operation-in-the-Control-Data-6600/fig01-system-overview.png]]
**周辺・制御プロセッサ**。10 台は 1 つのシャーシに収まる。各 PP のメモリは 12 ビット語 4096 語である。命令は 12 ビットと 24 ビットの形式で、直接・間接・相対アドレス指定を持つ。論理、加減算、シフト、条件分岐、12 本のチャネルへの単語・ブロック転送、中央メモリへの単語・ブロック転送を命令として持つ。中央メモリの 60 ビット語は、PP の連続 5 語から組み立てる。中央プロセッサへの割り込みと、中央プログラムアドレスの監視の命令もある。
この処理能力を経済的・省スペースで得るため、時分割設計を採る(図2)。10 台の動的情報(プログラムアドレス、アキュムレータの内容など、合計 52 ビット)を、レジスタの「バレル」に載せて回す。1 周が 1 主サイクル(1000 ns)である。バレルの「スロット」に、加算器、組立網、分配網、および PP 命令の 1 ステップを行う相互接続があり、スロットを通る時間が 1 小サイクル(100 ns)である。各 PP は 10 小サイクルに 1 回、命令の 1 ステップを実行する。PP 命令は種類によって 1 ステップ以上を要する。
つまり、単一の演算器と単一の分配・組立網を 10 台に見せかけ、メモリだけを真に独立に保つ。メモリの読み書きサイクル時間はバレル 1 周と同じ 1000 ns である。
図2(Figure 2): 周辺・制御プロセッサの構成。時分割の命令制御を、レジスタ・メモリ、読み出し/書き込みの「ピラミッド」(60・48・36・24・12 ビットの段)、12 ビットのチャネル群がつなぐ。
![[_attachments/Parallel-Operation-in-the-Control-Data-6600/fig02-peripheral-processors.png]]
入出力チャネルは双方向の 12 ビット経路で、1 主サイクル(1000 ns)に 12 ビット語 1 つを片方向に動かせる。10 台をすべて使ったときの最大バースト転送は毎秒 1 億 2000 万ビット、実用のシステムで持続できるのは毎秒約 5000 万ビットである。チャネル 1 本は複数の周辺装置を扱え、衛星計算機など別システムとも接続できる。
PP は、組立網と分解網を介して中央メモリにアクセスする。60 ビット語 1 つが PP の 5 回のメモリ参照から成るため、5 段の組立網が自然である。これで 1 主サイクル中に各網へ 5 件の参照を入れ子にできる。中央メモリは独立バンク構成で、小サイクルごとに中央語を転送できる。このため、PP が中央メモリのアドレス制御に与える干渉は最大でも約 2% である。全 PP が使える実時間クロックが 1 つある。
**中央プロセッサ**(図3)。中央メモリの背後に隠れた高速演算ユニットとみなせる。プログラム、オペランド、結果は中央メモリにあり、PP とのつながりは、メモリと 2 つの制御だけである。2 つとは、PP から中央プロセッサを起動または中断する交換ジャンプと、PP が監視できる中央プログラムアドレスである。
図3(Figure 3): 6600 のブロック図。10 台の PP と 12 本のチャネル、中央メモリ(上限・下限境界の再配置つき)、24 個の演算レジスタと 10 個の機能ユニットからなる中央プロセッサ。
![[_attachments/Parallel-Operation-in-the-Control-Data-6600/fig03-block-diagram.png]]
中央プロセッサの要点は「機能による並列」である。複数の算術関数を同時に実行できるよう、10 個の機能ユニットを持つ。内訳は、増分 2 個、浮動小数点加算、固定小数点加算(図3では LONG ADD)、シフト、乗算 2 個、除算、ブール、分岐である。各ユニットは 3 アドレス形式で、たとえば浮動小数点加算は 60 ビットのオペランド 2 つを中央レジスタから取り、60 ビットの結果をレジスタへ返す。
ユニットとの情報は、24 個の中央レジスタが持つ。8 個は 18 ビットの増分(インデックス)レジスタで、うち 1 個は常に 0 を保持する。8 個は 18 ビットのアドレスレジスタで、5 本の読み出し中央メモリ・トランクと 2 本の書き込みトランクを指す。8 個は 60 ビットの浮動小数点レジスタで、中央プログラム実行中に中央メモリへアクセスできる唯一の中央レジスタである(図6)。PP から中央プロセッサ全体がメモリの背後に隠れているように、10 個の機能ユニットも中央レジスタの背後に隠れる。その結果、命令の効率が高く、並行実行が実用になる。少数のビットで任意の機能を意味づけられるため、汎用の並行算術に必要なオペランドとユニットの予約の仕組みを作れる。
図6(Figure 6): 中央プロセッサの演算レジスタ。60 ビットのオペランド X0〜X7、18 ビットのアドレス A0〜A7、18 ビットの増分 B0〜B7、10 個の機能ユニット、命令レジスタと命令スタックからなる。
![[_attachments/Parallel-Operation-in-the-Control-Data-6600/fig06-operating-registers.png]]
**命令形式**(図4)。命令は 15 ビット形式と 30 ビット形式の 2 種で、1 語(60 ビット)内で混在できる。15 ビット形式は f、m、i、j、k の 3 ビット 5 桁(八進)で、f と m が演算コード、i が結果レジスタ、j が第 1 オペランドレジスタ、k が第 2 オペランドレジスタである。たとえば ADD を f と m で指定し、j と k のレジスタから加算して結果を i のレジスタへ返す。3 アドレスの浮動小数点加算ユニットのアドレスは 3 ビットで、8 個の浮動小数点レジスタのどれかを指す。30 ビット形式は k の代わりに 18 ビットの定数 K を持ち、これが入力オペランドの 1 つになる。
図4(Figure 4): 15 ビット命令の形式。60 ビットの語から取り出した 15 ビットを、f・m(演算コード)、i(結果)、j(第 1 オペランド)、k(第 2 オペランド)の各 3 ビットに分ける。
![[_attachments/Parallel-Operation-in-the-Control-Data-6600/fig04-instruction-format.png]]
**スコアボード**。専用装置は主系列に並行な別ハードで副次作業を進めることで速くなる。6600 の中央プロセッサは、これを汎用の装置で行う一般的な仕組みを、複数の機能ユニット、複数のオペランドレジスタ、簡素で効率的なアドレス指定によって実現する。これをスコアボードと呼ぶ。スコアボードは、各中央レジスタ、各機能ユニット、各ユニットへの 3 本のオペランドトランクの使用状況を、2・3・4 ビットの量で保持する。新しい命令を取り出すたびに、発行の瞬間の状況を記録する(スナップショット)。待ちが不要なら、ユニット自身の制御で直ちに実行を始める。待ちが必要なら(入力オペランドが未着など)、スコアボードが遅延を制御し、解除でユニットが実行を始める。この待ちはスコアボードと機能ユニットの中で処理され、後続命令の取り出しと発行を止めるとは限らない。
このため、関連するものもしないものも含む一連の命令を、空きの機能ユニットが尽きるか、1 つのレジスタに複数の結果を割り当てる必要が出るまで発行し続けられる。発行の制約はこの 2 つ(ユニットが空いている、二重の結果が無い)だけで、独立した命令の連鎖が同時に進む。この 2 つに当たらなければ、命令は毎小サイクル発行できる。実行時間は、固定小数点加算が 3 小サイクル、浮動小数点乗算が 10 小サイクル、浮動小数点除算が 29 小サイクルである。
**命令スタックとメモリ**。命令を連続的に供給するため、60 ビットのバッファレジスタ 1 個を、32 命令を保持できる命令スタックの最下段に置く(図5)。メモリからの命令語はスタック最下段に入り、古い語を押し上げる。直線的なプログラムでは最下段の 2 つだけを使い、メモリ競合が許す限り速く補充する。スタック上位の命令へ戻る分岐では、分岐後の補充をせず、ループ全体をスタックに保持する。これでメモリアクセスやメモリ競合が絡まなくなり、かなりの高速化が得られる。
図5(Figure 5): 命令スタックの動作。60 ビット 8 語のスタックの最下段に、中央メモリからの語がバッファレジスタ経由で入り、押し上げられながら命令レジスタへ出る。
![[_attachments/Parallel-Operation-in-the-Control-Data-6600/fig05-instruction-stack.png]]
中央メモリから中央プロセッサへは、5 本のメモリトランクが 5 個の浮動小数点レジスタへ通じる。各トランクにアドレスレジスタ 1 個が対応し、アドレスレジスタを結果にする命令が、そのトランクのメモリ参照を暗黙に開始する。これらはスコアボードで処理されるので、メモリアクセスと演算が重なりやすい。たとえば、浮動小数点レジスタへロードする新しい語はメモリから持ってこられるが、そのレジスタの以前の使用がすべて終わるまでレジスタには入らない。中央レジスタが 10 個の機能ユニットへデータを全て与え、全ての結果を受け取り、ユニット内に記憶は持たない。
中央メモリは 4096 語 32 バンクで、連続アドレスは別のバンクを指す(同一バンクの隣接アドレスは実際は 32 離れる)。アドレスは 100 ns ごとに発行でき、典型的な中央メモリの情報転送率は毎秒約 2 億 5000 万ビットである。
**機能ユニットの単純化**。ユニットはレジスタの背後に隠れているので、ハードの重複が増えるように見えるが、好ましい結果がある。各ユニットを他と無関係に、自分の機能だけに最適化(削り込み)でき、単純化で速度が上がる。特化の例として、浮動小数点乗算は係数の乗算を 9 小サイクル、結果の格納に 1 小サイクル、計 10 小サイクル(1000 ns)で行う。桁上げ保存加算器の層を 2 つの半分に分け、各半分が同時に部分積を作り、長い桁上げが伝わる間に 2 つを併合する。回路の塊は大きいが、当初の計画より十分に小さくなり、最終設計で乗算ユニットを 2 個載せられた。
中央プロセッサの特徴を一言でいえば「並行動作」である。中央プロセッサ内で動くプログラムは、利用可能な並行性の一部を使う。プログラムを特定の書き方にする必要はない(最適化の余地はある)。並行性の実現方法は、できるだけ多くの命令を発行し、衝突の大半を実行中に処理することである。この方式の要件は次の 4 つである。
1. 多くの機能ユニット
2. 3 アドレスの性質を持つユニット
3. 多数の一時レジスタと、ユニットへ出入りする多数のトランク
4. 簡素で効率的な命令セット
**構成と製造**(図7〜10)。回路はすべてトランジスタ論理で、シリコントランジスタが飽和動作し、1 段の遅延は平均約 5 ns である。論理回路は、約 2.5 × 2.5 × 0.8 インチのコードウッド式プラグインモジュール(平均 50 個ほどのトランジスタ)に載る。メモリは約 6 × 6 × 2.5 インチのモジュール(4096 × 12 ビット語の一致電流メモリ)で、読み書きの駆動回路とアドレス変換をすべて含む。PP 1 台に 1 モジュール、中央メモリの 1 バンクに 5 モジュールを使う。論理・メモリのモジュールは、X 字型のキャビネットの、直立してヒンジで開くシャーシに置く。モジュール間の配線はツイストペア伝送線、シャーシ間は同軸ケーブルである。
図7(Figure 7): 6600 のプリント回路モジュール。
![[_attachments/Parallel-Operation-in-the-Control-Data-6600/fig07-circuit-module.png]]
図8(Figure 8): 6600 のメモリモジュール。
![[_attachments/Parallel-Operation-in-the-Control-Data-6600/fig08-memory-module.png]]
図9(Figure 9): 6600 の本体部。
![[_attachments/Parallel-Operation-in-the-Control-Data-6600/fig09-main-frame.png]]
保守と運用は、プログラム制御の表示コンソールで行う(図10)。コンソールはシステムに複数付けてよい。デッドスタート機能が 10 台の PP を、任意の周辺装置から情報を入れられる状態へ持っていく。この読み込みで通常、複数利用者や保守などの高度な機能を持つ運用システムが入る。
図10(Figure 10): 6600 の表示コンソール。
![[_attachments/Parallel-Operation-in-the-Control-Data-6600/fig10-display-console.png]]
## 新規性
- 入出力・制御(PP)と演算(中央プロセッサ)を中央メモリだけで分離し、実行制御を PP 側に置く構成。
- 10 台の PP を、1 組の演算器・網をレジスタ「バレル」で時分割して実現する構成(メモリだけを独立に保つ)。
- 中央プロセッサに「機能による並列」(10 機能ユニット)と、レジスタ・ユニット・トランクの使用を記録して発行と待ちを制御する[[スコアボード]]を導入したこと。
## 実験設定
実験・ベンチマークの記述は無い。示される数値は、設計値(サイクル時間、転送率、実行に要する小サイクル数、メモリ構成、モジュール寸法など)である。
## 実験結果
性能の実測結果は示されない。設計上の数値として、次が挙げられる。
- PP のバレル 1 周は 1000 ns、小サイクルは 100 ns。
- チャネルの最大バースト 毎秒 1 億 2000 万ビット、持続約 5000 万ビット。
- PP による中央メモリのアドレス制御への干渉は最大約 2%。
- 命令は毎小サイクル発行可能。実行は固定小数点加算 3、浮動小数点乗算 10、浮動小数点除算 29 小サイクル。
- 中央メモリの転送率は典型で毎秒約 2 億 5000 万ビット。
## 考察
- 論文は、回路技術の進歩よりも「論理編成の進歩」が今回の成功の要点だと述べる。
- 同じ互換構造の内で、技術を上方へ進めること、同一技術を下方の機種へ展開することを、Control Data が探っていると述べる。
## 強み / 弱点・課題
- 強み: 各層の設計判断(中央演算の隔離、時分割による PP の実現、機能ユニットの単純化、スコアボードによる汎用の並行化)が動機と数値つきで説明される。プログラムを特別な書き方にせず並行性を得る点を明言する。
- 弱点・課題: 実測の性能評価や、他方式との比較を示さない。スコアボードの詳細な状態遷移や判定条件は、本論文では概要にとどまる。