JPH02162424A - 命令をデコードする方法とその装置 - Google Patents

命令をデコードする方法とその装置

Info

Publication number
JPH02162424A
JPH02162424A JP1258655A JP25865589A JPH02162424A JP H02162424 A JPH02162424 A JP H02162424A JP 1258655 A JP1258655 A JP 1258655A JP 25865589 A JP25865589 A JP 25865589A JP H02162424 A JPH02162424 A JP H02162424A
Authority
JP
Japan
Prior art keywords
instruction
segment
program
instructions
fetch unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP1258655A
Other languages
English (en)
Inventor
Apostolos Dollas
アポストロス・ドラス
Robert F Krick
ロバート・エフ・クリック
Blair D Milburn
ブレアー・ディー・ミルバーン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Duke University
Original Assignee
Duke University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Duke University filed Critical Duke University
Publication of JPH02162424A publication Critical patent/JPH02162424A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 (発明の適用分野) 本発明は、命令デコードのためのコンピュータアーキテ
クチャに関し、詳述すれば、命令パイプラインを備えた
コンピュータアーキテクチャのプリフェッチとデコード
とを行う装置とその方法に関する。
(従来の技術) コンピュータ操作用命令パイプラインは、フォンニュー
マン型コンピュータの性能を高めるのに長年に互って使
われている。最も簡単な7オンニユーマン型アーキテク
チヤにあっては、各段階の命令は(例えば、フェッチ、
デコード、実行)は、各段階に要するハードウェアが相
互作用を行わなくても、順次実行されるようになってい
る。パイプラインは、複数の命令段階が、相互作用を行
わないハードウェアの部分で同時に処理されるようにす
るものである。一般に、命令実行には三段階、即ち、命
令フェッチ、命令デコード、命令実行の段階がある。こ
れらの操作は、各命令段階が連続している限り、互いに
独立して処理される。従って、最初の命令のフェッチは
、■サイクル以内に実行される。これが終わると、解読
装置が最初の命令を処理すると共に、フェッチ装置が最
初の命令のデコード処理と並列して後の命令の処理を開
始する。この様に命令をパイプライン処理することによ
り、各命令を処理するのに複数のサイクルを要するにし
ても、−旦パイブラインが満たされると、各サイクルで
命令を完遂することができる。
しかし、分岐ステートメントと手順が実行・復帰される
とか、プログラム命令コードが非連続になる程プログラ
ムの流れが変わると、パイプラインアーキテクチャに問
題が起こる。例えば、前述の三段階パイプラインの場合
では、分岐命令が命令lであるとすると、実行段階で分
岐の方向が定まると、他の二つの命令が部分的に処理さ
れる。
もし、これらの命令が分岐の目標でないとすると、適当
なロケーションの命令がパイプラインに注入されて、そ
れまでに行った処理が無駄になる。それに伴って遅延が
起これば、実行断で2サイクルの[泡立ち(bubbl
e)Jが起こる。また、機器の状態が処理作用により変
化する前にその処理作用を中断しないでいると、一部の
処理作用で不正確な演算結果が出され、矯正命令でも入
れてやらないと、取り返しがつかなくなり、やがて、「
泡立ち」が益々大きくなってしまう。分岐とプログラム
の流れの変化は、一つのプログラムに於いて実行される
命令の12%から33%にも達するから、分岐上の問題
だけでも性能の劣化が著しい。何故なら、分岐を実行す
る前に不正確な目標を処理すれば、各分岐がパイプライ
ンの実行を遅らせることがあるからである。
この様に分岐上の問題が故に、機器のピーク性能と持続
性能とが一致しなくなる。ピーク性能とは、最大命令処
理量を意味する。この性能を求めるには、アーキテクチ
ャの長所を全て取り入れると共に、その問題点を全て排
除した命令コードを立てる必要がある。持続性能(su
stained performance)とは、機器
に対する通常の負荷の下での処理量を意味する。もし、
パイプラインに泡立ちが起こって、特定の機器の性能が
劣化すれば、分岐がないか、または、あったとしてもご
く僅かしかない作業負荷ないしプログラムを用いること
により、ピーク性能を達成することができる。標準的な
コンピュータには分岐があるので、持続性能はこの分岐
の数の関数になっている。
パイプラインにおける分岐による性能劣化を最小限にす
る方法としては、いくつか提案されている。初期の簡単
な方法では、命令ブリフェッチ機構を分岐の一方向に作
用させている。この方法は、rlLLIAc IVJコ
ンピュータの制御装置に使われている。(この点につい
ては、IEEE Transactions、 196
8年8月号、746−757ページにおける、バーンズ
等による論稿rlLLIAc IVコンピュータ」を参
照のこと。)この方法によれば、誤った方向がプリフェ
ッチされると、バイブラインを一掃して、目標命令で再
起動する必要がある。この方法を簡単に実施するには、
分岐の直後に命令をブリフェッチする必要がある。分岐
をとらない限り、泡立ちは起こらない。しかし、通常の
プログラムでは、時間の60%以上、分岐がとられてい
る。
一方向にプリフェッチを行う代わりに、分岐の双方向に
おける命令をプリフェッチすることも行われている。こ
の方法の変形を用いたシステムとしては、1984年に
マックグロヒル社から出版された、ホワン(Hwang
)等によるrcomputer Architectu
rs and Parallel Processin
g  (コンピュータアーキテクチャと並列処理)」と
、1981年に同社から出版された、コッギ(Kogg
e)によるrArchitecture of Pip
elined Computer (パイプラインコン
ピュータのアーキテクチャ)」に記載されているアイ・
ビー・エム360/91がある。分岐の双方向がプリフ
ェッチされるようになっている。一方の方向における命
令は、分岐が実行されるまでデコードされる。他方の方
向がとられると、デコードした命令は一掃され、プリフ
ェッチされt;他方の方向がデコードされる。
ある時間内に一つの分岐がバイブラインにあれば、分岐
の双方向をプリフェッチすることにより性能を高めるこ
とができる。多岐に亙る分岐を処理しているのであれば
、これらの分岐の考えられる目標を全てプリフェッチす
る必要がある。プリフェッチした分岐の数に基づく性能
の改善の度合いは、分岐間の距離を無視すれば、分岐の
数の平方根に比例する。分岐をコードに分離すると、次
から次へと異なったフェッチ装置にロードされる。
この方法で呼び出されるブリ7エツチは、その量が多け
れば多いほど、命令7エツチ装置を複雑にしてしまう。
プリフェッチされたものの、便われない命令の数を減少
するために、分岐予測を用いることが考えられる。分岐
がどの方向に行われるかの予測は、ダイナミック動作で
もあるしく実行時)、また、静的動作(翻訳時)でもあ
る。幾つかのダイナミック予測法が、1986年6月に
発行されたr Proceed ings of th
e 13th International Symp
osium on C。
mputer Architectures (第13
回国際コンピュータアーキテクチャシンポジウム論稿集
)」の396−403ページにおける、マックファリン
グ等による「Reducing the Co5t o
f Branches  (分岐のコスト減少)」に於
いて説明されている。このダイナミック予測法では、二
つの予測ビットのラインを含むキャッシュらしきテーブ
ルを用いている。このテーブルへのアクセスは、分岐ア
ドレスの低次ビットにより定まっている。二つのビット
で、分岐のアクティビティの最新の履歴が表されている
。この履歴は、分岐がとるであろうと考えられる方向を
予測するのに使われ、その予測結果に基づいて、分岐の
目標のプリフェッチが行われる。−旦真の分岐方向が定
まると、有限状態の機器が履歴ビットを更新する。予測
が正確であれば、分岐のペナルティは、分岐が実行され
るまでデコード段階が中断されているから、lサイクル
のみでおる。
静的予測法では、単一予測ビットにつきコンパイラセッ
トを有するものに関する。このビットはプログラム実行
時に変えられることはない。この様なシステムとしては
、1987年に発行されたrProceedings 
or the 14th International
 Symposium on Computer Ar
chitectures (第14回国際コンピュータ
アーキテクチャシンポジウム論稿集)」の2−9ページ
における、ディチェル等による論稿rBranch F
oldinr; in the CRISP Micr
oprocessor: Reducing Bran
ch Delay to Zero  (CRISPマ
イクロプロセッサに於ける分岐折り畳み:分岐遅延をゼ
ロにする方法)」で説明されているベル研究所のCRI
SPマイクロプロセッサがある。このCRI SPマイ
クロプロセッサは、静的予測ビットを割り当てるのに、
特別のコンパイラを用いている。
静的予測法とダイナミック予測法は、いずれも、ソフト
ウェアにしろ、ハードウェアにしろ、装置を複雑にしが
ちである。いずれにしても、100%の正確度で分岐の
方向を予測することは出来ない。
尤も、性能を高める上で役立っているものではあるが、
プログラムの非連続フローに係わる問題点を解消するに
はほど遠いものである。
分岐予測法の延長として、分岐目標バッファないし分岐
履歴テーブルを用いることがある。この場合、現に分岐
が行きつく目標を記憶するために、バッファないしテー
ブルにはキャッシュらしき構造が用いられいる。このシ
ステムについては、 1987年にアジソンーウェズリ
ー社から出版されたストンによるrHigh−Perf
ormance Computer ArchiLec
ture  (高性能コンピュータアーキテクチャ)」
にて説明されている。そのシステムでは、分岐に出くわ
すと、その分岐の最新のアドレスを記憶しているキャッ
シュへの荷札として、その分岐のアドレスが使われる。
この時点から、他の分岐予測法に於けるのと同一の態様
で手順が進行する。現在の分岐の目標が実際に求められ
ると、キャッシュが更新される。この予測が間違ってい
ると、全ペナルティが分岐にかかるようになっている。
分岐目標バッファの性能は、その容!(サイズ)に左右
されるのは明かであ利、相当大きなものでなければ、所
期の性能を期待することは出来ないことが判明している
。例えば、1970年代にマンチェスター大学に於いて
開発された汎用コンピュータで、8桁分岐目標バッファ
 (eight entry branchtarge
t buffer)を用いたMU−5型コンピユータは
、時間の40%から60%程度、そのバッファに正確な
目標を記憶しているに過ぎないものであった。このヒツ
ト率は、256桁(256entries)の大容量バ
ッファを用いれば93%までにすることができる。
分岐目標バッファを用いることで得られる最大の利点は
、分岐とサブルーチンとを無条件に呼び出すことができ
るところにある。これらの命令の内の一つの目標が記憶
されると、キャッシュの交換などでバッファからライン
を断たない限り、予測は常に正確なものとなる。このシ
ステムは、制御ループ構築分岐を予測する時でも首尾よ
く動作する。ループは一つの目標に対して何回も分岐す
るが、他の目標に対しては一回分岐するのみである。分
岐目標バッファは、−度だけ誤った予測をすることがあ
る。また、1988年7月号のrcomputarJ誌
の47−55ページに掲載されているリルヤによる論稿
rReducing the Branch Pena
lty in Pipelined Processo
rs (パイプライン方式プロセッサに於ける分岐ペナ
ルティの減少法」にて説明されているように、予測した
分岐の後に次の命令をいくつか含むようにバッファを構
築することもできる。ループが小さいと、この分岐目標
バッファは命令キャッシュに似たものになる。しかし、
ハードウェアが複雑になるのは免れず、それも他の方法
によるものと比べれば非常に複雑になり、しかも、10
0%の正確性を期待することは出来ない。
分岐に係わる問題に対処した他の方法では、有用な作業
で泡立ちを満たすためにコード再構築法(code r
ecorganization)を用いている。遅延分
岐法では、コンパイラを用いて通常、分岐の前に起こる
命令で、分岐後のギャップを埋め合わせている。コンパ
イラが分岐を検出すると、その前の命令をサーチして、
分岐演算に係わりのない命令を探す。その際、該当する
命令が検出されると、その命令は分岐の後の遅延スロッ
トにリロケーションされる。遅延スロットの数は、目標
を得るに当たっての遅延量に対応する。分岐の結果がど
うあろうとも、遅延命令は、プログラムに於ける分岐の
前に元より置かれているものであるから、常に実行され
ていなければならない。もし全ての遅延スロットが塞が
れると、分岐の目標が、遅延命令の開始にと伴ってパイ
プラインにいつでも入力されるようになる。その様にす
れば、パイプラインに泡立ちが起こるようなことはない
。遅延分岐法は、IBM 801 (1982年3月に
刊行されたrProceedings on the 
Architectural 5upport for
 ProgramIIling Languages 
and Operating Systems (プロ
グラム言語とオペレーションシステムのアーキテクチャ
支援に関する論稿集)」の39−47ページにおける、
ラジンによる論稿rThe 801 Minicomp
uter(801型ミニコンピユータ)」を参照のこと
。)や、バークレーイRISCI (1981年5月に
刊行されたrProceedings of the 
8th International Symposi
um on Computer Architectu
res (第8回国際コンピュータアーキテクチャシン
ポジウム論稿集)」における、バターソン等による論稿
rR1sc−1:Reduced In5tructi
on Set VLSI Computer (RIS
C−に減少命令セットVLSIコンピュータ)」を参照
のこと。) 、MIPS (1981年10月に刊行さ
れたrProceedings of the CMU
 Conference on VLSI Syste
ms and Computations (VLSI
システムと演算に関するCMU会議論稿集)」における
、ヘネッシー等による論稿rMIPs:A VLSI 
Processor Architecture(M 
I PS : VLS lプロセッサアーキテクチャ)
」や、1986年に刊行されたrProceeding
s of the SpringCOMPCONJの1
26ページにおける、ムツソリス等による論稿rA C
MU5 RLSCProcessor With [n
tegrated System Functions
 (集積システム機能付きCMOS RISOプロセッ
サ)」を参照のこと。) 、HPSpectrum (
1986年に刊行されたrProceedings o
fthe Spring COMPCONJの40ペー
ジにおける、ビルンバウア等による論稿rBeyond
 RISC:High Precision Arch
itecture (RISCを越えて:高性能アーキ
テクチャ)」を参照のこと。)等において用いられてい
る。
遅延分岐法が首尾よく作用するかどうかは、遅延スロッ
トを満たす命令が見つかるかどうかに懸かっている。命
令が一且再リロケーションされると、分岐の開始後にそ
の命令が実行されることから、命令そのものが比較ない
し分岐の結果に影響をもたらすようなことは有り得ない
。例えば、MIPSにおいては、一つの遅延スロットは
時間の70%で満たされる。二番目のスロットは、時間
の25%で満たされるのみである。満たされていないス
ロ・7トは、いわゆる「非動作(no operati
on)」(NOP’S)で満たされ、事実上無駄になっ
ている。また、遅延分岐は、適当なコードをサーチし、
リロケートする機構であるからには、機器のコンパイラ
の構成を複雑にしてしまう等の問題がある。
分岐折り畳み法(branch folding)は、
別のコード再構築法の一つであって、CRISPマイク
ロプロセッサに使われている。この点については、前掲
のディチェル等による論稿や、1987年2月に刊行さ
れたrProceedings of the Spr
ing COMPCONJの91−95ページにおける
、ブレンバウア等による論稿rArchitecLur
al Innovations in CRISP M
icr。
processor (CRISPマイクロプロセッサ
におけるアーキテクチャ革新) J 、1987年6月
に刊行されたrProceedings of the
 14th Annual 1nternationa
l Symposium on Computer A
rchitectures (コンピュータアーキテク
チャに関する第14回国際年度シンポジウム論稿集)」
の309−19べ−じにおける、ディチェル等による論
稿rThe )lardware Archivect
ure of the CRISP Micropro
cessor (CRISPマイクロプロセッサのハー
ドウェアアーキテクチャ)」、1987年2月に刊行さ
れたrProceedings of the Int
ernational 5olid 5tates C
1rcuits Conference(ソリッドステ
ート回路に関する国際会議論稿集)」の34−35ペー
ジにおける、ブレンバウ7等による論稿rA Pipe
lined 32b Microprocessor 
with13KB of Cache MeoIory
 (13キロバイトキヤツシユメモリを備えたパイプラ
イン方式32ビツトマイクロプロセツサ)」などにおい
て詳述されている。
CRISPでは、それぞれのマイクロ命令が2フイール
ドで構成されている水平マイクロコードと、 NEXT
−PCと、代用(Alternate)NEXT−PC
とが使われている。この2フイールドで次の命令のアド
レスを特定するようになっている。命令デコード時に、
ハードウェアが分岐命令を識別して、前のマイクロ命令
のフィールドにその分岐の目標アドレスを[折り畳む(
fold)Jようになっている。ある意味では、それぞ
れの命令は、次の命令のアドレスを含んでいるので、分
岐命令とみなすことができる。
どの分岐方向をプリフェッチすべきかを決めるのに、静
的分岐予測法を用いている。予測が正確であれば、実行
パイプラインが絶え間なく続行する。
この場合、分岐折り畳み作用により分岐を実際に除去で
きる。そうでなければ、命令フェッチパイプラインが一
掃され、正しい目標がフェッチされる。従って、理想的
な状況の下では、CRIPSは、■サイクルにつき複数
の命令を実行することができる。
分岐折り畳み作用を実施するには、複雑な解読装置が必
要になる。誌かも、解読装置を使ったとしても、バイブ
ライン分岐に関する問題点を解消する必要があるので、
性能を高める上で役立つところはない。しかし、コード
量(サイズ)を減少する、それもある場合では著しく減
少することが出来るので、片寄った性能を改善すること
ができる。
要するに、ハードウェアにしても、ソフトウェアにして
も、従来の方法は、命令バイブラインの効率を改善すべ
くなされたものである。プリフェッチや簡便予測法など
の簡単な解決法では、所期の改善を期待することが出来
ない。その他の方法では、性能改善を期待することがで
きるものの、そのためには非常に複雑頻雑なハードウェ
アやソフトウェアを用いざるを得ない。いずれにしても
、従来の方法では、全時間に互って稼働するかどうかと
なると、それを保証するものはない。このことから、分
岐に係わる問題点は、ピーク性能と持続性能との間のギ
ャップに立ちはだかる問題として、依然と残されている
非連続プログラムをもっと効率的に処理することが求め
られている。最もリアルタイムなものには、分岐やサブ
ルーチン呼出(割り込み)などのプログラムフローを変
える命令が含まれている。
例えば、自動姿勢制御装置を備えた航空機に特に適した
航空制御システムでは、常時変化するセンサからの入力
に基づいて、リアルタイム判断を行うことが求められて
いる。即刻判断を要する材料の数が増加しても性能劣化
を来さない演算システムがあれば、それこそ非常に有用
なものである。
大部分のアルゴリズムは時間がかかるし、また、条件ス
テートメント(条件分岐)に基づいている。
これらの分岐が硬ループOight 1oop)に含ま
れていると、性能の劣化は一層助長される。この様なア
ルゴリズムとしては、フラクタルアルゴリズムや、D−
アルゴリズム、PODEMアルゴリズムなどの回路検査
用アルゴリズムなどがある。依存性と接続性とが非常に
区分されている場合、特にリンクリスト(Linked
 Li5ts)を処理するに当たり、シンボリック処理
法がシリアル方式で大いに使われている。プログラムの
非連続フローに伴う性能劣化を阻止することのできるア
ーキテクチャがあれば、この種の処理を高速化すること
ができる。
(発明の要旨) 本発明は、プログラムのフローが非連続であっても、コ
ンピュータシステムのピーク性能と等しい持続命令処理
性能が、バイブライン方式コンピュータシステムから得
られるようにした方法と装置とを提供するのを目的とし
たものである。本発明によれば、本明細書において「重
畳命令群ブリフェッチ式コンピュータ(prefetc
hing Replicated In5tructi
on Stream Machine)J  (以後、
PRISMと略称する。)と呼称する新規なアーキテク
チャにおけるプログラムから、命令フェッチ・解読装置
を重畳(raplicaLion)L、、、かつ、プロ
グラムのフロー特性を取り出すこと(extracti
on)により、前述の目的を達成することができる。詳
述すれば、本発明では、実行すべきコンピュータプログ
ラムから、それを実行するに先立ってプログラムフロー
情報を取り出し、コンピュータプログラムの実行をモニ
タすると共に、コンピュータプログラムの異なった部分
を複数の7エツチ装置に選択的に記憶させることにより
、CPU (中央演算装置)が次の命令を実行するとき
に必要になると思われる命令を全てフェッチ装置に記憶
することで、分岐がとられた命令を有するプログラム部
と、同一分岐命令に対して分岐がとられていない命令を
有するプログラム部とがどのフェッチ装置にも記憶され
ないようにし、その後、CPUが実行する命令の判断に
基づいてフェッチ装置からCPUに、命令が選択的に伝
送されるようにしている。
本発明の前述の目的やその他の特徴などについては、後
述する本発明の好ましい実施例の説明から明らかになる
であろう。
(実 施 例) ■、全体構成 A、概略構成 ホストコンピュータとしての7オンニユーマン型コンピ
ユータ10に実施した本発明のPRISMアーキテクチ
ャを第1図に示す。PRISMアーキテクチャでは、本
明細書において便宜上「グローバルプログラムカウンタ
ーJ (GPCと略称)と称するプログラムカウンター
ないし命令ポインター12を備えた、従来高知のプログ
ラム命令実行用CPU 11を用いている。言うまでも
ないことではあるが、本発明のPRISMアーキテクチ
ャは、ホストコンピュータを用いない、自立型コンピュ
ータにも適用できるものである。PRISMアーキテク
チャは、コンピュータプログラムを実行するに先立って
、そのコンピュータプログラムからプログラムフロー情
報を取り出すパーティションコンパイラ20と、翻訳し
たプログラムとプログラムフロー情報とを記憶するプロ
グラムメモリ30と、翻訳したプログラムの異なった部
分を記憶し、後述のIDU/CPυマイクロ命令バス5
0を介して命令をCPUIIに選択的に伝送する少なく
とも一つ、好ましくは複数のN同一7エツチ装置(この
フェッチ装置の好ましい実施例として、以後、命令解読
装置と称する。)40と、後述の態様でPEC/ I 
DI命命令バッフ0介して命令解読装置(IDU) 4
0に対するプログラムの部分とプログラムフロー情報と
の配分を制御するプログラム実行制御器(PEC)60
とで構成されている。図示するように、プログラム命令
の実行時にオペランド(演算子)やその他の処理すべき
データを記憶させるために、プログラムメモリ30とは
別にデータメモリ80を用いている。
B、パーティションコンパイラ パーティションコンパイラ20を実施する方法としては
、幾つか考えられる。好ましい実施例では、CPUII
が実行するプログラムに対応する翻訳コードのプログラ
ムフローグラフをプログラム翻訳時に発生するコンパイ
ラプログラムがコンパイラ20を構成している。PRI
SMアーキテクチャでは、実行すべきコンピュータプロ
グラムの入力ポイントと分岐目標のロケーションいつい
て予め知っていなければならないが、これらのポイント
がアクセスされるかどうか、また、アクセスされるとす
れば、何時、何処でアクセスされるのか、については知
っていなくてもよい。後述するように、この様な予備知
識は、パーティションコンパイラ20によりプログラム
の目的ないし実行可能なコードから取り出される。その
際、パーティションコンパイラ20は、プログラムの入
力ポイントと分岐目標に基づいてコードをセグメントに
分割する。入力ポイントは、例えば、開始ラインとか、
手順の開始、ないし、手順からの復帰ポイントとかの、
プログラムを開始したり、入力したりするのに用いられ
るコードラインである。本明細書においては、分岐目標
は、分岐に伴う命令、即ち、分岐がとられた命令や分岐
がとられていない命令を意味する。これらのポイントは
、一般にラベルで識別されている。パーティションコン
パイラ20は、各セグメントのサイズと依存性とを決定
する。これらのセグメントの形成方法は種々あるが、但
し、各入力ポイントが識別されていなければならない。
セグメント化のためのパーティションの仕方の二側を第
2a図と第2b図とに示す。第2a図に示した第1方法
では、各分岐の後であって、しかも各ラベルの前にコー
ドがセグメント化されている。他方、第2b図に示した
第2方法では、各ラベルの前のコードだけがセグメント
化されている。
パーティションコンパイラ20によりなされるパーティ
ション作業は、種々のコード相関技法を用いて分岐を処
理する従来のコンパイラがなすパーティション作業はど
でもない。パーティションコンパイラ20は、PEC6
0のために備えて、コードをセグメントに分解するのみ
で、コードの再構築やりロケーションを追跡することま
でやることはない。パーティションコンパイラ20によ
り創生されるプログラムフローグラフは、好ましくはテ
ーブルまたはリンクリストの形でプログラムメモリ30
に記憶される。セグメントサイズ情報は、 PEC60
によるIDU40への異なったセグメントのロードにつ
いての優先度を決めるのに有用である。
別の方法としては、手作業にてパーティションを行って
もよいし、この場合、プログラムフローグラフのデータ
はオペレータがプログラムメモリ30にロードする。
C,プログラム実行制御器 PEC60には、二つの主たる役割がある。即ち、CP
UIIにより実行されているプログラム命令とプログラ
ムメモリ30に記憶されているプログラムフローグラフ
情報とに基づいて適当なときにコンピュータプログラム
をモニタすることと、選ばれt;コードセグメントを選
ばれたIDU40にロードすることである。PEC60
によりセグメントが!DU40にロードされるから、C
PUIIにより次の命令が実行される時に必要になると
思われる全ての命令がIDU40に記憶することで、分
岐がとられた命令を有するセグメントと、同一分岐命令
に対して分岐がとられていない命令を有するセグメント
とがどのIDU40にも記憶されないようになっている
。これは、分岐が実行される時には、目標がデコードさ
れて、何時でも応じられるようにするために必要なこと
である。
一般に、PEC60は、パーティションコンパイラ20
から得られて、プログラムメモリ30に記憶されている
プログラムのフローを追跡する。そのために、PEC6
0はセグメントのフロー情報や、依存性に関する情報、
サイズ情報を用いて、互いに依存し合う二つのセグメン
トが同−IDU40にロードされるようなことが起こら
ないようにしている。また、PEC60は、CPUII
によるプログラムの実行をモニタして、デコードのため
にセグメントをロードする必要があるのは何時かを決定
している。その後、セグメントをIDU40にロードし
て、次の命令が実行される時に必要になりそうな全ての
命令がCPUIIに伝送されるようにしている。
稼働が持続するためには、一つの条件(C01stra
int)が満たされているのが好ましい。即ち、PEC
60のバス帯域幅を大きくとって、命令の長いシリアル
セグメントが実行されていると、CPUIIがそれを実
行する速度よりも早い速度でそのシリアルセグメントが
IDU40にロードされるようにする。
D、命令解読装置 最も基本的な形での各IDU40は主として、PEC6
0により特定の時間に一つだけのセグメントがロードさ
れる7エツチ装置であって、CPUCl lが実行する
のにその常駐セグメントを必要としているのは何時かを
決めるだけである。また、CPU 11による実行に先
立って翻訳した命令をデコードする必要があるようなコ
ンピュータアーキテクチャでは、IDU40は、PEC
60から供給されてフェッチされたセグメントを記憶す
る他に、プログラム実行に必要となる記憶セグメントに
おける命令をデコードする。このようなIDU40の好
ましい構成を第3図に示すが、図示のように、IDU4
0は、PEC60からロードされた命令セグメントを記
憶する局部命令メモリ41と、どの命令が局部命令メモ
リ41から7エツチされてデコードされ、実行に供し得
るのかを表示する局部プログラムカウンタ(LPC)4
2と、局部命令メモリ41に常駐している命令をCPU
IIが読めるような形にデコードする命令デコードパイ
プラインないしデコーダ43と、どの命令セグメントを
デコードすべきかを決定するアドレス装置44と、ID
U40がIDU/CPU命令バス50の制御を行ったり
、或いは、補充するのは何時かを決定するバス捕獲装置
(bus capture unit)45とで構成さ
れている。
局部命令メモリ41は、PEC/IDU命令バス70を
介してPEC60からロードされた命令セグメントを記
憶するものである。PEC60は、セグメント量を知っ
ており、しかも、どのセグメントがID040にロード
されたのかをも知っているので、メモリの容量が命令メ
モリ41の性能に著しい影響を及ぼすようなことはない
。しかし、メモリ41としては、1DU40とPEC6
0との間でセグメントが絶えずロードされたり、ダウン
ロードされたりするのを避けるためにも、常識的な容量
のコードセグメントを複数記憶できる程度の容量を持っ
たものが望ましい。
LPC42は、デコードした命令の、局部でないプログ
ラムアドレスを表示する。この情報は、PEC60から
セグメントと共にロードされる。シリアルコードセグメ
ントを処理している時に、LPC42は、cputiの
GPC12と同期してインクリメントされる。セグメン
トが終ったか、または、必要になっているかのいずれの
時には、アドレス装置44からLPC42に新たな値が
ロードされる。
また、LPC42は、後述のように、バス捕獲装置45
により利用される。
一般に、デコーダ43は、CPUIIに必要な全ての命
令のデコードを行うもので、所望によっては、完全なメ
モリオペランドのデコードを含む、CPUIIに必要な
形に命令をデコードするように構築することもできる。
デコーダ43をしてデータメモリ80にアクセスさせる
ことは、IDU40とCPUIIとが同時にデータにア
クセスしようとすることから、データメモリの競合と結
合(coherency)上に重大な問題が起こる。こ
のような訳で、メモリオペランドのデコード作用は、C
PUIIに任せるようにするのが望ましい。デコーダ4
3としては、解読論理回路43aと、各プログラム命令
に対応するマイクロプログラムを記憶するマイクロ命令
メモリ43bとで構成するのが望ましい。
デコードしたマイクロ命令は、バス捕獲装置45により
制御されるバッファ46に記憶する。
アドレス装置44は、現にデコードされているセグメン
トがデコードされた後にデコードすべきセグメントはど
れかを判定して、他のセグメントのデコード作用を開始
するためにセグメントをスキップすべきかどうかを識別
する。このアドレス装置44としては、対応するICU
の局部命令メモリ41にロードしたセグメントについて
、PEC50から供給された依存性情報を含むセグメン
ト制御テーブル(SCT)が記憶されているメモリ44
で構成するのが望ましい。現在のセグメントが分岐され
たか、または、終結されたのであれば、 CPU11に
命令を供給しティる1DU40は、IDU/CPU命令
バス50の制御を放棄する。SCTは、デコードすべき
次のセグメントを判定するに当たって参照されるように
なっている。各セグメントはそれに対応するIDU40
のみにロードされるのであるから、IDU/CPU命令
バス50に競合が起こるようなことはなく、対応する一
つのIDU40の特定のプログラムアドレス位置に命令
が記憶される。
SCTには、対応するIDU40に常駐している各セグ
メントのベースプログラムアドレスであって、LPC4
0が利用するアドレスも記憶されている。
このベースアドレスは、プログラムアドレス空間におけ
るセグメントの始まりのグローバルアドレスと、対応す
るIDUの局部メモリ41におけるセグメントの始まり
の局部アドレスからなる。ベース局部アドレスは、局部
IDUメモリ41にアクセスするために記憶される。
PEC60は唯一つの1DU40に特定のセグメントを
ロードし、したがって、プログラムアドレスは特定され
ているから、バス捕獲装置45は図示のように全面的に
配分されているのが望ましい。尚、全ての1DU40と
CPUIIとの間のインターフェースを取り持つものと
してのバス捕獲装置45を一つだけにすることも可能で
ある。このバス捕獲装置45としては、GPC12の値
と対応IDUのLPC42の値とを比較する比較器45
aと、LPCの値とGPCの値とが一致すれば、比較器
45aの出力に応答してIDU/CPUバス50を捕獲
するバス捕獲論理回路45bとで簡単に構成したものが
望ましい。
命令バイブラインに泡立ちが起こらないこと、また、持
続性能をピーク性能と等しくなるようにするために必要
はIDU40の数は、ハードウェアのケースステートメ
ンとを考慮しないとすれば、また、GPC12の値をプ
ログラム実行時に演算しない(即ち、分岐作用に対して
プログラムカウンタがない)とすれば、命令の最大フェ
ッチ・デコード時間により限定される。ハードウェアケ
ースステートメントとは、単一の分岐ステートメンとが
、潜在的に無限数の目標を持つことができることを意味
する。ケースの潜在的な目標の数が限られると、IDU
40の所要数は目標の数と共に指数関数的に増加するも
のの、上限数というものが存在することになる。GPC
12の値がプログラム実行時に演算されると、パーティ
ションコンパイラ20は、全ての潜在的な入力ポイント
を知ることができず、また、プログラムを適当に分割す
ることもできなくなる。
E、中央演算装置(CPU) CPUIIとしては、GPC12を備えた7オンニユマ
ンをコンピュータである限り、どのような構成のもので
あってもよい。GPC12は、実行すべきプログラム命
令のアドレスが、適当にデコードされた命令を得るため
に全てのIDU40に伝えられるようにするために必要
なものである。前述のように、データメモリ80へのア
クセスは、メモリの競合や結合に関する問題点を解消す
るためにも、CPUIIにより制御されるようになって
いる。これにより、データメモリのアクセスを高速化す
る!こめに、キャッシュやその他の方法をデータメモリ
80に取り入れることができるのである。
以後、メインPRI SM構成要件の構成とその作用、
及び、CPUIIとの相互関係について説明する。
I+、プログラムのパーティション作用本発明が容易に
理解されるt;めにも、パーティションコンパイラ20
としては、目的と言うよりはむしろ実行可能なコードを
発生する、従って、リロケーションのための手段を必要
としない通常のコンパイラを備えたホストコンピュータ
に用いられているものとして説明する。また、実行すべ
きプログラムの全ての条件ステートメントはバイナリで
表されていること、即ち、条件ステートメントを実行す
ると二つの分岐が潜在的にとられるようになっているも
のと仮定する。しかし、当業者には、パーティションコ
ンパイラ20として、リロケーション(目的)自在なコ
ードパーティション作用を行えるものとしてもよいこと
は容易に想到し得るものである。何故なら、リロケーシ
ョン手段を有するコンパイラと、そうでないコンパイラ
とは、パーティションアドレスにオフセットを追加する
(前者の場合)か、しない(後者の場合)かの違いに過
ぎないからである。同様に、パーティションコンパイラ
20は、非バイナリ条件ステートメントで稼働するよう
にすることも容易にできることである。
本発明の発明者が利用して成功したプログラムパーティ
ションの好ましい方法では、一つのセグメントには一つ
の入力ポイント命令(ステートメント)のみが含まれて
いるに過ぎないものであって、それもそのセグメントの
最初の命令である。
このセグメント化の仕方の一例を第2C図に示すが、第
2a図に示したセグメント化の仕方と類似している。連
続コードは、必要に応じて、例えば、単一セグメントが
長すぎて単一のIDU40の局部命令メモリ41に入り
きれない場合、恣意的にセグメントに分解することがで
きる。このようにアーキテクチャを狭めれば、プログラ
ムをセグメント化するのが容易になる。また、IDU4
0としても、セグメントがスキップされる時期を一層容
易に識別できるようになる。それに、セグメントの終端
が識別されるためには、各命令のコードにセグメント終
端フラグを追加して、セグメントにおける最後の命令に
対してはゼロに設定されるようにするのが望ましい。
パーティションコンパイラ20は、各セグメントにつき
下記の情報を含むテーブルの形で、プログラムフローグ
ラフを発生するように構成されているのが望ましい。即
ち、前述のテーブルに含まれる情報は、セグメント名(
必ずしも必要ではないが、あれば有用)、セグメントの
始端アドレス、セグメントの終端アドレス、それに、実
行すべき条件ステートメントがバイナリであるとすれば
、第1後続セグメント(first potentia
l next segment) (セグメント名か、
またはアドレス)と第2後続セグメント(セグメント名
か、またはアドレス)の情報である。実行すべき条件ス
テートメントはバイナリであるから、各セグメントに続
くものとして多くとも二つのセグメント(分岐がとられ
たセグメントと、分岐がとられていないセグメント)が
あり得る。サブルーチン呼出と無条件分岐の場合、後続
セグメントは一つしかない。
セグメントのネーミングは連続しているか、または、他
の情報を用いてもよい(例えば、セグメント開始アドレ
スはセグメントを定めるのであるから、他の名の代わり
に用いることができる)。
セグメントのフローグラフ情報は、コンパイラ20によ
り、lないし2パスで発生させられる。
尚、目的ないし実行可能なコードから直接情報を取り出
してもよい。その様にしたとしても、従来公知の分解器
(disasse+nbler)はどれでも、プログラ
ムにおけるラベルを見つけることができるものであるか
ら、全ての入力ポイント(セグメント始端アドレス)を
見つけることもできる。しかし、全てのラベルのテーブ
ルがコンパイラのコードジェネレータに存在し、従って
、仕事を複写(dup l 1cation)する必要
はないので、コンパイラそれ自体がプログラムフローグ
ラフを発生できるようにするのが望ましい。
セグメントとしては、下記のように定められているのが
望ましい。
i)ラベルが常に、セグメントの始まりを構成している
こと。
ii)セグメントの終端に、分岐(条件分岐か、または
無条件分岐)、サブルーチン呼出、それに、GPC12
をして、1以外の値だけインクレメントされているとこ
ろから潜在的に変えてしまうその他の命令が含まれてい
ること。(lは、一つのセグメント内での連続する二つ
の命令間のインクレメント値。) iii)  セグメント終端が、たとえこの条件を要し
ない装置があるにしても、セグメント始端の直前の全て
のアドレスを含んでいるとみなされること。
このパーティションについての規定以内で、連続コード
の一部分が、連続コードの中間部におけるラベルへと何
回もジャンプすることでバイパスされるのであれば、そ
のコードは、第1セグメントが唯一つの後続セグメント
、即ち、第2セグメントを有するなりに、そのコードは
互いに別個の二つのセグメントに分解される。どの命令
で制御のプログラムフローが転送されるのかについての
情報は、cpu命令セットから直に求めることができる
iv)  プログラムの最初と最後の命令はセグメント
開始とセグメント終端でなければならない。従って、セ
グメントの開始はどれでも、セグメント終端に続くもの
である。このように、全てのコードが、定義付けられた
セグメントに分解されるのである。また、構成上、一つ
のセグメント内の二つの命令が連続メモリアドレスにな
いと言うようなことは有り得ない。何故なら、このよう
な状況がでるのは分岐からであって、自動的にセグメン
ト終端を定めることになるからである。
V)無条件分岐とサブルーチン呼出の場合、第2後続セ
グメントはなく、従って、この入力は、プログラムフロ
ーグラフテーブルにブランクのまま残される。この場合
、第1後続セグメントが、プログラムの制御が転送され
るセグメントであって、分岐ないし呼出により特異的に
定められるセグメントとなる。条件分岐の場合では、二
つの後続セグメント、即ち、分岐がとられたセグメント
と分岐がとられていないセグメントとがある。その場合
でも、後続セグメントは定義づけられており、テーブル
を完全にするのに分岐セグメントアドレスが使われる。
vi)  rリターン(復帰)」ステートメントの場合
、プログラムにおける複数のポイントからサブルーチン
が実行されるのであるから、後続セグメントの入力は、
統計上解釈された(staLically c。
mpiled)プログラムフローグラフに対してブラン
クのままになっている。後述するように、実行時には、
PEC60が、リターンアドレスのLIFOスタックを
保持するが、そのスタックのトップは、CPU11が現
に実行しているセグメントのプログラムフローグラフに
おける第1後続情報がなければ、「アクティブセグメン
ト」と見なされる。これらのリターンアドレスは、lだ
けインクレメントされたサブルーチン呼出のGPC値と
して定められ、このリターンアドレスの算出はサブルー
チン呼出の時に行われる。従って、リアルタイム動作が
システムのレベルで維持されるのである。
リーロケション自在なコードをパーティションすべきで
あれば、絶対アドレスを名°目上の始端アドレス(この
アドレスに対してホストコンパイラが常にコードを発生
している。)から実際の始端アドレスに変換するローダ
(loader)が必要になる。
このローダは、絶対アドレスに対して変換作用を行う従
来公知のものと変わるとことはないが、致をとるt;め
にプログラムフローグラフにも適当なオフセットを付け
てやる必要がある点で異なるのみである。
真の対GPCアドレス指定モード(true GPC−
relative addressing mode)
は、次の命令、従って、後続セグメントが充分定義づけ
られていないから、命令に使うことができない。時とし
て、この対GPCアドレス指定モードは、コードリロケ
ーションを容易にするために使われる(例えば、「何が
し条件があれば、5アドレス下ヘジヤンプする」とかの
命令が考えられる。)、本発明のPRISMアーキテク
チャでは、後続セグメントの入力ポイントが命令そのも
のにより特異的に定められるから(レジスタの内容など
の稼働時間情報に依存しない)、この種の命令を用いて
いる。言うまでもないことではあるが、全てのセグメン
トリロケーション情報が、前述の場合と同様に当てはま
る。
ホストコンピュータlOの既存のアーキテクチャにコン
パイラが含まれている場合、パーティションコンパイラ
20としては、完全仕立て(7)(fully−fle
dged)コンパイラよりはむしろ、フィルタプログラ
ムからなるものが望ましい。このパーティションコンパ
イラ20の出力は、実行可能なコードを含むファイルと
、前述のようにテーブルの形でプログラムフローグラフ
を含むファイルとの二つのファイルを一組としたもので
ある。これらのファイルは、プログラムメモリ30に記
憶されるIll、プログラム実行制御器 最も基本的な実施形態としてのPEC60は、第4図に
示したように、セグメント配分制御装置61と、IDU
割当メモリ62と、リターンアドレスメモリ63とで構
成されている。制御装置61はGPC12をモニタしな
がら、プログラム命令、従って、現にCPUIIにより
実行されているセグメントを見つけだす。制御装置61
は、プログラムメモリ30に記憶されているプログラム
フローグラフを用いて、どのプログラムセグメントが、
現在のセグメントの実行の後に実行すべき一つか、また
は二つの後続セグメントであるかを決定する。
その後、制御装置61は、プログラムメモリ30から対
応する局部命令メモリ41へとセグメントを複写するこ
とで、各後続セグメントを別のIDU40の局部命令メ
モリ41へとロードする。同時に、対応するICUアド
レス装置44に記憶されているSCTが制御装置61に
より更新されるので、そのIDU40は、セグメントが
ロードされたこと、従って、そのセグメントをデコード
しなければならないことを知ることができる。
セグメントがIDUの間に適切に分配されるようにする
ために、制御装置61はIDU割当メモリ62に、どの
IDU40がアクティブなのか、即ち、どの1DU40
が、CUPIIにより現に実行されているセグメントの
デコードした命令を転送すべくlDU/CPUバス50
を捕獲したか、を識別する情報を記憶させる。この情報
に基づいて、制御装置61が第1後続セグメントのロー
ドのために非アクティブIDUを選択するが、それによ
りそのICUの局部命令メモリ41における以前の内容
が書き換えられる。その後、新たにロードされた後続セ
グメントが常駐するように、メモリ62が制御装置61
により更新され、この動作が、もしも一つしかない場合
に第2後続セグメントに対しても繰り返される。その際
、第2後続セグメントのロードのために選択されたID
Uは、第1後続セグメントが常駐しているICUとは別
のものであり、従って、これら二つの後続セグメントは
並列処理によりデコードされる。
まt;、制御装置61は、前述のように一群のリターン
アドレスを発生するが、これはリターンアドレスメモリ
63のLIFOスタックに記憶される。
プログラムフローグラフに第1後続セグメント入力が含
まれていないと、制御装置61は、LIFOスタックの
トップにあるリターンアドレスを用いて、単一の後続セ
グメントとしてロードすべきセグメントを決定する。
尚、cputiによるセグメントの実行が一旦終わると
、そのセグメントを記憶しているICUはクリアーされ
たものと見なし、新たにセグメントをロードするのに使
われる。同様に、プログラム実行中にセグメントが変わ
れば(GPC12の値が変化することから、制御装置6
1はセグメントに変化があったと判断することができる
。)、バイパスした後続セグメントを記憶しているID
Uが、通常、次の後続セグメントと直ちに書き換えられ
る。
更に、前述の好ましい構成としてのPEC60は、構造
が簡単であり、よくできているので大量の情報がなくて
もよいし、また、既存の技術で容易に実現できる利点が
ある。また、いくらか複雑な構成ではあるが、低速メモ
リ部品や、低速バス、少数のIDU、等を用いていなが
ら、同等のシステム性能を発揮できるPEC60におい
ては、制御装置61として、後述のようにプログラムフ
ローグラフを一層緻密に評価する少なくとも一つのプロ
セッサで構成し、各IDU40に現にロードされている
セグメントはどれかを識別するテーブルをICU割当メ
モリ62に記憶させるようにしてもよい。
大抵の場合、実行中にバイパスされたセグメントがいず
れ必要になることがある。例えば、二つの内部セグメン
トが条件ステートメントに基づいている外部ループの場
合、使われなかっt;セグメントが外部ループの次の書
き込み時に必要になることがある。その場合、少なくと
も一つのプロセッサがプログラムフローグラフを評価す
ることで当該セグメントを識別して、再びバイパスさせ
るといずれ必要になるセグメントを再ロードする必要性
を減少させるためにも、次の命令をロードすべきIDU
を選択する。尚、このような操作には、つの利点と、一
つの問題点とがある。即ち、セグメントが常時デリート
されたり、書き換えられたりするようなことがないので
、セグメントをロードするに当たってバスが混雑するよ
うなことがないのが利点である。他方、それが達成され
るためには、PEC60としては、非常に複雑にならざ
るを得ないのが欠点である。
また、制御装置61は、+D040間での「良」セグメ
ント割当の枠内で「雑セグメント回収(garbage
 collection)Jの機能をも果たす。この雑
信号回収は、下記のようにして行われる。先ず、制御装
置61が、セグメント始端アドレスからセグメント終端
アドレスを引き算することにより各セグメントの大きさ
を判定し、その後、例えばセグメントのサイズに基づい
てCPUIIがそのセグメントに費やす最小時間を判定
する。CPUIIが現に実行しているセグメントの後続
セグメントがIDUに常駐して折れば、制御装置61は
CPUセグメント実行時間を利用して、対応するIDU
アドレス装置44のSCTからIDUに常駐している不
必要なセグメントの情報を除去する。その結果、−散性
の問題をなくすことができ、IC0局部命令メモリ41
がクリアーされるようなことがない。
SCTからセグメント入力を除去すると、対応する局部
命令メモリ41が自動的に解放されて、いつでも使える
状態になる。しかし、このようにすれば、新たなセグメ
ントに対する連続したメモリ空間が非常に小さい場合、
ID0局部命令メモリ41を細分する事になる。このよ
うな問題点は、保持すべき各セグメントを局部命令メモ
リ41における適当な連続メモリ空間にコピーし、その
後、移動された各セグメントのベース局部アドレス(局
部命令メモリ41において)が新たな始端アドレスに向
くようにSCT入力を更新することで、避けることがで
きる。
「良」セグメントをIDUに割り当てると、細分化を最
小限にする事ができ、従って、雑セグメント回収を行う
必要性を小さくすることができることから、そのように
割り当てることが望ましい。
しかし、セグメントの最適割当まで必要ではない(操作
速度を早めることにもならない)シ、また、そのように
しようとは意図していない(問題はNP−完全(NP−
completθ)であるから)。割当における一般的
な問題点は、パッケージ除去を伴うビンバッキングにあ
る。ビンバッキングでは、複数のパッケージ(コードの
セグメント)が複数のビン([DU)におかれる。PR
I SMビンバッキングにおいては、ビンの数が決まっ
ているので、必要ではないコードのセグメントが、除去
されたパッケージと見なされる。例えば第1適合アルゴ
リズム(あまりよくない)ないし最適合アルゴリズム(
なかなかよい)のような従来公知のビンバッキングアル
ゴリズムを用いて、コードのセグメントをICUの適当
な自由空間におくことができる。PEC60は、IDU
に依然と常駐する必要のあるセグメントの終端及び始端
アドレスから自由空間の大きさを算出する。
尚、雑セグメント回収と良セグメント割当とは、経済的
な事情から望ましいものである。しかし、所望によって
は、各IDUを単一のセグメントを記憶するように構成
することもでき、その場合、雑セグメント回収と良セグ
メント割当とは問題にならない。そこで、コストの観点
力楡どのようにすべきかとなると、命令7エツチとデコ
ードパイプラインが各ICUの大部分を占めている、即
ち、それによりコストが嵩むかどうかを目安にすればよ
い。従って、あるセグメントのデコードが終わると、或
いは、バイパスしたがためにあるセグメントは必要では
ないと分かると、新たなセグメントをデコードできるよ
うに、多重セグメントを記憶するのに同−ICUを用い
ることが望ましい。また、前述の雑セグメント回収と良
セグメント割当とを用いれは、システム稼働に必要なI
DLIは少数ですむし、また、メインメモリとしては低
速のものでもよく、その数は、アーキテクチャの特定の
構成に応じて適宜選択すればよい。
最後に、PEC60としては、処理速度を上げるI;め
にも、もう一つの情報を利用できるものが望ましい。そ
の情報とは、セグメント終端を表すプログラムセグメン
トメモリの幅における余分のフラグビットを含む情報と
、現在のセグメントの「ベア」のごときのIDUにおけ
る情報である。ベア情報の場合、PEC60は、そのベ
アの各セグメントに対応するSCTに、セグメントがロ
ードされているIDUの代わりに利用するICUの数を
ロードする。
そこで、IDUがバス50を捕獲してcputiにデコ
ードした命令を供給すると、IDUは「ベア」数を放出
(broadcast)するので、その数がロードされ
たIDUは、他のセグメントのデコードを直ちに始める
ことができる(何故なら、デコードしたセグメントは既
にバイパスされているから)。
IV、中央処理装置 炊いての入手可能なマイクロプロセッサは、チップ上で
命令をデコードするから、CPUIIは、小規模で、規
則的な命令セットや、メモリのアクセスがロード及び記
憶動作のみを介して行われるロード・記憶アーキテクチ
ャなどのごときのR150機能(RISCコンピュータ
としての機能)を幾つか実現していて、他の全ての命令
はレジスタとレジスタとの間で行われるようになってい
る。この点については、1986年にマクミラン出版社
から刊行された、スタリングズによるrCompute
r Organization and Archit
ecture(コンピュータ構成とアーキテクチャ)」
において説明されているRISC装置を参照のこと。
R150機能があるにも拘らず、CPUIIはマイクロ
コードされるのが望ましい。IDU40は、 IDU/
CPt1命令バス50を介してIDUデコードマイクロ
命令メモリからCPUIIへと供給される命令をマイク
ロコードにデコードする。オペランドデコード作用は、
前述のようにデータメモリ80を1DU40から隠して
おくために、CPUIIにより実行されるようにする。
CUPIIがR150機能を持っていることから、この
オペランドデコード作用は、CPU1lが純粋のロード
・記憶装置であるから、レジスタにおけるアドレス位置
をデコードすることに他ならない。
PRISMアーキテクチャに命令セットを用いれば、他
の従来公知の方法と比べて良好な命令パイプライン性能
が得られるのではあるが、選択された命令セットはPR
ISMコンピュータシステムの動作の二つの面に影響を
及ぼす1.即ち、この二つの面とは、命令パイプライン
が常時(満杯開始後)満杯の状態の保たれているかどう
かを「保証」することと、持続命令群性能(susta
ined 1nstruction stream p
erformance)に要ξれるIDU40の数であ
る。しかし、PRISMアーキテクチャには、IDU4
0の数が名目数であったとしでも、稼働性能について固
有の制限があるようなことはない。事実、つだけあった
としても、PRI 5Mコンピュータは正確に稼働して
くれる。但し、まだデコードされていないセグメントに
ついては、命令をフェッチするのに要するメインメモリ
アクセス時間と命令デコード時間とは、必要なだけかけ
なければならないようである。
GPC値が、例えばレジスタ・間接アドレスモードない
しハードウェアケースステートメントを用いてプログラ
ム内で算出できるのであれば、これらの命令のGPC1
2の値は先験的に知ることはできない。従って、この種
の命令については、プログラムの対応する入力ポイント
を予め決めておくことはできないし、命令をプリフェッ
チしたり、デコードすることでさえ、その必要が生じて
もできない。それ故、このような命令のブリフェッチに
おける制限事項は、PRI SMアーキテクチャの性質
でなくて、むしろ全てのアーキテクチャに見られること
である。従って、GPC1Z値のレジスタ・間接算出と
ハードウェアケースステートメントとは、PRISMア
ーキテクチャの命令セットを作成するに当たって、でき
るだけ避けるのが望ましい。
尚、コード割り当てないしコンパイラの設計を容易化す
るために、定数だけGPC12を変えてしまう命令を時
折、命令セットに用いることがある。
このような命令は、一定のオフセットによりその命令に
対するプログラムの入力ポイントが特異的に定められ、
従って持続性能を維持できるので、PRISM命令セッ
トに格納することができる。前述のように、コード割当
の場合では適当なローダを用いるべきである。また、デ
ータアクセスについて、間接アドレスモードとGPC値
の間接算出とは、はっきり分けておかなければならない
。持続性能は命令パイプラインに当てはまることである
ので、データアクセスに用いる間接アドレスモードはど
のようなものでもよい。
PRISMシステム動作に影響をもたらす命令セットの
構成の第2面は、アーキテクチャを実施するに当たって
のコストの問題である。必要なIDL+40の数は、命
令σと命令βとが順次実行される対の命令q、βの内で
の命令αの最大実行時間中における最大フェッチ時間と
最大命令デコード時間との和の最大関数(ceilin
g function)に指数関数的に依存する。指数
の底は、互いに後続する対の命令につき、後の命令の7
エツチ・デコードサイクルは、最初の命令の実行サイク
ルが終わる前に終わっていなければならないことから、
条件ステートメントの考えられる分岐の数であり、しか
も、後続命令の数によって指数がカバーすべき範囲が定
まる。例えば、4つの結果が考えられる条件ステートメ
ントを有する命令セットの場合、この種の一群の命令に
ついては4個の「第1後続命令」、16個の「第2後続
命令」などが、必要なレベルだけ掘り下げてフェッチさ
れ、かつ、デコードされなければならない。この場合で
のレベルは、実行時間に対する7エツチ・デコード時間
の関係に応じて定まる。IDU40の所要数と命令セッ
トとの相互関係の結果、好ましいPRISM命令セット
には下記の特性があるのが望ましい。
A)全ての条件ステートメントがバイナリであって、最
悪の場合に2個の「後続命令」のみがあるようにする。
B)命令セットにおける7エツチ・デコード作用から命
令実行までの時間が釣り合っていること。
特に、実行時間が長い命令(例えば、浮動点演算)は構
わないが、実行時間が非常に短いか、または、はとんど
ない命令(例えば、非稼働)は避けるべきである。従っ
て、適用し得る命令セットとしては、PI?ISMシス
テムを実施するのに利用される特定のコンピュータアー
キテクチャの作用要件を満たすものである。
共通長の命令と最少数のフォーマットとを用いることに
より、命令デコード作用とパイプライン作用とを簡単な
ものとすることができる。本発明により開発した好まし
い命令セットの一例を第6a図から第6d図までと、第
7a図から第7w図までに示す。図示のように、命令セ
ットは、23個の異なった命令からなり、各命令は24
ビツト長である。命令アドレス空間は、 64K x 
24ビツトメモリの場合、16ビツトに定められている
第6a図から第6d図において、命令セットには4つの
異なった7す−マット、即ち、MOVE/LOAD/5
TORE (第6a図) 、PRO(JAM FLOI
II C0NTR0L (第6b図) 、ALU 0P
ERATIONS l (第6c図) 、ALU 0P
ERAT夏ONS II (第6d図)がある。従って
、ALUの動作が、4条件コードピットを設定する。゛
条件コードビット、共プロセッサ(coprocess
or)ないし多重プロセッサ(multiproces
sor)の命令、割り込みないしトラップ旭理、または
、バイトからワードへの符号延長(sign exte
nsion)の操作(ロード、記憶、改変)をサポート
する命令はない。
第7a図から第7b図には、各命令のフォーマットが図
示されているが、各命令に対する実行動作、シンタック
ス、フォーマット変数、並びに特定の特性については、
下記のテーブルから明かである。
LOAD(第7a図) 動作: (Rsgc)の内容で特定されるアドレスのデータメモ
リ値を目的レジスタ(R□IT)にロードする。
シンタックス: LOAD  Roast、(Rsic)フォーマット変
数: T :     byte(0) word(1) R□C: データメモリアドレスを有するレジスタ RousT:データメモリ内容を受けるレジスタ 特徴: 1.1ワードをローディングする場合、最下位アドレス
ビットは0にセットする。
2.1バイトをローディングする場合、レジスタの上方
バイトは影響を受けないで保持される。
3、オペランドの衝突を防ぐため、ロード命令は2サイ
クルで完結される。
5TORE(第7b図) 動作: ソースレジスタ(Rsmc)の内容を目的レジスタ(R
DEST)の内容で特定されるアドレスのデータメモリ
に記憶する。
シンタックス: 5TORE  R□。、(RD□T) フォーマット変数: T :     byte(0) word(1) R□C: 記憶すべきデータを保有するレジスタ R□sT:データメモリアドレスを保有するレジスタ 特徴: 1.1ワードを記憶する場合、最下位アドレスビットは
Oにセットされる。
MOVE  (第7c図) 動作: ソースレジスタ(Rs++c)の内容を目的レジスタ(
Rotsア)に移動する。
シンタックス: MOVE  Romst、Rsuc フォーマット変数: R□C: データメモリアドレスを保有するレジスタ R,。T:データメモリ内容を受けるレジスタ 特徴: ワード移動のみがサポートされている。
5WB(第7d図) 説明: ソースレジスタ(Rsmc)のバイトを交換し、目的レ
ジスタ(Rols□)に記憶する。
シンタックス: SWB  Ro区ST・RSRC フォーマット変数: Rsi+c:  変換すべきバイトを保有するしジスタ RDEsT:交換されたバイトを受けるレジスタ MOVEI(第7e図) 説明: 即値(immediate value)を目的レジス
タ(Ro、□)に移動する。
シンタックス: M OV E I  Roist。
# IMMED I ATE フォーマット変数: T :     byte(0) word(1) IMMED IATE:記憶されるべき即値Ro、sT
:データメモリ内容を受けるレジスタ 特徴二 バイト動作に対しては、即値データの下位8ビツトは、
上位8ビツトに影響を与えることなく、目的レジスタの
下位バイトに記憶されJCC(第7f図) 説明: 状態コードに従い、即値アドレスをGPC12にロード
する。
シンタックス: JCC&ADDRESS フォーマット変換: ADHESS:次の命令のため16ビツト即値アドレス cc:     PC値が変ったかどうかを判断するた
めの状態コード EQ/Z  (OO00) NE/NZCOOO1) LT    (0010) GE/NL(0011) GT    (0100) LE/NG(0101) VC(0110) vs    (0111) PL     (1000) Ml     (1001) L○    (1010) Hl     (loll) T/MP  (1111) 特徴: 1、レジスタ無し、又はレジスタ間接ジャンプがサポー
トされる。
2、アセンブラにおいて、即値アドレスの代りにタグを
用いてもよい。
JSR(第7g図) 動作: (RDIIT)の内容で特定されるアドレスに現在のG
PC12の値を記憶し、即値アドレスをGPC12にロ
ードする。
シンタックス: J SRR1)13T、&ADRESSフォーマット変
数: ADRESS:次の命令のための16ビツト即値アドレ
ス RDI3アニスタックアドレスの頂部を保有するレジス
タ 特徴: 1、Roxsアの内容を操作して、スタック構成をサポ
ートする。
2、アセンブラにおいて、即値アドレスの代りにタグを
用いてもよい。
RET(第7h図) 動作: (Rs++c)の内容で特定されるアドレスがらGPC
12をロードする。
シンタックス: RET  R□0 フォーマット変数: Rsac:  P Cのアドレスを保有するレジスタ 特徴: 1、R□0の内容を更新してスタック構成をサポートす
る。
2、データメモリアクセスのため、この命令を実行する
のに2サイクル必要とする。
3.正しい動作を保証するため、メモリ内のGPCl 
2の値は変えるべきではない。
ADD(第71図) 動作: 2つのソースレジスタ(Riic)の内容を加え、その
結果を目的レジスタ(Rags工)に記憶する。
シンタックス: A D D Rotsr−Rsi+c、Rsacフォー
マット変数: T:     byte(0) word(1) RDIST’データメモリ内容を受けるレジスタ RsRC:  オペランドを含むソースレジスタ ADDC(第7j図) 動作: C状態ビットの値に2つのソースレジスタ(Rsac)
の内容を加え、その結果を目的レジスタ(RD。T)に
記憶する。
シンタックス: A D D CRotst、 Rsacフォーマット変
数: T :     byte(0) word(1) Roast:結果を記憶するだめの指定レジスタ Riic:  オペランドを含むソースレジスタ ADDI(第7に図) 動作: ゼロ延長された即値にソースレジスタ(R,、C)の内
容を加え、その結果を目的レジスタ(RoEst)に記
憶する。
シンタックス: A D D I  Roust、 Rsac。
# IMMEDIATE フォーマット変数: T :     byte(0) word(1) Rotsア:結果を記憶するための指定レジスタ R3IC:  オペランドを含むソースレジスタ IMMEDIATE:ゼロ延長された即値5UB(第7
1図) 動作: ■のソースレジスタ(R□c2)の内容を他のソースレ
ジスタ(Rsac 1 )の内容から引算し、その結果
を目的レジスタ(R□ST)に記憶する。
シンタックス: SUB  Roast、R51cl、Rstc2フォー
マット変数: T :     byte(0) word(1) Ro□T:結果を記憶するための目的レジスタ Rsac l :オペランドを含むソースレジスタ Riic2:減数を含むソースレジスタ5UBC(第7
m図) 動作: C状態ビットを借ビットとして用い、−のソースレジス
タ(Riic2)の内容を他のソースレジスタかも引算
し、結果を目的レジスタ(R□、1)に記憶する。
シンタックス: SUB  Roxsi、R51cl、Rs−c2フォー
マット変数: T:     byte(0) word(1) RDKSア:結果を記憶するための目的レジスタ Rs*cl:オペランドを含むソースレジスタ R□cl:減数を含むソースレジスタ SUB I(第7n図) 動作: ゼロ延長即値の内容をソースレジスタ(Rsj+c)か
ら引算し、結果を目的レジスタ(Roast)に記憶す
る。
シンタックス: S U B I  Roxsy、(Rsac)。
#rMMEDIATE フォーマット変数: T:     byte(0) word(1) RDlsア:結果を記憶するための目的レジスタ IMMEDI ATE:ゼロ延長された即値Rsac:
オペランドを含むソースレジスタ COMP(第70図) 特徴ニ ーのソースレジスタ(Rs++c2)の内容を他のソー
スレジスタ(R□C1)から引算し、それにより状態コ
ードをセットする。
シンタックス: COMP  Rsvcl 、R5RC2フォーマット変
数: T:     byte(0) word(1) R□c1:オペランドを含むソースレジスタ R□c2:減数を含むソースレジスタ 特徴: 動作の結果はレジスタに書込みに戻されない。
COMP IC第7p図) 動作: ゼロ延長即値の内容をソースレジスタ(R□C)から引
算し、それにより状態コードをセットする。
シンタックス: COMP I  R5ffic、# I MME D 
I ATEフォーマット変数: T :     byte(0) word(1) IMMEDIATE:ゼロ延長された即値R3IC: 
 オペランドを含むソースレジスタ 特徴: 動作の結果は、レジスタに書込みに戻されない。
X0R(第7q図) 動作: 2つのソースレジスタ(Rsmc)の内容で、論理排他
的ORをとり、その結果を目的レジスタ(R4,T)に
記憶する。
シンタックス: X ORRDIST、RsRc、 Rsacフォーマッ
ト変数: T :     byte(0) word(1) Roast:結果を記憶する目的レジスタR□C: オ
ペランドを含むソースレジスタ OR(第7r図) 動作: 2つのソースレジスタ(R□C)の内容で論理ORをと
り、その結果を目的レジスタ(RDoT)に記憶した。
シンタックス: ORRDIIITI RSIC+ Rsm。
フォーマット変数: T:      byte(0) word(1) Roast:結果を記憶する目的レジスタR□C: オ
ペランドを含むソースレジスタ AND(第7s図) 動作: 2つのソースレジスタ(Rsmc)の内容で論理AND
をとり、その結果を目的レジスタ(Roi+sア)に記
憶する。
シンタックス: A N D  Rous丁、Rsac フォーマット変数: T :     byte(0) word(1) R□、1:結果を記憶する目的レジスタR$ilC: 
 オペランドを含むソースレジスタ 5HL(第7を図) 動作: ソースレジスタ(R8うC)の内容を一桁左に数学的に
シフトし、最下位ビットを0にセットする。
そして、その結果を(R(4ST)に記憶する。
シンタックス: S HL  RDIST、Rsac フォーマット変数二 T:     byte(0) word(1) RDt$ア:結果を記憶する目的レジスタR3lIC:
  オペランドを含むソースレジスタ 5HR(第7u図) 動作: ソースレジスタ(Rs*c)の内容を一桁右に数学的に
シフトし、前回の値を最上位ビットに保持する。そして
、その結果を(RoxsT)に記憶する。
シンタックス: SHRRoist、Rs++c 7オーマツト変数: T:     byte(0) word(1) R^、ア:結果を記憶する目的レジスタR□C: オペ
ランドを含むソースレジスタ ROL(第7V図) 動作: 最下位ビットが前回の最上位ビットにセットされるよう
ソースレジスタ(R5ac)の内容を一桁左に回転する
。そして、その結果を(Roast)に記憶する。
シンタックス: ROL  Rogsv、R51c フォーマット変数: T:     byte(Q) word(1) Roast’結果を記憶する指定レジスタRs*c: 
 オペランドを含むソースレジスタ ROR(第7w図) 動作: 最上位ビットが前回の最下位ビットにセットされるよう
ソースレジスタ(Rs++c)の内容を一桁右に回転す
る。そして、その結果を(Rotsア)に記憶する。
シンタックス: RORRo−st、 R5ac 7オーマツト変数: T :     byte(0) word(1) Ro、st:結果を記憶する目的レジスタR3IC: 
 オペランドを含むソースレシス上述したごとく、CP
UIIは、GPC12値を放出し、それは、実行される
べき命令のプログラム(マイクロ命令ではない)アドレ
スに対応し、IDU/CPU命令バス50を介して、全
IDU40に送られる。IDUバス捕捉ユニット45の
コンパレータ45aが、そこに設けたIDUにより命令
がデコードされたことを示せば、バス捕捉ロジック45
bが動作しIDU/CPUバス50を捕捉し、その命令
のためのマイクロプログラムをCPUIIにおくる。従
って、CPUIIは、実行された命令が受けられている
ので、マイクロプログラムの最後のマイクロ命令がある
まで、GPC12を変えることはできない。
V、命令r’ココ−ィングユニット 第3図に示すIDU40の好ましい実施例の主な機能は
、ローカル命令メモリ41に記憶されている命令をCP
UIIが必要とするマイクロコードに選択的にデコード
し、それによりCPUIIに絶え間無くマイクロ命令を
与える。各IDU40は、基本的には、メモリ44aに
記憶されたSCTに含まれるセグメントデータに従って
選ばれたセグメントのために、ローカル命令メモリ41
から命令を読み取り、その命令をデコードし、それを必
要に応じてCPUIIに送る。
ローカル命令メモリ41にロードされた命令(エンドセ
グメントフラッグを含む。)や、メモリ44aのSCT
にロードされたセグメンテーション情報や、デコーダー
マイクロ命令メモリ43bにロードされj;マイクロ命
令記憶や、これらメモリのt;めの制御信号が、PEC
/IDUバス70を介してPEC60からIDUの種々
のメモリにロードされる。
上述したごと<、SCTの各ラインは、プログラムに関
する情報や、セグメントのローカルアドレスや、現在の
セグメントが終了していたりスキップされていれば次の
セグメント情報を与えるためのSCTテーブルアドレス
を含む。
SCTからデコードされるべくセグメントが最初に選択
されれば、セグメントのスタート命令のIDLIローカ
ルメモリ41内のローカルアドレスは、ローカルアドレ
スカウンタ(LAC)44bにロードされると共に、そ
のプログラムアドレスは、LPC42にロードされる。
LAC44bは、ローカル命令メモリ41から命令を読
むために用いられる。この命令は、デコーダ43のデフ
−ドロシック43に加えられ、デコーダ43は、マイク
ロ命令メモリ43bからその命令に対応するマイクロプ
ログラムを見つけ出す。
更に詳述すれば、レジスタや、即値オペランド(OP)
や、命令のフンデションコードフィールドが、正しいマ
イクロ命令フィールドに配置されている。この再構成は
、命令の種類にもとずき、算術ロジックユニット(AL
U)、メモリまたは他の情報であるかどうか、にもとす
いて行なわれる。
OPコードはマイクロ命令メモリ43bをアドレスする
ために用いられる。マイクロ命令を有するマイクロプロ
グラムは、正しいマイクロ命令フィールドに加えられる
これらマイクロ命令メモリ43bからのマイクロ命令は
、バッファメモリ46に送られる。LPC42のアドレ
ス値はCPUIIから放出されるGPC12のアドレス
値と比較される。これらの値が一致すれば、特定のID
U40がデコードした命令をCPUIIが要求したこと
を示し、バス捕捉ユニットの比較器45aがrI DU
活動」信号を出力し、それにより、バス捕捉ロジック4
5bがイネーブルになる。これにより、IDUがIDU
/CPUバス50を捕捉し、バッファ46に保持されて
いたマイクロ命令をCPUIIに送る。
セグメント命令がIDU40によりデコードされる毎に
、IDU内にあるLAC44bやLPC42が、デコー
ダ43から出力される制御信号によりインクリメントさ
れ、セグメントにおける次の命令をアドレスする。セグ
メントが終了または不必要になれば、以下に説明するよ
うに、更に別の制御信号が出力され、アドレスユニット
44が、その時に存在する情報に基づいて、次にデコー
ドされるべきセグメントを選択する。
IDUクロック 各IDU40は、外付けの3相クロツク(図示せず)に
より、良好に動作される。+11.i、−3で表される
クロック信号の各相において実行されるIDU動作は、
第5図に1デコ一ドサイクル分タイミングチャートで示
されている。図示するごとく、各IDUの動作はパイプ
ライン化(前回の命令がデコーディングを実行している
間に、次回の命令が命令メモリから読み出される方式)
%式% ローカルプログラム及びローカルアドレスカウンタ LPC42及びLAC44bは共に4−ビット2進アツ
プ/ダウンカウンタより構成される。第5図において、
LAC44bは、時間tcにおいてクロック信号−3の
立ち上がりエツジでクロックされ、LPC42は、時間
tfにおいて、クロック信号−2の立ち下がりエツジで
クロックされる。
LAC44bは、ローカル命令メモリ41のアドレスド
ライバにアドレスを与える。LAC44bは、SCTの
ローカルスタートアドレスフィールドから開始データを
ロードする。ロードイネーブル信号は、セグメントスキ
ップ信号、前回の命令に含まれていたセグメントエンド
フラッグ、及びリセット信号により制御される。これら
の信号のいずれかが活性化されていれば、LACロード
は実行される。カウントイネーブルは、新しい命令及び
IDUアクティブ信号により行なわれる。
LAC44bは、IDUがアクティブで、新しい命令信
号がアクティブになれば、カウントアツプされる。しか
しながら、ロードが実行されるには、必ずしもこのカウ
ントイネーブルがアクティブである必要がない。
LPC42はSCTのスタート命令アドレスフィールド
からその開始データをロードする。SCTは、間も無く
デコードされる命令に基づいて読まれる一方、LPC4
2はデコードを行っI;ばかりの命令のアドレスを含む
べきであるので、この初期化データは、LPC42に正
しい時刻に到着するよう一連のラッチ(図示せず。)を
通過するよう構成されている。プログラムアドレスデー
タが、−度メモリ44aから取り出されると、バス捕捉
比較が行なわれた後、それはLPC42にロードされる
。データは、デコーダ43から出力されたセグメントエ
ンド信号によるイネーブル化、IDUアクティブ信号、
セグメントスキップ信号及びリセット信号により、LP
C42にロードされる。
なお、ここで用いられるセグメントエンド信号は、命令
に盛り込まれたセグメントエンドフラッグとは別のもの
で、デコーダ43によりセグメントエンドフラッグによ
り引かれたもので、以下に詳しく説明する。LPC42
のロードは、スキップまたはリセットが行なわれる場合
、またはIDUがアクティブである間にセグメントが終
わる場合にイネーブルにされる。IDUがアクティブで
あり、かつCPUIIに送られたマイクロ命令セットが
プログラムカウンタ切り替えを示した場合にLPC42
はカウントアツプされる。
デコーダ デコーダ43は、次の要件を満たさなければならない。
m−レジスタオペランド、即値オペランド及び命令の状
態コードフィールドをマイクロ命令の正しいフィールド
に送る。
m−マイクロ命令メモリ43bのアクセスを制御し、正
しいマイクロプログラムをCPUIIに送る。
一−LPC42切り替え、新しい命令要求並びにセグメ
ントエンド及びセグメントスキップ制御信号の出力。
デコードされた命令用のマイクロプログラムの泣よ マイクロ命令メモリ43bのローディング、アドレシン
グ、及び一般動作は、ローカル命令メモリ41のそれら
と同じであるが、ただ、出力イネーブル信号及び出力の
ラッチングにおいて異なる。
マイクロ命令メモリ43b用の出力イネーブル信号は、
クロック信号−1により制御される。メモリ43bの出
力については、後で詳述する。
第8図に示すように、デコードロジック43aは、入力
レジスタ、及び入力された命令の最上位3ビツトによっ
て表される動作の種類(ロード/記憶、記憶、ALU等
)を表す制御信号を出力する制御信号発生器431;入
力された命令をフィールド上で再構成するため、制御信
号発生器431及び入力レジスタからのALU制御信号
に応答するマルチプレクサユニット432;並びにマイ
クロ命令メモリ43bのアドレスを決定するマイクロプ
ログラムカウンタ433aを有する従来型のマイクロプ
ログラムコントローラ433を有する。命令のデコード
準備が整うと、コントローラ433用のデータラインに
OPコードが送られる。
第6a−6b図に示すように、ALU命令用のOPコー
ドは、−層長くなっており、ALU制御信号はマルチプ
レクサユニット432への入力として用いられる。もし
、ALtJ信号がアクティブになれば、マルチプレクサ
ユニット432は、OPコードの最下位4−ビットをコ
ントローラ433に送る。逆に、そうでなければ、これ
らのビットはゼロにセットされる。
マイクロプログラムの最後のマイクロ命令は、新たな要
求信号(アクティブ・ロー)を含み、それにより新しい
命令が必要である事が示される。それがコントローラ4
33により受信されれば、コントローラデータライン上
の入力は入力レジスタ及び制御信号発生器431にロー
ドされる。従って、新しい命令要求信号を受けると、次
の命令のOPコードは入力レジスタ及び制御信号発生器
431にロードされる。
各マイクロ命令には又コントローラ433により次に実
行されるべき命令が含まれると共に、各マイクロプログ
ラムはジャンプ命令で終了し、コントローラ433をそ
のレジスタにロードされた位置にまでジャンプさせ、そ
して、このアドレスをコントローラ433のマイクロプ
ログラムカウンタ433aにロードする。IDUの場合
、このデータは、次の命令におけるマイクロシーケンス
ペースアドレスとして用いられる。マイクロプログラム
に一つ以上のマイクロ命令があれば、最終以外のマイク
ロ命令は、「継続」命令を含み、それによりコントロー
ラ433は内在のプログラムカウンタ433aをインク
リメントし、次のマイクロ命令をアドレスする。
IDU40が、非アクティブになれば、ジャンプ命令は
常にコントローラ433に送られ、たとえアクセスがな
されていなくても、それによりIDUがセグメントを切
り替えることを許可する。
セグメントがスキップされれば、たとえば、スキップさ
れたセグメントが存在するIDUは、たとえそれがCP
UIIによりアクセスされていなくても、新しいセグメ
ントのデコード開始が可能とされる。
セグメント制御テーブル 上述したごとく、アドレスユニット44のメモリ44a
に記憶されたSCTは、IDUのローカル命令メモリ4
1にロードされるセグメントの位置に関する全ての情報
や、これらのセグメントの関連性に関する情報を有する
。SCTには、5つのフィールドがある。
m−スタート命令アドレスーLPC42により用いられ
るセグメントのスタート用の16−ピッドプログラムア
ドレス。
m−スタートローカルアドレスーLAC44bにより用
いられるセグメントのスタート用のビットローカルアド
レス。
m−ネクスト・セグメント・オン・エンド−5CTに戻
される4−ビットアドレスで、現在のセグメントの終端
に続いてデコードされる次のセグメントを特定するもの
m−ネクスト・セグメント・オン・スキップ−5CTに
戻される4−ビットアドレスで、現在のセグメントがス
キップされれば次にデコードされるセグメントを特定す
るもの。
−−IDOペアナンバー−セグメントがスキップされた
かどうかを判断するために用いる4−ビットフィールド
。この機能は次の項において説明する。
SCTに入力されたセレクト信号の7オーマツトは、第
9図に示されている。
制御信号発生 幾つかの制御信号は、デコーダ43において発生される
。新しい命令要求信号は、マイクロ命令自信に盛り込ま
れている。LPC42切り替え信号は、LPCロードか
ら引き出されマイクロ命令制御ラインをインクリメント
する。これらの制御ラインのいずれかがアクティブにさ
れていれば、LPC切り替え信号もアクティブにされる
セグメント・エンド・制御信号もまた、制御ロジック4
50において発生される(第8図)。上述したごとく、
命令に含まれるセグメントエンドフラッグは、たとえば
LAC44bや、SCTメモリ44a等の命令メモリア
クセスに関するIDU成分により用いられる。各命令は
、その実行を完結するためにはいくつかのマイクロ命令
を必要とするため、このフラッグ自身ではマイクロ命令
に従属した成分、たとえばLPC42やバス捕捉ロジッ
ク45b1にセグメントの終端を示すには不十分である
。これらの成分は、セグメントの最後のマイクロ命令が
いつデコードされたかを知る必要がある。従って、命令
に含まれるセグメント・エンドフラッグビットは制御ロ
ジック450に含められ、各命令の最後のマイクロ命令
に含まれる最後のマイクロ命令ビットがセグメントの終
端の状態を検出し、セグメント・エンド制御信号を出力
する。IDU40がパイプライン構成になっているので
、セグメントの終端の状態が実際に起こるのは、セグメ
ントの最後から2番目の命令をデコードしている間であ
る。
セグメント・スキップ信号の発生はIDUペアの数によ
る。IDU/CPUバス50は、全ID0間を結ぶID
U/IDUバス50aを含む。。
IDU/IDUバス50aの出力は、IDU/CPUバ
ス50の出力を制御する、同じバス捕捉ユニット45に
より制御される。
好ましい実施例では、実行されている分岐に続く各セグ
メントに対しては、2進数の分岐のみが認められている
ので、スキップが行なわれたそのペアの他方のセグメン
トがある。第1O図は、セグメントペアが決定される様
子が示されている。
セグメントが分けられ、異なったIDUに宛てがわれれ
ば、セグメントのペアが宛てがわれたIDUの認識番号
がセグメントのSCT情報に含まれる。セグメントがC
PUIIにおいて必要とされ、そしてセグメントが存在
するIDUがバス50を捕捉すれば、その(アクティブ
な)IDUもまた、セグメントペアのセグメントのID
U番号をIDU/IDUバス50aを通じて放出され、
開放・コレクタロジックを用いて全てのIDU40に伝
えられる。非アクティブなIDUは、IDU/IDU/
<ス50aをモニターする。非アクティブIDUが自分
自身の番号をIDU/IDUバスに見付けると、それが
目下デコードしたセグメントがスキップされたことを認
識し、セグメント・スキップ信号を出力する。すなわち
、各非アクティブIDU40はその認識番号(それらは
IDU間において配線されてい+)をアクティブrDU
40により放出されたペアの番号と比較する。番号が一
致すれば、一致が行なわれた非アクティブIDU40に
よりセグメント・スキップ信号が出力され、IDUによ
り開始され協動するSCTに記憶されたネクスト・セグ
メント・オン・スキップデータで決定される次のセグメ
ントのプリ7エツチやデコードが行われる。
Vl、IDUの変形例 IDUは、正しく動作している。IDU実行の各特徴の
テストに関するものである。IDUがテストをバスすれ
ば、完全なPRI SMシステムに接続可能となる。テ
ストは次の通りである。
1、デコーディングテスト (a)簡易デコーディング・・・一つの命令に対し一つ
のマイクロ命令がある場合。
(b)全クラスの命令をデコーディングする。
(c)複合デコーディング・・・一つの命令に対し複数
のマイクロ命令がある場合。
2、セグメントのテスト (a)他のIDUにおいてデコードされたセグメントに
よって分離される二つのセグメントをデコードすること
(b)二つの連続セグメントをデコードすること。
(c)2番目のセグメントがスキップされている場合の
3セグメントをデコードすること。
3、動作テスト・・・上述のテストを種々組み合わせた
もの。
デコーディングテストにより、いかなる種類の命令であ
ってもデコード可能であるかどうかを各IDUについて
テストする。命令メモリには、命令の一つのセグメント
がロードされる。SCTメモリ44aには、セグメント
情報の1ライン分がロードされ、テスト下におけるID
UシステムのIDU番号とは別の任意の番号でIDUベ
ア番号をつける。これは、スキップ信号が決してアクテ
ィブにされないことを保証するためである。最初のテス
トにおいては、マイクロ命令メモリ43bは各メモリブ
ロックのベースアドレスに一つのマイクロ命令がロード
される。これらのマイクロ命令の新しい命令要求フィー
ルドはアクティブにされ、制御器43aの命令はジャン
プである必要がある。
テストセグメントのスタートプログラムアドレスと一致
するGPC12の値はバスに与えられ、クロック信号I
lの立ち上がりエツジに応答してインクリメントされる
。バス50はモニタされ、マイクロ命令が正しいシーケ
ンスで与えられているかを判断する。2番目のテストは
、3種全ての命令、すなわちローディング、ローディン
グ/記憶、記憶、の集合体をローカル命令メモリ41に
ローディングする場合に関する。バス50はモニタされ
、レジスタ及び即値オペランド及び状態コードフィール
ドが正しいかどうかを判断する。
第3番目のデコーディングテストは、IDUが複合セグ
メントをデコード出来るかどうかを判断するテストであ
る。マイクロ命令メモリ43bには、l命令に対し、一
つ及び一つ以上のマイクロ命令のマイクロプログラムが
ロードされる。デコーダ43により用いられるマイクロ
命令フィールドは、上述した基準に基づいてセットされ
る。マルチプルマイクロ命令のマイクロプログラムのプ
ログラムカウンタインクリメント及びプログラムカウン
タロードフィールドは、そのマイクロプログラムの最後
のマイクロ命令に達するまではアクティブにされること
はない。再述すれば、マイクロ命令は正しい動作が行な
われるようモニタされると共に、GPC12の値はセグ
メントのプログラムアドレススペースを通じて、インク
リメントされる。
セグメントテストにおいては、IDUのセグメント間の
切り替え能力についてテストが行なわれる。最初の二つ
のテストでは、1番目のセグメントが正常に処理され終
了されI;場合における二つのセグメントをデコードす
る能力についてテストが行なわれる。二つのセグメント
はローカル命令メモリ41にa−ドされ、2ライン分の
情報がSCTメモリ44aにロードされる。第一セグメ
ントのネクスト・セグメント・オン・エンドフィールド
は、第二セグメントをアドレスするようにセットされる
。GPCl 2は、第一セグメントのアドレススペース
を通じてインクリメントされるようにセットされる。こ
のセグメントが完了すれば、GPC12は、いずれのセ
グメントにも含まれていない少なくとも二つのアドレス
を放出する。この中断は別のIDUが別のセグメントを
デコードしていることを示す。中断の最中はバス50が
モニタされ、テスト中のIDUに接続されないことを確
認する。中断の後、GPC12は第二セグメントのアド
レスを放出する。バス50はモニタされ、第二セグメン
トがデコードされている事を確認する。
二つのセグメントは再びロードされ、第二テストのため
のプログラムアドレススペースをの順次部分を占領する
よう構成されている。実際には、ローカル命令メモリ4
1に再びロードする必要はない。単に協働して設けたS
CTに入力されるスタートプログラムアドレスフィール
ドが変わるだけで十分である。この場合、GPC12は
、二つのセグメント間で中断する必要はない。このテス
トにより、同じIDU内の異なったセグメントに含まれ
、命令メモリ内の非順次位置に記憶されている順次命令
ストリームが、IDUによりデコードされることを検証
する。
第3番目のテストでは、スキップされIこセグメントを
識別するIDUの能力を有効化する。コードの3つのセ
グメントがロードされる。GPC12は、第一セグメン
トのプログラムアドレスを通じてインクリメントされる
ようにセットされる。
第一セグメントのSCTデータは第二セグメントのデコ
ーディングを開始するようIDUに指示を与える。GP
Cl 2は、ロードされたセグメントのいずれにも存在
しないアドレスを放出する。さらに、IDU/IDUバ
ス50aは、テストが実行されているIDU番号にセッ
トされる。この非アクテイブ期間において、IDUはバ
ス50との接続が断たれる。第二セグメントのネクスト
・セグメント・オン・スキップフィールドはIDUに第
三セグメントのデコーディングを開始するよう指示する
。GPCl 2が第三セグメントのプログラムアドレス
を放出すれば、第三セグメントの命令のマイクロ命令が
監視される。
(産業上の利用可能性) 本発明にかかるPRI SMのアーキテクチャは、独特
な命令ブリ7エチング方法や命令処理方法、例えば、分
岐ステートメントや、サブルーチン呼び出し等の非順次
プログラムフローにより、屈しない命令バイブラインの
性能を常にその最高に維持する事ができる。従来のコン
ピュータにおいては特別の限定された場合にのみ機能低
下を阻むことができる一方、本発明にかかるPRISM
システムでは、実行されるプログラムの大きさ、構成、
複雑さのいかんに拘わらず、常に最高の機能を維持する
ことができる。PRISMアーキテクチャのシュミレー
ション動作では、このシステムに基づく機能の改善が5
0%にも達したことが示された。これらのシュミレーシ
ョンにおいては、ページ誤りの効果については考慮され
ていない。PRISMにおいてはページ誤りは、起こり
えない。
なぜなら、構成上、実行に必要な命令は常に用意されて
いるからである。従って、現在までに実証されているも
ののいずれよりも、より優れた機能改善がなされている
PRISMアーキテクチャにより達成される機能改善は
、命令フェッチ及びデコード動作を反復することにより
命令パイプラインバブルを除去する能力による。しかし
ながら、PRISMではデータアクセスのスピード化の
ための新しい方法を取っていない。データメモリはCP
Uに接続することができると共に命令メモリから分離し
て設けることができるので、PRISMシステムのCP
Uでは、これらアクセスのスピード化のための技術はい
ずれのものをも用いることができる。
本発明にかかるPRISMアーキテクチャおよび同方法
は、バッチ処理を必要とする科学技術の分野など、大型
コンピュータシステムに最適である。これらのシステム
としては、例えば、IBM3090シリーズ、Amda
hl 5900シリーズ、Cray社クチクラスンピュ
ータ等がある。大容量の科学技術プログラムの多くは、
はとんどの計算を行ってしまう幾つかのループを有する
。PRISMシステムでは、これらの内部ループ内にお
ける分岐のスピードや、ループ制御のスピードを大幅に
改善することができる。従って、PRISMアーキテク
チャ(上述した構成を有するもの)は、大量の科学技術
データ処理を行うバッチ処理タイプのものに適している
更に、PRISMシステムの重要な用途のひとつに、単
一命令マルチプルデータバス(S I MD)コンピュ
ータアーキテクチャ、たとえばMPPや接続用コンピュ
ータ等の制御ユニットに用いることである。なぜなら、
これらコンピュータの制御ユニットの価格は、機械全体
の価格に比べほんの小さな割合にしかならないが、制御
ユニットのスピード化は平衡して実行されるユニットに
大きな影響を与えるからである。
以上詳述したごとく、本発明は有益なもので、発明の範
囲は上記実施例に限定されるものではなく、請求の範囲
内で当業者に考えられる全ての変形例は、本発明に含ま
れるものである。
【図面の簡単な説明】
第1図は本発明にかかるPRI SMアーキテクチャの
一実施例のブロック図、 第2a図から2c図はコンピュータプログラムのパーテ
ィション方式の3つの例を示すブロック図、 第3図はPRI SMのIDUのブロック図、第4図は
PRISMのIDUのブロック図、第5図は種々のPR
ISM動作の関係を示すタイミング図、 第6a図から6d図は基本7オーマツトの概略図、 第7a図から7w図は本発明において用いられるCPU
命令の個別のフォーマットの概略図、第8図はIDUの
デコーダ部分の詳細なブロック図、 第9図はSCTメモリの選択信号のフォーマットの概略
図、 一第10図はセグメントペアの決定のプログラムのフロ
ーチャートである。 IO・・・ホストコンピュータ 20・・・コンパイラ− 30・・・プログラムメモリ 40・・・命令解読装置 50・・・バス 60・・・プログラム実行制御器 80・・・データメモリ

Claims (1)

  1. 【特許請求の範囲】 1、コンピュータのCPU(Centralproce
    ssingunit:中央演算装置)にて実行する為に
    、フロー変化を有するコンピュータプログラムの命令を
    取り出す方法であって、 実行に先立つてコンピュータプログラムからプログラム
    フロー情報を抽出する工程と、 コンピュータプログラムの実行をモニタする工程と、 実行されるプログラム命令と、プログラムフロー情報と
    に基づいて、次の命令がCPUによって実行される時に
    必要とされる可能性のある全命令がフェッチユニットに
    記憶され、かつ、いかなる単一のフエッチユニットも、
    命令を取り込む分岐を有するプログラム部分と、同じ分
    岐命令(条件付飛び越し命令)に対して命令を取り込ま
    ない分岐を有するプログラム部分の両者を、含まない様
    に、複数のフェッチユニットにおけるコンピュータプロ
    グラムの異なる部分を選択的に記憶する工程と、 上記フェッチユニットからの命令を、実行されるべき次
    の命令の決定に基づいて、CPUに選択的に伝達する工
    程とよりなることを特徴とする方法。 2、請求項1記載の方法であって、前記プログラムフロ
    ー情報抽出工程が、入力ポイント(entrypoin
    t)と、実行されるべき命令の順序における潜在的ノン
    ユニットステップ(non−unit−steps)に
    対応する命令に基づいて、コンピュータプログラムをセ
    グメントに区分する工程よりなることを特徴とする方法
    。 3、請求項2記載の方法であって、一つのセグメントが
    、そのセグメントの第1命令となるべき、唯一つの入力
    ポイント命令を包含し得ることを特徴とする方法。 4、請求項3記載の方法であって、各プログラムラベル
    がセグメントの始まりを構成することを特徴とする方法
    。 5、請求項4記載の方法であって、セグメントの始点に
    直接先行する各命令が、他のセグメントの終点となるこ
    とを特徴とする方法。 6、請求項5記載の方法であって、コンピュータプログ
    ラムの最初の命令が、セグメントの一つの始点となり、
    コンピュータプログラムの最後の命令が、セグメントの
    一つの終点となることを特徴とする方法。 7、請求項2に記載の方法であって、CPUに該CPU
    にて実行されるべき次のプログラム命令を識別するGP
    C(大域プログラム命令カウンタ)値を発生するGPC
    (globalprograminstruction
    counter)手段を設け、前記プログラム実行モニ
    タ工程が、CPUにて現在実行されるプログラム命令と
    セグメントを決定するGPC値をモニタする工程より構
    成すると共に、前記選択的記憶工程を、現在のGPC値
    に対応する命令の実行に続いて実行されるべき潜在的な
    次のセグメントとなるセグメントの各々を決定する工程
    によって構成したことを特徴とする方法。 8、請求項7記載の方法であって、前記選択的記憶工程
    が、プログラム実行のフローに応じて選択されたフェッ
    チユニットの内容を変更する工程よりなることを特徴と
    する方法。9、請求項7記載の方法であって、前記選択
    的記憶工程が、更に、バイパスされた潜在的な次のセグ
    メントが、CPUによる実行の為に、どれ程早く、続い
    て必要とされるかを決定する様にプログラムフロー変化
    情報を分析する工程と、バイパスされても、間もなく再
    度必要とされるセグメントを再ロードする必要性を最少
    限に減じる様に、前記フェッチユニットにセグメントを
    分配する工程とよりなることを特徴とする方法。 10、請求項7記載の方法であつて、前記選択的記憶工
    程が、更に、サブルーチンリターン命令に続いてそれぞ
    れ実行されるべき命令を識別する命令リターンアドレス
    のメモリを維持する工程と、セグメントの終りとしての
    リターンステートメントを有するサブルーチンセグメン
    トの潜在的な次のセグメントを識別する為に、該メモリ
    内の、最も最近に入力された命令リターンアドレスを用
    いる工程とよりなることを特徴とする方法。 11、請求項7記載の方法であって、前記選択的記憶工
    程が、更に、CPUが、現在実行されているセグメント
    を実行するのに要する最少時間を決定する工程と、実行
    されている命令の各潜在的な次のセグメントが、すでに
    フェッチユニットに記憶されたかどうかを決定する工程
    と、上記各潜在的な次のセグメントがすでにフェッチユ
    ニットに記憶されている場合、新しいセグメントを記憶
    する為に、現在実行されているセグメントの実行中、新
    しいセグメントの記憶用の潜在的な次のセグメントを含
    んでいない各フェッチユニットを解放する工程とよりな
    ることを特徴とする方法。 12、請求項11記載の方法であって、前記選択的記憶
    工程が、更に、各フェッチユニット内の利用し得る自由
    スペースのビン詰込み分析(bin−packinga
    nalysis)にしたがって、セグメントを、各フェ
    ッチユニットに分配する工程よりなることを特徴とする
    方法。 13、コンピュータのCPU(Centralproc
    essingunit:中央演算装置)にて実行する為
    に、フロー変化を有するコンピュータプログラムの命令
    を取り出す装置であって、 実行に先立ってコンピュータプログラムからプログラム
    フロー情報を抽出する手段と、 コンピュータプログラムの実行をモニタする手段と、 実行されるプログラム命令と、プログラムフロー情報と
    に基づいて、次の命令がCPUによって実行される時に
    必要とされる可能性のある全命令がフェッチユニットに
    記憶され、かつ、いかなる単一のフェッチユニットも、
    命令を取り込む分岐を有するプログラム部分と、同じ分
    岐命令(条件付飛び越し命令)に対して命令を取り込ま
    ない分岐を有するプログラム部分の両者を、含まない様
    に、複数のフェッチユニットにおけるコンピュータプロ
    グラムの異なる部分を選択的に記憶する手上記フェッチ
    ユニットからの命令を、実行されるべき次の命令の決定
    に基づいて、CPUに選択的に伝達する手段とよりなる
    ことを特徴とする装置。 14、請求項13記載の装置であって、前記プログラム
    抽出手段が、入力ポイント(entrypoint)と
    、実行されるべき命令の順序における潜在的ノンユニッ
    トステップ(non−unitsteps)に対応する
    命令に基づいて、コンピュータプログラムをセグメント
    に区分することを特徴とする装置。 15、請求項14記載の装置であって、一つのセグメン
    トが、そのセグメントの第1命令となるべき、唯一つの
    入力ポイント命令を包含し得ることを特徴とする装置。 16、請求項15記載の装置であって、各プログラムラ
    ベルがセグメントの始まりを構成することを特徴とする
    装置。 17、請求項16記載の装置であって、セグメントの始
    点に直接先行する各命令が、他のセグメントの終点とな
    ることを特徴とする装置。 18、請求項17記載の装置であって、コンピュータプ
    ログラムの最初の命令が、セグメントの一つの始点とな
    り、コンピュータプログラムの最後の命令が、セグメン
    トの一つの終点となることを特徴とする装置。 19、請求項14に記載の装置であって、CPUに該C
    PUにて実行されるべき次のプログラム命令を識別する
    GPC(大域プログラム命令カウンタ)値を発生するG
    PC(globalprograminstructi
    oncounter)手段を設け、前記プログラム実行
    モニタ手段が、CPUにて現在実行されるプログラム命
    令とセグメントを決定するGPC値をモニタすると共に
    、前記選択的記憶手段が、現在のGPC値に対応する命
    令の実行に続いて実行されるべき潜在的な次のセグメン
    トとなるセグメントの各々を決定することを特徴とする
    装置。 20、請求項19記載の装置であって、前記選択的記憶
    手段が、プログラム実行のフローに応じて選択されたフ
    ェッチユニットの内容を変更することを特徴とする装置
    。 21、請求項19記載の装置であって、前記選択的記憶
    手段が、更に、バイパスされた潜在的な次のセグメント
    が、CPUによる実行の為に、どれ程早く、続いて必要
    とされるかを決定する様にプログラムフロー変化情報を
    分析すると共に、バイパスされても、間もなく再度必要
    とされるセグメントを再ロードする必要性を最少限に減
    じる様に、前記フェッチユニットにセグメントを分配す
    ることを特徴とする装置。 22、請求項19記載の装置であって、前記選択的記憶
    手段が、更に、サブルーチンリターン命令に続いてそれ
    ぞれ実行されるべき命令を識別する命令リターンアドレ
    スを記憶する記憶手段と、セグメントの終りとしてのリ
    ターンステートメントを有するサブルーチンセグメント
    の潜在的な次のセグメントを識別する為に、該メモリ内
    の、最も最近に入力された命令リターンアドレスを用い
    る手段とよりなることを特徴とする装置。 23、請求項19記載の装置であって、前記選択的記憶
    工程が、CPUが、現在実行されているセグメントを実
    行するのに要する最少時間を決定すると共に、実行され
    ている命令の各潜在的な次のセグメントが、すでにフェ
    ッチユニットに記憶されたかどうかを決定し、上記各潜
    在的な次のセグメントがすでにフェッチユニットに記憶
    されている場合、新しいセグメントを記憶する為に、現
    在実行されているセグメントの実行中、新しいセグメン
    トの記憶用の潜在的な次のセグメントを含んでいない各
    フエッチユニットを解放することを特徴とする装置。 24、請求項23記載の装置であって、前記選択的記憶
    手段が、更に、各フェッチユニット内の利用し得る自由
    スペースのビン詰込み分析(bin−packinga
    nalysis)にしたがって、セグメントを、各フェ
    ッチユニットに分配することを特徴とする装置。 25、請求項14記載の装置であって、更に、コンピュ
    ータプログラム命令をコンパイルしたコード形で記憶し
    、かつ、前記抽出手段により作成されたセグメントデー
    タを記憶する手段とを設け、CPUは、前記記憶手段に
    記憶されるコンパイルされた命令に対応するマイクロプ
    ログラムを実行すると共に、前記フェッチユニットには
    、それぞれ、セグメント命令を対応するマイクロプログ
    ラムにデコードすると共に、該マイクロプログラムを実
    行の為にCPUに選択的に供給する手段を設けたことを
    特徴とする装置。 26、請求項25に記載の装置であって、CPUに実行
    されるべき次のプログラム命令を識別するGPC(大域
    プログラム命令カウンタ)値を発生するGPC(glo
    balprograminstructioncoun
    ter)手段を設けると共に、前記セグメントデータに
    各セグメントの終りを示すデータを含め、各フェッチユ
    ニットを、更に、 前記選択的記憶手段によりロードされる命令セグメント
    を記憶する局部命令記憶手段と、上記局部命令記憶手段
    に記憶された常駐セグメント(residentseg
    ments)のどれが、フェッチユニットにより、次に
    デコードされるべきかを決定するアドレス手段と、 セグメント命令を対応するマイクロプログラムにデコー
    ドする為に、上記アドレス手段に応答するデコーダ手段
    と、 上記アドレス手段と、どの命令がデコーダ手段(IDU
    )によりデコードされたかを識別するLPC(Loca
    lprograminstructioncounte
    r)値を発生する為に、上記デコーダ手段に応答する局
    部プログラム命令カウンタ(LPC)手段と、 デコードされた命令のマイクロプログラムが、いつ、C
    PUに伝達されるべきかを決定する為に、上記GPC手
    段及びLPC手段に応答するバス捕捉手段とにより構成
    したことを特徴とする装置。 27、請求項26記載の装置であって、前記アドレス手
    段に、選択的記憶手段によりロードされたセグメント制
    御表(SCT)を記憶するメモリ手段を設け、該セグメ
    ント制御表(SCT)は、前記局部命令メモリに常駐す
    るセグメントの依存性に関して、セグメントデータから
    導出された情報と、各常駐セグメントの始めに実行され
    るプログラム内の大域アドレス(globaladdr
    ess)と、各常駐セグメントの始めの局部命令メモリ
    手段内の局部アドレスとを含む構成とし、更に、デコー
    ダ手段による局部命令メモリ手段へのアクセスを制御す
    る上記SCTメモリ手段に応答する局部アドレスカウン
    タ(LAC)手段を設けたことを特徴とする装置。 28、請求項26記載の装置であって、前記セグメント
    制御表(SCT)に含まれる依存性情報は、現行のセグ
    メントが終了するか、又は、スキップされた場合、デコ
    ードされるべき次のセグメントに関する依存性情報につ
    いて、セグメント制御表内にアドレスを含むことを特徴
    とする装置。 29、請求項26記載の装置であって、前記デコーダ手
    段を、フェッチユニットの局部命令メモリ手段内に記憶
    される常駐セグメント命令に対応する、選択的記憶手段
    によりロードされたマイクロプログラムを記憶する為の
    マイクロ命令メモリ手段と、前記局部命令メモリ手段よ
    りアクセスされた命令を、デコードされる命令に対応す
    るマイクロプログラムの個々のマイクロ命令がアクセス
    可能となる様に、再編成するデコード制御手段と、マイ
    クロ命令メモリ手段からアクセスされたマイクロプログ
    ラムを一時的に記憶するバス捕捉手段に応答する緩衝記
    憶手段とを設けたことを特徴とする装置。 30、請求項29記載の装置であって、前記デコード制
    御手段は、プログラム命令デコードの完了に続いて、局
    部プログラム命令カウンタ(LPC)手段のLPC値を
    増加する様に、マイクロプログラムの最終マイクロ命令
    によりエンコードされた制御命令に応答することを特徴
    とする装置。 31、請求項26記載の装置であって、バス捕捉手段を
    、前記GPC値及び、それに関連したLPC値を比較す
    る比較手段と、デコーダ手段の出力のCPUへの接続を
    制御する為に、上記比較手段に応答するゲート手段とに
    より構成したことを特徴とする装置。 32、請求項26記載の命令デコードシステムであって
    、更に、各フェッチユニットを相互に接続するフエッチ
    ユニットバス手段と、デコードされた分岐命令のマイク
    ロプログラムをCPUに伝達して、上記フェッチユニッ
    トバス手段を介して、分岐命令の結果としてスキップさ
    れるべき潜在的な次のセグメントを内部に有するフェッ
    チユニットを識別するスキップ信号の伝達を決定する様
    に、関連フェッチユニットのバス捕捉手段に応答する、
    各フェッチユニットに含まれる手段とを設けたことを特
    徴とするシステム。
JP1258655A 1988-10-03 1989-10-03 命令をデコードする方法とその装置 Pending JPH02162424A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US252,791 1988-10-03
US07/252,791 US5050068A (en) 1988-10-03 1988-10-03 Method and apparatus for using extracted program flow information to prepare for execution multiple instruction streams

Publications (1)

Publication Number Publication Date
JPH02162424A true JPH02162424A (ja) 1990-06-22

Family

ID=22957564

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1258655A Pending JPH02162424A (ja) 1988-10-03 1989-10-03 命令をデコードする方法とその装置

Country Status (2)

Country Link
US (1) US5050068A (ja)
JP (1) JPH02162424A (ja)

Families Citing this family (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5226166A (en) * 1989-02-10 1993-07-06 Mitsubishi Denki K.K. Parallel operation processor with second command unit
US5689670A (en) * 1989-03-17 1997-11-18 Luk; Fong Data transferring system with multiple port bus connecting the low speed data storage unit and the high speed data storage unit and the method for transferring data
US5353418A (en) * 1989-05-26 1994-10-04 Massachusetts Institute Of Technology System storing thread descriptor identifying one of plural threads of computation in storage only when all data for operating on thread is ready and independently of resultant imperative processing of thread
EP0473714A1 (en) * 1989-05-26 1992-03-11 Massachusetts Institute Of Technology Parallel multithreaded data processing system
US5127092A (en) * 1989-06-15 1992-06-30 North American Philips Corp. Apparatus and method for collective branching in a multiple instruction stream multiprocessor where any of the parallel processors is scheduled to evaluate the branching condition
US5317736A (en) * 1989-07-07 1994-05-31 Bowen Frederic W System for managing information using codes and coded objects
EP0429252B1 (en) * 1989-11-17 1998-01-14 Digital Equipment Corporation System and method for storing firmware in relocatable format
US5276880A (en) * 1989-12-15 1994-01-04 Siemens Corporate Research, Inc. Method for parsing and representing multi-versioned computer programs, for simultaneous and synchronous processing of the plural parses
WO1991011765A1 (en) * 1990-01-29 1991-08-08 Teraplex, Inc. Architecture for minimal instruction set computing system
CA2010067C (en) * 1990-02-14 1993-10-26 Steven Murray Hoxey Reducing pipeline delays in compilers by code hoisting
US5230068A (en) * 1990-02-26 1993-07-20 Nexgen Microsystems Cache memory system for dynamically altering single cache memory line as either branch target entry or pre-fetch instruction queue based upon instruction sequence
KR100210205B1 (ko) * 1990-03-15 1999-07-15 리패치 스톨캐쉬를 제공하기 위한 장치 및 방법
US5448746A (en) * 1990-05-04 1995-09-05 International Business Machines Corporation System for comounding instructions in a byte stream prior to fetching and identifying the instructions for execution
US5214763A (en) * 1990-05-10 1993-05-25 International Business Machines Corporation Digital computer system capable of processing two or more instructions in parallel and having a coche and instruction compounding mechanism
DE69130588T2 (de) * 1990-05-29 1999-05-27 National Semiconductor Corp., Santa Clara, Calif. Cache-Speicher von partiell decodierten Befehlen und Verfahren hierfür
US5287522A (en) * 1990-06-29 1994-02-15 Bull Hn Information Systems, Inc. External procedure invocation apparatus utilizing internal branch vector interrupts and vector address generation, in a RISC chip
CA2045791A1 (en) * 1990-06-29 1991-12-30 Richard Lee Sites Branch performance in high speed processor
DE69129569T2 (de) * 1990-09-05 1999-02-04 Philips Electronics N.V., Eindhoven Maschine mit sehr langem Befehlswort für leistungsfähige Durchführung von Programmen mit bedingten Verzweigungen
US5305446A (en) * 1990-09-28 1994-04-19 Texas Instruments Incorporated Processing devices with improved addressing capabilities, systems and methods
US5454090A (en) * 1990-10-12 1995-09-26 Siemens Aktiengesellschaft Apparatus for furnishing instructions in a microprocessor with a multi-stage pipeline processing unit for processing instruction phase and having a memory and at least three additional memory units
US5261063A (en) * 1990-12-07 1993-11-09 Ibm Corp. Pipeline apparatus having pipeline mode eecuting instructions from plural programs and parallel mode executing instructions from one of the plural programs
US5367648A (en) * 1991-02-20 1994-11-22 International Business Machines Corporation General purpose memory access scheme using register-indirect mode
US5454089A (en) * 1991-04-17 1995-09-26 Intel Corporation Branch look ahead adder for use in an instruction pipeline sequencer with multiple instruction decoding
US5488729A (en) * 1991-05-15 1996-01-30 Ross Technology, Inc. Central processing unit architecture with symmetric instruction scheduling to achieve multiple instruction launch and execution
JP2984463B2 (ja) 1991-06-24 1999-11-29 株式会社日立製作所 マイクロコンピュータ
JP2875909B2 (ja) * 1991-07-12 1999-03-31 三菱電機株式会社 並列演算処理装置
US5430850A (en) * 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
US5353419A (en) * 1992-01-09 1994-10-04 Trustees Of The University Of Pennsylvania Memory-side driven anticipatory instruction transfer interface with processor-side instruction selection
US5434986A (en) * 1992-01-09 1995-07-18 Unisys Corporation Interdependency control of pipelined instruction processor using comparing result of two index registers of skip instruction and next sequential instruction
US5737561A (en) * 1993-01-22 1998-04-07 Intel Corporation Method and apparatus for executing an instruction with multiple brancing options in one cycle
US5717908A (en) * 1993-02-25 1998-02-10 Intel Corporation Pattern recognition system using a four address arithmetic logic unit
US5825921A (en) * 1993-03-19 1998-10-20 Intel Corporation Memory transfer apparatus and method useful within a pattern recognition system
DE4345028A1 (de) * 1993-05-06 1994-11-10 Hewlett Packard Co Vorrichtung zur Reduzierung von Verzögerungen aufgrund von Verzweigungen
US5729676A (en) * 1993-12-10 1998-03-17 Nec Corporation Method of generating data for evaluating programs
US5539888A (en) * 1993-12-23 1996-07-23 Unisys Corporation System and method for processing external conditional branch instructions
US5539907A (en) * 1994-03-01 1996-07-23 Digital Equipment Corporation System for monitoring computer system performance
US5592634A (en) * 1994-05-16 1997-01-07 Motorola Inc. Zero-cycle multi-state branch cache prediction data processing system and method thereof
EP0767940B1 (en) * 1994-06-30 2000-03-08 Intel Corporation Data pre-fetch for script-based multimedia systems
US5898877A (en) * 1996-02-29 1999-04-27 Sanyo Electric Co., Ltd. Processor using special instruction set to enhance exception handling
US5867681A (en) * 1996-05-23 1999-02-02 Lsi Logic Corporation Microprocessor having register dependent immediate decompression
US5794010A (en) * 1996-06-10 1998-08-11 Lsi Logic Corporation Method and apparatus for allowing execution of both compressed instructions and decompressed instructions in a microprocessor
US5896519A (en) * 1996-06-10 1999-04-20 Lsi Logic Corporation Apparatus for detecting instructions from a variable-length compressed instruction set having extended and non-extended instructions
US5867699A (en) * 1996-07-25 1999-02-02 Unisys Corporation Instruction flow control for an instruction processor
US6028999A (en) * 1996-11-04 2000-02-22 International Business Machines Corporation System and method for non-sequential program statement execution with incomplete runtime information
US5903750A (en) * 1996-11-20 1999-05-11 Institute For The Development Of Emerging Architectures, L.L.P. Dynamic branch prediction for branch instructions with multiple targets
KR100237642B1 (ko) * 1996-12-30 2000-01-15 구자홍 파이프라인 정지회로를 구비한 프로세서
US6064818A (en) * 1997-04-10 2000-05-16 International Business Machines Corporation Straight path optimization for compilers
US6012137A (en) * 1997-05-30 2000-01-04 Sony Corporation Special purpose processor for digital audio/video decoding
JP2001273138A (ja) * 2000-03-24 2001-10-05 Fujitsu Ltd プログラム変換装置および方法
US6633969B1 (en) 2000-08-11 2003-10-14 Lsi Logic Corporation Instruction translation system and method achieving single-cycle translation of variable-length MIPS16 instructions
US7203930B1 (en) * 2001-12-31 2007-04-10 Bellsouth Intellectual Property Corp. Graphical interface system monitor providing error notification message with modifiable indication of severity
US7003649B2 (en) * 2002-03-08 2006-02-21 Hitachi, Ltd. Control forwarding in a pipeline digital processor
KR20150042297A (ko) * 2010-06-15 2015-04-20 아브 이니티오 테크놀로지 엘엘시 동적으로 로딩하는 그래프 기반 계산
US10108521B2 (en) 2012-11-16 2018-10-23 Ab Initio Technology Llc Dynamic component performance monitoring
US9354892B2 (en) * 2012-11-29 2016-05-31 Advanced Micro Devices, Inc. Creating SIMD efficient code by transferring register state through common memory
CA2932763C (en) 2013-12-05 2022-07-12 Ab Initio Technology Llc Managing interfaces for dataflow graphs composed of sub-graphs
US10657134B2 (en) 2015-08-05 2020-05-19 Ab Initio Technology Llc Selecting queries for execution on a stream of real-time data
US20180004512A1 (en) * 2016-06-30 2018-01-04 Intel Corporation System and Method for Out-of-Order Clustered Decoding
US11080194B2 (en) 2018-12-27 2021-08-03 Intel Corporation System, method, and apparatus for enhanced pointer identification and prefetching

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62208129A (ja) * 1986-03-10 1987-09-12 Fujitsu Ltd デ−タ処理方式
JPS62259142A (ja) * 1986-05-02 1987-11-11 Nec Corp 命令のスケジユ−リング処理方式

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB1354827A (en) * 1971-08-25 1974-06-05 Ibm Data processing systems
US3771141A (en) * 1971-11-08 1973-11-06 Culler Harrison Inc Data processor with parallel operations per instruction
US3787673A (en) * 1972-04-28 1974-01-22 Texas Instruments Inc Pipelined high speed arithmetic unit
JPS549456B2 (ja) * 1972-07-05 1979-04-24
FR2361718A1 (fr) * 1976-08-11 1978-03-10 Adersa Processeur parallele associatif a hierarchie de memoire, notamment pour l'acquisition et le traitement rapides des signaux
US4200927A (en) * 1978-01-03 1980-04-29 International Business Machines Corporation Multi-instruction stream branch processing mechanism
US4467414A (en) * 1980-08-22 1984-08-21 Nippon Electric Co., Ltd. Cashe memory arrangement comprising a cashe buffer in combination with a pair of cache memories
US4439827A (en) * 1981-12-28 1984-03-27 Raytheon Company Dual fetch microsequencer
US4466061A (en) * 1982-06-08 1984-08-14 Burroughs Corporation Concurrent processing elements for using dependency free code
US4456958A (en) * 1982-06-08 1984-06-26 Burroughs Corporation System and method of renaming data items for dependency free code
US4742451A (en) * 1984-05-21 1988-05-03 Digital Equipment Corporation Instruction prefetch system for conditional branch instruction for central processor unit
US4720778A (en) * 1985-01-31 1988-01-19 Hewlett Packard Company Software debugging analyzer
US4847755A (en) * 1985-10-31 1989-07-11 Mcc Development, Ltd. Parallel processing method and apparatus for increasing processing throughout by parallel processing low level instructions having natural concurrencies
US4825360A (en) * 1986-07-30 1989-04-25 Symbolics, Inc. System and method for parallel processing with mostly functional languages
US4833599A (en) * 1987-04-20 1989-05-23 Multiflow Computer, Inc. Hierarchical priority branch handling for parallel execution in a parallel processor

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62208129A (ja) * 1986-03-10 1987-09-12 Fujitsu Ltd デ−タ処理方式
JPS62259142A (ja) * 1986-05-02 1987-11-11 Nec Corp 命令のスケジユ−リング処理方式

Also Published As

Publication number Publication date
US5050068A (en) 1991-09-17

Similar Documents

Publication Publication Date Title
JPH02162424A (ja) 命令をデコードする方法とその装置
US6684323B2 (en) Virtual condition codes
US5838988A (en) Computer product for precise architectural update in an out-of-order processor
US6119203A (en) Mechanism for sharing data cache resources between data prefetch operations and normal load/store operations in a data processing system
Ditzel et al. Branch folding in the CRISP microprocessor: Reducing branch delay to zero
US6073215A (en) Data processing system having a data prefetch mechanism and method therefor
US7000094B2 (en) Storing stack operands in registers
US6202130B1 (en) Data processing system for processing vector data and method therefor
US5442756A (en) Branch prediction and resolution apparatus for a superscalar computer processor
US5958047A (en) Method for precise architectural update in an out-of-order processor
US5136696A (en) High-performance pipelined central processor for predicting the occurrence of executing single-cycle instructions and multicycle instructions
USRE35794E (en) System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
AU628527B2 (en) Virtual instruction cache refill algorithm
US5692167A (en) Method for verifying the correct processing of pipelined instructions including branch instructions and self-modifying code in a microprocessor
US5006980A (en) Pipelined digital CPU with deadlock resolution
US5870575A (en) Indirect unconditional branches in data processing system emulation mode
US7003652B2 (en) Restarting translated instructions
KR100284788B1 (ko) 데이터 처리 시스템에서 에뮬레이션 동안의 브랜치 처리 방법및 시스템
Furber et al. AMULET3: A high-performance self-timed ARM microprocessor
KR20010030587A (ko) 데이터 처리장치
US5987600A (en) Exception handling in a processor that performs speculative out-of-order instruction execution
JPH07334361A (ja) 命令を処理するためのパイプラインを有するマイクロプロセッサ装置およびそれにおいて用いるためのプログラムカウンタ値を発生する装置
US20020083302A1 (en) Hardware instruction translation within a processor pipeline
JP2013521551A (ja) マシン状態に基づいた命令の分割
JPH04260950A (ja) キャッシュメモリ装置