【課題を解決するための手段】
【0006】
本発明の第1の態様は、命令のストリームをデコードするように構成される命令デコーダと、前記デコードされた命令のストリームを処理するように構成されるデータプロセッサとを備え、前記データプロセッサは、前記命令のストリームを分析し、前記命令のストリーム内の複数の隣接する命令を識別するように構成され、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させず、前記複数の隣接する命令の識別に応答して、前記データプロセッサは、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の処理を
、前記データ条件が満たされているか否かの判定を待つことなしに開始し、前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せず
、前記データレジスタ内の前記値を回復せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続するように構成される、データ処理装置を提供する。
【0007】
本発明は、すべて、同一の条件に依存する、条件付きで実行された命令を有し、条件が充足されないとき、その実行が、データ処理装置の状態に影響を及ぼさない場合、条件が判定される前に、これらの命令の処理を開始することができ、これらの命令が、実行されるべきではないことが見出される場合、本時点において、これらの命令の最後にスキップすることができることを認識する。この点において、データ処理装置の状態が変化しないことは、データレジスタ内に記憶されたデータ値が変化されないことを意味するために使用され、したがって、命令は、記憶される任意の値を上書きせず、したがって、実行されるべきではなかった場合、状態回復は、行われる必要はない。この点において、命令の実行は、プログラムカウンタおよび恐らくキャッシュの値等を変化させるであろうが、しかしながら、実行された命令の宛先レジスタ内の値に変化は存在せず、したがって、命令が、実行されるべきではなかったときに実行された場合、ロールバックは要求されず、その実行は、将来的命令の実行に影響を及ぼさないであろう。したがって、状態回復が要求されない場合、状態を不変のままとして見なすことができる。
【0008】
したがって、付加的回復ステップを行う必要性の短所を伴うことなく、関連付けられた性能および電力利点とともに、いくつかの命令の実行のスキップの利点を達成することができる。本「スキップ」ステップを処理するために要求される、付加的回路と関連付けられたわずかなオーバーヘッドが存在することに留意されたい。
【0009】
いくつかの実施形態では、データ処理装置は、データ記憶をさらに備え、前記データ処理装置は、前記複数の隣接する命令に応答して、標的場所として、前記複数の隣接する命令の実行後実行されるべき前記次の命令の場所を識別する識別子を前記データ記憶内に記憶し、スキップフラグを前記データ記憶内に設定し、前記スキップフラグは、前記プロセッサに、前記データ条件が満たされていないことに応答して、前記プロセッサが、プログラムカウンタを前記標的場所に対応するアドレスで更新すべきであることを示す。
【0010】
命令のスキップは、いくつかの方法で実装されることができるが、いくつかの実施形態では、複数の隣接する命令の検出は、プロセッサをトリガし、スキップフラグを設定し、標的場所の指示を記憶し、スキップフラグは、プロセッサに、条件が満たされていないことが判定されるとき、標的場所にスキップすることができることを示す。すなわち、複数の隣接する命令の実行を停止することができ、標的場所における命令の実行を継続することができ、その時点で実行されていない隣接する命令のいずれも、実行されず、現段階において、それらが依存する条件が充足されないことを把握する。
【0011】
いくつかの実施形態では、前記次の命令の場所を識別する前記識別子は、アドレスを備える。
【0012】
命令の実行がスキップすべき標的場所は、いくつかの方法で示されることができ、いくつかの実施形態では、単に、アドレスを備える。これが該当する場合、プログラムカウンタは、単に、本情報に関して更新されることができる。他の実施形態では、情報は、隣接する命令の数を識別する識別子として記憶される場合があり、その場合、カウンタは、本値に関して更新されることができ、命令が実行されるたびにデクリメントされることができ、条件が充足されていないと判定される時点で、プログラムカウンタは、カウンタからの情報を使用して、更新されることができる。
【0013】
いくつかの実施形態では、前記複数の隣接する命令は、ベクトルデータ要素を処理するためのベクトル命令を備え、各ベクトル命令は、前記ベクトルデータ要素内のどの要素が処理されるかを制御するマスクを備え、前記データ条件が満たされていないことは、ゼロを備える前記マスクが、処理されるべきデータ要素がないことを示す。
【0014】
本技法は、ベクトル命令と併用されるとき、特に、有利である。ベクトルデータ要素を処理するとき、分岐命令を使用して、条件付き命令を中心として分岐させようとした場合、任意の誤予測を考慮するために、分岐におけるプロセッサの状態が、記憶される必要があるであろう。ベクトルデータ要素によって、本状態の記憶は、これらのデータ要素が大きくなるにつれて、非常にコストがかかる。したがって、本技法は、常に、ロールバックの必要性を回避するため、ベクトルデータ要素と併用されるとき、非常に有利である。
【0015】
ベクトルデータ要素の処理は、多くの場合、ベクトルデータ要素内のどの要素が処理されるべきかを制御する、ベクトルマスクを使用して制御される。マスクがすべてゼロである場合、これは、いずれの要素も処理されるべきではないことを示す。したがって、本発明の実施形態は、データ条件として、ゼロではないマスクを有することができる。したがって、データ条件が満たされていない場合、マスクはすべてゼロであって、この時点において、命令の実行が、プロセッサの状態を変化させず、実際、要求されないことを把握し、未だ実行されていないこれらの命令のいずれもスキップすることができる。また、実行されたが、要求されなかった任意の中間命令が、プロセッサの状態を変化させておらず、したがって、状態のロールバックは、必要とされないことが把握される。
【0016】
いくつかの実施形態では、前記複数の隣接する命令は、複数の命令を備え、それぞれ、同一の述語を備え、前記述語は、前記データ条件を判定し、前記述語が満たされていることに応答して、前記命令のみ完了し、任意の記憶されたデータ値を更新し、前記データ処理装置は、前記複数の隣接する命令の処理を開始し、前記データ条件が満たされていないという判定に応答して、記憶されたデータ値が更新されないように、前記複数の隣接する命令の実行を終了し、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続く次の命令にスキップし、前記次の命令における実行を継続するように構成される。
【0017】
本技法はまた、述語に依存して実行する命令との併用に好適である。いったん述語条件が満たされると判定されると、そのような命令のみ完了し、プロセッサの状態を更新する。しかしながら、述語の結果が把握される前に、データの処理を開始する。したがって、これらの命令はまた、条件または述語の結果が把握される前に、実行されることができる。述語が満たされていない場合、記憶するためのその計算のいずれも書き込んでおらず、したがって、プロセッサの状態は、変化せず、その実行を開始しているが、いずれの状態もロールバックされる必要はない。したがって、複数のこれらの命令が、相互に隣接する場合、それらの処理を開始し、述語条件が満たされていないことの判定に応答して、複数の隣接する命令の実行を終了し、それらに続く次の命令にスキップすることが有利である。
【0018】
いくつかの実施形態では、前記データ処理装置はさらに、データ記憶および検出回路を備え、前記検出回路は、前記データ条件が満たされていないということに依存する、条件付き分岐命令の検出に応答して、前記複数の隣接する命令を迂回して前方に分岐し、前記標的場所として、前記分岐命令の標的場所を示す値を前記データ記憶内に記憶し、前記スキップフラグ値を前記データ記憶内に設定し、前記プロセッサは、前記分岐を行うべきではないという前記スキップフラグに応答し、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の実行を開始し、前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所に依存した値に設定する。
【0019】
本願の導入に記載されるように、これらの複数の隣接する命令に対処する従来の方法は、それらを中心として分岐させることである。したがって、データ処理装置がデータ条件に続いて、複数のこれらの隣接する命令に依存する条件付き分岐命令を検出するように構成される場合、分岐を行うのではなく、スキッププロシージャを引き起こすことが有利であり得る。したがって、分岐を行い、分岐が誤予測される場合に備えて、状態を記憶する必要がある代わりに、データ処理装置は、命令のパターンを認識し、条件が満たされるかどうかを判定するとき、条件が満たされていない場合、これらの隣接する命令の最後にスキップすることができる一方、条件が満たされる場合、単に、隣接する命令の全部の実行に進み、スキップフラグをクリアするように、スキップフラグを設定した隣接する命令の処理を開始する。
【0020】
いくつかの実施形態では、前記条件付き分岐命令は、ベクトル値を条件とし、前記プロセッサは、前記ベクトルの値を試験するベクトル試験命令を実行することによって、前記データ条件が満たされているかどうかの判定を開始し、前記ベクトル値が、所定の値を備えるという判定に応答して、前記データ条件が満たされていないと判定される。
【0021】
いくつかの実施形態では、条件付き分岐命令は、ベクトル値を条件とする。そのような場合、プロセッサは、ベクトル試験命令を実行することによって、データ条件が満たされるかどうかの判定を開始し、次いで、複数の隣接する命令の実行を開始するであろう。ベクトル試験命令からの結果が受信されると、条件が満たされていないことを示す場合、プロセッサは、隣接する命令の最後にスキップし、次の命令からの処理を継続するであろう。
【0022】
いくつかの実施形態では、前記データ処理装置は、データ記憶および検出回路をさらに備え、前記検出回路は、前記データ条件に依存する条件付き分岐命令の検出に応答して、前記複数の隣接する命令の開始へと後方に分岐し、前記標的場所として、前記データ記憶内に1だけインクリメントされた前記分岐命令の場所を記憶し、スキップフラグ値を前記データ記憶内に設定し、前記プロセッサは、前記分岐を行うべきという前記スキップフラグに応答して、前記データ条件が満たされたかどうかを判定し、前記複数の隣接する命令の実行を開始し、前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所として前記データ記憶内に記憶された値に依存する値に設定する。
【0023】
本発明の実施形態はまた、同一の条件を条件とする隣接する命令のストリングが、後方分岐によって分岐される場合の後方分岐を解決するために使用することができる。この場合、処理装置が、本命令パターンを認識し、分岐を行い、隣接する命令の実行を開始するであろう。しかしながら、いったん条件が満たされるかどうか判定されると、条件が満たされていない場合、隣接する命令の実行を停止し、行った分岐に続く、プログラムストリーム内の後続命令において、実行を継続するであろう。
【0024】
再び、条件付き分岐命令が、ベクトルを条件とする場合、プロセッサは、ベクトルの値を試験する、ベクトル試験命令を実行することによって、データ条件が満たされるかどうかを判定する。
【0025】
いくつかの実施形態では、データ処理装置はさらに、データ記憶および検出回路をさらに備え、前記検出回路は、前記データ条件が前記命令に従うことに依存する、前記複数の隣接する命令を示す命令の検出に応答し、前記命令は、前記データ条件と、完了されるべき各命令に対して満たされるべきかどうかの指示とを備え、前記標的場所として、前記複数の命令に続いて、前記次の命令の場所を識別する識別子を記憶し、スキップフラグ値を前記データ記憶内に設定し、前記プロセッサは、前記データ条件が満たされていないという判定に応答して、前記スキップフラグに応答して、前記標的場所にスキップする。
【0026】
いくつかの実施形態では、スキップ機能を実装することが有利であろう場合、命令パターンの検出のために提供される検出回路が存在する。
【0027】
いくつかの実施形態では、前記データ条件が満たされているという判定に応答して、前記プロセッサは、前記複数の隣接する命令の実行を継続し、前記スキップフラグをクリアするように構成される。
【0028】
プロセッサが、データ条件が満たされることを判定する場合、複数の隣接する命令は、実行される必要があり、その場合、プロセッサは、それらの実行を継続し、スキップフラグをクリアする。
【0029】
いくつかの実施形態では、前記データ条件が判定される前に、前記隣接する命令の全部を実行することに応じて、前記プロセッサは、前記スキップフラグをクリアするように構成される。
【0030】
さらに、データ条件が、全隣接する命令が実行される前に、判定されない場合、プロセッサが、スキップすべきかどうかと、この場合、スキップフラグがクリアされるべきかどうかに関しても、もはや関連性はない。
【0031】
本発明の第2の態様は、標的レジスタおよびデータ条件レジスタを指定する、少なくとも1つのスキップ命令をデコードするように構成される命令デコーダと、前記命令デコーダによって制御されるデータ処理演算を行うように構成されるデータプロセッサと、を備え、前記データプロセッサは、前記デコードされた少なくとも1つのスキップ命令に応答して、前記データ条件の判定を開始し、前記命令ストリーム内の後続命令の処理を開始し、前記データ条件が所定の結果を有していないという判定に応答して、プログラムカウンタを前記標的レジスタ内に記憶された値に依存する値に設定する、データ処理装置を提供する。
【0032】
データプロセッサは、命令パターンを検出するスキップ命令の機能性を生成することができるが、いくつかの実施形態では、スキップ命令は、プロセッサが、デコードし、実行し、次いで、スキップ機能性を行う、実際の命令である。
【0033】
いくつかの実施形態では、前記命令デコーダは、前記少なくとも1つのスキップ命令に応答して、スキップフラグを前記データ記憶内に設定する。
【0034】
デコーダは、いくつかの方法において、スキップ命令に対応してもよいが、いくつかの実施形態では、プロセッサに、データ条件に関する判定の結果を待機しており、いったんその結果を有し、条件が満たされていない場合、スキップ機能を行う必要があることを示す、スキップフラグを設定する。
【0035】
本発明の第3の態様は、標的レジスタおよびデータ条件レジスタを指定する、少なくとも1つのループ命令をデコードするように構成される命令デコーダと、前記命令デコーダによって制御されるデータ処理演算を行うように構成されるデータプロセッサとを備え、前記データプロセッサは、前記デコードされた少なくとも1つのループ命令に応答し、前記データ条件の判定を開始し、前記ループの開始時に、前記プログラムカウンタを以前に実行された命令のアドレスに設定し、前記命令ストリーム内の命令の処理を開始し、前記データ条件が所定の結果を有していないという判定に応答して、プログラムカウンタを前記標的レジスタ内に記憶された値に依存する値に設定する、データ処理装置を提供する。
【0036】
利用可能であり得る付加的命令は、ループ命令であって、これは、いったんそれらが依存する条件が満たされていないと判定すると、後方分岐を行う、隣接する命令をスキップすることを可能にする。
【0037】
本発明の第4の態様は、データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、前記アプリケーション内の複数の命令を分析することと、
前記複数の命令が、その実行が同一のデータ条件に依存し、前記データ条件が満たされないときは、データレジスタ内に記憶された値を変化させない複数の隣接する命令を含むかを検出することと、もし、前記複数の命令が前記複数の隣接する命令を含むならば、前記複数の隣接する命令がその後に続くスキップ命令を含む一連の命令を生成することと、前記スキップ命令は、標的アドレスを指定し、前記標的アドレスは、前記隣接する命令および前記データ条件に続く次の命令のアドレスであって、前記スキップ命令は、前記データプロセッサによって実行されると、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の処理を
、前記データ条件が満たされているか否かの判定を待つことなしに開始するよう、前記データプロセッサを制御することと、前記データ条件が満たされているという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続いて、次の命令にスキップし、前記次の命令における実行を継続することと、前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することとを備える、方法を提供する。
【0038】
コンパイラもまた、コードを分析し、すべて、同一のデータ条件に依存する複数の隣接する命令が存在することの判定に応答して、スキップ命令を生成することができ、その実行は、データ条件が満たされていない場合、プロセッサの状態を変化させないであろう。このように、コンパイラは、プロセッサによって実行される前に、コードの最適化を提供する。
【0039】
本発明の第5の態様は、データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、前記アプリケーション内の複数の命令を分析することと、複数の隣接する命令の第1の命令のアドレスを指定するループ命令を含む、命令のストリームを生成し、その実行が、同一のデータ条件に依存し、データ条件が満たされていないときのその実行が、データレジスタ内に記憶された値を変化させない命令を備える、前記複数の隣接する命令にジャンプすることと、前記ループ命令は、前記データ条件および標的アドレスを指定し、前記標的アドレスは、前記ループ命令に続く次の命令のアドレスであって、前記ループ命令が、前記データプロセッサによって実行されると、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令にジャンプし、その処理を開始する、前記データプロセッサを制御することと、前記データ条件が満たされているという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記標的アドレスによって指定される前記命令にスキップし、前記命令において、実行を継続することと、前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することとを備える、方法を提供する。
【0040】
コンパイラはまた、複数の隣接する条件付き命令への後方分岐の検出に応答して、ループ命令を生成してもよい。再び、これは、そのような命令を処理するプロセッサの性能を改善することができる。
【0041】
本発明の第6の態様は、本発明の第5または第6の態様に従って、方法を行うための装置を制御するためのコンピュータプログラム製品を提供する。
【0042】
本発明の第7の態様は、データを処理する方法であって、命令のストリームをデコードすることと、前記デコードされた命令のストリームを処理することと、前記命令のストリーム内の複数の隣接する命令に応答して、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないことと、前記データ条件が満たされているかどうかの判定を開始することと、前記複数の隣接する命令の処理を
、前記データ条件が満たされているか否かの判定を待つことなしに開始することと、前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せず
、前記データレジスタ内の前記値を回復せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続することとを備える、方法を提供する。
【0043】
本発明の第8の態様は、データ処理装置上で実行するコンピュータプログラムによって提供される仮想機械であって、本発明の第1の態様のデータ処理装置に従って、命令実行環境を提供する仮想機械を提供する。
【0044】
本発明の前述および他の目的、特徴、ならびに利点は、付随の図面と関連して読まれる、例証的実施形態の以下の発明を実施するための形態から明白となるであろう。