(57)【特許請求の範囲】
【請求項１】
計算機のための命令のオペランド部分に直接埋め込まれるか、オペランド部分で指示されたアドレス位置に置かれた下位命令を含む階層型命令を実行するために上位計算機構造と複数の下位計算機構造とから構成される計算機であって、
前記上位計算機構造は、命令の並列実行に影響する部分だけを実行し、
前記下位計算機構造は、前記下位命令を処理して、具体的な計算内容を実行する、
ことから成る計算機。
【請求項２】
前記上位計算機構造の命令解析部は、命令で行う計算内容についての処理を行わず、もっぱら参照するデータの決定、割り付けと、次に実行する命令の決定のみを行う請求項１に記載の計算機。
【請求項３】
前記複数の下位計算機構造は、それぞれ独立して下位命令を実行するために、ローカルレジスタ、ローカルプログラム記憶、及びローカルデータ記憶を有している請求項１又は２に記載の計算機。
【請求項４】
グローバルレジスタファイルおよびメモリを備える計算機において、ローカルレジスタファイル、ローカルプログラム記憶、および必要に応じて少量のローカルデータ記憶を備え、データ参照方式として該ローカルレジスタと該ローカルデータ記憶への参照のみを備える命令セットを実行する下位計算機構造を、該計算機の命令実行部として複数備え、該計算機の命令のうち該下位計算機構造で実行させる命令は、命令フォーマットのオペコード部に該下位計算機構造の実行プログラムもしくは実行プログラムの格納位置を記述し、命令フォーマットのオペランド部に該計算機のグローバルレジスタおよびメモリのデータ、および即値データの、該下位計算機構造のローカルレジスタおよびローカルデータ記憶への対応を記述したものである計算機。
【請求項５】
計算機の命令のオペランド部において指定された下位計算機構造のローカルレジスタが、該計算機の命令のオペランド部において、メモリ上の連続する複数のデータに対応付けられ、ローカルレジスタへの読出しもしくは書込みアクセスが、ベクトル読出しもしくはベクトル書込みとなる動作を指定できる請求項４に記載の計算機。
【請求項６】
計算機の一命令で、メモリ領域の一ブロックに連続して存在するデータが読み込みまたは書き込みされ、なおかつ該データが下位計算機構造の複数のローカルレジスタに対応する時、命令のオペランド部において、該データが読み込みまたは書き込みされることを記述する部分と、該データの各部分が対応するローカルレジスタの番号とを記述する部分が分離している請求項４又は５に記載の計算機。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、計算機の動作機構（コンピュータアーキテクチャ）に関する。
【０００２】
【従来の技術】
本発明は計算機分野、特に高性能計算機分野に関するものである。従来、高速計算機は使用するトランジスタの性能向上に伴ってその性能を上げるだけでなく、命令実行各段階を分散した回路に分担させることにより、より一層の性能向上を達成してきた。後者の性能向上の典型的例としては、命令の解析、オペランドの取得、計算の実行、オペランドの格納に関して独立して回路を設け、各命令をパイプライン状に実行することにより、後続命令を、先行命令の終了を待たずに開始させることを可能とし、各命令の実行所要時間よりもはるかに短い命令実行開始間隔を実現した。また、上記各ステージ用の回路を各複数個用意することにより各クロック毎に複数の命令を実行開始することで更なる性能向上が計られた。これらの場合は、同時に実行される命令が、プログラムの機能上、相互に依存しないかどうかを実行時に判定する複雑な回路が必要となるため、大規模な判定回路の採用によってのみ可能となった。
【０００３】
また同時に、パイプライン動作、並列動作が円滑に行えるように、計算機の命令は縮小命令セットと呼ばれるものに再設計され、各命令の動作が外形的には極めて類型的になるように工夫されている。一方で、そのような考慮をせずに過去に確立された命令体系の計算機においては、実行時に縮小命令セットに翻訳して実行することで性能向上を実現している。縮小命令セットとしてはさまざまな形式が提案・実用化されているが、著しい特徴として、メモリからのデータ取出し・データ書込み命令が専用に設けられ、データ読出し・書込みと他の計算動作との複合命令がすべて排除されていることが挙げられる。これはメモリ読出し・書込み動作を複合的に行う算術演算命令が外形的に他の命令と大きく異なるものであって、パイプライン動作に著しい悪影響を与えると考えられたからである。
【０００４】
上記方法で計算機の性能を更に向上させる手段としては、命令乱発行という手法が用いられている。すなわち、同時に実行できる命令の探索を、更に先まで拡張して行うことにより、出来るだけ同時実行命令の数を増加させることである。命令乱発行によって並列可能実行命令数が増加する場合を図2に示す。図2では、左に、プログラムに記述された命令の流れを、右にはデータの依存関係によって決定される命令の流れを示している。その図によると、命令1、命令2、命令3は並列実行可能であるが、命令4は命令1と命令2の結果を利用するために、同時には実行できない。一方命令5は命令1、命令2、命令3と同時に実行できる。したがって、命令4は命令1、命令2、命令3の完了を待たなければ実行開始できない、すなわち、プログラムの流れの通りに実行しなければならないが、命令5は命令1、命令2、命令3と同時に実行開始することが出来、命令4に後続する命令であるにもかかわらず、命令4よりも先に実行しても構わない。
【０００５】
このような状況に関して現在のコンパイラは、命令4と命令5を交換してもプログラムの機能に変化がないことが明らかならば、実行コードとして、既に命令順序を変更したものを生成するが、命令間依存性の決定が実行時にしか明らかにされない場合には、当然、命令順序を変更しない。命令間依存性の決定が実行時にしか明らかにされない場合とは、一つにはデータ相互の依存関係が実行時にしか決定できない場合で、メモリから読込むデータ位置が、それまでの計算結果によって決定される場合がそうである。また、命令の流れが実行時に決定される、すなわち命令5の実行が命令4までの実行によって決定され、命令4の結果によっては命令5の代わりに他の命令が実行される構造となっているときにも生ずる。
【０００６】
【発明が解決しようとする課題】
プログラムに関する基礎的な研究によると、同時に実行できる命令を無制限に探索できると仮定すれば、極めて多い命令数が並列実行可能であると結論されている。たとえば、H. -H. Leeによる文献("Quantifying Instruction-Level Parallelism on an EPIC Architectur" ISPASS-2000Technical Paper)によると、SPECint95ベンチマーク用に選択された標準的プログラム群では、最大72.6の並列性が見出されている。一方において、現実の計算機における命令探索深さを仮定して並列性を求めると、10以下であることが多く、命令探索深さを増加させても、同時発行可能命令数は極めてゆっくりとしか増加しないことが報告されている。これは、実行される命令の流れの上で大きく離れた所に同時実行可能な命令があることを意味する。
【０００７】
現在の高性能計算機では、並列実行可能な命令を取り出すために、命令乱発行が採用され、実行命令の数を最大にする努力が払われているが、上記の性質により、同時実行可能な命令の平均検出数をわずかに増加させるためにも、命令探索深さを大幅に増加させる必要があり、そのために同時実行可能かどうかの判定回路が極度に増加するという問題点がある。たとえば、同時に4命令について同時実行可能かを判定する回路を持ち、実行中もしくは何らかの理由により実行待機中の命令が100ある場合には、4×100の組み合わせについて、命令実行順序を変更して良いかどうかの判定をしなければならない。
【０００８】
一方、現在の高性能計算機においては、計算速度を向上させる他の方法として、プログラムを互いに干渉しないいくつかの処理部分に分けて、プロセスまたはスレッドと呼ばれる処理単位にし、それぞれを別のプロセッサに割り当てる方法も採用されている。この場合は複数のプロセッサを用意しなければならないが、多くのプログラムでは、プロセッサ間の通信機構を考えてもなお、比較的容易に性能向上を果たすことが出来る。このように複数のプロセスまたはスレッドに分けられる処理は、単一の命令ストリームとして見ると、少なくとも数千命令以上離れた所にまとまって存在する並列実行可能なコードを抽出することに他ならない。この方法でも、ある程度以上多数のプロセッサで実行を試みると、性能向上が急速に鈍化することが報告されている。
【０００９】
以上二つの従来手法を概観すると、命令ストリーム上で数十命令以下程度離れた所にある並列実行可能な命令は乱発行により計算速度向上に利用でき、一方で数千命令以上程度離れた所に集中してある並列実行可能な命令群に関しては、プロセスもしくはスレッドを利用してマルチプロセッサ環境で計算速度向上を図ることが出来る。現在の技術では、数十から数千命令離れた所での並列性を利用する有効な手段が存在しない。
【００１０】
このギャップを埋めるためには、従来の命令で数十命令にも相当する単位を一命令として相互の並列実行可能性を判断する方法が望まれるが、従来の技術では実行することが出来ない。大規模複雑な処理に対応した命令としては例えばVAX計算機におけるEDIT命令などが存在するが、単一目的のための大規模命令であり、多様な命令実行のための機構を備えた大規模命令ではないために、計算プログラム全体の並列度向上の手段としては使えない。
【００１１】
【課題を解決するための手段】
本発明では、計算機の命令に二階層型命令を導入し、データ処理に関するものは二階層型命令によって処理することにより、この問題を解決するものである。計算機の構造もそれに応じて、従来の計算機に対応する上位計算機構造と、従来の計算機の命令実行部に対応する下位計算機構造の二階層となる。計算機の命令には、命令で行う計算内容を指定するオペコード部と、命令で参照するデータを指定するオペランド部と、次に実行する命令を指定する部分の3部分が存在し、いずれかの部分が欠けているときには、その内容が暗黙のルールで決定されている。二階層型命令では、上位計算機構造の命令解析部は、命令で行う計算内容についての処理を行わず、もっぱら参照するデータの決定、割り付けと、次に実行する命令の決定のみを行う。すなわち、命令の並列実行に影響する部分だけを上位計算機構造の命令解析部が処理する。
【００１２】
命令で行う具体的な計算内容は下位計算機構造の命令によって書かれたプログラムによって実行されるが、そのプログラムは上位計算機構造の命令のオペランド部分に直接埋め込まれるか、オペランド部分で指示されたアドレス位置に置かれる。
下位命令によって書かれたプログラムは、ローカルレジスタ、ローカルプログラム記憶、そして必要な場合には少量のローカルデータ記憶をもつ、独立した下位計算機構造によって実行される。このような下位命令実行計算機を複数用意することにより、複数の上位命令を同時実行することが出来る。
【００１３】
【発明の実施の形態】
本発明を実現する計算機の構造の一例を図1に示す。全体は大きくメモリ1、一つまたは複数の命令解析部2、複数の命令実行部3に分かれている。割り込み回路・クロック回路等、計算機を構成するのに必要ではあるが、以下の説明に不要な多くの回路は、図から省かれている。
【００１４】
メモリ1は計算に必要なプログラムとデータを記憶する回路であるが、実際の多くの計算機構造と同じく、キャッシュメモリを利用した階層的記憶システムであってもかまわず、その場合には図1でメモリ1と書かれているものは、キャッシュメモリとキャッシュ制御回路を示し、計算機の次のメモリ階層が該メモリに接続されている。キャッシュメモリを採用するときには更に、該キャッシュメモリをプログラム用キャッシュメモリとデータ用キャッシュメモリとに分割することが可能である。
【００１５】
命令解析部2はメモリ1から命令を取り出して解析する回路である。命令解析部にはグローバルレジスタファイル4が付属し、またアドレス計算用の演算回路を内蔵している。複数の命令を並行して解析することを可能とするためには、複数の命令解析部2を設け、グローバルレジスタファイル4を共有すれば良い。複数のスレッドを高速で切り替えるか、並行して実行することを意図する場合は、グローバルレジスタファイル4とプログラムカウンタを複数セット用意して、各スレッドに対応させれば良い。グローバルレジスタファイル4はデータ記憶用のレジスタファイルと、アドレス情報記憶用のレジスタファイルに分かれている構造も可能である。アドレス計算用の演算回路は、出来うるならば、従来の計算機の命令が実行している、アドレス計算以外の一般的な演算をも実行できるようになっていることが望ましい。これは、該計算機の命令（以下では上位命令と略す）をコーディングする際に、該命令のオペコード部に対応する下位計算機構造の命令（以下では下位命令と略す）による適当な大きさのプログラムが作製できず、結果としてたった一命令の下位命令に対応する上位命令をコーディングする必要があった場合、上位命令の解読、下位命令の実行部分割り当て、および下位命令の解読という複雑な手順を経なければいけないオーバーヘッドを回避するために、上位命令の命令解読部2で命令を直接実行できるようにするためである。
【００１６】
命令実行部3は上位計算機構造にとっての命令実行部3であり、同時に下位計算機構造にとっては計算機構造全体を意味し、下位命令のプログラムを解釈実行する回路である。この部分には演算解釈・実行部5、ローカルプログラム記憶6、ローカルレジスタファイル7があり、また必要に応じて少量のローカルデータ記憶8がある。
ローカルレジスタファイル7は、下位計算機構造が使用するレジスタファイルである。各レジスタには、下位命令による実行プログラム開始時には、初期データがセットされているか、不定もしくはゼロなどの既定値にセットされている。初期データは、該実行プログラムがソースオペランドとして利用する、メモリ1中のデータもしくはグローバルレジスタファイル4中のデータである。また、該実行プログラム終了時にローカルレジスタに残されたデータのうち、上位命令のオペランド部で指定されたものは、デスティネーションオペランドとして、メモリ1もしくはグローバルレジスタに転写される。ローカルレジスタファイル7のサイズは、従来の計算機と同様、8〜32本が適当である。
【００１７】
ローカルデータ記憶8はレジスタ指定方式になじまないデータ、すなわちインデックス修飾アドレス指定が必要なデータや、ビット列データなどの処理を下位命令で効率良くコーディングするために利用される。計算機性能のバランスを考えない実装では、ローカルデータ記憶8は多い方が良いのは当然であるが、極端に大きな実装を採用すると、ローカルデータ記憶8の回路規模が大きくなること、メモリ1からローカルデータ記憶8へのデータ移動量が増大すること、下位命令のフォーマットにおいて、アドレス指定のためのフィールドが増加すること、ローカルデータ記憶8へのアクセス時間がローカルレジスタへのアクセス時間に比べて著しく大きくなり、簡単なパイプライン動作が実現できなくなること等の理由から、計算機全体の性能にとって好ましくなくなる。以上の点から、ローカルデータ記憶8のサイズはローカルレジスタファイル7のサイズに比べて1〜16倍程度であることが望ましい。
【００１８】
ローカルプログラム記憶6は下位命令による実行プログラムを記憶する回路であり、演算解釈・実行部5に該実行プログラムを供給する。該実行プログラムのローカルプログラム記憶6への書き込みの具体的手続きは、上位命令の命令解析部2が、上位命令の中から該実行プログラムを抽出して該ローカルプログラム記憶6に転送する方法であっても良いし、該実行プログラムのメモリ内での位置を上位命令の命令解析部2が下位計算機構造のメモリ制御回路に通知して、メモリ1から直接該下位計算機構造のローカルプログラム記憶6に転送しても良い。ローカルプログラム記憶6の大きさは、計算機性能のバランスを考慮しない場合には大きい方が望ましいが、ローカルプログラム記憶6が極端に大きいと、下位命令のフォーマットにおいて、分岐アドレスに要する命令フィールドが大きくなること、ローカルプログラム記憶6へのアクセス時間がローカルレジスタへのアクセス時間に比して大きくなることなどの欠点を持つようになる。また、大きなローカルプログラム記憶サイズを充分に利用する下位命令実行プログラムの構成が困難になり、本来の利点すらも充分に活用されないことも予想される。従って、ローカルプログラム記憶6のサイズは、ローカルレジスタファイル7のサイズに比して0.5〜4倍程度であることが望ましい。下位命令実行プログラム12には制御命令があり、その結果命令の流れのループ化等が可能であるため、下位命令実行プログラムの開始から終了までの命令ストリームは、オペコード部10で指示されたプログラムサイズよりもはるかに長くなり得る。
【００１９】
この計算機が実行する二階層型命令の一般的フォーマットを図3に示す。図3において、オペランド部9は、該命令が使用するデータがメモリ1またはグローバルレジスタファイル4のどこにあり、それが命令実行部3のローカルレジスタファイル7、ローカルデータ記憶8にどのように配置されるかを記述する部分である。即値データは該命令内に直接記述されるが、それはオペランド部9であっても良いし、即値データ用のフィールドが設けられても良い。下位命令中に直接即値データを記述する方式は、可能ではあるが、下位命令の命令コードをコンパクトにするのを妨げるために望ましくない。例外として、小さな数値の即値データについては、下位命令の命令コードに直接記述する方式を取ることも可能である。
【００２０】
メモリ1中の連続した位置にあるデータが複数のローカルレジスタに対応するときには、該上位命令が、該複数データを使用することを記述する部分と、該複数データの中の各データが、それぞれどのローカルレジスタに対応するのかを記述する部分は、独立したものにできることが望ましい。これは上位命令の命令乱発行判断に際して、実行中もしくは何らかの理由により実行待機中の上位命令が利用するデータと、現在解析中の上位命令のオペランド部9が指定するデータの間で、データ利用上の依存性が生じるか否かを比較する回路の規模を縮小するためには、利用するデータを努めて大きなブロック単位で管理することが望ましいからである。このような記述法を具体的に実現する方法としては、あるデータブロックが該命令で使用されることを宣言するフィールドと、該データブロックの各部分がそれぞれローカルレジスタの第何番に対応するかを記述する複数のフィールドが、オペランド部9にこの順序で記述されるようにすれば良い。
【００２１】
オペコード部10は該上位命令によって実行される下位命令実行プログラム１２自体または、下位命令実行プログラム１２の存在する場所を記述する部分である。下位命令セットはすべての上位命令で共通であっても良いが、オペコード部10で指示される下位命令実行プログラム１２が従来の計算機方式における命令で高々数十命令の長さに相当する処理単位であり、このような処理単位においては、使用命令の種類において偏った分布をすることが予想されるため、上記命令フォーマットで示した空白部に、下位命令セット選択情報を書いて、上位命令一つ毎に異なった命令セットを指示することも可能である。例としては、整数演算、浮動小数点演算、ビット演算等に重点をおいた下位命令セットを各々用意して、上位命令毎に選択する事が考えられる。このようにする利点としては、一つの上位命令で使用する命令セットが小さくなるため、下位命令セットをコンパクトにすることが挙げられる。具体的な例としては、下位命令セットのフィールド中の特定のビットが0の時には、使用頻度の高い整数演算および論理演算等と分岐命令を含む汎用命令であると解釈し、1の時には整数演算、浮動小数点演算、ビット演算等のいずれかに特化した命令であると解釈するように命令解釈部を構成し、特化した下位命令セットの選択は上位命令中の空白フィールドに特化下位命令選択フィールドを設け、そのフィールドの値で指示できるようにすることが可能である。選択する特化命令セットを15種類とすれば、下位命令のビット長が16ビットでも、19ビットの長さを持っているのと同じ命令コーディングが可能になる。また、このような方式をとる場合には特化命令セットの追加によって命令の追加が容易になるので、基本命令セットのビットパターンコーディングに際して、将来の命令拡張のための余裕を考える必要性が少なくなり、高密度なコーディングが可能となる。特化命令セットの選択は、下位命令実行プログラムの実行中は変更されないため、CMOS回路を採用する限り、回路が複雑になっても、消費電力の増加は最小限に押さえられる。
【００２２】
後続命令位置記述部11は、該命令の実行後に実行されるべき命令のアドレスまたは、条件分岐などの場合には、該命令の実行後に実行されるべき命令の位置に相当する複数のアドレス位置および該複数のアドレスの選択条件を記述する部分である。後続命令が該命令の直後に記述される通常の場合には、後続命令位置は、該命令の先頭位置に該命令の全長を加算すれば求まるため、その加算操作で決定できることを示す情報が書かれても良いし、また命令の全長に関する情報自体が記述されていても良い。
【００２３】
図3の命令フォーマットには空白の位置があるが、そこには、不定長である上記3部分の長さに関する情報の他に、上位命令のフォーマット選択情報、特化命令セットの選択情報等の情報を置くことが出来る。また、空白部分は、一つの連続したビット列でなく、分散していても良い。
【００２４】
上記命令を実行するには以下の順での処理が行われる。
第1段階として命令の読み出しが行われる。該命令は不定長であり、場合によっては100バイトを越える長さであることを予定しているために、命令の読み出しは一クロックサイクルで完了しないことが通常であるが、命令の先頭部分から読み出すに従って、命令に関する各処理が可能となった段階で、次段階以降の処理が開始される。
【００２５】
第2段階として、後続命令位置記述部11が解読される。これによって後続命令の位置が決定できる場合には、後続命令の読み出しと解析を、該命令の実行と並行して行うことが可能である。後続命令が並列実行可能である場合には、引き続き実行段階にまで進むことが可能である。また、後続命令の中の後続命令位置記述部11が読み出されれば、後続命令の更に後に続く命令の読み出しが可能となるため、後続命令が並列実行可能でなくても、更に後に続く命令に関して並列実行可能であるかどうかの検査を進めることができ、上位命令単位で命令乱発行が可能となる。上位命令の命令解析部2が一つしかない構成では、第2段階を以下に述べる第3段階よりも早く実行する利点は少なく、次の第3段階と同時かまたは、それよりも遅れて実行することが出来る。
【００２６】
後続命令が分岐命令の場合であって、分岐条件の決定が該命令の下位命令実行プログラム12の実行をせずに決定できる場合には、その決定に従って分岐すれば良い。後続命令が分岐命令の場合であって、分岐条件の決定が該命令の下位命令実行プログラム12の実行によって決定される場合には、該下位命令実行プログラム12の実行を待つことも可能であるが、一定のアルゴリズムのもとに分岐結果を予測して、後続命令の位置を仮に決定し、仮決定の後続命令の実行を行う投機実行も可能である。この場合には、予測した分岐結果が実際に決定されたものと異なった場合には、投機実行にかかわる状態変化が全て復帰できるように措置することが必要であるが、その技術は既に広く知られている。特に本発明の場合には、ローカルレジスタファイル7およびローカルデータ記憶8からメモリ1およびグローバルレジスタファイル4へのデータ書込みを抑止すれば、該命令の実行結果はメモリ1およびグローバルレジスタには反映されず、投機命令の取消しは容易である。更に命令解析部2、命令実行部3の資源が豊富にある場合には、分岐・非分岐両者の場合に相当する複数の後続命令に対し同時に投機実行を行うことも可能である。
【００２７】
第3段階では、オペランド部が解釈実行される。この段階において、該命令が使用するデータが、実行中もしくは実行待機中の先行命令によって変更される予定であり、なおかつその変更が完了していないかどうかが判断される。変更が完了してないことが判明した場合には、該命令は実行待機状態となり、後続命令の解釈に移行する。そのような障害がないと判明した場合には、該命令の実行準備に移行する。具体的には、アイドル状態の命令実行部3があるかどうかが調べられ、それが存在する場合には、命令実行部3のローカルレジスタファイル7およびローカルデータ記憶8へデータの書き込みが行われる。アイドル状態の命令実行部3がない場合には、ここで待機状態に移行することも可能であり、また、データをデータキャッシュに移動して待機することも可能である。また、アイドル状態の命令実行部3が一つしかない場合にも、アイドル状態の命令実行部3がないときと同じ処置をするような設定にすれば、優先的な処理を要する割り込みによる上位命令実行が、最低一つあるアイドル状態の命令実行部3で処理できるため、割り込み応答が、迅速かつ確実になり、割り込みの機能を重要視する場合には望ましい方法となる。
第4段階として、命令実行部3が実行すべき下位命令実行プログラム12が、命令実行部3のローカルプログラム記憶6に読み込まれる。この段階は第3段階と並行して行うことも可能である。
【００２８】
第5段階として、命令実行部3が下位命令実行プログラム12を実行する。該下位命令実行プログラム12が使用するデータ領域はローカルレジスタファイル7およびローカルデータ記憶8だけであり、計算機のメモリ1およびグローバルレジスタ4には直接アクセスできない。該下位命令実行プログラム12が必要とする入力データは命令解析部2によってローカルレジスタファイル7およびローカルデータ記憶8に書き込まれる。また該下位命令実行プログラム12が出力するデータはローカルレジスタファイル7またはローカルデータ記憶8に書き込まれた後、メモリ1もしくはグローバルレジスタ4に書き込まれる。
【００２９】
入力データの書き込みは該下位命令実行プログラム12開始前が望ましいが、入力データ書き込みがすべて完了する前に該下位命令実行プログラム12を実行開始することも可能である。
【００３０】
該下位命令実行プログラム12の出力データは、オペランド部9で指示された対応関係にもとづき、メモリ1およびグローバルレジスタ4に書きこまれる。出力データをメモリ1およびグローバルレジスタ4に書き込むタイミングは、下位命令実行プログラム12の実行終了時点か、該データがローカルレジスタまたはローカルデータ記憶8に書き込まれた時点か、または該下位命令実行プログラム12によって指示された時点かが自由に選択できる。該下位命令実行プログラム終了時点で書き込むことの利点は、該下位命令実行プログラム12が正常に終了したときに限って、実行結果をメモリ1およびグローバルレジスタファイル4に反映させることが出来るため、上位命令自体をアトミック命令として取り扱うことが可能になることである。該データがローカルレジスタファイル7またはローカルデータ記憶8に書き込まれた時点で、該データをメモリ1もしくはグローバルレジスタ4に反映させることの利点は、該データが確定するのを待っていた後続命令の開始が最も早く行われることである。
【００３１】
また、特定のローカルレジスタを、ベクトルレジスタのように使用する、すなわち、該ローカルレジスタからの読込み動作によって、該ローカルレジスタに書込まれていたデータにメモリ1上で隣接するデータが、該ローカルレジスタに新たに書込まれたり、該レジスタへの書込み動作によって、メモリ1上にに該データが互いに連続するように書込まれたりするように構成することは容易である。このような構成を取る場合には、上記読込み書込み動作によって引き起こされるメモリ1の読込み書込みがどの範囲にとどまるかは、オペランド部9に明示的にかかれていなければならない。また、ベクトル読込み動作を連続して行っても読込みに間に合うようにデータが供給できるようには、普通は保証できないので、その場合に備えて該下位命令実行プログラム12の実行を中断する機構がなければならない。
【００３２】
以上の動作が終了した後、命令実行部3は新たな命令が実行できる状態になる。終了時にローカルレジスタファイル7およびローカルデータ記憶8に書かれているデータは破棄され、同一の命令実行部3で実行される別の命令に直接渡されることはない。このような制限を設けることにより、後続命令をいずれの命令実行部3で実行しても同じ効果が得られるようになる。
【００３３】
命令実行部3の構成は、すべて同一であることが望ましいが、特定の下位命令セットを選択したときには、それを実行できる命令実行部3が限られている構成も可能である。このような構成にすると、回路規模が節約できる反面、命令実行部割り当てが若干複雑になる。また、浮動小数点演算ユニット、特に浮動小数点割り算ユニットのような、大規模な回路を必要とするものについては、複数の命令実行部3で共有する構成を取ることも可能である。
【００３４】
【発明の効果】
本発明による効果は以下に掲げるとおりである。
第一に、従来の計算機の設計手法では利用困難であった、命令ストリーム上で数十から数千命令離れた所にまとまって存在する並列実行可能命令群による並列性を、従来計算機の多数命令に相当する処理を上位命令の一命令にまとめて記述することによって利用可能とし、プログラムが本来持つ並列実行可能性を充分に引き出すことが出来る。
【００３５】
第二に、分岐命令のうち、近いアドレスに分岐する命令の多くが下位命令による実行プログラム中の分岐として実現されるため、上位命令による分岐処理と、下位命令による分岐処理が並列実行され、計算機性能の向上をもたらす。また、上位命令解析部2での分岐処理頻度が減少するため、より高度な分岐予測判断が、命令実行の流れを阻害せずに実装可能となる。
【００３６】
第三に、該計算機の命令解析部2が実行すべきオペランド相互依存性の検査が大幅に減少するため、処理能力を増強することが出来る。この利点は、主に二つの効果から構成されている。一つには、従来の計算機でレジスタ間演算として実現されている命令の多くは、下位命令実行プログラム内のレジスタ間演算となるため、該計算機の命令解釈部2でデータ依存関係を判断する必要がなくなる。従来の計算機ではレジスタ間演算が、実行命令数の３０％から６０％を占めているが、その多くが下位計算機の命令に変換され、上位命令のオペランド部9に何ら対応するコードが必要なくなるので、命令解析部2が実行すべきデータ依存性検査が大きく減少する。また、上位命令で利用するメモリ1中のデータは、それが複数のローカルレジスタに配置されるべきものであっても、メモリ1中で一つの連続したブロックに配置されていれば一度のデータ依存関係判断で済むため、判断の回数が減少する。これは、従来の技術では、データの参照自体が複数の命令で行われるため、一度の参照にまとめることは原理的に不可能であった。さらに、データをベクトルデータとして参照するときにも、同様の理由により、一度のデータ依存判断で済む。以上の理由によってデータ依存判断の回数が減ることは、データ依存の判断をする際に参照しなければならない、実行中および実行待機中の命令のデータ数も減少していることを意味するため、データ依存判断の組み合わせの数は二重の意味で削減される。
【００３７】
第四に、下位命令実行開始までのオーバーヘッドが従来の計算機よりも増加するとは言え、下位命令によるプログラム実行中は、メモリ1を直接参照することが一切ないため、ロード・ストア命令による命令実行パイプラインの乱れが少なくなり、下位命令プログラム内での下位命令の並列実行が容易になり、結果として計算速度が向上する。更に、命令フォーマットの大きな部分を占めるロード・ストア命令や分岐命令では、ローカルデータ記憶8やローカルプログラム記憶6が小さいため、下位命令フォーマットでのアドレス指定フィールドが小さくなり、結果として下位命令のエンコードに必要なビット数が減少し、コンパクトなコードを生成する事が出来る。
【００３８】
具体的には従来の計算機では、縮小命令セット・アーキテクチャで命令が設計されている場合の多くは、一命令を32ビットのデータで表現している。一部のアーキテクチャでは、16ビットで命令を表現することによりコンパクトなコードを実現しているが、16ビットで表現できる命令の種類を制限したり、3レジスタ命令を2レジスタ命令に制限して表現能力を落としたり、命令の種類によっては暗黙のレジスタ指定を行ったりしている。このような制限は一般的には命令の表現能力を制限するため望ましくないのであるが、コンパクトなコードを生成するために採用されている。反面、制御命令、メモリとのデータ移動命令、即値命令などのために、命令コードの50〜75％を使用している。本発明による下位計算機構造の命令では、分岐等制御命令においては、命令の飛び先アドレスのビット数は下位命令実行プログラム12の最大サイズで決定され、6〜8ビットで十分であり、制御命令のコード数は極めて小さい。また、ローカルデータ記憶8とのデータ移動命令においても、ローカルデータ記憶のサイズが小さいため、絶対番地指定をしても、下位命令のアドレスフィールドは8〜12ビット程度になり、コード数は極めて小さい。即値命令は、該計算機の命令解釈部2が即値データをローカルレジスタファイル7に予めセットするため、下位命令が即値データを記述する必要がなくなり、極めて小さなコード数となる。以上のことより、これらの命令に割り当てるコードが大幅に減少し、命令の表現能力を過度に制約することなく16ビットの下位命令を実現することが出来る。
【００３９】
第五に、ベクトルデータの参照時には、ローカルレジスタへのアクセスがメモリ1へのアクセスを引き起こすが、オペランド部9でベクトル型のデータ参照をすることが明示されているために、メモリ1へのアクセス予測が実行時に可能となる。これにより、データキャッシュをデータバッファとして運用すれば、メモリ1のアクセス速度が遅い通常の場合でも、計算中断なしに実行することが容易となる。
【００４０】
第六に、命令実行部3がそれぞれ独立した計算機回路であるため、上位命令同士の並列動作を容易に実現する事が出来る。
第七に、大規模データベースを操作するプログラムにおいては、データの参照・書換えを含む一連の動作が連続して行われる、アトミック操作が要求されるが、上位命令は、命令実行中のメモリへの書出しを抑止さえすれば自動的にアトミック命令となるため、アトミック操作の内容が該計算機の上位命令の一命令として記述できる規模である限り、アトミック命令としての性質が、自動的に実現できる。その結果、アトミック命令を実現するための多くの補助的な命令シークエンスが省略でき、大幅な性能向上が実現できる。
【図面の簡単な説明】
【図１】本発明による二階層機械語命令を実行する計算機の構造の一例を示す構成図である。
【図２】命令乱発行によって並列可能実行命令数が増加する場合の、命令間の相互依存性の一例を示した図である。
【図３】二階層型命令の一般的フォーマットを示した図である。
【符号の説明】
1  メモリ
2  命令解析部
3  命令実行部
4  グローバルレジスタファイル
5  命令解釈・実行部
6  ローカルプログラム記憶
7  ローカルレジスタファイル
8  ローカルデータ記憶
9  オペランド部
10  オペコード部
11  後続命令位置記述部
12  下位命令実行プログラム
【図１】
0003541356.tif 000002
【図２】
0003541356.tif 000003
【図３】
0003541356.tif 000004