JP4134179B2 - ソフトウエアによる動的予測方法および装置 - Google Patents

ソフトウエアによる動的予測方法および装置 Download PDF

Info

Publication number
JP4134179B2
JP4134179B2 JP2006020403A JP2006020403A JP4134179B2 JP 4134179 B2 JP4134179 B2 JP 4134179B2 JP 2006020403 A JP2006020403 A JP 2006020403A JP 2006020403 A JP2006020403 A JP 2006020403A JP 4134179 B2 JP4134179 B2 JP 4134179B2
Authority
JP
Japan
Prior art keywords
instruction
processor
branch
conditional
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006020403A
Other languages
English (en)
Other versions
JP2006216040A (ja
Inventor
正宏 安江
明之 畠山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Computer Entertainment Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Computer Entertainment Inc filed Critical Sony Computer Entertainment Inc
Publication of JP2006216040A publication Critical patent/JP2006216040A/ja
Application granted granted Critical
Publication of JP4134179B2 publication Critical patent/JP4134179B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

この発明は命令実行を改善するコンピュータ処理のシステムおよび方法に関し、例えばパイプラインプロセッサにおける分岐命令の遅延を低減するシステムおよび方法に関する。
プログラムの実行速度を上げるために、コンピュータのプロセッサは命令バッファを利用することが多い。「命令キャッシュ」ともよばれるそのようなバッファにより、プロセッサが別の命令を実行しているときに、次のいくつかの命令をパイプラインへキューイングすることができる。その結果、プロセッサがひとつの命令の実行が終わると、キャッシュにある次の命令が利用でき、すぐに実行可能となる。
最近のコンピュータシステムの多くは、ハードウエアまたはファームウエアで実装された1以上の命令キャッシュを使用し、命令スループットを改善するパイプラインアーキテクチャをもつプロセッサを利用する。
しかし、条件付ジャンプを処理する場合、命令キャッシュに命令をパイプライン化することは効果的ではないこともある。条件付ジャンプを実行すると、通常次に実行すべき命令群は、いま実行した条件付ジャンプ命令の直後に置かれた、現在命令キャッシュに入っているものであるか、またはキャッシュに入っていない異なるアドレスのものとなる。次に実行すべき命令が命令キャッシュに入っていないアドレスに置かれていれば、必要な命令が命令キャッシュへロードされる間、プロセッサは複数のクロックサイクルにわたり、(NOP命令を実行することにより)実質的に処理を停止することになる。
したがって、条件付分岐やジャンプが設けられると、プロセッサは新しい命令群が読み出されるまで複数のクロックサイクルの間ウエイトする可能性がある。この分岐命令による遅延は「分岐ペナルティ」として知られている。分岐ペナルティは、すでにキャッシュに入っている命令へ分岐する際には短かくなるが、命令がキャッシュにロードされなければならないときは長くなる。
分岐ペナルティの実例として以下のプロセッサ命令群を考える。
Code: Inst A0
Branch COND, L1
Inst B0
L1: Inst C0
Inst C1
このプロセッサ命令群の例でCONDが真(TRUE)、すなわち非零の場合、プログラムの実行は「Branch COND, L1」命令からラベルL1の「Inst C0」へジャンプする。そうでない場合、プログラムの実行はまず「Inst B0」へ進む。「Branch COND, L1」命令を実行しているとき、ラベルL1にある命令がプロセッサの命令バッファに入っていなければ、プロセッサはその命令をバッファに読み込まなければならず、その間、プログラムの命令は全く実行できない。命令が命令バッファに読み込まれる間プロセッサが待機する無駄なクロックサイクルが分岐ペナルティの尺度となる。分岐ペナルティをさらに説明するために、上のプロセッサ命令群の例において実際に分岐が発生し、L1の命令がプロセッサの命令バッファに存在しなかったとする。
実行 サイクル
Inst A0 1
L1へ分岐 2
NOP: ペナルティ 3
NOP: ペナルティ 4
.・・・
NOP: ペナルティ 16
NOP: ペナルティ 17
Inst C0 18
Inst C1 19
簡単のため、ここでは命令、分岐、NOPはいずれも1クロックサイクルで実行されるとする。また、「Inst C0」命令をバッファに供給するために必要なクロックサイクルの数は単に説明のために18とし、18クロック目の前後でプロセッサに利用可能になるものとしている。この例では、「L1へ分岐」命令は2クロックサイクル目で実行されているにも拘わらず、18クロックサイクル目まで待たなければ、「Inst C0」命令が命令バッファに入ってプロセッサから利用可能とならない。したがって、この例で分岐ペナルティは16クロックサイクルとなる。
分岐ペナルティを減らし、またはなくすためにいくつか方法が提案されている。これらの方法はハードウエアによるものとソフトウエアによるものがある。ハードウエアによる方法の中には、プロセッサの命令パイプラインのアーキテクチャを改善し、命令群の中で近い将来分岐が発生するか否かを予測し、プロセッサの命令バッファに必要な命令をプリフェッチまたはプリロードするものがある。理論上、パイプラインプロセッサは正しく整列された連続する命令ストリームを実行する際、マシンクロックサイクル毎に1つの命令を実行することができる。これは仮に各命令が複数の個別のマイクロ命令の実行を含み、または必要とする場合でさえ実現できることがある。
パイプラインアーキテクチャを利用する方法の中には、命令の分岐が発生するか否かを固定的なアルゴリズムで予測するものがある。しかし、アルゴリズムが変えられない以上、プロセッサで実行される各プログラムに最適化することができない欠点がある。
ハードウエアによる別の方法は、分岐履歴テーブル(BHT:branch history table)を用いて分岐を予測する。BHTはビットマップのテーブル形式で、各エントリは実行中のプログラムの分岐命令に対応し、ビットはそれぞれ、分岐するしないに関するひとつの決定を表す。BHTの中には、各分岐命令について1ビットしかもたないものがあり、したがって、分岐命令があるたびに、分岐有無の予測はその命令について前回分岐が発生したか否かに従うに過ぎない。この方法は1ビットの動的予測ともいわれる。1ビットの予測では、ある条件付分岐が実際に発生すると、次回も発生すると予測する。逆に、分岐が発生しなかったときは、次回も発生しないと予測する。
BHTの中には、2ビットの動的予測をするものもある。2ビットの動的予測では、ある条件付分岐が過去2回つづけて発生したとき次回も分岐は発生すると予測する。逆に、過去2回とも分岐が発生しなかったときは、次回も分岐は発生しないと予測する。過去2回のうち分岐が1回だけ発生した場合、次回は直近に分岐が発生していれば発生すると予測し、そうでなければ発生しないと予測する。一般に、分岐がループや例外処理に用いられる場合、2ビットの動的予測を用いるBHTは1ビットのものよりもよい結果をもたらす。分岐はループごと、または処理の実行ごとに1回しか発生しないためである。2ビット予測はより正確になるものの、同時にハードウエアのコストも大きくなる。そのため、いろいろな用途において、対象の状態があまり頻繁に変わらない場合、1ビットの予測で十分な場合もある。
BHTはプロセッサのリソースの相当量を利用するため、分岐ペナルティもかなり大きくなることがある。
一方、ソフトウエアによる方法は、特定のアドレスから命令のプリフェッチを起動する命令が用いられる。実装の例として、「HINT(ADDRESS)」命令の形式を用いる。プロセッサはHINT命令を発見すると即座に「ADDRESS」で示すアドレスを開始アドレスとして命令のプリフェッチを自動的に行う。HINT命令を実際の分岐命令の数命令前置くことにより、プログラマは、プロセッサが次の命令のフェッチを待つためのクロックサイクルを減らすことができる。
しかし、HINT(ADDRESS)命令を利用すると、無条件で命令プリフェッチが発生する点が問題となる。分岐の有無に関係なく、分岐アドレスにある命令がプリフェッチされてしまうので、プラグラマはHINT(ADDRESS)命令をどこに置くべきか決めなければならない。しかし、プログラマは分岐発生を常に正しく予測できるとは限らない。もしプログラマが判断を誤り、HINT(ADDRESS)命令を置いたにも拘わらず分岐が発生しなかった場合、プリフェッチは無駄な処理となる。その場合、誤った命令を捨て、パイプラインをフラッシュし、正しい命令列をリロードするために、大きな時間的ペナルティが生じる。パイプラインのサイズによっては、このペナルティは多大なものとなる。
分岐ペナルティを減らし、またはなくすためのこうしたハードウエア、ソフトウエアによる方法は、分岐の条件が成立する確率がプログラムの実行中変化するという事実も考慮していない。
本発明はこのような従来の課題に鑑みてなされたものであり、本発明のある態様は、プロセッサに分岐動作を実行させるために用いられる分岐命令と関連づけられた条件付プリフェッチ命令の第1部分に含まれる値を特定する処理を含む方法を提供する。つづいて、条件付プリフェッチ命令の第2部分にてターゲット命令のアドレスが特定される。つぎに、条件が満たされたかどうかを確認するために前記の値が評価される。条件が満たされていれば、ターゲット命令のアドレスを開始アドレスとして、1以上の命令がプロセッサの命令バッファにプリフェッチされる。
別の態様では、前記の値が非零のとき、ターゲット命令がプリフェッチされる。
本発明の別の態様は、命令キャッシュをもち、条件付プリフェッチ命令と関連づけられた分岐制御命令を用いるプロセッサを動作させる方法に関する。条件付プリフェッチ命令は条件テスト部分と命令アドレス部分を含む。この方法は以下の処理を含む。(a)前記条件付プリフェッチ命令の条件テスト部分が真であると評価できるか否かを確認する処理、および、(b)前記条件付プリフェッチ命令の条件テスト部分が真であると評価できたとき、前記条件付プリフェッチ命令の命令アドレス部分で示されるアドレスを開始アドレスとして1以上の命令を前記プロセッサの命令バッファにプリロードする処理。
本発明の別の態様は、コンピュータプログラムに関する。このコンピュータプログラムは、プロセッサに以下の処理を実行せしめるものである。このプログラムにより、まず条件付プリフェッチ命令の第1部分に含まれる値が特定される。この条件付プリフェッチ命令は、プロセッサに分岐動作を実行させる分岐命令と関連づけられている。つぎに、条件付プリフェッチ命令の第2部分に含まれる、ターゲット命令のアドレスが特定される。前記の値は、条件が満たされたか否かを確認するために評価される。条件が満たされたとき、プロセッサの命令バッファにターゲット命令のアドレスを開始アドレスとして1以上の命令がプリフェッチされる。
本発明のさらに別の態様はプロセッサに関する。このプロセッサは、分岐命令と関連する条件付プリフェッチ命令を含むプログラムによって制御される。このプログラムによって、プロセッサは以下の処理を実行する。まず、評価されるべき値を特定する、条件付プリフェッチ命令の第1部分をデコードする。この値は真または偽として評価される。値が真と評価されたとき、条件付プリフェッチ命令の第2部分をデコードする。この第2部分は、特定のターゲット命令のアドレスを同定するもので、そのアドレスがプリフェッチされる。このプリフェッチ動作は、特定のターゲット命令をキャッシュからプロセッサの命令バッファへ移動させる動作に関連づけられている。
なお、以上の構成要素の任意の組合せ、本発明の処理や表現、それらの組合せを方法、装置、システムなどの間で変換したもの、本発明の処理をコンピュータによって実行可能なプログラムとしたもの、そのプログラムを記録媒体に格納したものもまた、本発明の態様として有効である。
本発明によれば、プロセッサの分岐動作を効率的に行うことができる。
図1のごとく、本発明の実施の形態に係るコンピュータシステム100は、CPU102と、命令キャッシュ104と、CPU102を命令キャッシュ104へ接続するパイプライン106およびデータバス108を備える。図1にはこれらの部品のみが記載されているが、典型的なシステム100は多数の部品、周辺回路、および通信バスを含みうる。望ましい実施の形態では、システム100は汎用コンピュータであり、通常パーソナルコンピュータに見られるように、例えばディスプレイ、CDROM、ハードディスクドライブ、マウス、キーボード、スピーカ、マイクロフォン、モデムおよびそれらを相互に接続するすべての部品など、付加的なすべての内部部品を有する。これらの部品は図1の明確化のために図示していない。システム100はさらに、ワークステーション、PDA(Personal Digital Assistance)、または命令を実行可能なプロセッサによって制御される装置やシステムを備えてもよい。
CPU102は任意のタイプのプロセッサである。CPU102はマルチプロセッサシステムでもよい。マルチプロセッサシステムでは、図示したものよりも複雑な命令キャッシュ104とパイプライン106が用いられる場合があるが、本発明はそのようなシステムにも適用できる。
命令キャッシュ104は任意のタイプのものでよい。例えば、命令キャッシュ104は4ワードのブロックを有する32キロワードの命令キャッシュでもよい。もちろん、命令キャッシュ104は任意のワード数のブロックをもつ任意のサイズのものでよい。本明細書では「命令キャッシュ」と「命令バッファ」は同じ意味とし、特に使い分けを意図していない。
図1のごとく、CPU102と命令キャッシュ104はパイプライン106によって接続されている。ある実施の形態では、このパイプラインはシステム100が命令キャッシュ104とCPU102の間で命令を管理および移動するために利用するハードウエアとファームウエアの一方または両方を表す。例えば、多くのCPUがそれぞれ対応する命令パイプラインとバッファを管理するための特別な回路をもっている。
望ましい実施の形態では、命令キャッシュ104とパイプライン106はCPU102とともに単一の集積回路(図示せず)のパッケージ内に封入される。パッケージに封入することにより、命令キャッシュ104、パイプライン106、CPU102を近接して配置することができ、消費電力と命令転送時間を最小にすることができる。
ある実施の形態では、命令キャッシュ104とCPU102はそれぞれデータバス108と通信することにより、図示しない他の装置やメモリからの命令とデータの転送を可能とする。
図2は実施の形態に係る方法を説明するフローチャート200を示す。好ましくは、CPUは命令を順に実行する。そのため、図2では「Inst A0」202が最初に実行される。つぎに、CPUは「CPIF(val1, L1)」204を実行する。ここでCPIF命令は条件付命令プリフェッチの例である。この例では、プログラマは「Branch on COND1」命令210の数命令前にCPIF命令を置いている。この配置により、CPUが「Branch on COND1」命令210を実行するよりも前に、必要に応じて、分岐先アドレスにある命令をプリフェッチしておくための時間を作ることができる。
ある実施の形態では、「CPIF(val1, L1)」命令204によって、CPUまたはハードウエアによる命令パイプライン回路は、その命令の「val1」部分を評価する。好ましくは、処理216において、「val1」部分が非零、すなわち真と評価されたとき、CPUまたはハードウエアによる命令パイプライン回路は「L1」で与えられるアドレスにある命令からプリフェッチを始める(218)。
その間CPUは「Inst A1」命令206をつづけて実行することができ、以下、命令列にある他の命令も同様である。ある時点で、ここでは「Inst AN」208と表記された、「Branch on COND1」命令210の直前の命令が実行される。望ましい実施の形態では、「CPIF(val1, L1)」命令の「L1」部分によって与えられるアドレスに置かれた命令のプリフェッチ218は、CPUが「Branch on COND1」命令210を実行する前に完了する。
CPUが「Branch on COND1」命令210を実行するとき、「COND1」で与えられる条件は真または偽のいずれかである。好ましくは、COND1が偽のとき分岐は発生しないものとし、CPUはプログラムを次の命令列「Inst B0」212、「Inst B1」214の順で実行する。逆にCOND1
が真の場合は分岐が発生し、CPUは好ましくは「Inst C0」222、「Inst C1」224の順にプログラムを実行する。CPUが「Branch on COND1」命令210を実行するとき、「L1」部分によって与えられるアドレスに置かれた命令、すなわち、「Inst C0」222、「Inst C1」224などの命令のプリフェッチ218が完了していなければ、分岐ペナルティ220が発生する。
「CPIF(val1, L1)」命令204による分岐有無の予測が外れたとき、より大きな分岐ペナルティが発生する。例えば、「CPIF(val1, L1)」命令204は分岐の発生を予測しつつ、実際には分岐が発生したなったとき、命令キャッシュは「Inst B0」命令212、「Inst B1」命令214が必要なタイミングでこれらを有していない可能性がある。その場合、命令キャッシュをフラッシュしてリフィルする必要が生じうる。これはキャッシュミスとして知られる現象である。同様に、「CPIF(val1, L1)」命令204は分岐が発生しないと予測しつつ、実際には分岐が発生したとき、命令キャッシュは「Inst C0」命令222、「Inst C1」命令224が必要なタイミングでこれらを有していない可能性がある。その場合も命令キャッシュをフラッシュしてリフィルする必要が生じうる。
本発明のある態様は、任意の分岐の発生有無を動的に予測することにより、命令キャッシュのミスの回数を最少化する。ある実施の形態では、この動的予測はCPIF命令に埋め込まれた論理的条件をテストすることによって実現される。テストすべき条件を適切に選択すれば、プログラマは分岐予測の精度を大幅に高めることができる。
図2の例では、CPIF命令の比較的簡単なパラメータ「val1」が、非零(真)であるか零(偽)であるかを確認することによって評価される。非零の場合はプリフェッチを実行し、零の場合は実行しない。同様に、好ましくは、より複雑な「Branch on COND1」命令210の条件「COND1」を評価して分岐の有無を確認する。真または偽の状態が「Branch on COND1」命令の「COND1」と十分に対応するよう「val1」を選択することにより、プログラマは分岐予測の精度を改善できる。実施の形態では、現実には、「val1」と「COND1」を同一のものとしてもよい。
図3は、実施の形態に係る条件付プリフェッチ命令を実行する単純化されたプロセッサによる、より詳細なフローチャート300である。通常動作において、プロセッサは命令ポインタでアドレッシングされる命令をデコードする(302)。プロセッサはデコードした命令が条件付プリフェッチ命令であるか否かを確認する(304)。もし条件付プリフェッチ命令でなければ、プロセッサは命令の実行306へ進む。命令の実行が終わればプロセッサの命令ポインタはインクリメントされ(308)、ポインタが後続の命令を指し、その命令がプロセッサによってデコードされる(302)。
もし命令が条件付プリフェッチ命令だったとき、プロセッサは条件付プリフェッチ命令の「値」部分を評価する(310)。好ましくは、条件付プリフェッチ命令は「CPIF(value, address)」の形式をもつ。ここで「CPIF」は命令ニーモニック、「value」は評価の対象となる式、「address」はvalue が真の場合にプリフェッチされるべき命令のプリフェッチ開始アドレスである。ここでは条件付プリフェッチ命令を表すニーモニックとしてCPIFを使ったが、もちろん、どのようなニーモニックであってもよい。
プロセッサはつづいて条件付プリフェッチ命令の「value」部分を評価する(312)。この値が非零であれば、これは真とされ、プロセッサは条件付プリフェッチ命令の「address」部分で示される位置の命令をプリフェッチする(314)。実施の形態では、プリフェッチされる命令数は任意であるが、命令キャッシュのサイズとプロセッサのパイプラインアーキテクチャとに関連していることが望ましい。
もし条件付プリフェッチ命令の「value」が零の場合、これは偽とされ、プロセッサはプリフェッチ動作を実行しない。そのかわり、プロセッサは処理を続行して命令ポインタをインクリメントし(308)、命令列の次の命令をデコードする(302)。
図3のフローチャートは説明のために簡略化されている。例えば、この技術分野でよく知られるごとく、多くのプロセッサは多様なマルチプロセッシングの中で利用され、その場合、任意の時刻においていくつかの命令がプロセッサのさまざまな実行段階にある。ある実施の形態は、そうしたマルチプロセッシングシステムの利用も想定する。そのような実施の形態では、プロセッサの各クロックサイクルにおいて、いくつかの命令がさまざまな実行段階にある状態を実現すべく、通常、より複雑な命令パイプラインアーキテクチャを利用する。
ある実施の形態では、プロセッサ自身が命令パイプラインと命令キャッシュを管理する。別の実施の形態では、命令パイプラインと命令キャッシュはプロセッサと関連はするものの、プロセッサの一部とはいえないハードウエアによって管理されてもよい。上述のごとく、あるプロセッサが別のプロセッサのために命令パイプラインや命令キャッシュを管理してもよい。
実施の形態の一例として、以下のプロセッサ命令群を考える。
Code: Inst A0
CPIF VAL, L1
Inst A1
Inst A2
Inst A3
Branch COND, L1
Inst B0
L1: Inst C0
Inst C1
このプロセッサ命令群の例では、もし「COND」が真、すなわち非零のとき、プログラムの実行は「Branch COND, L1」命令からラベルL1のある「Inst C0」へジャンプする。「COND」が偽の場合は、プログラムの実行はまず「Inst B0」命令へ進む。「Branch COND, L1」命令が実行されるとき、ラベルL1のある命令がプロセッサの命令バッファになければ、プロセッサに分岐ペナルティが発生する。
条件付プリフェッチ命令のこの用法をさらに説明するために、分岐が発生し、かつL1の位置の命令がプロセッサの命令キャッシュにない場合、上述のプロセッサ命令群の実行時間を検証する。ここでは、クロックサイクルを利用して説明する。
実行 サイクル 注釈
Inst A0 1
CPIF VAL, L1 2 プリフェッチ開始
Inst A1 3
Inst A2 4
Inst A3 5 プリフェッチ完了
L1へ分岐 6
Inst C0 7
Inst C1 8
ここで示したとおり、条件付プリフェッチ動作は、それを使わない場合に比べ、同様の状況においてプロセッサのクロックサイクル数を相当削減することができる。
別の実施の形態における条件付プリフェッチ命令の用途として、C言語のプラグラマによる条件付プリフェッチの利用が考えられる。もちろん、C言語に限らず、アランブラ言語やコンパイラ形式の言語も含む他のプログラミング言語でもよく、C、C++、COBOL、Fortran、Ada、Pascalなどがその例である。さらに、インタプリタ形式の言語でもよく、BASIC、Java(登録商標)、XMLなどがその例である。
C言語によるループの例(擬似コード)は以下のとおりである。
for ( i=0; i<n; i++ )
{
命令・・・
} /* 条件付分岐 */
条件付分岐は、コメント「/* 条件付分岐 */」が置かれた終わりの括弧“}”に暗黙的に含まれている。「命令・・・」が実行されるたびにiはインクリメントされ、nと比較される。iがn未満ならループは繰り返す。これはコンパイルされた機械語では、条件付分岐動作として実装されることが多い。
実施の形態を利用し、プログラマはこのC言語のループを以下のように書き換えてもよい。
L1: for ( i=0; i<n; i++ )
{
CPIF( ( i != n-1), L1 );
命令・・・
} /* 条件付分岐 */
C言語によるこのバージョンでは、forループの先頭にアドレスラベルL1と、ループの最初に条件付プリフェッチ命令「CPIF」を追加している。ここで、条件付プリフェッチ命令について評価される値は(i != n-1)である。この式は、ループの最終回になるまで非零と評価される。そのため、最終回を除くループの各回においてアドレスL1の命令がプリフェッチされる。この方法により、プロセッサに分岐ペナルティを発生させることなく、ループを効率的に処理および実行できる。
ある実施の形態では、分岐ペナルティを最少化するために、CPIF命令とともに、1ビットまたは2ビットの分岐履歴を用いてもよい。例えば、分岐履歴はプロセッサの1ないし2のレジスタに保存してもよい。次の条件付分岐に先立ち、CPIF命令はレジスタに保存された値を評価されるべき式として利用してもよい。従来の分岐履歴テーブルは命令をプリフェッチすべきタイミングを決定する際、過去の履歴のみを利用した。しかし本発明のある態様では、より高いレベルの決定をなすパラメータのひとつとして分岐履歴テーブルに含まれる情報を利用する。この方法により、CPIF命令は1ビットないし2ビットの分岐履歴の利用によって得られる効果を併せ持つことができる。
以上述べたいろいろな実施の形態は互いに排他的ではなく、それらをさまざまな組合せで用いることにより、それぞれ固有の効果を達成することができる。以上に述べた、またはそれ以外の特徴の変形や組合せは、特許請求の範囲に定義した発明から外れることなく利用することができる。したがって、以上に述べた実施の形態の説明は、特許請求の範囲に定義された発明を制限するものではなく、単に例を示すためのものと理解されるべきである。
本発明の実施の形態に係るシステムのブロック図である。 本発明の実施の形態に係る方法を説明するフローチャートである。 本発明の実施の形態に係る方法を説明するフローチャートである。
符号の説明
100 コンピュータシステム、 102 CPU、 104 命令キャッシュ、 106 パイプライン、 108 データバス。

Claims (24)

  1. 以下の処理を含むことを特徴とする方法。
    (a)プロセッサに分岐動作を実行させる分岐命令と関連づけられた条件付プリフェッチ命令の第1部分に含まれる値を特定する処理、
    (b)前記条件付プリフェッチ命令の第2部分に含まれる、ターゲット命令のアドレスを特定する処理、
    (c)条件が満たされたか否かを確認するために前記値を評価する処理、および、
    (d)前記条件が満たされたとき、前記プロセッサの命令バッファに前記ターゲット命令のアドレスを開始アドレスとして1以上の命令をプリフェッチする処理。
  2. 請求項1に記載の方法において、前記値が非零のとき条件が満たされたとみなすことを特徴とする方法。
  3. 請求項1または2に記載の方法において、前記条件付プリフェッチ命令は、前記値に基づいて、前記プロセッサにターゲット命令のプリフェッチを起動せしめることを特徴とする方法。
  4. 請求項1から3のいずれかに記載の方法において、前記条件付プリフェッチ命令に応じ、前記プロセッサのハードウエアパイプラインに1以上の命令をプリロードする過程をさらに含むことを特徴とする方法。
  5. 請求項1から4のいずれかに記載の方法において、前記条件付プリフェッチ命令の第1部分に含まれる値は、前記分岐命令を過去反復したときに分岐が発生したか否かを示す情報を含むことを特徴とする方法。
  6. 請求項1から4のいずれかに記載の方法において、前記条件付プリフェッチ命令の第1部分に含まれる値は、前記分岐命令を過去反復したうちの2回について分岐が発生したか否かを示す情報を含むことを特徴とする方法。
  7. 命令キャッシュを有し、条件付プリフェッチ命令に関連づけられた分岐制御命令を利用するプロセッサを動作させる方法であって、前記条件付プリフェッチ命令は条件テスト部分および命令アドレス部分を有するものであり、以下の処理を含むことを特徴とする方法。
    (a)前記条件付プリフェッチ命令の条件テスト部分が真であると評価できるか否かを確認する処理、および、
    (b)前記条件付プリフェッチ命令の条件テスト部分が真であると評価できたとき、前記条件付プリフェッチ命令の命令アドレス部分で示されるアドレスを開始アドレスとして1以上の命令を前記プロセッサの命令キャッシュにプリロードする処理。
  8. 請求項7に記載の方法において、前記条件テスト部分の値が非零であると評価されたとき、真であることを確認することを特徴とする方法。
  9. 請求項7または8に記載の方法において、前記条件テストの結果に基づいて1以上の命令のプリフェッチを起動する処理をさらに含むことを特徴とする方法。
  10. 請求項7から9のいずれかに記載の方法において、前記条件テスト部分は前記分岐制御命令を過去反復したうち直近に反復した際に分岐が発生したか否かも示すことを特徴とする方法。
  11. 請求項7から9のいずれかに記載の方法において、前記条件テスト部分は前記分岐制御命令を過去反復したうち直近の2回に反復した際に分岐が発生したか否かも示すことを特徴とする方法。
  12. プロセッサに以下の処理を実行せしめることを特徴とするコンピュータプログラム。
    (a)プロセッサに分岐動作を実行させる分岐命令と関連づけられた条件付プリフェッチ命令の第1部分に含まれる値を特定する処理、
    (b)前記条件付プリフェッチ命令の第2部分に含まれる、ターゲット命令のアドレスを特定する処理、
    (c)条件が満たされたか否かを確認するために前記値を評価する処理、および、
    (d)前記条件が満たされたとき、前記プロセッサの命令バッファに前記ターゲット命令のアドレスを開始アドレスとして1以上の命令をプリフェッチする処理。
  13. 請求項12に記載のコンピュータプログラムにおいて、前記条件付プリフェッチ命令は、前記条件の値に基づいて、前記プロセッサにターゲットとなる特定の命令をプロセッサの命令バッファへプリフェッチすることを起動せしめることを特徴とするコンピュータプログラム。
  14. 請求項12または13に記載のコンピュータプログラムにおいて、前記条件付プリフェッチ命令の第1部分はプロセッサのレジスタにロード可能な値を含むことを特徴とするコンピュータプログラム。
  15. 請求項12から14のいずれかに記載のコンピュータプログラムにおいて、前記条件付プリフェッチ命令の第2部分によって特定されたアドレスは、プロセッサキャッシュのオフセットを含むことを特徴とするコンピュータプログラム。
  16. 請求項12から15のいずれかに記載のコンピュータプログラムにおいて、前記条件付プリフェッチ命令はそれに関連するプログラム分岐命令に先だって置くことが可能であり、その結果、プロセッサが前記プログラム分岐命令を実行する前に前記ターゲットとなるアドレスを導くことを可能としたことを特徴とするコンピュータプログラム。
  17. 請求項12から16のいずれかに記載のコンピュータプログラムにおいて、前記条件付プリフェッチ命令は、プロセッサのハードウエアパイプラインへの命令のプリロードをソフトウエアから制御することを許可することを特徴とするコンピュータプログラム。
  18. 請求項12から17のいずれかに記載のコンピュータプログラムにおいて、前記条件付プリフェッチ命令の第1部分に含まれる値は、関連づけられた分岐命令を過去反復したときに分岐が発生したか否かを示す情報を含むことを特徴とするコンピュータプログラム。
  19. 分岐命令と関連する条件付プリフェッチ命令を含むプログラムによって制御されるプロセッサであって、前記プログラムにより、以下の処理を実行することを特徴とするプロセッサ。
    (a)真または偽として評価される値を特定する、前記条件付プリフェッチ命令の第1部分をデコードする処理と、
    (b)特定のターゲット命令のアドレスを同定する、前記条件付プリフェッチ命令の第2部分をデコードする処理と、
    (c)前記値が真と評価されたとき、前記特定のターゲット命令をキャッシュからプロセッサの命令バッファへ移動させる動作に関連づけられたプリフェッチを実行する処理。
  20. 請求項19に記載のプロセッサにおいて、前記特定のターゲット命令のプリフェッチ動作は、前記値の評価結果に基づいて、プロセッサにより実行可能であることを特徴とするプロセッサ。
  21. 請求項19または20に記載のプロセッサにおいて、前記値が非零のとき真と評価され、前記値が零のとき偽と評価されることを特徴とするプロセッサ。
  22. 請求項19から21のいずれかに記載のプロセッサにおいて、前記条件付プリフェッチ命令は、プロセッサのハードウエアパイプラインへの命令のプリロードをソフトウエアから制御することを許可することを特徴とするプロセッサ。
  23. 請求項19から22のいずれかに記載のプロセッサにおいて、前記条件付プリフェッチ命令の第1部分に含まれる評価のための前記値は、前記分岐命令を過去反復したときに分岐が発生したか否かを示す情報を含むことを特徴とするプロセッサ。
  24. 請求項12から18のいずれかに記載のコンピュータプログラムをコンピュータから読み取り可能に格納したことを特徴とする記録媒体。
JP2006020403A 2005-02-04 2006-01-30 ソフトウエアによる動的予測方法および装置 Expired - Fee Related JP4134179B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US65015705P 2005-02-04 2005-02-04

Publications (2)

Publication Number Publication Date
JP2006216040A JP2006216040A (ja) 2006-08-17
JP4134179B2 true JP4134179B2 (ja) 2008-08-13

Family

ID=36979187

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006020403A Expired - Fee Related JP4134179B2 (ja) 2005-02-04 2006-01-30 ソフトウエアによる動的予測方法および装置

Country Status (2)

Country Link
US (2) US7627740B2 (ja)
JP (1) JP4134179B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8533437B2 (en) * 2009-06-01 2013-09-10 Via Technologies, Inc. Guaranteed prefetch instruction
US8595471B2 (en) * 2010-01-22 2013-11-26 Via Technologies, Inc. Executing repeat load string instruction with guaranteed prefetch microcode to prefetch into cache for loading up to the last value in architectural register
CN102736894B (zh) * 2011-04-01 2017-10-24 中兴通讯股份有限公司 一种跳转指令编码的方法和系统
CA2844034C (en) 2011-08-04 2019-07-16 Toray Industries, Inc. Pharmaceutical composition for treatment and/or prophylaxis of cancer
EP2798470A4 (en) * 2011-12-29 2015-07-15 Intel Corp PRE-ACQUISITION OF ANTEMOTE BY MANAGED INSTRUCTION
US10628163B2 (en) * 2014-04-17 2020-04-21 Texas Instruments Incorporated Processor with variable pre-fetch threshold
US10540180B2 (en) * 2014-12-07 2020-01-21 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Reconfigurable processors and methods for collecting computer program instruction execution statistics

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5848432A (en) * 1993-08-05 1998-12-08 Hitachi, Ltd. Data processor with variable types of cache memories
US5732242A (en) * 1995-03-24 1998-03-24 Silicon Graphics, Inc. Consistently specifying way destinations through prefetching hints
US5742804A (en) * 1996-07-24 1998-04-21 Institute For The Development Of Emerging Architectures, L.L.C. Instruction prefetch mechanism utilizing a branch predict instruction
US5949995A (en) * 1996-08-02 1999-09-07 Freeman; Jackie Andrew Programmable branch prediction system and method for inserting prediction operation which is independent of execution of program code
US6282663B1 (en) * 1997-01-22 2001-08-28 Intel Corporation Method and apparatus for performing power management by suppressing the speculative execution of instructions within a pipelined microprocessor
US6092188A (en) * 1997-12-23 2000-07-18 Intel Corporation Processor and instruction set with predict instructions
US6151672A (en) * 1998-02-23 2000-11-21 Hewlett-Packard Company Methods and apparatus for reducing interference in a branch history table of a microprocessor
US6611910B2 (en) * 1998-10-12 2003-08-26 Idea Corporation Method for processing branch operations
US6446197B1 (en) * 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
US6560693B1 (en) * 1999-12-10 2003-05-06 International Business Machines Corporation Branch history guided instruction/data prefetching
US6877089B2 (en) * 2000-12-27 2005-04-05 International Business Machines Corporation Branch prediction apparatus and process for restoring replaced branch history for use in future branch predictions for an executing program
US7234040B2 (en) * 2002-01-24 2007-06-19 University Of Washington Program-directed cache prefetching for media processors

Also Published As

Publication number Publication date
US20090313456A1 (en) 2009-12-17
JP2006216040A (ja) 2006-08-17
US8250344B2 (en) 2012-08-21
US7627740B2 (en) 2009-12-01
US20060212680A1 (en) 2006-09-21

Similar Documents

Publication Publication Date Title
US7487340B2 (en) Local and global branch prediction information storage
JP5198879B2 (ja) ループ末尾に置かれた分岐により分岐履歴レジスタの更新を抑制すること
JP5722396B2 (ja) 明示的サブルーチンコールの分岐予測動作をエミュレートするための方法および装置
US7444501B2 (en) Methods and apparatus for recognizing a subroutine call
US20110320787A1 (en) Indirect Branch Hint
US20070288733A1 (en) Early Conditional Branch Resolution
JP2007515715A (ja) 命令キャッシュからラベル境界上のトレースキャッシュに遷移させる方法
KR20100132032A (ko) 실행되는 명령의 결과를 선택적으로 커밋하는 시스템 및 방법
JP2011100466A5 (ja)
JP4134179B2 (ja) ソフトウエアによる動的予測方法および装置
US8301871B2 (en) Predicated issue for conditional branch instructions
JP2012123810A (ja) 復帰スタックを管理する方法および装置
US20070288732A1 (en) Hybrid Branch Prediction Scheme
US20190079771A1 (en) Lookahead out-of-order instruction fetch apparatus for microprocessors
US20070288731A1 (en) Dual Path Issue for Conditional Branch Instructions
US20080162908A1 (en) structure for early conditional branch resolution
US20070288734A1 (en) Double-Width Instruction Queue for Instruction Execution
KR20070108936A (ko) 조건부 명령어가 실행되지 않을 경우 소스 오퍼랜드를대기하는 것을 중지하는 방법
US20080162905A1 (en) Design structure for double-width instruction queue for instruction execution
US20060259752A1 (en) Stateless Branch Prediction Scheme for VLIW Processor

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080520

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080527

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080602

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110606

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4134179

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110606

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120606

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120606

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130606

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees