(57)【特許請求の範囲】
【請求項１】
ソフトウェアを実行することにより、命令準備処理ステージと命令実行ステージを少なくとも有する命令処理プロセッサをエミュレートするデータプロセッサであって、
最初に、２以上の命令からなるグループに関して前記命令準備処理ステージをエミュレートすることにより、準備処理された命令のグループを生成し、
次いで、前記準備処理された命令のグループに関して前記命令実行ステージをエミュレートすることにより、前記準備処理された命令のグループの各命令に関する命令実行ステージのエミュレーションが命令の順番に順次完了する、ように動作し、
不連続なプログラムフローの段階を検出する手段と、
不連続なプログラムフローの段階に応じて、前記準備処理された命令のグループ中の１以上の命令の実行を取り消す取消し手段と、を有し、
前記不連続なプログラムフローの段階が前記準備処理された命令のグループ中の分岐先命令に関するものである場合、前記データプロセッサは、前記グループ中の全ての命令に関して前記命令準備処理ステージをエミュレートするように動作し、前記取消し手段は、前記グループにおいて前記分岐先命令に先行するいかなる命令も実行を取り消すように構成されている、
ことを特徴とするデータプロセッサ。
【請求項２】
請求項１記載のデータプロセッサであって、
前記命令準備処理ステージは命令フェッチステージと命令デコードステージとを有する、
ことを特徴とするデータプロセッサ。
【請求項３】
請求項１あるいは２記載のデータプロセッサであって、
前記命令は、前記命令準備処理ステージで処理される前に、１以上のキャッシュラインを有するキャッシュに保持され、
前記グループの命令の数は、前記グループが２以上のキャッシュラインからの命令とならないように選択されている、
ことを特徴とするデータプロセッサ。
【請求項４】
請求項１ないし３のいずれか一項に記載のデータプロセッサであって、
前記不連続なプログラムフローの段階が前記準備処理された命令のグループ中の分岐命令に関するものである場合、前記取消し手段は、前記グループにおいて前記分岐命令に後続するいかなる命令も実行を取り消すように構成されている、
ことを特徴とするデータプロセッサ。
【請求項５】
請求項１ないし４のいずれか一項に記載のデータプロセッサであって、
前記データプロセッサは、前記命令のグループに関して、並列に前記命令準備処理ステージをエミュレートするように動作可能なベクトルプロセッサである、
ことを特徴とするデータプロセッサ。
【請求項６】
請求項１ないし５のいずれか一項に記載のデータプロセッサであって、
前記データプロセッサは、前記命令のグループに関して、前記命令準備処理ステージを並列なオペレーションとしてエミュレートするように動作できる、
ことを特徴とするデータプロセッサ。
【請求項７】
請求項１ないし６のいずれか一項に記載のデータプロセッサであって、
エミュレートされる前記命令処理プロセッサは、命令準備処理ステージと命令実行ステージとを少なくとも含むパイプライン型オペレーションを有する、
ことを特徴とするデータプロセッサ。
【請求項８】
ソフトウェアを実行することにより、命令準備処理ステージと命令実行ステージを少なくとも有する命令処理プロセッサをエミュレートするデータ処理方法であって、
最初に、２以上の命令からなるグループに関して前記命令準備処理ステージをエミュレートすることにより、準備処理された命令のグループを生成するステップと、
次いで、前記準備処理された命令のグループに対して前記命令実行ステージをエミュレートすることにより、前記準備処理された命令のグループの各命令に関する命令実行ステージのエミュレーションが命令の順番に順次完了するステップと、を有し、さらに、
不連続なプログラムフローの段階を検出するステップと、
不連続なプログラムフローの段階に応じて、前記準備処理された命令のグループ中の１以上の命令の実行を取り消す取消しステップと、を有し、
前記不連続なプログラムフローの段階が前記準備処理された命令のグループ中の分岐先命令に関するものである場合、前記グループ中の全ての命令に関して前記命令準備処理ステージがエミュレートされるようにし、前記取消しステップは、前記グループにおいて前記分岐先命令に先行するいかなる命令も実行を取り消す、
ことを特徴とするデータ処理方法。
【請求項９】
請求項８記載の方法をコンピュータに実行させるためのプログラムコードを有するコンピュータソフトウェア。
【請求項１０】
請求項９記載のプログラムコードを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理に関する。
【背景技術】
【０００２】
本発明は、パイプライン型データ処理および非パイプライン型データ処理の双方に適用可能である。パイプライン型システムを技術的背景として説明するが、それは対象となる問題を示すためにすぎない。
【０００３】
いわゆる「パイプライン型」データ処理では、データ処理命令を処理するために必要なオペレーションは、連続する２以上の命令処理サイクル（例えば、クロックサイクル）にわたって実行される。
【０００４】
例えば、パイプライン型データプロセッサにおいては、「プログラムカウンタ」の制御のもとで、第一サイクルでメモリから命令を「フェッチ」すなわち取り出し、次のサイクルで「デコード」して命令の意味とオペランドを決定し、第三サイクルでその命令を「実行」する。これを繰り返すと、１つの命令がパイプラインのあるステージにあるとき別の命令は異なるステージにあることになる。これは、パイプライン全体を可能な限り十分に利用されている状態に維持することを意図したものである。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
そのようなパイプラインを、他のデータプロセッサ上で動作するソフトウェアを用いてエミュレートしようとすると、問題が生じる。
【０００６】
このようなエミュレーションの状況では、エミュレートすべきデータプロセッサの各ハードウェアオペレーションは、エミュレートプロセッサ上においてソフトウェアサブルーチンにより実行される。従って、クロックサイクル期間に相当するものは、それらのサブルーチンのうち最も遅いサブルーチンの動作速度に依存し、後者は、エミュレートされたタスクを実行するためにエミュレートプロセッサが必要とするオペレーションの数に依存する。
【０００７】
エミュレーションクロック速度は、この最も遅いエミュレーションタスクを考慮して設定されなければならない。リアルタイムオペレーションをエミュレートするシステムあるいは何らかの外部処理装置と相互作用するシステムでは、エミュレーションクロック速度を一定に保たなければならない。言い換えれば、実行されている現行の命令に合わせてエミュレーションクロックの速度を上げたり、下げたりすることはできない。
【０００８】
こうしたことすべては、パイプライン型プロセッサのエミュレーションに更に影響を及ぼす可能性があるので、異なる命令に関するフェッチオペレーション、デコードオペレーション、実行オペレーションが同時に生じるようにパイプラインをエミュレートする能力は制約されることになる。むしろ、各命令がフェッチされ、デコードされ、実行された後に、次の命令がフェッチ等されるようにしたシステムが一般に用いられている。これは、４つの命令Ｉ１、Ｉ２、Ｉ３、Ｉ４を実行するのに、次のように１２のエミュレーションクロックサイクルを要することを意味する。
【０００９】
第一のエミュレーションクロックサイクル        Ｉ１のフェッチ
第二のエミュレーションクロックサイクル        Ｉ１のデコード
第三のエミュレーションクロックサイクル        Ｉ１の実行
第四のエミュレーションクロックサイクル        Ｉ２のフェッチ
第五のエミュレーションクロックサイクル        Ｉ２のデコード
第六のエミュレーションクロックサイクル        Ｉ２の実行
・・・
第十二のエミュレーションクロックサイクル        １４の実行
【課題を解決するための手段】
【００１０】
本発明は、命令準備処理ステージと命令実行ステージとを有する命令処理プロセッサをエミュレートするソフトウェアを実行するように構成されたデータプロセッサであって、
前記ソフトウェアは、
最初に、２以上の命令からなるグループに関して前記命令準備処理ステージをエミュレートすることにより、準備処理された命令のグループを生成し、
次いで、前記準備処理された命令のグループに関して前記命令実行ステージをエミュレートすることにより、前記準備処理された命令のグループの各命令に関する命令実行ステージのエミュレーションが命令の順番に順次完了する、
ように動作できる、ものである、データプロセッサを提供する。
【００１１】
本発明は、（例えば）単一パイプラインでもスーパースケーラでもない、ハイブリッドアプローチを用いることにより、命令処理プロセッサのエミュレーション速度の向上を達成する。２以上の命令のグループを準備処理した後に（例えば、それらの命令をフェッチし、デコードした後に）、グループ内の命令を（エミュレーション）実行する。次いで、エミュレーションでは、命令の実行が命令の順番で１つ１つ完了される。
【００１２】
その結果、エミュレーションシステムにおける向上が達成される。なぜなら、１つの命令のフェッチとデコードをエミュレートするのに必要なソフトウェア処理は、１つの命令の実行をエミュレートするのに要求される処理よりも、しばしばかなり手間が少ないからである。
【００１３】
従って、４つの命令Ｉ１、Ｉ２、Ｉ３、Ｉ４からなるグループの例では、エミュレーションプロセスは次のように進むことができる。
【００１４】
第一のエミュレーションクロックサイクル        Ｉ１−Ｉ４のフェッチ
第二のエミュレーションクロックサイクル        Ｉ１−Ｉ４のデコード
第三のエミュレーションクロックサイクル        Ｉ１の実行
第四のエミュレーションクロックサイクル        Ｉ２の実行
第五のエミュレーションクロックサイクル        Ｉ３の実行
第六のエミュレーションクロックサイクル        Ｉ４の実行
従って、この例の場合、上に説明された例では１２のエミュレーションクロックサイクルを要したが、ここでは６エミュレーションクロックサイクルを要するだけである。
【００１５】
本発明の実施形態では、パイプラインは、命令準備処理ステージが命令フェッチステージと命令実行ステージとを有するという意味で、少なくとも３ステージのパイプラインである。
【００１６】
本発明の実施形態においては、命令準備処理に処する前に命令を１以上のキャッシュラインを有するキャッシュに保持するとともに、２以上のキャッシュラインからの命令が１つのグループに含まれないように１グループの命令の数が選択されているので、オペレーションの効率性を向上することができる。
【００１７】
本発明は、また、ソフトウェアを実行することにより、命令準備処理ステージと命令実行ステージとを少なくとも有する命令処理プロセッサをエミュレートするデータ処理方法であって、
最初に、２以上の命令からなるグループに関して前記命令準備処理ステージをエミュレートすることにより、準備処理された命令のグループを生成するステップと、
次いで、前記準備処理された命令のグループに対して前記命令実行ステージをエミュレートすることにより、前記準備処理された命令のグループの各命令に関する命令実行ステージのエミュレーションが命令の順番に順次完了するステップと、を有する
本発明の更に別の特徴としては、上記方法を実行するプログラムコードを含むコンピュータソフトウェアと、そのようなプログラムコードを提供する媒体（例えば、伝送媒体あるいは記憶媒体）が含まれる。
【発明を実施するための最良の形態】
【００１８】
《実施例》
図１は、エミュレートされるデータ処理システムを概略的に示したものである。本システムはプロセッサ１０と主メモリ２０を有し、プロセッサ１０は主メモリ２０からデータおよび命令を読み出し、主メモリ２０へデータおよび修正された命令を書き込む。
【００１９】
以下の説明は、エミュレートされるシステムの主メモリ２０のイメージを保持するには小さすぎるローカルメモリを有するプロセッサを用いて図１のシステムのオペレーションをエミュレートする技術に関するものである。この制約があるため、キャッシュを用いた解決策を採用する必要がある。
【００２０】
図２は、エミュレーションのための構成を概略的に示したものである。エミュレーション技術は一般的によく知られており、説明を明瞭にするために、本実施形態に直接関係のない特徴については省略する。エミュレーションにはエミュレーションプロセッサがそのエミュレーションプロセッサにネイティブな言語でかかれたエミュレーションソフトウェアを実行することが関係し、従ってエミュレートされるシステムにおける命令の処理をエミュレートするために、そのようなネイティブな命令の一群が実行される。以下の説明において、「命令」という語は、エミュレートされるシステムにおける命令を指しており、エミュレーションソフトウェアのネイティブな命令を指しているものではない。
【００２１】
図２を参照すると、エミュレーションソフトウェア１２０を実行するプロセッサ（この場合、パラレルプロセッサあるいは「ベクトル」プロセッサ）１１０が、命令キャッシュ（Ｉ）１４０およびデータキャッシュ（Ｄ）１５０を介して主メモリ１３０にアクセスする。ＩキャッシュおよびＤキャッシュを用いる理由は、プロセッサ１１０のローカルメモリが小さすぎてエミュレートされるシステムの主メモリ２０のイメージを保持できないからであり、又、プロセッサ１１０に対応する主メモリ１３０にアクセスするには費用のかかる（すなわち、時間のかかる）ＤＭＡアクセスによる必要があるからである。
【００２２】
Ｉキャッシュ１４０はアクセス速度を考慮して直接マッピング方式であり、各々が４キロバイトのメモリページを８ページ保有している。本実施形態では少数の大きなメモリページを使用しているが、それはキャッシュヒットの検証をより効率的にするためである。ページサイズが大きいことにより、メモリに対するアクセスの遅さを埋め合わせることができる。主メモリ１３０からＩキャッシュ１４０にメモリページを読み込み、プロセッサはＩキャッシュ１４０から命令を読み出すことができる。しかし、Ｉキャッシュ１４０に格納された値が主メモリ１３０に書き戻されることは決してない。
【００２３】
Ｄキャッシュ１５０は、いわゆる「スラッシング」（即ち、キャッシュされたページのめまぐるしい変更）を減らすために完全に連想的であり、やはり各ページ４キロバイトのページを８ページ保有している。主メモリ１３０から新たなページをＤキャッシュに読み込む場合、Ｄキャッシュに格納されているページの中でアクセス頻度が最も低いページが（そのページが変更されている場合）主メモリに書き戻される。従って、プロセッサがＤキャッシュのいずれかの格納データを修正した場合、そのページが主メモリ１３０に書き戻されるまで、その修正はＤキャッシュ１５０に保持されている。
【００２４】
図３は、４つの命令の処理を示す概略的タイミング図である。時間は図の上から下に進むものとして示されている。明瞭さのために、命令の実行を拡大しているため、垂直方向の軸は正確な縮尺で描かれていない。
【００２５】
図の一番上に、フェッチされデコードされる４つの命令Ｉ１、Ｉ２、Ｉ３、Ｉ４のグループが示されている。このオペレーションは４つの命令すべてに対して並行してなされ、本実施形態では２エミュレートクロックサイクル（フェッチに１サイクル、デコードに１サイクル）を要する。
【００２６】
次いで、これらの命令が実行される。本実施形態では、Ｉ１はＩ２の実行が開始される前に実行され、以下同様である。しかし、他の実施形態では、命令の実行をエミュレートするために必要なオペレーションは、ある程度オーバーラップするように構成されていてもよい。いずれにしても、Ｉ１の実行の完了はＩ２の実行の完了より前に生じ、以下同様である。明瞭さのために垂直方向の縮尺が拡大されてはいるが、４つの命令Ｉ１−Ｉ４の実行は全部で４エミュレートクロックサイクルを要する。
【００２７】
従って、４つの命令のフェッチ、デコード、実行には６エミュレートサイクルを要する。
【００２８】
エミュレーションシステムにおいて４つの命令の実行が完了すると、次の４つの命令をフェッチし、デコードすることができ、以下同様である。
【００２９】
本実施形態において、各キャッシュページは４キロバイトの長さであり、命令はそれぞれ４バイトの長さである。それぞれ４つの命令からなる命令グループは１６バイト境界に配列され、従って１グループの４つの命令のフェッチが２キャッシュページにわたることはない。これによりキャッシュをより効率的に使用することができ、本システムでは特定の命令のフェッチオペレーションに対して主メモリから２キャッシュページを取り出す必要はない。
【００３０】
１グループが４つの命令からなることにより、ベクトル（ホスト）プロセッサ１１０をより効率的に使用することができる。本実施形態においては、ベクトルプロセッサ１１０は単一の並列オペレーションで１６バイト値を処理することができる。
【００３１】
図４および図５は、命令のうち１つ（この例では、命令Ｉ２）が分岐命令であるオペレーション関する図である。この状況は図４に略図的に示されており、その図において矢印は、命令Ｉ２がプログラムのフローをメモリの他の位置に分岐させることを示しており、命令Ｉ３およびＩ４を表示する必要はない。
【００３２】
図５を参照すると、４つの命令Ｉ１−Ｉ４すべてが前と同様にフェッチされデコードされる。しかし、命令Ｉ２が分岐命令であることが明らかになるやいなや、命令Ｉ３およびＩ４の実行は放棄される。命令Ｉ２のエミューレート実行の終わりに、次の（即ち、分岐先アドレスからの）４つの命令がフェッチされ、プロセスが継続される。
【００３３】
図６はグループ内にターゲット命令を含む命令のグループを概略的に示したものである。この例の場合、他で実行された分岐命令の結果、プログラムのフローがこのグループ内の命令の１つへと分岐させられた。
【００３４】
原理的には、４つの命令をフェッチすることによりターゲット命令が常に４つの命令からなる１グループの最初の命令（ここでの表記では、命令Ｉ１）となるようにすることが可能である。しかし、それは上に述べた取り決め、すなわち単一のオペレーションに対して複数のキャッシュページからフェッチすることを避けるという取り決めを破る結果になり得る。従って、１６バイト境界が維持されるが、それは、１つのグループの４つの命令のどの命令もそれに先立つ分岐オペレーションのターゲットになり得ることを意味する。
【００３５】
図６および図７に示された例では、三番目の命令Ｉ３がターゲットである。これは、この特定のグループでは命令Ｉ１およびＩ２を実行する時点が存在しないことを意味する。
【００３６】
図７を参照すると、グループの４つの命令すべてが正規の命令としてフェッチされデコードされる。４つの命令すべてをフェッチしデコードしても時間的な不利益は無い。なぜなら、それがプロセッサ１１０による並列オペレーションだからである。しかし、デコードされた命令Ｉ１およびＩ２を実際に実行する時点は存在しないので、図７に示されているように、これら２つの命令の実行は回避され、命令Ｉ３から実行が開始される。
【００３７】
図８は、プログラムのフロー中にブレークがある例を示すものであり、実行不可能な命令Ｉ２が含まれている。実行不可能な命令とは、例えば、存在しないメモリアドレス等への分岐あるいは参照を含むものである。ここでは図８および図９に示されているように、命令Ｉ２が実行不可能であることが明らかになるやいなや、その実行が放棄される。問題の性質に依存して、命令Ｉ３およびＩ４から実行を継続することもできるし、例外状況を開始することもできる。例えば、問題（どんなものであれ）の解決を意図して例外処理ルーティンに分岐し、ついで制御をＩ２に戻すことができる。
【図面の簡単な説明】
【００３８】
以下、本発明の実施形態を添付図面を参照して説明するが、これらの実施形態は説明のためだけのものである。
【図１】データ処理システムの概略図である。
【図２】データキャッシュおよび命令キャッシュを用いるデータ処理システムの概略図である。
【図３】４つの命令の処理を示す概略的タイミング図である。
【図４】第三の命令が分岐命令である命令のグループを概略的に示したものである。
【図５】図３に示した４つの命令の処理を示す概略的タイミング図である。
【図６】第三の命令がターゲット命令である命令のグループを概略的に示したものである。
【図７】図６に示した４つの命令の処理を示す概略的タイミング図である。
【図８】第二の命令が実行不可能な命令である命令のグループを概略的に示したものである。
【図９】図８に示した４つの命令の処理を示す概略的タイミング図である。
【符号の説明】
【００３９】
１０…プロセッサ、２０…主メモリ、１１０…プロセッサ、１２０…            エミュレーション用ソフトウェア、１３０…主メモリ、１４０…Ｉキャッシュ、１５０…Ｄキャッシュ
【図１】
0005100030.tif 000002
【図２】
0005100030.tif 000003
【図３】
0005100030.tif 000004
【図４】
0005100030.tif 000005
【図５】
0005100030.tif 000006
【図６】
0005100030.tif 000007
【図７】
0005100030.tif 000008
【図８】
0005100030.tif 000009
【図９】
0005100030.tif 000010