(57)【要約】  命令のストリームをデコードするように構成される命令デコーダと、デコードされた命令のストリームを処理するように構成されるデータプロセッサと、を有し、命令のストリーム内の複数の隣接する命令に応答して、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、処理装置の状態を変化させず、プロセッサは、データ条件が満たされるかどうかの判定を開始し、複数の隣接する命令の処理を開始し、データ条件が満たされていないという判定に応答して、未だ実行されていない複数の隣接する命令のうちの任意の中間の命令を実行せずに、複数の隣接する命令後に実行されるべき次の命令にスキップし、次の命令において実行を継続するように構成される、データ処理装置が、開示される。
2014504770.tif 000002
【特許請求の範囲】
【請求項１】
命令のストリームをデコードするように構成される命令デコーダと、
前記デコードされた命令のストリームを処理するように構成されるデータプロセッサと、を備え、
前記データプロセッサは、前記命令のストリームを分析し、前記命令のストリーム内の複数の隣接する命令を識別するように構成され、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させず、前記複数の隣接する命令の識別に応答して、前記データプロセッサは、
前記データ条件が満たされているかどうかの判定を開始し、
前記複数の隣接する命令の処理を開始し、
前記データ条件が満たされていないという判定に応答して、
未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続する、
ように構成されるデータ処理装置。
【請求項２】
前記データ処理装置は、データ記憶をさらに備え、前記データ処理装置は、前記複数の隣接する命令に応答して、標的場所として、前記複数の隣接する命令の実行後実行されるべき前記次の命令の場所を識別する識別子を前記データ記憶内に記憶し、スキップフラグを前記データ記憶内に設定し、前記スキップフラグは、前記プロセッサに、前記データ条件が満たされていないことに応答して、前記プロセッサが、プログラムカウンタを前記標的場所に対応するアドレスで更新すべきであることを示す、請求項１に記載のデータ処理装置。
【請求項３】
前記次の命令の場所を識別する前記識別子は、アドレスを備える、請求項２に記載のデータ処理装置。
【請求項４】
前記複数の隣接する命令は、ベクトルデータ要素を処理するためのベクトル命令を備え、各ベクトル命令は、前記ベクトルデータ要素内のどの要素が処理されるかを制御するマスクを備え、前記データ条件が満たされていないことは、ゼロを備える前記マスクが、処理されるべきデータ要素がないことを示す、前記請求項のいずれか１つに記載のデータ処理装置。
【請求項５】
前記複数の隣接する命令は、複数の命令を備え、それぞれ、同一の述語を備え、前記述語は、前記データ条件を判定し、前記述語が満たされていないことは、前記データ条件が満たされていないことに相当し、前記述語が満たされていることに応答して、前記命令のみ完了し、任意の記憶されたデータ値を更新し、前記データ処理装置は、
前記複数の隣接する命令の処理を開始し、
前記データ条件が満たされていないという判定に応答して、
記憶されたデータ値が更新されないように、前記複数の隣接する命令の実行を終了し、
未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続く次の命令にスキップし、前記次の命令における実行を継続する、
ように構成される、請求項１から３のいずれか１つに記載のデータ処理装置。
【請求項６】
前記データ処理装置は、データ記憶および検出回路をさらに備え、
前記検出回路は、前記データ条件が満たされていないということに依存する、条件付き分岐命令の検出に応答して、前記複数の隣接する命令を迂回して前方に分岐し、
前記標的場所として、前記分岐命令の標的場所を示す値を前記データ記憶内に記憶し、前記スキップフラグ値を前記データ記憶内に設定し、
前記プロセッサは、前記分岐を行うべきではないという前記スキップフラグに応答し、前記データ条件が満たされているかどうかの判定を開始し、
前記複数の隣接する命令の実行を開始し、
前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所に依存した値に設定する、
請求項２または３に記載のデータ処理装置。
【請求項７】
前記条件付き分岐命令は、ベクトル値を条件とし、前記プロセッサは、前記ベクトルの値を試験するベクトル試験命令を実行することによって、前記データ条件が満たされているかどうかの前記判定を開始し、前記ベクトル値が、所定の値を備えるという判定に応答して、前記データ条件が満たされていないと判定される、請求項６に記載のデータ処理装置。
【請求項８】
前記データ処理装置は、データ記憶および検出回路をさらに備え、
前記検出回路は、前記データ条件に依存する条件付き分岐命令の検出に応答して、前記複数の隣接する命令の開始へと後方に分岐し、
前記標的場所として、前記データ記憶内に１だけインクリメントされた前記分岐命令の場所を記憶し、スキップフラグ値を前記データ記憶内に設定し、
前記プロセッサは、前記分岐を行うべきという前記スキップフラグに応答して、前記データ条件が満たされたかどうかを判定し、
前記複数の隣接する命令の実行を開始し、
前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所として前記データ記憶内に記憶された値に依存する値に設定する、
請求項２または３に記載のデータ処理装置。
【請求項９】
前記条件付き分岐命令は、ベクトル値を条件とし、前記プロセッサは、前記ベクトルの値を試験するベクトル試験命令を実行することによって、前記データ条件が満たされているかどうかの前記判定を開始し、前記ベクトル値が、所定の値を備えるという判定に応答して、前記データ条件が満たされていないと判定される、請求項８に記載のデータ処理装置。
【請求項１０】
データ記憶および検出回路をさらに備え、
前記検出回路は、前記データ条件が前記命令に従うことに依存する、前記複数の隣接する命令を示す命令の検出に応答し、前記命令は、前記データ条件と、完了されるべき各命令に対して満たされるべきかどうかの指示とを備え、
前記標的場所として、前記複数の命令に続いて、前記次の命令の場所を識別する識別子を記憶し、スキップフラグ値を前記データ記憶内に設定し、
前記プロセッサは、前記データ条件が満たされていないという判定に応答して、前記スキップフラグに応答して、前記標的場所にスキップする、
請求項２または３に記載のデータ処理装置。
【請求項１１】
前記データ条件が満たされているという判定に応答して、前記プロセッサは、前記複数の隣接する命令の実行を継続し、前記スキップフラグをクリアするように構成される、請求項２または３に記載のデータ処理装置。
【請求項１２】
前記データ条件が判定される前に、前記隣接する命令の全部を実行することに応じて、前記プロセッサは、前記スキップフラグをクリアするように構成される、請求項２または３に記載のデータ処理装置。
【請求項１３】
標的レジスタおよびデータ条件レジスタを指定する、少なくとも１つのスキップ命令をデコードするように構成される命令デコーダと、
前記命令デコーダによって制御されるデータ処理演算を行うように構成されるデータプロセッサと、
を備え、前記データプロセッサは、前記デコードされた少なくとも１つのスキップ命令に応答して、前記データ条件の判定を開始し、前記命令ストリーム内の後続命令の処理を開始し、前記データ条件が所定の結果を有していないという判定に応答して、プログラムカウンタを前記標的レジスタ内に記憶された値に依存する値に設定するデータ処理装置。
【請求項１４】
前記データ処理装置は、データ記憶を備え、
前記命令デコーダは、前記少なくとも１つのスキップ命令に応答して、スキップフラグを前記データ記憶内に設定する、請求項１３に記載のデータ処理装置。
【請求項１５】
標的レジスタおよびデータ条件レジスタを指定する、少なくとも１つのループ命令をデコードするように構成される命令デコーダと、
前記命令デコーダによって制御されるデータ処理演算を行うように構成されるデータプロセッサと、を備え、
前記データプロセッサは、前記デコードされた少なくとも１つのループ命令に応答し、前記データ条件の判定を開始し、前記ループの開始時に、前記プログラムカウンタを以前に実行された命令のアドレスに設定し、前記命令ストリーム内の命令の処理を開始し、前記データ条件が所定の結果を有していないという判定に応答して、プログラムカウンタを前記標的レジスタ内に記憶された値に依存する値に設定するデータ処理装置。
【請求項１６】
データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、
前記アプリケーション内の複数の命令を分析することと、
スキップ命令に続いて、複数の隣接する命令を含む、命令のストリームを生成することであって、その実行は、同一のデータ条件に依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないことと、
前記スキップ命令は、標的アドレスを指定し、前記標的アドレスは、前記隣接する命令および前記データ条件に続く次の命令のアドレスであって、前記スキップ命令は、前記データプロセッサによって実行されると、
前記データ条件が満たされているかどうかの判定を開始し、
前記複数の隣接する命令の処理を開始するよう、
前記データプロセッサを制御することと、
前記データ条件が満たされているという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続いて、次の命令にスキップし、前記次の命令における実行を継続することと、
前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することと、
を備える方法。
【請求項１７】
データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、
前記アプリケーション内の複数の命令を分析することと、
複数の隣接する命令の第１の命令のアドレスを指定するループ命令を含む、命令のストリームを生成し、その実行が、同一のデータ条件に依存し、データ条件が満たされていないときのその実行が、データレジスタ内に記憶された値を変化させない命令を備える、前記複数の隣接する命令にジャンプすることと、
前記ループ命令は、前記データ条件および標的アドレスを指定し、前記標的アドレスは、前記ループ命令に続く次の命令のアドレスであって、前記ループ命令は、前記データプロセッサによって実行されると、
前記データ条件が満たされているかどうかの判定を開始し、
前記複数の隣接する命令にジャンプし、その処理を開始するよう、
前記データプロセッサを制御することと、
前記データ条件が満たされているという判定に応答して、  未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記標的アドレスによって指定される前記命令にスキップし、前記命令において、実行を継続することと、
前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することと、
を備える方法。
【請求項１８】
データプロセッサ上で実行されると、請求項１６に記載の方法のステップを行う前記データプロセッサを制御するように演算可能である、スキップ命令を備える、コンピュータプログラムを記憶するコンピュータプログラム製品。
【請求項１９】
データプロセッサ上で実行されると、請求項１７に記載の方法のステップを行う前記データプロセッサを制御するように演算可能である、ループ命令を備える、コンピュータプログラムを記憶するコンピュータプログラム製品。
【請求項２０】
データを処理する方法であって、
命令のストリームをデコードすることと、
前記デコードされた命令のストリームを処理することと、
前記命令のストリーム内の複数の隣接する命令に応答し、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないことと、
前記データ条件が満たされているかどうかの判定を開始することと、
前記複数の隣接する命令の処理を開始することと、
前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続することと、
を備える方法。
【請求項２１】
データ処理装置上で実行するコンピュータプログラムによって提供される仮想機械であって、請求項１に記載の前記データ処理装置に従って、命令実行環境を提供する、仮想機械。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術分野は、データ処理装置に関し、特に、その実行がデータ条件に依存する、述語付き命令の処理に関する。
【背景技術】
【０００２】
その実行が特定のデータ条件に依存する、条件付き命令は、公知である。例えば、場所ｘおよびｙ内に記憶された２つの値を比較し、ｘがｙ以上である場合にそれらを加算し、ｘがｙ未満である場合にそれらを相互から減算する、「CMP x y, ADDGE, SUBLT」等の命令がある。
【０００３】
複数のデータ要素に関して演算を行うベクトル命令が、より一般的となりつつある。それらは、多くの場合、マスクを使用して、どの要素が処理されるべきかを制御する。例えば、マスク１００００００１を使用する８要素ベクトル記憶命令の実行は、２つの要素（最初および最後）のみ記憶するであろう。マスクをこのように使用する、ベクトル化コードを書くときの一般的最適化は、一連の命令すべてが、同一のマスクによって制御されることを認識し、マスクがゼロである場合、これらの命令の全部を迂回する分岐を挿入する、すなわち、この場合、命令のいずれも、何もしないことになるようにすることである。したがって、コードは、以下のようになるであろう。
VCMP D0,D1,D2  ；D1およびD2を比較し、結果マスクをD0に入れる
VTEST D0       ；D0内の全ビットがゼロであるかどうかを試験する
BEQL1          ；マスクがゼロである場合、次の10個の演算にスキップする
D0→VOP1       ；マスクD0の制御下、ベクトル演算1を行う
D0→VOP2       ；マスクD0の制御下、ベクトル演算2を行う
・
・
・
D0→VOP10      ；マスクD0の制御下、ベクトル演算10を行う
L1
【０００４】
これは、マスクが頻繁にゼロである場合、試験および分岐は、２つの命令のみ費やし、分岐がなかった場合に行われたであろう１０個の命令を行う必要性を回避することになり、非常に有効である。しかしながら、この先行技術のアプローチに関する問題は、分岐が行われるべきかどうかについて、２つのデータ値Ｄ１およびＤ２に依存するという点において、データ依存であることである。データ依存分岐は、非常に予測困難であって、したがって、分岐予測を使用して、演算を加速する場合、分岐は、多くの場合、誤予測され得、分岐が行われるべきではなかったときに行われるべきであると予測された場合には、機械の状態は、分岐が行われる前の状態にロールバックされる必要があるであろう。ベクトル処理を行うとき、ある時点において、機械の状態を保存することは、データワードの長さのため、面積の点において高価となる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
条件付き命令実行の性能を改善できることが望ましいであろう。
【課題を解決するための手段】
【０００６】
本発明の第１の態様は、命令のストリームをデコードするように構成される命令デコーダと、前記デコードされた命令のストリームを処理するように構成されるデータプロセッサとを備え、前記データプロセッサは、前記命令のストリームを分析し、前記命令のストリーム内の複数の隣接する命令を識別するように構成され、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させず、前記複数の隣接する命令の識別に応答して、前記データプロセッサは、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の処理を開始し、前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続するように構成される、データ処理装置を提供する。
【０００７】
本発明は、すべて、同一の条件に依存する、条件付きで実行された命令を有し、条件が充足されないとき、その実行が、データ処理装置の状態に影響を及ぼさない場合、条件が判定される前に、これらの命令の処理を開始することができ、これらの命令が、実行されるべきではないことが見出される場合、本時点において、これらの命令の最後にスキップすることができることを認識する。この点において、データ処理装置の状態が変化しないことは、データレジスタ内に記憶されたデータ値が変化されないことを意味するために使用され、したがって、命令は、記憶される任意の値を上書きせず、したがって、実行されるべきではなかった場合、状態回復は、行われる必要はない。この点において、命令の実行は、プログラムカウンタおよび恐らくキャッシュの値等を変化させるであろうが、しかしながら、実行された命令の宛先レジスタ内の値に変化は存在せず、したがって、命令が、実行されるべきではなかったときに実行された場合、ロールバックは要求されず、その実行は、将来的命令の実行に影響を及ぼさないであろう。したがって、状態回復が要求されない場合、状態を不変のままとして見なすことができる。
【０００８】
したがって、付加的回復ステップを行う必要性の短所を伴うことなく、関連付けられた性能および電力利点とともに、いくつかの命令の実行のスキップの利点を達成することができる。本「スキップ」ステップを処理するために要求される、付加的回路と関連付けられたわずかなオーバーヘッドが存在することに留意されたい。
【０００９】
いくつかの実施形態では、データ処理装置は、データ記憶をさらに備え、前記データ処理装置は、前記複数の隣接する命令に応答して、標的場所として、前記複数の隣接する命令の実行後実行されるべき前記次の命令の場所を識別する識別子を前記データ記憶内に記憶し、スキップフラグを前記データ記憶内に設定し、前記スキップフラグは、前記プロセッサに、前記データ条件が満たされていないことに応答して、前記プロセッサが、プログラムカウンタを前記標的場所に対応するアドレスで更新すべきであることを示す。
【００１０】
命令のスキップは、いくつかの方法で実装されることができるが、いくつかの実施形態では、複数の隣接する命令の検出は、プロセッサをトリガし、スキップフラグを設定し、標的場所の指示を記憶し、スキップフラグは、プロセッサに、条件が満たされていないことが判定されるとき、標的場所にスキップすることができることを示す。すなわち、複数の隣接する命令の実行を停止することができ、標的場所における命令の実行を継続することができ、その時点で実行されていない隣接する命令のいずれも、実行されず、現段階において、それらが依存する条件が充足されないことを把握する。
【００１１】
いくつかの実施形態では、前記次の命令の場所を識別する前記識別子は、アドレスを備える。
【００１２】
命令の実行がスキップすべき標的場所は、いくつかの方法で示されることができ、いくつかの実施形態では、単に、アドレスを備える。これが該当する場合、プログラムカウンタは、単に、本情報に関して更新されることができる。他の実施形態では、情報は、隣接する命令の数を識別する識別子として記憶される場合があり、その場合、カウンタは、本値に関して更新されることができ、命令が実行されるたびにデクリメントされることができ、条件が充足されていないと判定される時点で、プログラムカウンタは、カウンタからの情報を使用して、更新されることができる。
【００１３】
いくつかの実施形態では、前記複数の隣接する命令は、ベクトルデータ要素を処理するためのベクトル命令を備え、各ベクトル命令は、前記ベクトルデータ要素内のどの要素が処理されるかを制御するマスクを備え、前記データ条件が満たされていないことは、ゼロを備える前記マスクが、処理されるべきデータ要素がないことを示す。
【００１４】
本技法は、ベクトル命令と併用されるとき、特に、有利である。ベクトルデータ要素を処理するとき、分岐命令を使用して、条件付き命令を中心として分岐させようとした場合、任意の誤予測を考慮するために、分岐におけるプロセッサの状態が、記憶される必要があるであろう。ベクトルデータ要素によって、本状態の記憶は、これらのデータ要素が大きくなるにつれて、非常にコストがかかる。したがって、本技法は、常に、ロールバックの必要性を回避するため、ベクトルデータ要素と併用されるとき、非常に有利である。
【００１５】
ベクトルデータ要素の処理は、多くの場合、ベクトルデータ要素内のどの要素が処理されるべきかを制御する、ベクトルマスクを使用して制御される。マスクがすべてゼロである場合、これは、いずれの要素も処理されるべきではないことを示す。したがって、本発明の実施形態は、データ条件として、ゼロではないマスクを有することができる。したがって、データ条件が満たされていない場合、マスクはすべてゼロであって、この時点において、命令の実行が、プロセッサの状態を変化させず、実際、要求されないことを把握し、未だ実行されていないこれらの命令のいずれもスキップすることができる。また、実行されたが、要求されなかった任意の中間命令が、プロセッサの状態を変化させておらず、したがって、状態のロールバックは、必要とされないことが把握される。
【００１６】
いくつかの実施形態では、前記複数の隣接する命令は、複数の命令を備え、それぞれ、同一の述語を備え、前記述語は、前記データ条件を判定し、前記述語が満たされていることに応答して、前記命令のみ完了し、任意の記憶されたデータ値を更新し、前記データ処理装置は、前記複数の隣接する命令の処理を開始し、前記データ条件が満たされていないという判定に応答して、記憶されたデータ値が更新されないように、前記複数の隣接する命令の実行を終了し、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続く次の命令にスキップし、前記次の命令における実行を継続するように構成される。
【００１７】
本技法はまた、述語に依存して実行する命令との併用に好適である。いったん述語条件が満たされると判定されると、そのような命令のみ完了し、プロセッサの状態を更新する。しかしながら、述語の結果が把握される前に、データの処理を開始する。したがって、これらの命令はまた、条件または述語の結果が把握される前に、実行されることができる。述語が満たされていない場合、記憶するためのその計算のいずれも書き込んでおらず、したがって、プロセッサの状態は、変化せず、その実行を開始しているが、いずれの状態もロールバックされる必要はない。したがって、複数のこれらの命令が、相互に隣接する場合、それらの処理を開始し、述語条件が満たされていないことの判定に応答して、複数の隣接する命令の実行を終了し、それらに続く次の命令にスキップすることが有利である。
【００１８】
いくつかの実施形態では、前記データ処理装置はさらに、データ記憶および検出回路を備え、前記検出回路は、前記データ条件が満たされていないということに依存する、条件付き分岐命令の検出に応答して、前記複数の隣接する命令を迂回して前方に分岐し、前記標的場所として、前記分岐命令の標的場所を示す値を前記データ記憶内に記憶し、前記スキップフラグ値を前記データ記憶内に設定し、前記プロセッサは、前記分岐を行うべきではないという前記スキップフラグに応答し、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の実行を開始し、前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所に依存した値に設定する。
【００１９】
本願の導入に記載されるように、これらの複数の隣接する命令に対処する従来の方法は、それらを中心として分岐させることである。したがって、データ処理装置がデータ条件に続いて、複数のこれらの隣接する命令に依存する条件付き分岐命令を検出するように構成される場合、分岐を行うのではなく、スキッププロシージャを引き起こすことが有利であり得る。したがって、分岐を行い、分岐が誤予測される場合に備えて、状態を記憶する必要がある代わりに、データ処理装置は、命令のパターンを認識し、条件が満たされるかどうかを判定するとき、条件が満たされていない場合、これらの隣接する命令の最後にスキップすることができる一方、条件が満たされる場合、単に、隣接する命令の全部の実行に進み、スキップフラグをクリアするように、スキップフラグを設定した隣接する命令の処理を開始する。
【００２０】
いくつかの実施形態では、前記条件付き分岐命令は、ベクトル値を条件とし、前記プロセッサは、前記ベクトルの値を試験するベクトル試験命令を実行することによって、前記データ条件が満たされているかどうかの判定を開始し、前記ベクトル値が、所定の値を備えるという判定に応答して、前記データ条件が満たされていないと判定される。
【００２１】
いくつかの実施形態では、条件付き分岐命令は、ベクトル値を条件とする。そのような場合、プロセッサは、ベクトル試験命令を実行することによって、データ条件が満たされるかどうかの判定を開始し、次いで、複数の隣接する命令の実行を開始するであろう。ベクトル試験命令からの結果が受信されると、条件が満たされていないことを示す場合、プロセッサは、隣接する命令の最後にスキップし、次の命令からの処理を継続するであろう。
【００２２】
いくつかの実施形態では、前記データ処理装置は、データ記憶および検出回路をさらに備え、前記検出回路は、前記データ条件に依存する条件付き分岐命令の検出に応答して、前記複数の隣接する命令の開始へと後方に分岐し、前記標的場所として、前記データ記憶内に１だけインクリメントされた前記分岐命令の場所を記憶し、スキップフラグ値を前記データ記憶内に設定し、前記プロセッサは、前記分岐を行うべきという前記スキップフラグに応答して、前記データ条件が満たされたかどうかを判定し、前記複数の隣接する命令の実行を開始し、前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所として前記データ記憶内に記憶された値に依存する値に設定する。
【００２３】
本発明の実施形態はまた、同一の条件を条件とする隣接する命令のストリングが、後方分岐によって分岐される場合の後方分岐を解決するために使用することができる。この場合、処理装置が、本命令パターンを認識し、分岐を行い、隣接する命令の実行を開始するであろう。しかしながら、いったん条件が満たされるかどうか判定されると、条件が満たされていない場合、隣接する命令の実行を停止し、行った分岐に続く、プログラムストリーム内の後続命令において、実行を継続するであろう。
【００２４】
再び、条件付き分岐命令が、ベクトルを条件とする場合、プロセッサは、ベクトルの値を試験する、ベクトル試験命令を実行することによって、データ条件が満たされるかどうかを判定する。
【００２５】
いくつかの実施形態では、データ処理装置はさらに、データ記憶および検出回路をさらに備え、前記検出回路は、前記データ条件が前記命令に従うことに依存する、前記複数の隣接する命令を示す命令の検出に応答し、前記命令は、前記データ条件と、完了されるべき各命令に対して満たされるべきかどうかの指示とを備え、前記標的場所として、前記複数の命令に続いて、前記次の命令の場所を識別する識別子を記憶し、スキップフラグ値を前記データ記憶内に設定し、前記プロセッサは、前記データ条件が満たされていないという判定に応答して、前記スキップフラグに応答して、前記標的場所にスキップする。
【００２６】
いくつかの実施形態では、スキップ機能を実装することが有利であろう場合、命令パターンの検出のために提供される検出回路が存在する。
【００２７】
いくつかの実施形態では、前記データ条件が満たされているという判定に応答して、前記プロセッサは、前記複数の隣接する命令の実行を継続し、前記スキップフラグをクリアするように構成される。
【００２８】
プロセッサが、データ条件が満たされることを判定する場合、複数の隣接する命令は、実行される必要があり、その場合、プロセッサは、それらの実行を継続し、スキップフラグをクリアする。
【００２９】
いくつかの実施形態では、前記データ条件が判定される前に、前記隣接する命令の全部を実行することに応じて、前記プロセッサは、前記スキップフラグをクリアするように構成される。
【００３０】
さらに、データ条件が、全隣接する命令が実行される前に、判定されない場合、プロセッサが、スキップすべきかどうかと、この場合、スキップフラグがクリアされるべきかどうかに関しても、もはや関連性はない。
【００３１】
本発明の第２の態様は、標的レジスタおよびデータ条件レジスタを指定する、少なくとも１つのスキップ命令をデコードするように構成される命令デコーダと、前記命令デコーダによって制御されるデータ処理演算を行うように構成されるデータプロセッサと、を備え、前記データプロセッサは、前記デコードされた少なくとも１つのスキップ命令に応答して、前記データ条件の判定を開始し、前記命令ストリーム内の後続命令の処理を開始し、前記データ条件が所定の結果を有していないという判定に応答して、プログラムカウンタを前記標的レジスタ内に記憶された値に依存する値に設定する、データ処理装置を提供する。
【００３２】
データプロセッサは、命令パターンを検出するスキップ命令の機能性を生成することができるが、いくつかの実施形態では、スキップ命令は、プロセッサが、デコードし、実行し、次いで、スキップ機能性を行う、実際の命令である。
【００３３】
いくつかの実施形態では、前記命令デコーダは、前記少なくとも１つのスキップ命令に応答して、スキップフラグを前記データ記憶内に設定する。
【００３４】
デコーダは、いくつかの方法において、スキップ命令に対応してもよいが、いくつかの実施形態では、プロセッサに、データ条件に関する判定の結果を待機しており、いったんその結果を有し、条件が満たされていない場合、スキップ機能を行う必要があることを示す、スキップフラグを設定する。
【００３５】
本発明の第３の態様は、標的レジスタおよびデータ条件レジスタを指定する、少なくとも１つのループ命令をデコードするように構成される命令デコーダと、前記命令デコーダによって制御されるデータ処理演算を行うように構成されるデータプロセッサとを備え、前記データプロセッサは、前記デコードされた少なくとも１つのループ命令に応答し、前記データ条件の判定を開始し、前記ループの開始時に、前記プログラムカウンタを以前に実行された命令のアドレスに設定し、前記命令ストリーム内の命令の処理を開始し、前記データ条件が所定の結果を有していないという判定に応答して、プログラムカウンタを前記標的レジスタ内に記憶された値に依存する値に設定する、データ処理装置を提供する。
【００３６】
利用可能であり得る付加的命令は、ループ命令であって、これは、いったんそれらが依存する条件が満たされていないと判定すると、後方分岐を行う、隣接する命令をスキップすることを可能にする。
【００３７】
本発明の第４の態様は、データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、前記アプリケーション内の複数の命令を分析することと、スキップ命令に続いて、複数の隣接する命令を含む、命令のストリームを生成することであって、その実行は、同一のデータ条件に依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないことと、前記スキップ命令は、標的アドレスを指定し、前記標的アドレスは、前記隣接する命令および前記データ条件に続く次の命令のアドレスであって、前記スキップ命令は、前記データプロセッサによって実行されると、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の処理を開始するよう、前記データプロセッサを制御することと、前記データ条件が満たされているという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続いて、次の命令にスキップし、前記次の命令における実行を継続することと、前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することとを備える、方法を提供する。
【００３８】
コンパイラもまた、コードを分析し、すべて、同一のデータ条件に依存する複数の隣接する命令が存在することの判定に応答して、スキップ命令を生成することができ、その実行は、データ条件が満たされていない場合、プロセッサの状態を変化させないであろう。このように、コンパイラは、プロセッサによって実行される前に、コードの最適化を提供する。
【００３９】
本発明の第５の態様は、データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、前記アプリケーション内の複数の命令を分析することと、複数の隣接する命令の第１の命令のアドレスを指定するループ命令を含む、命令のストリームを生成し、その実行が、同一のデータ条件に依存し、データ条件が満たされていないときのその実行が、データレジスタ内に記憶された値を変化させない命令を備える、前記複数の隣接する命令にジャンプすることと、前記ループ命令は、前記データ条件および標的アドレスを指定し、前記標的アドレスは、前記ループ命令に続く次の命令のアドレスであって、前記ループ命令が、前記データプロセッサによって実行されると、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令にジャンプし、その処理を開始する、前記データプロセッサを制御することと、前記データ条件が満たされているという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記標的アドレスによって指定される前記命令にスキップし、前記命令において、実行を継続することと、前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することとを備える、方法を提供する。
【００４０】
コンパイラはまた、複数の隣接する条件付き命令への後方分岐の検出に応答して、ループ命令を生成してもよい。再び、これは、そのような命令を処理するプロセッサの性能を改善することができる。
【００４１】
本発明の第６の態様は、本発明の第５または第６の態様に従って、方法を行うための装置を制御するためのコンピュータプログラム製品を提供する。
【００４２】
本発明の第７の態様は、データを処理する方法であって、命令のストリームをデコードすることと、前記デコードされた命令のストリームを処理することと、前記命令のストリーム内の複数の隣接する命令に応答して、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないことと、前記データ条件が満たされているかどうかの判定を開始することと、前記複数の隣接する命令の処理を開始することと、前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続することとを備える、方法を提供する。
【００４３】
本発明の第８の態様は、データ処理装置上で実行するコンピュータプログラムによって提供される仮想機械であって、本発明の第１の態様のデータ処理装置に従って、命令実行環境を提供する仮想機械を提供する。
【００４４】
本発明の前述および他の目的、特徴、ならびに利点は、付随の図面と関連して読まれる、例証的実施形態の以下の発明を実施するための形態から明白となるであろう。
【図面の簡単な説明】
【００４５】
【図１】本発明のある実施形態による、データ処理装置を示す。
【図２ａ】スキップ命令の実施例を示す。
【図２ｂ】スキップ命令の実施例を示す。
【図３】ループ命令の実施例を示す。
【図４】命令パターンスポッティングモードにある処理装置によって入力される状態を示す。
【図５】本発明のある実施形態による、コンパイラを図式的に示す。
【図６】本発明のさらなる実施形態による、データ処理装置を示す。
【図７】本発明のある実施形態による、スキップ演算を行うための方法におけるステップを図示する、流れ図を示す。
【図８】本発明のある実施形態による、ループ演算を行うための方法におけるステップを図示する、流れ図を示す。
【図９】ループおよびスキップ命令の生成を含む、プログラムをコンパイルする方法におけるステップを示す。
【図１０】本発明のある実施形態の仮想機械実装を示す。
【発明を実施するための形態】
【００４６】
図１は、本発明のある実施形態による、命令ストリームを処理するためのデータ処理装置１０を示す。データ処理装置１０は、処理されるべき命令を記憶するための命令キャッシュ１２を有する。これらの命令は、プログラムカウンタ４０内の値に依存して、フェッチユニット１４によってフェッチされる。フェッチされた命令は、デコードするために、命令デコーダ１６に送信され、次いで、並列実行パイプライン１８のうちの１つによって実行される。フェッチユニット、デコードユニット、および実行パイプラインは、命令を処理するための処理回路３０を形成する。また、命令の実行を制御する制御値を保持するレジスタを備える、データ記憶２０と、さらに、命令の実行によって処理されるデータ値を記憶するためのレジスタを備える、データ記憶３５とが存在する。データ記憶２０およびデータ記憶３５は、いくつかの実施形態では、単一のレジスタバンクを形成し得ることに留意されたい。
【００４７】
本発明のある実施形態では、フェッチされた命令は、スキップ命令を含み、そのスキップ命令には、ベクトルマスクが０ではないことをそのすべての条件とする、複数のベクトル命令が続く。ベクトルマスクが０である場合、複数のベクトル命令に応答する、データ要素のいずれに関しても演算は行われない。スキップ命令は、ベクトルマスクを含有するレジスタを識別する、１つのレジスタ識別子と、標的アドレス、すなわち命令ストリーム内の複数のベクトル命令の最後に続く命令のアドレスである、命令アドレスとを含有する。
【００４８】
スキップ命令をデコードするとき、デコーダは、標的アドレスの値をレジスタ２２内に、およびベクトルマスクレジスタのアドレスをレジスタ２３内に書き込み、スキップフラグをレジスタ２１内に設定する。スキップフラグは、処理回路３０に、スキップが保留中であって、データ条件が満たされていないことが判定される場合、この場合ではベクトルマスクレジスタがゼロを含有する場合には、プログラムカウンタ４０が、標的レジスタ２２内の値に設定されるべきであることを示す。
【００４９】
したがって、スキップ命令に応答して、デコーダは、これらの値をデータ記憶２０内に書き込み、パイプライン１８のうちの１つは、ベクトルマスクレジスタの値をチェックしそれが０であるかどうかを確認する、ベクトル試験命令を実行する。そして、連続する条件付きベクトル命令の最初の条件付きベクトル命令が、並列パイプライン１８の別の１つ内で実行される。デコードおよびフェッチユニットは、ベクトル試験演算が、ベクトルマスクの結果を判定するまで、これらの連続する命令のフェッチおよびデコードを継続する。ベクトルマスクが０である場合、プログラムカウンタは、スキップ命令の標的値に設定され、これが、フェッチされる次の命令となる。ベクトルマスクが０ではない場合、データ記憶２０内のスキップ命令に応答して設定されたスキップフラグは、そのようにリセットされ、連続する命令はすべて、実行される。
【００５０】
ベクトルマスクが０である場合、ベクトルマスクレジスタの値が判定されている間、いくつかの実行される必要のない命令が実行され得るが、ベクトルマスクが０であるということは、いずれの要素もこれらの演算から記憶されないことを意味し、したがって、状態を回復する必要なく、プロセッサは単に、標的命令にスキップすることができるという点で、レジスタ３５内のデータ値は上書きされず、プロセッサの状態は変化されないことに留意されたい。
【００５１】
図２ａおよび２ｂは、スキップ命令の実施例と、プロセッサがそれをどのように実装するかを示す。例えば、SKIP P,Lは、条件Ｐに依存する、アドレスＬへの選択的分岐を示す。
【００５２】
スキップ命令に続いて、プロセッサが条件Ｐを直ちに解決することができる場合、プロセッサは、アドレスＬに直ちに分岐を行うであろう。プロセッサが条件を直ちに解決できない場合、値Ｐを条件とする、後続の命令の実行を継続するであろう。プロセッサは、以下の３つのレジスタを修正することによって、未解決のスキップを有することを「記憶する」。pending_skipを真に設定することによって、スキップフラグレジスタを修正する。Ｌを分岐する先のアドレスとして、それをＬに設定することによって、target_skipレジスタを修正し、register_skipを、この場合ベクトルマスクレジスタであるＰに設定する。
【００５３】
図２ｂは、プロセッサが本命令に対してどのように作用するかを示す。保留中のスキップフラグが設定されている（pending_skip＝true）間に、プログラムカウンタがスキップ命令の標的アドレスに到達する場合、この時点において全ての連続する命令が実行されているので、スキップフラグは（pending_skip＝false）にリセットされ、したがって、スキップは、もはや保留中ではない。さらに、スキップ命令が依存する条件が解決される場合、この場合においてはすなわちベクトルマスクレジスタが０である場合は、プログラムカウンタは、target_skipアドレスに設定され、全ての中間の連続する命令はスキップされる。この時点において、スキップフラグは、再び、falseにリセットされる。
【００５４】
保留中のスキップフラグを設定し、その条件が満たされない命令をプロセッサが処理しないことを許可することは、プロセッサの性能を改善するであろうが、これは本質的ではなく、これらの命令がスキップされない場合でも、プロセッサは、依然として、正確に実行するであろうことに留意されたい。したがって、プロセッサは、任意の時点において、スキップフラグをリセットすることができる。条件が満たされるかどうかを判定するための比較を行うことが困難であって、したがって、それを条件とする命令の前に行われる可能性が低い場合に、これを行うことになるかもしれない。これは、スキップフラグをリセットすることによって、プロセッサが、標的アドレス、ベクトルマスク、およびフラグを記憶するレジスタを解放するのと平行して行われる。
【００５５】
前述の実施例では、スキップ命令はアドレスを指定したが、むしろ、スキップすべき命令の数または命令バイトの数を指定し得ることに留意されたい。本実装が使用された場合、スキップ命令の実行に応答して、カウンタはこの数に設定され、実行される連続する命令の各命令に対してデクリメントされるであろう。カウンタが０に到達すると、スキップ領域を出たことになり、スキップフラグがリセットされる。しかしながら、カウンタが０に到達せず、ベクトルマスクが０であることが見出された場合、カウンタ内に残された数の命令はスキップされ、言い換えると、プログラムカウンタは、その値だけインクリメントされるであろう。
【００５６】
述語レジスタのアドレスを指定する代わりに、ベクトルマスクのために使用されるグローバルレジスタが存在する場合もあろう。この場合、スキップ命令が、常時、本レジスタを参照していることがわかっているため、スキップ命令内でレジスタを指定する必要はないであろう。
【００５７】
図３は、スキップ命令の一変形であるVLOOP命令と、この命令が有する挙動を示す。
【００５８】
この場合、対象のコードは、マスクがすべて０になるまで反復するループである。本コードは、後方分岐を使用するため、前述のスキップコードに対していくつかの重要な点において異なり、この場合、我々は、分岐が行われると推測しなければならず、これは、再び、マスクが０ではないということを推測することに対応する。図２においてスキップ命令のために使用されたのと同一のレジスタが、（図４に示されるように）ターゲットレジスタおよび述語レジスタを示す目的でVLOOP命令のために再び使用されるが、スキップ命令ではなく、VLOOPが保留中であることを示すために、異なるフラグが設定される。スキップ命令におけるのと同様に、いったん述語がすべてゼロであると判定されると、プロセッサはターゲットアドレスにスキップする。このとき、VLOOPフラグは、falseにリセットされる。
【００５９】
すぐ上の実施例では、スキップおよびループ演算は、新しい命令であったという点において、アーキテクチャ的に実装された。それらはまた、デコーダの早期段階またはプリデコーダが、同一の述語によって制御される一連の演算をスポッティングすることができるように、マイクロアーキテクチャ式にも実装することができ、もし条件が満たされないならばアーキテクチャ状態はその演算により変化しないという場合には、スキップまたはループ演算のいずれかを実装し得る。この種のパターンのスポッティングは、特に、本願の導入で与えられたような、グローバルレジスタに依存し、グローバルレジスタが、一義的に０に等しい場合に、すべて無演算命令のように挙動するベクトル命令にとって単純であることに留意されたい。
【００６０】
図４は、処理装置１０が、本パターンスポッティングモードで動作するであろう、異なる状態を図式的に図示する。例えば、フェッチユニット１４は、命令をフェッチし、デコード１６の早期段階で、特定のパターンコードを検出するであろう。本実施例では、プロセッサは、通常の「ａ」状態で動作しており、特定のベクトルマスクレジスタＰをテストするベクトル試験演算ＶＴＥＳＴの検出に応答して、register_skip２２をこのベクトルマスク値に設定する。次いで、状態ｂに進む。後続の命令が通常の命令である場合は、この時点において、スポッティングしている命令パターンがそこにないことを認識して、ルート＊に沿って状態ａに戻るであろう。しかしながら、述語レジスタＰに依存する分岐命令が存在する場合は、target_skipレジスタ２３を分岐の標的値、言い換えればＬに設定し、状態ｃに進むであろう。状態ｃでは、ベクトルマスクレジスタの値が判定されるまで、ベクトルマスクレジスタに依存する連続する演算を処理するであろう。ベクトルマスクレジスタの値が０であれば、プログラムカウンタを標的スキップの値に設定することによって、状態ｄに進むであろう。次いで、このアドレスの命令を実行し、通常の状態ａに戻るであろう。連続する命令の演算中に、ベクトルマスクが０ではないか、あるいはプログラムカウンタが標的スキップを上回って上昇したことが見出された場合は、＊によって印されたルートに沿って、通常の状態ａに戻るであろう。
【００６１】
図５は、本発明のある実施形態による、コンパイラ５０を示す。コンパイラ５０は、プログラマによって書かれたプログラムを受け取り、それをプロセッサによって処理されるコードに変える。これを行うとき、より効率的に実行するように、コードを最適化するステップを行う。本発明のある実施形態では、図４について記述されたデコーダの早期段階によって実行されるものと同様のパターンマッチングステップを行い、適宜スキップまたはループ機能を行うプロセスを制御するコードを生成する。
【００６２】
スキップ機能が併用され得るさらなる命令は、種々の演算が特定の条件に依存して実行されるべきであることを示す、Ｔｈｕｍｂ  ＩＴ命令である。例えば、ITTTGE命令は、ある値が別の値以上である場合に、次の３つの演算が行われるべきであることを示す。これらの演算の結果は、条件の結果が把握されるまで、書き戻されないので、スキップフラグが設定され、最初の３つの演算が完了する前に条件ＧＥが満たされなかったと判定された場合は、プロセッサは、第４の演算にスキップし得る。
【００６３】
図６は、データ処理装置１０の別の実施形態を示しており、保留中のベクトルマスクを記憶するように構成されるレジスタバンク２０内にレジスタ２４が存在する。したがって、skipおよびVLOOP命令は、ベクトルマスクレジスタを指定しない。本実施形態では、標的アドレスをレジスタ内に設定するのではなく、スキップ命令のためのベクトルマスクのような条件に条件付けられた命令の数が、カウンタ４２内に設定される。これらの命令のそれぞれが実行されるにつれて、信号がカウンタに送信され、デクリメントされる。条件付き命令が依然として実行されている間に条件が満たされないと判定される場合、プログラムカウンタ４０は、カウンタ４２内の値をそれに加算することによって、更新される。
【００６４】
図７は、本発明のある実施形態による、命令ストリームを処理するための方法におけるステップを図示する、流れ図を示す。命令ストリームはデコードされ、デコーダは、同一のデータ条件に依存し、前述のデータ条件が満たされていないときは、その実行によりデータプロセッサの状態が変化しない、複数の命令を検出する。この検出に応答して、または他の実施形態では、スキップ命令のデコードに応答して、デコーダはスキップフラグを設定し、スキップ演算の標的アドレスを標的アドレスレジスタに書き込む。この標的アドレスは、デコーダがスキップ命令をデコードする場合にスキップ命令内で指定されるか、または同一のデータ条件に依存する複数の命令を検出する場合には、これらの命令に続く命令のアドレスである。
【００６５】
プロセッサは、次いで、結果データ条件が未だ判定されていないかどうかを判定する。判定されていない場合、隣接する条件付き命令の第１の命令が実行される。次いで、プログラムカウンタが標的アドレスを上回っているかどうか判定され、そうではない場合、条件が依然として判定されていなければ、後続の条件付き命令が実行され、プログラムカウンタが再びチェックされる。
【００６６】
ある時点において、条件の結果が判定され、それが満たされる場合は、スキップフラグがリセットされ、条件付き命令の実行は継続される。条件が満たされていない場合は、プログラムは、プログラムカウンタを標的アドレスに設定することによって、標的アドレスにスキップし、スキップフラグはリセットされる。
【００６７】
しかしながら、条件の結果が判定される前に、プログラムカウンタが標的アドレスに到達する場合には、スキップフラグはリセットされ、命令ストリームの実行は、通常の方法で継続する。
【００６８】
図８は、複数の条件付き命令への後方ジャンプを含む命令ストリームを処理するための方法におけるステップを図示する、流れ図を示す。命令ストリームはデコードされ、デコーダは、同一のデータ条件に依存し、前述のデータ条件が満たされていないときは、その実行によりデータプロセッサの状態が変化しない複数の命令への、後方ジャンプを検出する。この検出に応答して、または他の実施形態では、ループ命令のデコードに応答して、デコーダはVLOOPフラグを設定し、ループ演算の標的アドレスを標的アドレスレジスタに書き込む。この標的アドレスは、１ずつインクリメントされる、現在のプログラムカウンタである。
【００６９】
プロセッサは、次いで、最初の条件付き命令へ後方ジャンプする。次いで、条件結果が未だ判定されていないかどうかが判定される。判定されていない場合、次の条件付き命令が実行され、再び、判定される。条件が判定され、それが満たされている場合は、VLOOPフラグはリセットされ、条件付き命令の実行が継続する。満たされていない場合は、プログラムは標的アドレスにジャンプし、VLOOPフラグをリセットする。条件付き命令が実行されている間に条件が判定されない場合は、標的アドレスへの後方分岐が、プログラムストリーム内で生じ、この時点において、VLOOPフラグは、リセットされるであろう。これらのステップは、図示されない。
【００７０】
図９は、プログラムをコンパイルする方法におけるステップを示す。プログラム内の命令は、分析され、同一のデータ条件に依存し、その実行がプロセッサの状態を変化させない、複数の隣接する条件付き命令が存在するかどうか判定される。もしこれらが検出される場合は、これらの命令への後方分岐が存在するかどうか判定される。存在しない場合は、スキップ命令が生成され、複数の条件付き命令がその後に続く命令ストリーム内に配置される。後方分岐が存在する場合、ループ命令が生成される。
【００７１】
図１０は、使用され得る仮想機械実装を図示する。前述の実施形態は、関係技法をサポートする具体的な処理ハードウェアを動作させるための装置および方法の観点から、本発明を実装するが、また、ハードウェアデバイスのいわゆる仮想機械実装を提供することも可能である。これらの仮想機械実装は、仮想機械プログラム５１０をサポートするホストオペレーティングシステム５２０を実行するホストプロセッサ５３０上で実行される。典型的には、合理的速度で実行される仮想機械実装を提供するために大型の強力なプロセッサが要求されるが、そのようなアプローチは、互換性または再利用の理由から、別のプロセッサにネイティブなコードを実行することを所望するときなどの特定の状況においては、正当化され得る。仮想機械プログラム５１０は、仮想機械プログラム５１０によってモデル化されるデバイスである実際のハードウェアによって提供されるであろう、アプリケーションプログラムインターフェースと同一のアプリケーションプログラム５００にアプリケーションプログラムインターフェースを提供する。したがって、前述のメモリアクセスの制御を含むプログラム命令は、仮想機械プログラム５１０を使用して、仮想機械ハードウェアとのその相互作用をモデル化するために、アプリケーションプログラム５００の内部から実行されてもよい。
【００７２】
本発明の例証的な実施形態が、付随の図面を参照して、本明細書に詳細に説明されたが、本発明は、それらのそのとおりの実施形態に限定されるものではなく、添付の請求項によって定義されるように、本発明の範囲および精神から逸脱することなく、種々の変更および修正が、当業者によってもたらされ得ることを理解されたい。例えば、以下の従属請求項の特徴の種々の組み合わせが、本発明の範囲から逸脱することなく、独立請求項の特徴とともに実施され得る。
【図１】
2014504770.tif 000003
【図２ａ】
2014504770.tif 000004
【図２ｂ】
2014504770.tif 000005
【図３】
2014504770.tif 000006
【図４】
2014504770.tif 000007
【図５】
2014504770.tif 000008
【図６】
2014504770.tif 000009
【図７】
2014504770.tif 000010
【図８】
2014504770.tif 000011
【図９】
2014504770.tif 000012
【図１０】
2014504770.tif 000013
【手続補正書】
【提出日】平成25年5月7日(2013.5.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
命令のストリームをデコードするように構成される命令デコーダと、
前記デコードされた命令のストリームを処理するように構成されるデータプロセッサと、を備え、
前記データプロセッサは、前記命令のストリームを分析し、前記命令のストリーム内の複数の隣接する命令を識別するように構成され、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させず、前記複数の隣接する命令の識別に応答して、前記データプロセッサは、
前記データ条件が満たされているかどうかの判定を開始し、
前記複数の隣接する命令の処理を、前記データ条件が満たされているか否かの判定を待つことなしに開始し、
前記データ条件が満たされていないという判定に応答して、
未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せず、前記データレジスタ内の前記値を回復せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続する、
ように構成される、データ処理装置。
【請求項２】
前記データ処理装置は、データ記憶をさらに備え、前記データ処理装置は、前記複数の隣接する命令に応答して、標的場所として、前記複数の隣接する命令の実行後実行されるべき前記次の命令の場所を識別する識別子を前記データ記憶内に記憶し、スキップフラグを前記データ記憶内に設定し、前記スキップフラグは、前記プロセッサに、前記データ条件が満たされていないことに応答して、前記プロセッサが、プログラムカウンタを前記標的場所に対応するアドレスで更新すべきであることを示す、請求項１に記載のデータ処理装置。
【請求項３】
前記次の命令の場所を識別する前記識別子は、アドレスを備える、請求項２に記載のデータ処理装置。
【請求項４】
前記複数の隣接する命令は、ベクトルデータ要素を処理するためのベクトル命令を備え、各ベクトル命令は、前記ベクトルデータ要素内のどの要素が処理されるかを制御するマスクを備え、前記データ条件が満たされていないことは、ゼロを備える前記マスクが、処理されるべきデータ要素がないことを示す、前記請求項のいずれか１つに記載のデータ処理装置。
【請求項５】
前記複数の隣接する命令は、複数の命令を備え、それぞれ、同一の述語を備え、前記述語が満たされていることに応答して、前記命令のみ完了し、任意の記憶されたデータ値を更新し、前記データ処理装置は、
前記複数の隣接する命令の処理を開始し、
前記述語が満たされていないという判定に応答して、
記憶されたデータ値が更新されないように、前記複数の隣接する命令の実行を終了し、
未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続く次の命令にスキップし、前記次の命令における実行を継続する、
ように構成される、請求項１から３のいずれか１つに記載のデータ処理装置。
【請求項６】
前記データ処理装置は、データ記憶および検出回路をさらに備え、
前記検出回路は、前記データ条件が満たされていないということに依存する、条件付き分岐命令の検出に応答して、前記複数の隣接する命令を迂回して前方に分岐し、
前記標的場所として、前記分岐命令の標的場所を示す値を前記データ記憶内に記憶し、前記スキップフラグ値を前記データ記憶内に設定し、
前記プロセッサは、前記分岐を行うべきではないという前記スキップフラグに応答し、前記データ条件が満たされているかどうかの判定を開始し、
前記複数の隣接する命令の実行を開始し、
前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所に依存した値に設定する、
請求項２または３に記載のデータ処理装置。
【請求項７】
前記条件付き分岐命令は、ベクトル値を条件とし、前記プロセッサは、前記ベクトルの値を試験するベクトル試験命令を実行することによって、前記データ条件が満たされているかどうかの前記判定を開始し、前記ベクトル値が、所定の値を備えるという判定に応答して、前記データ条件が満たされていないと判定される、請求項６に記載のデータ処理装置。
【請求項８】
前記データ処理装置は、データ記憶および検出回路をさらに備え、
前記検出回路は、前記データ条件に依存する条件付き分岐命令の検出に応答して、前記複数の隣接する命令の開始へと後方に分岐し、
前記標的場所として、前記データ記憶内に１だけインクリメントされた前記分岐命令の場所を記憶し、スキップフラグ値を前記データ記憶内に設定し、
前記プロセッサは、前記分岐を行うべきという前記スキップフラグに応答して、前記データ条件が満たされたかどうかを判定し、
前記複数の隣接する命令の実行を開始し、
前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所として前記データ記憶内に記憶された値に依存する値に設定する、
請求項２または３に記載のデータ処理装置。
【請求項９】
前記条件付き分岐命令は、ベクトル値を条件とし、前記プロセッサは、前記ベクトルの値を試験するベクトル試験命令を実行することによって、前記データ条件が満たされているかどうかの前記判定を開始し、前記ベクトル値が、所定の値を備えるという判定に応答して、前記データ条件が満たされていないと判定される、請求項８に記載のデータ処理装置。
【請求項１０】
データ記憶および検出回路をさらに備え、
前記検出回路は、前記データ条件が前記命令に従うことに依存する、前記複数の隣接する命令を示す命令の検出に応答し、前記命令は、前記データ条件と、完了されるべき各命令に対して満たされるべきかどうかの指示とを備え、
前記標的場所として、前記複数の命令に続いて、前記次の命令の場所を識別する識別子を記憶し、スキップフラグ値を前記データ記憶内に設定し、
前記プロセッサは、前記データ条件が満たされていないという判定に応答して、前記スキップフラグに応答して、前記標的場所にスキップする、
請求項２または３に記載のデータ処理装置、
【請求項１１】
前記データ条件が満たされているという判定に応答して、前記プロセッサは、前記複数の隣接する命令の実行を継続し、前記スキップフラグをクリアするように構成される、請求項２または３に記載のデータ処理装置。
【請求項１２】
前記データ条件が判定される前に、前記隣接する命令の全部を実行することに応じて、前記プロセッサは、前記スキップフラグをクリアするように構成される、請求項２または３に記載のデータ処理装置。
【請求項１３】
データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、
前記アプリケーション内の複数の命令を分析することと、
前記複数の命令が、その実行が同一のデータ条件に依存し、前記データ条件が満たされないときは、データレジスタ内に記憶された値を変化させない複数の隣接する命令を含むかを検出することと、
もし、前記複数の命令が前記複数の隣接する命令を含むならば、前記複数の隣接する命令がその後に続くスキップ命令を含む一連の命令を生成することと、
前記スキップ命令は、標的アドレスを指定し、前記標的アドレスは、前記隣接する命令および前記データ条件に続く次の命令のアドレスであって、前記スキップ命令は、前記データプロセッサによって実行されると、
前記データ条件が満たされているかどうかの判定を開始し、
前記複数の隣接する命令の処理を、前記データ条件が満たされているか否かの判定を待つことなしに開始するよう、
前記データプロセッサを制御することと、
前記データ条件が満たされているという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続いて、次の命令にスキップし、前記次の命令における実行を継続することと、
前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することと、
を備える、方法。
【請求項１４】
データプロセッサ上で実行されると、請求項１３に記載の方法のステップを行う前記データプロセッサを制御するように演算可能である、スキップ命令を備える、コンピュータプログラムを記憶するコンピュータプログラム製品。
【請求項１５】
データを処理する方法であって、
命令のストリームをデコードすることと、
前記デコードされた命令のストリームを処理することと、
前記命令のストリーム内の複数の隣接する命令に応答し、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないことと、
前記データ条件が満たされているかどうかの判定を開始することと、
前記複数の隣接する命令の処理を、前記データ条件が満たされているか否かの判定を待つことなしに開始することと、
前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せず、前記データレジスタ内の前記値を回復せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続することと、
を備える、方法。
【請求項１６】
データ処理装置上で実行するコンピュータプログラムによって提供される仮想機械であって、請求項１に記載の前記データ処理装置に従って、命令実行環境を提供する、仮想機械。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００６
【補正方法】変更
【補正の内容】
【０００６】
本発明の第１の態様は、命令のストリームをデコードするように構成される命令デコーダと、前記デコードされた命令のストリームを処理するように構成されるデータプロセッサとを備え、前記データプロセッサは、前記命令のストリームを分析し、前記命令のストリーム内の複数の隣接する命令を識別するように構成され、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させず、前記複数の隣接する命令の識別に応答して、前記データプロセッサは、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の処理を、前記データ条件が満たされているか否かの判定を待つことなしに開始し、前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せず、前記データレジスタ内の前記値を回復せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続するように構成される、データ処理装置を提供する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００３７
【補正方法】変更
【補正の内容】
【００３７】
本発明の第４の態様は、データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、前記アプリケーション内の複数の命令を分析することと、前記複数の命令が、その実行が同一のデータ条件に依存し、前記データ条件が満たされないときは、データレジスタ内に記憶された値を変化させない複数の隣接する命令を含むかを検出することと、もし、前記複数の命令が前記複数の隣接する命令を含むならば、前記複数の隣接する命令がその後に続くスキップ命令を含む一連の命令を生成することと、前記スキップ命令は、標的アドレスを指定し、前記標的アドレスは、前記隣接する命令および前記データ条件に続く次の命令のアドレスであって、前記スキップ命令は、前記データプロセッサによって実行されると、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の処理を、前記データ条件が満たされているか否かの判定を待つことなしに開始するよう、前記データプロセッサを制御することと、前記データ条件が満たされているという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続いて、次の命令にスキップし、前記次の命令における実行を継続することと、前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することとを備える、方法を提供する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００４２
【補正方法】変更
【補正の内容】
【００４２】
本発明の第７の態様は、データを処理する方法であって、命令のストリームをデコードすることと、前記デコードされた命令のストリームを処理することと、前記命令のストリーム内の複数の隣接する命令に応答して、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないことと、前記データ条件が満たされているかどうかの判定を開始することと、前記複数の隣接する命令の処理を、前記データ条件が満たされているか否かの判定を待つことなしに開始することと、前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せず、前記データレジスタ内の前記値を回復せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続することとを備える、方法を提供する。
【国際調査報告】
2014504770.tif 000014
2014504770.tif 000015
2014504770.tif 000016
2014504770.tif 000017