特許第6267513号(P6267513)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エイアールエム リミテッドの特許一覧

特許6267513同一のデータ条件に依存する、隣接する命令の実行の制御
<>
  • 特許6267513-同一のデータ条件に依存する、隣接する命令の実行の制御 図000002
  • 特許6267513-同一のデータ条件に依存する、隣接する命令の実行の制御 図000003
  • 特許6267513-同一のデータ条件に依存する、隣接する命令の実行の制御 図000004
  • 特許6267513-同一のデータ条件に依存する、隣接する命令の実行の制御 図000005
  • 特許6267513-同一のデータ条件に依存する、隣接する命令の実行の制御 図000006
  • 特許6267513-同一のデータ条件に依存する、隣接する命令の実行の制御 図000007
  • 特許6267513-同一のデータ条件に依存する、隣接する命令の実行の制御 図000008
  • 特許6267513-同一のデータ条件に依存する、隣接する命令の実行の制御 図000009
  • 特許6267513-同一のデータ条件に依存する、隣接する命令の実行の制御 図000010
  • 特許6267513-同一のデータ条件に依存する、隣接する命令の実行の制御 図000011
  • 特許6267513-同一のデータ条件に依存する、隣接する命令の実行の制御 図000012
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6267513
(24)【登録日】2018年1月5日
(45)【発行日】2018年1月24日
(54)【発明の名称】同一のデータ条件に依存する、隣接する命令の実行の制御
(51)【国際特許分類】
   G06F 9/32 20060101AFI20180115BHJP
   G06F 9/38 20060101ALI20180115BHJP
   G06F 8/41 20180101ALI20180115BHJP
【FI】
   G06F9/32 320F
   G06F9/38 310G
   G06F9/38 330D
   G06F9/44 322E
【請求項の数】16
【全頁数】19
(21)【出願番号】特願2013-552260(P2013-552260)
(86)(22)【出願日】2012年1月26日
(65)【公表番号】特表2014-504770(P2014-504770A)
(43)【公表日】2014年2月24日
(86)【国際出願番号】GB2012050161
(87)【国際公開番号】WO2012107737
(87)【国際公開日】20120816
【審査請求日】2015年1月19日
【審判番号】不服2016-11480(P2016-11480/J1)
【審判請求日】2016年7月29日
(31)【優先権主張番号】12/929,667
(32)【優先日】2011年2月7日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】594154428
【氏名又は名称】エイアールエム リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】特許業務法人浅村特許事務所
(72)【発明者】
【氏名】リード、アラステア デイヴィッド
【合議体】
【審判長】 高木 進
【審判官】 辻本 泰隆
【審判官】 須田 勝巳
(56)【参考文献】
【文献】 特開平2−227731(JP,A)
【文献】 米国特許出願公開第2010/0262813(US,A1)
【文献】 米国特許第5799180(US,B1)
【文献】 特開平4−137169(JP,A)
【文献】 特開平10−320380(JP,A)
【文献】 特開平11−85516(JP,A)
【文献】 GUGATech,”分岐予測とパイプラインの関係はいかなるものか?”,C MAGAZINE,ソフトバンククリエイティブ株式会社,2006年1月1日,第18巻,第1号,98〜102頁
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30- 9/42
G06F17/10-17/18
G06F15/80
(57)【特許請求の範囲】
【請求項1】
命令のストリームをデコードするように構成される命令デコーダと、
前記デコードされた命令のストリームを処理するように構成されるデータプロセッサと、を備え、
前記データプロセッサは、前記命令のストリームを分析し、前記命令のストリームが、複数の隣接する命令であって、当該複数の隣接する命令のそれぞれのパイプラインでの実行は、同じデータ条件が満たされているということに依存し、当該複数の隣接する命令のそれぞれのパイプラインでの実行は、前記データ条件が満たされていないとき、どのデータレジスタ内に記憶された値をも変化させない、複数の隣接する命令を含むかを検出するよう構成され前記命令のストリームが前記複数の隣接する命令を含むことの検出に応答して、前記データプロセッサは、
前記データ条件が満たされているかどうかの判定を開始し、
前記データ条件が実際に満たされておらず、しかし前記データプロセッサが、前記データ条件が満たされているか否かをいまだ判定していないときに、前記複数の隣接する命令のパイプラインでの実行がどのデータレジスタ内に記憶された値も変化させない前記複数の隣接する命令のパイプラインでの実行を、前記データ条件が満たされているか否かの判定を待つことなしに開始し、
前記データ条件が満たされていないという判定に応答して、
未だパイプラインで実行されていない前記複数の隣接する命令のうちの任意の中間の命令をパイプラインで実行せず、前記データレジスタ内の前記値を回復せずに、前記複数の隣接する命令後にパイプラインで実行されるべき次の命令にスキップし、前記次の命令におけるパイプラインでの実行を継続する、
ように構成される、データ処理装置。
【請求項2】
前記データ処理装置は、データ記憶をさらに備え、前記データ処理装置は、前記複数の隣接する命令に応答して、標的場所として、前記複数の隣接する命令のパイプラインでの実行後パイプラインで実行されるべき前記次の命令の場所を識別する識別子を前記データ記憶内に記憶し、スキップフラグを前記データ記憶内に設定し、前記スキップフラグは、前記データプロセッサに、前記データ条件が満たされていないことに応答して、前記データプロセッサが、プログラムカウンタを前記標的場所に対応するアドレスで更新すべきであることを示す、請求項1に記載のデータ処理装置。
【請求項3】
前記次の命令の場所を識別する前記識別子は、アドレスを備える、請求項2に記載のデータ処理装置。
【請求項4】
前記複数の隣接する命令は、ベクトルデータ要素を処理するためのベクトル命令を備え、各ベクトル命令は、前記ベクトルデータ要素内のどの要素が処理されるかを制御するマスクを備え、前記マスクがゼロを備えることは、処理されるべきデータ要素がないことを示し、かつ、前記データ条件が満たされていないことを示す、請求項1から3のいずれか1つに記載のデータ処理装置。
【請求項5】
前記複数の隣接する命令は、複数の命令を備え、それぞれ、同一の述語を備え、前記述語が満たされている場合にのみ、前記命令を完了して、任意の記憶されたデータ値を更新し、前記データ処理装置は、
前記複数の隣接する命令のパイプラインでの実行を開始し、
前記述語が満たされていないという判定に応答して、
記憶されたデータ値が更新されないように、前記複数の隣接する命令のパイプラインでの実行を終了し、
未だパイプラインで実行されていない前記複数の隣接する命令のうちの任意の中間の命令をパイプラインで実行せずに、前記複数の隣接する命令に続く次の命令にスキップし、前記次の命令におけるパイプラインでの実行を継続する、
ように構成される、請求項1から3のいずれか1つに記載のデータ処理装置。
【請求項6】
前記データ処理装置は、データ記憶および検出回路をさらに備え、
前記検出回路は、前記データ条件が満たされていないということに依存して、前記複数の隣接する命令を迂回して前方に分岐するための条件付き分岐命令の検出に応答して、
前記標的場所として、前記分岐命令の標的場所を示す値を前記データ記憶内に記憶し、前記スキップフラグ値を前記データ記憶内に設定し、
前記データプロセッサは、前記データ条件が満たされていないということに依存して、前記複数の隣接する命令を迂回して前方に分岐するための条件付き分岐命令を検出したことを示す前記スキップフラグに応答して、前記データ条件が満たされているかどうかの判定を開始し、
前記複数の隣接する命令のパイプラインでの実行を開始し、
前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所に依存した値に設定する、
請求項2または3に記載のデータ処理装置。
【請求項7】
前記条件付き分岐命令は、ベクトル値を条件とし、前記データプロセッサは、前記ベクトル値を試験するためのベクトル試験命令をパイプラインで実行することによって、前記データ条件が満たされているかどうかの前記判定を開始し、前記ベクトル値が、所定の値を備えるという判定に応答して、前記データ条件が満たされていないと判定される、請求項6に記載のデータ処理装置。
【請求項8】
前記データ処理装置は、データ記憶および検出回路をさらに備え、
前記検出回路は、前記データ条件が満たされているということに依存して、前記複数の隣接する命令の先頭へと後方に分岐するための条件付き分岐命令の検出に応答して、
前記標的場所として、前記データ記憶内に前記条件付き分岐命令の次に位置する命令の場所を記憶し、スキップフラグ値を前記データ記憶内に設定し、
前記データプロセッサは、前記データ条件が満たされているということに依存して、前記複数の隣接する命令の先頭へと後方に分岐するための条件付き分岐命令を検出したことを示す前記スキップフラグに応答して、前記データ条件が満たされたかどうかを判定し、
前記複数の隣接する命令のパイプラインでの実行を開始し、
前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所として前記データ記憶内に記憶された値に依存する値に設定する、
請求項2または3に記載のデータ処理装置。
【請求項9】
前記条件付き分岐命令は、ベクトル値を条件とし、前記データプロセッサは、前記ベクトル値を試験するためのベクトル試験命令をパイプラインで実行することによって、前記データ条件が満たされているかどうかの前記判定を開始し、前記ベクトル値が、所定の値を備えるという判定に応答して、前記データ条件が満たされていないと判定される、請求項8に記載のデータ処理装置。
【請求項10】
データ記憶および検出回路をさらに備え、
前記データ条件に依存する前記複数の隣接する命令が後に続く命令であって、前記データ条件と、前記複数の隣接する命令のそれぞれが完了するためには前記データ条件が満たされるべきか満たされないべきかを示す指示子を備える命令を、前記検出回路が検出することに応答して、
前記標的場所として、前記複数の隣接する命令に続く前記次の命令の場所を識別する識別子を記憶し、スキップフラグ値を前記データ記憶内に設定し、
前記データプロセッサは、前記複数の隣接する命令のそれぞれが完了するために生じるべきこととして前記指示子が示すこととは逆のことが生じることと、前記スキップフラグに応答して、前記標的場所にスキップする、
請求項2または3に記載のデータ処理装置、
【請求項11】
前記データ条件が満たされているという判定に応答して、前記データプロセッサは、前記複数の隣接する命令のパイプラインでの実行を継続し、前記スキップフラグをクリアするように構成される、請求項2または3に記載のデータ処理装置。
【請求項12】
前記データ条件が判定される前に、前記隣接する命令の全部をパイプラインで実行することに応じて、前記データプロセッサは、前記スキップフラグをクリアするように構成される、請求項2または3に記載のデータ処理装置。
【請求項13】
データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、
前記アプリケーション内の複数の命令を分析することと、
前記複数の命令が、複数の隣接する命令のパイプラインでの実行が同一のデータ条件に依存し、前記データ条件が満たされないときは、どのデータレジスタ内に記憶された値をも変化させない複数の隣接する命令を含むかを検出することと、
もし、前記複数の命令が前記複数の隣接する命令を含むならば、前記複数の隣接する命令がその後に続くスキップ命令を含む一連の命令を生成することと、を備え、
前記スキップ命令は、標的アドレス及び前記データ条件を指定し、前記標的アドレスは、前記複数の隣接する命令に続く次の命令のアドレスであって、前記スキップ命令は、前記データプロセッサに、
前記データ条件が満たされているかどうかの判定を開始し、
前記データ条件が実際に満たされておらず、しかし、前記データ条件が満たされているか否かをいまだ判定していないときに、前記複数の隣接する命令のパイプラインでの実行がどのデータレジスタ内に記憶された値も変化させない前記複数の隣接する命令のパイプラインでの実行を、前記データ条件が満たされているか否かの判定を待つことなしに開始することと、
前記データ条件が満たされていないという判定に応答して、未だパイプラインで実行されていない前記複数の隣接する命令のうちの任意の中間の命令をパイプラインで実行せず、前記データレジスタ内の前記値を回復せずに、前記複数の隣接する命令に続く次の命令にスキップし、前記次の命令におけるパイプラインでの実行を継続することと、
前記データ条件が満たされているという判定に応答して、前記複数の隣接する命令のパイプラインでの実行を継続することと、
を行わせるためのものである、方法。
【請求項14】
ハードウェアに、請求項13に記載された方法を実行させるための、コンピュータプログラム。
【請求項15】
データを処理する方法であって、
命令のストリームをデコードすることと、
前記デコードされた命令のストリームを処理することと、
前記命令のストリームが、複数の隣接する命令であって、当該複数の隣接する命令のそれぞれのパイプラインでの実行は、同じデータ条件が満たされているということに依存し、当該複数の隣接する命令のそれぞれのパイプラインでの実行は、前記データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないものである、複数の隣接する命令を含むかを検出することと、
前記命令のストリームが前記複数の隣接する命令を含むことの検出に応答して、
前記データ条件が満たされているかどうかの判定を開始することと、
前記データ条件が実際に満たされておらず、しかし、前記データ条件が満たされているか否かをいまだ判定していないときに、前記複数の隣接する命令のパイプラインでの実行がどのデータレジスタ内に記憶された値も変化させない前記複数の隣接する命令のパイプラインでの実行を、前記データ条件が満たされているか否かの判定を待つことなしに開始することと、
前記データ条件が満たされていないという判定に応答して、未だパイプラインで実行されていない前記複数の隣接する命令のうちの任意の中間の命令をパイプラインで実行せず、前記データレジスタ内の前記値を回復せずに、前記複数の隣接する命令後にパイプラインで実行されるべき次の命令にスキップし、前記次の命令におけるパイプラインでの実行を継続することと、
を備える、方法。
【請求項16】
ホストハードウェア上で実行するコンピュータプログラムによって提供される仮想機械であって、請求項1に記載の前記データ処理装置に従って、命令実行環境を提供する、仮想機械。
【発明の詳細な説明】
【技術分野】
【0001】
本技術分野は、データ処理装置に関し、特に、その実行がデータ条件に依存する、述語付き命令の処理に関する。
【背景技術】
【0002】
その実行が特定のデータ条件に依存する、条件付き命令は、公知である。例えば、場所xおよびy内に記憶された2つの値を比較し、xがy以上である場合にそれらを加算し、xがy未満である場合にそれらを相互から減算する、「CMP x y, ADDGE, SUBLT」等の命令がある。
【0003】
複数のデータ要素に関して演算を行うベクトル命令が、より一般的となりつつある。それらは、多くの場合、マスクを使用して、どの要素が処理されるべきかを制御する。例えば、マスク10000001を使用する8要素ベクトル記憶命令の実行は、2つの要素(最初および最後)のみ記憶するであろう。マスクをこのように使用する、ベクトル化コードを書くときの一般的最適化は、一連の命令すべてが、同一のマスクによって制御されることを認識し、マスクがゼロである場合、これらの命令の全部を迂回する分岐を挿入する、すなわち、この場合、命令のいずれも、何もしないことになるようにすることである。したがって、コードは、以下のようになるであろう。

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
【0004】
これは、マスクが頻繁にゼロである場合、試験および分岐は、2つの命令のみ費やし、分岐がなかった場合に行われたであろう10個の命令を行う必要性を回避することになり、非常に有効である。しかしながら、この先行技術のアプローチに関する問題は、分岐が行われるべきかどうかについて、2つのデータ値D1およびD2に依存するという点において、データ依存であることである。データ依存分岐は、非常に予測困難であって、したがって、分岐予測を使用して、演算を加速する場合、分岐は、多くの場合、誤予測され得、分岐が行われるべきではなかったときに行われるべきであると予測された場合には、機械の状態は、分岐が行われる前の状態にロールバックされる必要があるであろう。ベクトル処理を行うとき、ある時点において、機械の状態を保存することは、データワードの長さのため、面積の点において高価となる。
【発明の概要】
【発明が解決しようとする課題】
【0005】
条件付き命令実行の性能を改善できることが望ましいであろう。
【課題を解決するための手段】
【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】
本発明の前述および他の目的、特徴、ならびに利点は、付随の図面と関連して読まれる、例証的実施形態の以下の発明を実施するための形態から明白となるであろう。
【図面の簡単な説明】
【0045】
図1】本発明のある実施形態による、データ処理装置を示す。
図2a】スキップ命令の実施例を示す。
図2b】スキップ命令の実施例を示す。
図3】ループ命令の実施例を示す。
図4】命令パターンスポッティングモードにある処理装置によって入力される状態を示す。
図5】本発明のある実施形態による、コンパイラを図式的に示す。
図6】本発明のさらなる実施形態による、データ処理装置を示す。
図7】本発明のある実施形態による、スキップ演算を行うための方法におけるステップを図示する、流れ図を示す。
図8】本発明のある実施形態による、ループ演算を行うための方法におけるステップを図示する、流れ図を示す。
図9】ループおよびスキップ命令の生成を含む、プログラムをコンパイルする方法におけるステップを示す。
図10】本発明のある実施形態の仮想機械実装を示す。
【発明を実施するための形態】
【0046】
図1は、本発明のある実施形態による、命令ストリームを処理するためのデータ処理装置10を示す。データ処理装置10は、処理されるべき命令を記憶するための命令キャッシュ12を有する。これらの命令は、プログラムカウンタ40内の値に依存して、フェッチユニット14によってフェッチされる。フェッチされた命令は、デコードするために、命令デコーダ16に送信され、次いで、並列実行パイプライン18のうちの1つによって実行される。フェッチユニット、デコードユニット、および実行パイプラインは、命令を処理するための処理回路30を形成する。また、命令の実行を制御する制御値を保持するレジスタを備える、データ記憶20と、さらに、命令の実行によって処理されるデータ値を記憶するためのレジスタを備える、データ記憶35とが存在する。データ記憶20およびデータ記憶35は、いくつかの実施形態では、単一のレジスタバンクを形成し得ることに留意されたい。
【0047】
本発明のある実施形態では、フェッチされた命令は、スキップ命令を含み、そのスキップ命令には、ベクトルマスクが0ではないことをそのすべての条件とする、複数のベクトル命令が続く。ベクトルマスクが0である場合、複数のベクトル命令に応答する、データ要素のいずれに関しても演算は行われない。スキップ命令は、ベクトルマスクを含有するレジスタを識別する、1つのレジスタ識別子と、標的アドレス、すなわち命令ストリーム内の複数のベクトル命令の最後に続く命令のアドレスである、命令アドレスとを含有する。
【0048】
スキップ命令をデコードするとき、デコーダは、標的アドレスの値をレジスタ22内に、およびベクトルマスクレジスタのアドレスをレジスタ23内に書き込み、スキップフラグをレジスタ21内に設定する。スキップフラグは、処理回路30に、スキップが保留中であって、データ条件が満たされていないことが判定される場合、この場合ではベクトルマスクレジスタがゼロを含有する場合には、プログラムカウンタ40が、標的レジスタ22内の値に設定されるべきであることを示す。
【0049】
したがって、スキップ命令に応答して、デコーダは、これらの値をデータ記憶20内に書き込み、パイプライン18のうちの1つは、ベクトルマスクレジスタの値をチェックしそれが0であるかどうかを確認する、ベクトル試験命令を実行する。そして、連続する条件付きベクトル命令の最初の条件付きベクトル命令が、並列パイプライン18の別の1つ内で実行される。デコードおよびフェッチユニットは、ベクトル試験演算が、ベクトルマスクの結果を判定するまで、これらの連続する命令のフェッチおよびデコードを継続する。ベクトルマスクが0である場合、プログラムカウンタは、スキップ命令の標的値に設定され、これが、フェッチされる次の命令となる。ベクトルマスクが0ではない場合、データ記憶20内のスキップ命令に応答して設定されたスキップフラグは、そのようにリセットされ、連続する命令はすべて、実行される。
【0050】
ベクトルマスクが0である場合、ベクトルマスクレジスタの値が判定されている間、いくつかの実行される必要のない命令が実行され得るが、ベクトルマスクが0であるということは、いずれの要素もこれらの演算から記憶されないことを意味し、したがって、状態を回復する必要なく、プロセッサは単に、標的命令にスキップすることができるという点で、レジスタ35内のデータ値は上書きされず、プロセッサの状態は変化されないことに留意されたい。
【0051】
図2aおよび2bは、スキップ命令の実施例と、プロセッサがそれをどのように実装するかを示す。例えば、SKIP P,Lは、条件Pに依存する、アドレスLへの選択的分岐を示す。
【0052】
スキップ命令に続いて、プロセッサが条件Pを直ちに解決することができる場合、プロセッサは、アドレスLに直ちに分岐を行うであろう。プロセッサが条件を直ちに解決できない場合、値Pを条件とする、後続の命令の実行を継続するであろう。プロセッサは、以下の3つのレジスタを修正することによって、未解決のスキップを有することを「記憶する」。pending_skipを真に設定することによって、スキップフラグレジスタを修正する。Lを分岐する先のアドレスとして、それをLに設定することによって、target_skipレジスタを修正し、register_skipを、この場合ベクトルマスクレジスタであるPに設定する。
【0053】
図2bは、プロセッサが本命令に対してどのように作用するかを示す。保留中のスキップフラグが設定されている(pending_skip=true)間に、プログラムカウンタがスキップ命令の標的アドレスに到達する場合、この時点において全ての連続する命令が実行されているので、スキップフラグは(pending_skip=false)にリセットされ、したがって、スキップは、もはや保留中ではない。さらに、スキップ命令が依存する条件が解決される場合、この場合においてはすなわちベクトルマスクレジスタが0である場合は、プログラムカウンタは、target_skipアドレスに設定され、全ての中間の連続する命令はスキップされる。この時点において、スキップフラグは、再び、falseにリセットされる。
【0054】
保留中のスキップフラグを設定し、その条件が満たされない命令をプロセッサが処理しないことを許可することは、プロセッサの性能を改善するであろうが、これは本質的ではなく、これらの命令がスキップされない場合でも、プロセッサは、依然として、正確に実行するであろうことに留意されたい。したがって、プロセッサは、任意の時点において、スキップフラグをリセットすることができる。条件が満たされるかどうかを判定するための比較を行うことが困難であって、したがって、それを条件とする命令の前に行われる可能性が低い場合に、これを行うことになるかもしれない。これは、スキップフラグをリセットすることによって、プロセッサが、標的アドレス、ベクトルマスク、およびフラグを記憶するレジスタを解放するのと平行して行われる。
【0055】
前述の実施例では、スキップ命令はアドレスを指定したが、むしろ、スキップすべき命令の数または命令バイトの数を指定し得ることに留意されたい。本実装が使用された場合、スキップ命令の実行に応答して、カウンタはこの数に設定され、実行される連続する命令の各命令に対してデクリメントされるであろう。カウンタが0に到達すると、スキップ領域を出たことになり、スキップフラグがリセットされる。しかしながら、カウンタが0に到達せず、ベクトルマスクが0であることが見出された場合、カウンタ内に残された数の命令はスキップされ、言い換えると、プログラムカウンタは、その値だけインクリメントされるであろう。
【0056】
述語レジスタのアドレスを指定する代わりに、ベクトルマスクのために使用されるグローバルレジスタが存在する場合もあろう。この場合、スキップ命令が、常時、本レジスタを参照していることがわかっているため、スキップ命令内でレジスタを指定する必要はないであろう。
【0057】
図3は、スキップ命令の一変形であるVLOOP命令と、この命令が有する挙動を示す。
【0058】
この場合、対象のコードは、マスクがすべて0になるまで反復するループである。本コードは、後方分岐を使用するため、前述のスキップコードに対していくつかの重要な点において異なり、この場合、我々は、分岐が行われると推測しなければならず、これは、再び、マスクが0ではないということを推測することに対応する。図2においてスキップ命令のために使用されたのと同一のレジスタが、(図4に示されるように)ターゲットレジスタおよび述語レジスタを示す目的でVLOOP命令のために再び使用されるが、スキップ命令ではなく、VLOOPが保留中であることを示すために、異なるフラグが設定される。スキップ命令におけるのと同様に、いったん述語がすべてゼロであると判定されると、プロセッサはターゲットアドレスにスキップする。このとき、VLOOPフラグは、falseにリセットされる。
【0059】
すぐ上の実施例では、スキップおよびループ演算は、新しい命令であったという点において、アーキテクチャ的に実装された。それらはまた、デコーダの早期段階またはプリデコーダが、同一の述語によって制御される一連の演算をスポッティングすることができるように、マイクロアーキテクチャ式にも実装することができ、もし条件が満たされないならばアーキテクチャ状態はその演算により変化しないという場合には、スキップまたはループ演算のいずれかを実装し得る。この種のパターンのスポッティングは、特に、本願の導入で与えられたような、グローバルレジスタに依存し、グローバルレジスタが、一義的に0に等しい場合に、すべて無演算命令のように挙動するベクトル命令にとって単純であることに留意されたい。
【0060】
図4は、処理装置10が、本パターンスポッティングモードで動作するであろう、異なる状態を図式的に図示する。例えば、フェッチユニット14は、命令をフェッチし、デコード16の早期段階で、特定のパターンコードを検出するであろう。本実施例では、プロセッサは、通常の「a」状態で動作しており、特定のベクトルマスクレジスタPをテストするベクトル試験演算VTESTの検出に応答して、register_skip22をこのベクトルマスク値に設定する。次いで、状態bに進む。後続の命令が通常の命令である場合は、この時点において、スポッティングしている命令パターンがそこにないことを認識して、ルート*に沿って状態aに戻るであろう。しかしながら、述語レジスタPに依存する分岐命令が存在する場合は、target_skipレジスタ23を分岐の標的値、言い換えればLに設定し、状態cに進むであろう。状態cでは、ベクトルマスクレジスタの値が判定されるまで、ベクトルマスクレジスタに依存する連続する演算を処理するであろう。ベクトルマスクレジスタの値が0であれば、プログラムカウンタを標的スキップの値に設定することによって、状態dに進むであろう。次いで、このアドレスの命令を実行し、通常の状態aに戻るであろう。連続する命令の演算中に、ベクトルマスクが0ではないか、あるいはプログラムカウンタが標的スキップを上回って上昇したことが見出された場合は、*によって印されたルートに沿って、通常の状態aに戻るであろう。
【0061】
図5は、本発明のある実施形態による、コンパイラ50を示す。コンパイラ50は、プログラマによって書かれたプログラムを受け取り、それをプロセッサによって処理されるコードに変える。これを行うとき、より効率的に実行するように、コードを最適化するステップを行う。本発明のある実施形態では、図4について記述されたデコーダの早期段階によって実行されるものと同様のパターンマッチングステップを行い、適宜スキップまたはループ機能を行うプロセスを制御するコードを生成する。
【0062】
スキップ機能が併用され得るさらなる命令は、種々の演算が特定の条件に依存して実行されるべきであることを示す、Thumb IT命令である。例えば、ITTTGE命令は、ある値が別の値以上である場合に、次の3つの演算が行われるべきであることを示す。これらの演算の結果は、条件の結果が把握されるまで、書き戻されないので、スキップフラグが設定され、最初の3つの演算が完了する前に条件GEが満たされなかったと判定された場合は、プロセッサは、第4の演算にスキップし得る。
【0063】
図6は、データ処理装置10の別の実施形態を示しており、保留中のベクトルマスクを記憶するように構成されるレジスタバンク20内にレジスタ24が存在する。したがって、skipおよびVLOOP命令は、ベクトルマスクレジスタを指定しない。本実施形態では、標的アドレスをレジスタ内に設定するのではなく、スキップ命令のためのベクトルマスクのような条件に条件付けられた命令の数が、カウンタ42内に設定される。これらの命令のそれぞれが実行されるにつれて、信号がカウンタに送信され、デクリメントされる。条件付き命令が依然として実行されている間に条件が満たされないと判定される場合、プログラムカウンタ40は、カウンタ42内の値をそれに加算することによって、更新される。
【0064】
図7は、本発明のある実施形態による、命令ストリームを処理するための方法におけるステップを図示する、流れ図を示す。命令ストリームはデコードされ、デコーダは、同一のデータ条件に依存し、前述のデータ条件が満たされていないときは、その実行によりデータプロセッサの状態が変化しない、複数の命令を検出する。この検出に応答して、または他の実施形態では、スキップ命令のデコードに応答して、デコーダはスキップフラグを設定し、スキップ演算の標的アドレスを標的アドレスレジスタに書き込む。この標的アドレスは、デコーダがスキップ命令をデコードする場合にスキップ命令内で指定されるか、または同一のデータ条件に依存する複数の命令を検出する場合には、これらの命令に続く命令のアドレスである。
【0065】
プロセッサは、次いで、結果データ条件が未だ判定されていないかどうかを判定する。判定されていない場合、隣接する条件付き命令の第1の命令が実行される。次いで、プログラムカウンタが標的アドレスを上回っているかどうか判定され、そうではない場合、条件が依然として判定されていなければ、後続の条件付き命令が実行され、プログラムカウンタが再びチェックされる。
【0066】
ある時点において、条件の結果が判定され、それが満たされる場合は、スキップフラグがリセットされ、条件付き命令の実行は継続される。条件が満たされていない場合は、プログラムは、プログラムカウンタを標的アドレスに設定することによって、標的アドレスにスキップし、スキップフラグはリセットされる。
【0067】
しかしながら、条件の結果が判定される前に、プログラムカウンタが標的アドレスに到達する場合には、スキップフラグはリセットされ、命令ストリームの実行は、通常の方法で継続する。
【0068】
図8は、複数の条件付き命令への後方ジャンプを含む命令ストリームを処理するための方法におけるステップを図示する、流れ図を示す。命令ストリームはデコードされ、デコーダは、同一のデータ条件に依存し、前述のデータ条件が満たされていないときは、その実行によりデータプロセッサの状態が変化しない複数の命令への、後方ジャンプを検出する。この検出に応答して、または他の実施形態では、ループ命令のデコードに応答して、デコーダはVLOOPフラグを設定し、ループ演算の標的アドレスを標的アドレスレジスタに書き込む。この標的アドレスは、1ずつインクリメントされる、現在のプログラムカウンタである。
【0069】
プロセッサは、次いで、最初の条件付き命令へ後方ジャンプする。次いで、条件結果が未だ判定されていないかどうかが判定される。判定されていない場合、次の条件付き命令が実行され、再び、判定される。条件が判定され、それが満たされている場合は、VLOOPフラグはリセットされ、条件付き命令の実行が継続する。満たされていない場合は、プログラムは標的アドレスにジャンプし、VLOOPフラグをリセットする。条件付き命令が実行されている間に条件が判定されない場合は、標的アドレスへの後方分岐が、プログラムストリーム内で生じ、この時点において、VLOOPフラグは、リセットされるであろう。これらのステップは、図示されない。
【0070】
図9は、プログラムをコンパイルする方法におけるステップを示す。プログラム内の命令は、分析され、同一のデータ条件に依存し、その実行がプロセッサの状態を変化させない、複数の隣接する条件付き命令が存在するかどうか判定される。もしこれらが検出される場合は、これらの命令への後方分岐が存在するかどうか判定される。存在しない場合は、スキップ命令が生成され、複数の条件付き命令がその後に続く命令ストリーム内に配置される。後方分岐が存在する場合、ループ命令が生成される。
【0071】
図10は、使用され得る仮想機械実装を図示する。前述の実施形態は、関係技法をサポートする具体的な処理ハードウェアを動作させるための装置および方法の観点から、本発明を実装するが、また、ハードウェアデバイスのいわゆる仮想機械実装を提供することも可能である。これらの仮想機械実装は、仮想機械プログラム510をサポートするホストオペレーティングシステム520を実行するホストプロセッサ530上で実行される。典型的には、合理的速度で実行される仮想機械実装を提供するために大型の強力なプロセッサが要求されるが、そのようなアプローチは、互換性または再利用の理由から、別のプロセッサにネイティブなコードを実行することを所望するときなどの特定の状況においては、正当化され得る。仮想機械プログラム510は、仮想機械プログラム510によってモデル化されるデバイスである実際のハードウェアによって提供されるであろう、アプリケーションプログラムインターフェースと同一のアプリケーションプログラム500にアプリケーションプログラムインターフェースを提供する。したがって、前述のメモリアクセスの制御を含むプログラム命令は、仮想機械プログラム510を使用して、仮想機械ハードウェアとのその相互作用をモデル化するために、アプリケーションプログラム500の内部から実行されてもよい。
【0072】
本発明の例証的な実施形態が、付随の図面を参照して、本明細書に詳細に説明されたが、本発明は、それらのそのとおりの実施形態に限定されるものではなく、添付の請求項によって定義されるように、本発明の範囲および精神から逸脱することなく、種々の変更および修正が、当業者によってもたらされ得ることを理解されたい。例えば、以下の従属請求項の特徴の種々の組み合わせが、本発明の範囲から逸脱することなく、独立請求項の特徴とともに実施され得る。
図1
図2a
図2b
図3
図4
図5
図6
図7
図8
図9
図10