JP5347023B2 - 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 - Google Patents
分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 Download PDFInfo
- Publication number
- JP5347023B2 JP5347023B2 JP2011514333A JP2011514333A JP5347023B2 JP 5347023 B2 JP5347023 B2 JP 5347023B2 JP 2011514333 A JP2011514333 A JP 2011514333A JP 2011514333 A JP2011514333 A JP 2011514333A JP 5347023 B2 JP5347023 B2 JP 5347023B2
- Authority
- JP
- Japan
- Prior art keywords
- branch
- instruction
- function
- argument
- result
- 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
Links
- 238000000034 method Methods 0.000 title claims description 32
- 230000010365 information processing Effects 0.000 claims abstract description 35
- 238000012545 processing Methods 0.000 claims description 8
- 230000008569 process Effects 0.000 claims description 7
- 230000000875 corresponding effect Effects 0.000 claims 5
- 238000012217 deletion Methods 0.000 claims 2
- 230000037430 deletion Effects 0.000 claims 2
- 230000002596 correlated effect Effects 0.000 claims 1
- 230000007246 mechanism Effects 0.000 abstract description 5
- 230000006870 function Effects 0.000 description 194
- 238000010586 diagram Methods 0.000 description 20
- 230000010354 integration Effects 0.000 description 7
- 238000012986 modification Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000007796 conventional method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000000691 measurement method Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Description
パイプラインでの命令実行では、ある命令の実行が完了する前に、その先のアドレスに位置する命令を先行してフェッチしている。ここで、分岐命令が実行されるとプログラムのフローが変更されて、フェッチした命令が不要となることがある。そのため、フェッチした命令は不要となり、新たに分岐先の命令のアドレスをフェッチする必要がある。
分岐命令の一種に、条件分岐命令がある。条件分岐命令とは、その時々の演算結果により分岐が発生するかどうかが決まる分岐命令のことである。分岐が発生しない場合には、後続する命令が実行され、分岐が発生する場合は、固定の分岐先のアドレスで指定される命令が実行される。
間接分岐を予測する一つの従来の技術として、リターンスタックがある。関数実行後の戻り先は、関数の呼び出し元によって変わるので、呼び出し元のアドレスをメモリ上のスタックなどに記録しておき、関数からの復帰(リターン)時にはこのアドレスへとジャンプする。関数呼び出し時に戻り先アドレスを専用のリターンスタックに保存されており、関数からのリターン命令をフェッチした際は、メモリ上の戻り先アドレスを取得してのジャンプの処理に先駆けて、リターンスタックより戻りアドレスを取得して次にフェッチすべきアドレスの予測として用いる。
上述のような構成によって、分岐予測装置は、関数の呼び出しを実行する際に、その関数の引数を引数スタックが取得して、分岐命令が実行される場合に、引数スタックが保持する引数と、過去の分岐結果を用いて、分岐を予測することができる。これにより、ユーザがプログラムに上記特許文献1における暗示オペレーション命令のような特殊の命令を組み込まずとも分岐予測装置が分岐予測のためのキーとなる情報として自動的にその分岐命令が属する関数の引数を取得して分岐予測を実現でき、任意のプログラムで間接分岐の分岐予測を実現できる。
本発明に係る分岐予測装置の一実施形態である分岐予測機構1000が含まれる情報処理装置100について図面を参照しながら説明する。
<構成>
図1は、情報処理装置100の機能構成を示した機能ブロック図である。図1に示すように情報処理装置100は、命令実行部110と、関数呼び出し通知部111と、関数リターン通知部112と、引数スタック113と、分岐命令通知部114と、分岐結果記録部115と、分類結果バッファ116と、分岐予測部117と、命令フェッチ部118と、コンパイラ119とを含んで構成される。
命令実行部110は、コンパイラ119が実行形式に変換した命令列を、記憶装置200からフェッチされ、順次実行する機能を有する。
関数への引数の渡し方についても予め定められており、関数の引数は、通常、高級言語プログラムにおいて記載されている順に、命令実行部110が保持するレジスタ群120の各レジスタに割り当てられている番号の小さいものから順に、格納されていく。つまり、レジスタ0が関数の第1引数を、レジスタ1が関数の第2引数を、レジスタ2が関数の第3引数を、・・・というように各レジスタに引数が格納される。こうして、レジスタに格納されている引数のうち、本実施の形態においては、図2に示すように、引数スタック113は、レジスタ0に格納されている引数を取得して、記憶する。
プログラム400の関数funcAは、引数a0、a1、a2を受け取る。この引数a0は、レジスタ0に格納され、引数スタック113にプッシュされる。関数funcA内において、プログラム400は、関数funcBを呼び出す。関数funcBは、引数b0、b1、b2を受け取る。引数b0は、レジスタ0に格納され、引数スタック113にプッシュされる。関数funcB内において、プログラム400は、関数funcCを呼び出す。関数funcCは、引数c0、c1、c2を受け取る。引数c0は、レジスタ0に格納され、引数スタック113にプッシュされる。図4のプログラム400の右横には、そのときの引数スタック113の保持している引数の情報を示しており、図4を見れば明らかなように、最後に呼び出された関数funcCの第1引数であるc0が先頭値となっている。なお、図4においては、引数スタック113の上側が先頭値となる。
分岐結果情報は、分岐命令アドレス301と、引数スタックの先頭値302と、分岐先303とを対応付けた分岐結果エントリを統合した情報である。
引数スタックの先頭値302は、対応する分岐命令が実行されたときの、引数スタック113に格納されていた引数を示す情報である。
当該分岐結果情報が分岐結果バッファ116に記憶されていることにより、分岐予測部117は、分岐の予測を実行できる。
図5に示すように、分岐予測部117は、分岐命令の位置するアドレスとそのときに引数スタック113から取得した引数とが対応する分岐結果エントリが、分岐結果バッファ116にあるかどうかを検索する。即ち、分岐予測部117は、実行される分岐命令のアドレスを取得し、取得した分岐命令のアドレスと一致するアドレスがあるかどうかを検索する。
再度、図1に戻って、命令フェッチ部118は、記憶装置200より命令をフェッチする機能を有する。命令フェッチ部118は、分岐予測部117から、次に実行する命令のアドレスを通知されていた場合に、通知されたアドレスから命令のフェッチを行う機能を有する。
<動作>
図6は、情報処理装置100の分岐予測の動作を示したフローチャートである。本フローチャートに基づいて、情報処理装置100の分岐予測における動作を説明する。
分岐予測部117は、分岐命令通知部114から、分岐命令の実行を通知されると、そのときの引数スタック113の先頭値を取得する。また、分岐予測部117は、分岐命令通知部114からは、実行される分岐命令のアドレスも取得する(ステップS602)。
分岐結果バッファ116に分岐結果エントリが記憶されていなかった場合(ステップS603のNO)、分岐予測部117は、命令フェッチ部118に予測なしを示す情報を出力する。すると命令フェッチ部118は、当該分岐命令の次のアドレスの命令をフェッチする。
図7は、高級言語プログラムと、コンパイルされたプロセッサ命令列、そして、その命令列が実行されることによって、引数スタック113に格納される引数を示す図である。
その後、レジスタr0、即ち関数interpreterの引数がAであるかをtst命令で判定する。Aと等しい場合にレジスタr1に数値0x01000が格納される。同様にr0がBならばレジスタr1には0x2000が格納される。アドレス0x0100に位置するmv命令にてプログラムカウンタ(pc)にレジスタr1の値が代入され、分岐が発生する。つまり関数interpreterの引数instがAならば0x1000への、Bならば0x2000への分岐となる。
関数interpreterの呼び出し時には、引数instが引数スタック113にプッシュされる。また、その後に呼び出される下位関数funcの呼び出し時には、下位関数funcの引数aが引数スタック113にプッシュされる。この時点で引数aが引数スタックの先頭値になる。
当該判定には、以下の手順を踏む。まず、関数を解析し、関数内に分岐命令があるかどうかを検索する。そして、分岐命令があった場合に、当該分岐命令の分岐の条件に用いられるデータが、関数の引数に含まれているかどうかを判定する。これによって、関数の引数が分岐先を決定するかどうかを判定する。
特定の引数が分岐先を決定しない場合(ステップS801のNO)、コンパイラ119は、通常通り、関数の各命令をコンパイルして終了する。
引数を渡すレジスタを指定する情報を保持している場合には(ステップS901のYES)、コンパイラ119は、その情報に従って、関数呼び出し部分のレジスタへ引数を格納するコードを修正する(ステップS902)。つまり、どの引数をどのレジスタに格納するのかを指定するコードがある場合に、指定されている引数をレジスタ0に格納するコードに修正する。指定されていない場合には、高級言語プログラムに記載されている順で、関数の引数がレジスタ番号の若い順に格納される。
<変形例>
上記実施の形態において示した情報処理装置100を変形した別構成例の情報処理装置300について説明する。本変形例においては、上記実施の形態に示した情報処理装置100との差異についてのみ説明するものとし、その他の情報処理装置100に共通する内容については、説明を割愛する。
情報処理装置300は、情報処理装置100とは異なり、命令実行部110とは一部別の動作をする命令実行部122を備え、また、情報処理装置100が備えていなかった引数番号通知部121を備える。その他の構成については、情報処理装置300は情報処理装置100と同様の構成をとる。
引数スタック123は、引数番号通知部121から通知を受けて、指定された引数をプッシュする機能を有する。引数スタック123は、引数スタック113と同様に、関数呼び出し通知部111からの通知を受けて、その関数の引数をプッシュし、関数リターン通知部112からの通知を受けて、その関数の引数をポップする。即ち、引数スタック123の先頭値には現在実行中の関数の引数が保持される。
図12は、引数スタック123における、関数の引数を保存した例を示している。図12は、引数番号通知部121を用いて関数の引数を取得する手順を示している。図12(a)では、分岐となるswitch〜case文に影響する引数は、a0である。図12(a)に示される命令argが分岐に影響する引数を通知する。図12(a)の命令argのオペランド0は、分岐に影響する引数が格納されたレジスタ群120のレジスタ番号を示す。ゆえに、図12(a)の場合、引数スタック123は、arg命令で指定されたレジスタ0の値をプッシュする。
<まとめ>
上記実施の形態、及び、その変形例において示してきたように、情報処理装置100は、関数呼び出しを行う際に、その引数を取得する引数スタックを備える。そして、分岐命令が実行される段において、その引数スタックに格納されている値の先頭値と、実行される分岐命令の位置するアドレスとから、過去の分岐結果を検索して、分岐先を予測する。また、分岐命令が実際に実行された場合に、その分岐命令の位置するアドレスと、その時点での引数スタックの先頭値と、分岐先のアドレスとを対応付けた分岐結果エントリを記憶しておくことで、以降において実行される分岐命令の分岐先の予測の確度を高めていくことができる。関数呼び出しにおいて、その引数を取得する引数スタックを備えることにより、従来技術のような暗示オペレーション命令という分岐予測のキー情報を指定する命令を組み込まずとも、間接分岐の分岐予測を実現できる。即ち、任意のプログラムにおいて、そのプログラム内に含まれる分岐命令の分岐先の予測が可能となる。
<補足>
上記実施の形態において、本発明の実施の手法について説明してきたが、本発明の実施形態がこれに限られないことは勿論である。以下、上記実施形態以外に本発明として含まれる各種の変形例について説明する。
(1)上記実施の形態においては、関数呼び出し通知部111は、命令実行部110が実行する命令がコンパイラ119により特定の命令を以ってコンパイルされることを検知して、関数の呼び出しが実行されることを通知する構成とした。しかし、関数の呼び出しを検知する手法はこれに限るものではなく、実行される命令を解析して、予め定められた特定の命令文と一致する命令があるかどうかで検知してもよい。あるいは、コンパイラ119が関数呼び出しを通知する専用の命令を生成して、関数呼び出し通知部111に当該命令を出力することで、関数呼び出し通知部111が関数呼び出しの実行を検知することとしてもよい。
(2)上記実施の形態においては、分岐予測部117が、引数スタック113の先頭値を用いて予測する手法を示したが、分岐命令実行時に、その分岐命令がどの関数内において実行されるのか、また、その関数に対応する引数がどれであるのかを対応付けて記憶されているのであれば、引数スタック113の先頭値ではなく、必要とする引数を参照する構成としてもよい。つまり、引数スタック113は、引数を取得する際に、そのとき呼び出された関数を示す情報とを対応付けて記憶するものとし、分岐予測部117は、分岐命令の実行を通知されたときに、その分岐命令が含まれる関数の情報を受け取り、当該関数の情報で示される関数に対応する引数を引数スタック113から取得する構成としてもよい。
(3)上記実施の形態においては、分岐予測部117が分岐命令のアドレスと、引数スタック113の先頭値とが一致する分岐結果エントリが複数ある場合について詳細に説明しなかった。ここでは、その説明をする。
なお、上述の分岐カウント値において、当該分岐カウント値は、分岐結果エントリの分岐の確度を示すためのものであればよく、上述の分岐しなかった分岐結果エントリの分岐カウンタを−1する構成は設けなくともよい。
(4)上記実施の形態においては、分岐に影響する引数が1つの場合の具体例を示したが、分岐に影響する引数が複数ある場合がある。
図13は、このような場合に、引数を指定する命令で、順に分岐に影響する引数を指定する例を示している。
(5)上記実施の形態においては、間接分岐の例を示したが、分岐先が固定されている分岐命令の条件実行時に、予測することも可能である。
(6)上記実施の形態においては、命令実行部110が引数を格納するためのレジスタ群120を備える構成を示した。
図15に示す手法を用いて、引数の取得を行った場合の具体例を図16に示す。
(7)上記実施の形態においては、引数スタック113にレジスタ0に格納されている値のみを格納する構成を示した。
図17(a)は、引数スタック113の容量を多くとり、レジスタ0に格納されている引数だけでなく、関数呼び出しの際に受け取る引数全てを格納する例を示している。
また、図17(b)に示すように、引数スタック113は、レジスタ0の引数を格納するだけでなく、更に、引数スタック113をリターンスタックと兼用してもよい。即ち、リターンスタックを用いるプロセッサにおいては、引数スタックと同じタイミングで、リターンアドレスのプッシュとポップが行われるので、同じスタック内にリターンアドレスと引数とを組にして保持してもよい。なお、図17(b)において、addressA、addressB、addressCは、それぞれfuncA、funcB、funcCのリターンアドレスを示している。こうすることで、リターンスタックとの併用が可能になる。
(8)上記実施の形態においては、関数の引数を保持するのに引数スタックを用いたが、引数スタックとして用いるものは必ずしもスタック形式に限るものではなく、上記実施の形態において引数スタックとして示した内容を実行できるものであればよい。
(9)図1及び図11に示した情報処理装置100、300の各機能部は集積化されて1又は複数のLSI(Large Scale Integration)により実現されてもよい。また、複数の機能部が1のLSIにより実現されてもよい。
(10)上述の実施形態で示した分岐予測に係る動作、分岐予測の処理等(図6等参照)を情報処理装置等のプロセッサ、及びそのプロセッサに接続された各種回路に実行させるためのプログラムコードからなる制御プログラムを、記録媒体に記録すること、又は各種通信路(例えば、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク)等を介して流通させ頒布させることもできる。このような記録媒体には、ICカード、ハードディスク、光ディスク、フレキシブルディスク、ROM等がある。流通、頒布された制御プログラムはプロセッサに読み出され得るメモリ等に格納されることにより利用に供され、そのプロセッサがその制御プログラムを実行することにより、実施形態で示したような各種機能が実現されるようになる。
(11)以下に本発明に係る分岐予測装置の実施態様とその効果について説明する。
前記引数スタックは、前記複数のレジスタのうちの予め定められた特定のレジスタが格納している値を取得して格納することとしてもよい。
また、本発明は、分岐命令を含む関数を示すソースプログラムをコンピュータが実行可能な実行形式の命令コード列に変更するコンパイラであって、前記コンピュータは、前記分岐命令の分岐先を予測するための情報として、前記関数の引数を格納する引数スタックを備え、前記コンパイラは、前記関数の呼び出しを実行する際に、当該関数の引数のうち、前記分岐命令に関連する引数を、前記引数スタックに格納させるための命令コードを生成することとしてもよい。
110、122 命令実行部
111 関数呼び出し通知部
112 関数リターン通知部
113、123 引数スタック
114 分岐命令通知部
115 分岐結果記録部
116 分岐結果バッファ
117 分岐予測部
118 命令フェッチ部
120 レジスタ群
121 引数番号通知部
200 記憶装置
1000、1100 分岐予測機構
Claims (9)
- 命令を実行する命令実行部と、
前記命令実行部による関数呼び出し命令の実行を通知する関数呼び出し通知部と、
前記関数呼び出し通知部により関数呼び出し命令の実行が通知されたときに、前記関数呼び出し命令により呼び出される関数に含まれる分岐命令に関連する引数の少なくとも一つを格納する引数スタックと、
前記命令実行部により前記関数呼び出し命令により呼び出される前記関数に含まれる前記分岐命令が実行されることを通知する分岐命令通知部と、
前記分岐命令の位置するアドレスと、当該分岐命令が実行されたときの前記引数スタックの先頭値と、分岐先とを対応付けた分岐結果エントリを記憶する分岐結果記憶部と、
前記分岐命令通知部が、前記分岐命令が実行されることを通知した場合に、前記分岐結果記憶部に、実行される当該分岐命令のアドレスと前記引数スタックに格納されている引数に一致する分岐結果エントリが記録されているかどうかを検索し、一致する分岐結果エントリがあった場合に、当該分岐結果エントリの分岐結果を当該分岐命令による分岐の予測結果とする分岐予測部と、
前記分岐予測部の予測した予測結果に基づき命令をフェッチする命令フェッチ部と、
前記分岐命令の実行完了後に、実行された当該分岐命令の位置するアドレスと、当該分岐命令の実行により分岐した分岐先のアドレスと、当該分岐命令が実行されたときの前記引数スタックの先頭値とを対応付けて、分岐結果エントリとして前記分岐結果記憶部に記録する分岐結果記録部と、
前記命令実行部による関数リターン命令の実行を通知する関数リターン通知部を備え、
前記引数スタックは、前記関数リターン通知部から関数リターン命令の実行が通知されたときに、当該関数リターン命令に対応する関数の引数を削除する
ことを特徴とする分岐予測装置。 - 前記分岐命令は条件付分岐命令であり、
前記分岐結果記録部は、更に、前記条件付分岐命令が実行されたか否かを示す情報を対応付けた前記分岐結果エントリを記録する
ことを特徴とする請求項1記載の分岐予測装置。 - 前記分岐結果記録部は、前記分岐命令の分岐先それぞれについて、分岐したかどうかの頻度を示す頻度情報を対応付けた前記分岐結果エントリを前記分岐結果記憶部に記録し、
前記分岐予測部は、検索された分岐結果エントリが複数ある場合に、前記頻度情報で示される前記分岐した頻度が最も多い分岐結果エントリの分岐先アドレスを予測結果とする
ことを特徴とする請求項1記載の分岐予測装置。 - 前記分岐結果記録部は、前記分岐命令が実行された場合に、当該分岐命令の分岐先アドレスと、当該分岐命令が実行されたときの引数スタックの先頭値とが一致する分岐結果エントリについて、当該分岐命令が実際に実行されて分岐した分岐先を有するものの頻度情報を1加算し、それ以外の当該分岐命令の分岐先アドレスと、当該分岐命令が実行されたときの引数スタックの先頭値とが一致するものの実際に分岐した分岐先が異なる分岐結果エントリについて、その頻度情報を1減算する
ことを特徴とする請求項3記載の分岐予測装置。 - 前記命令実行部は、前記引数を格納するための複数のレジスタを備え、
前記引数スタックは、前記複数のレジスタのうちの予め定められた特定のレジスタが格納している値を取得して格納する
ことを特徴とする請求項1記載の分岐予測装置。 - 情報処理装置が関数中に含まれる分岐命令の分岐先を予測する分岐予測方法であって、
関数呼び出し命令の実行を通知する関数呼び出し通知ステップと、
前記関数呼び出し通知ステップにより関数呼び出し命令の実行が通知されたときに、前記関数呼び出し命令により呼び出される関数に含まれる分岐命令に関連する引数の少なくとも一つを格納する引数スタックに格納する格納ステップと、
前記関数呼び出し命令により呼び出される前記関数に含まれる前記分岐命令が実行されることを通知する分岐命令通知ステップと、
前記分岐命令通知ステップにより前記分岐命令が実行されることを通知された場合に、当該分岐命令の位置するアドレスと、当該分岐命令が実行されたときの前記引数スタックの先頭値と、分岐先とを対応付けた分岐結果エントリを記憶する前記コンピュータに接続された分岐結果記憶媒体から、実行される当該分岐命令のアドレスと前記引数スタックに格納されている引数に一致する分岐結果エントリが記録されているかどうかを検索し、一致する分岐結果エントリがあった場合に、当該分岐結果エントリの分岐結果を当該分岐命令による分岐の予測結果とする分岐予測ステップと、
前記分岐予測ステップにおいて予測した予測結果に基づき命令をフェッチする命令フェッチステップと、
前記分岐命令の実行完了後に、実行された当該分岐命令の位置するアドレスと、当該分岐命令の実行により分岐した分岐先のアドレスと、当該分岐命令が実行されたときの前記引数スタックの先頭値とを対応付けて、分岐結果エントリとして前記分岐結果記憶部に記録する分岐結果記録ステップと、
関数リターン命令の実行を通知する関数リターン通知ステップと、
前記引数スタックから、前記関数リターン通知ステップにおいて関数リターン命令の実行が通知されたときに、当該関数リターン命令に対応する関数の引数を削除する削除ステップと
を含むことを特徴とする分岐予測方法。 - 分岐命令を含む関数を示すソースプログラムをコンピュータが実行可能な実行形式の命令コード列に変更するコンパイラであって、
前記コンピュータは、前記分岐命令の分岐先を予測するための情報として、前記関数に含まれる前記分岐命令に関連する引数を格納し、関数リターン命令の実行が通知されたときに当該関数リターン命令に対応する関数の引数を削除する引数スタックを備え、
前記コンパイラは、前記関数の呼び出しを実行する際に、当該関数の引数のうち、前記分岐命令に関連する引数を、前記引数スタックに格納させるための命令コードを生成する
ことを特徴とするコンパイラ。 - 分岐命令を含む関数を示すソースプログラムをコンピュータが実行可能な実行形式の命令コード列に変更するためのコンパイル方法であって、
前記コンピュータは、前記分岐命令の分岐先を予測するための情報として、前記関数に含まれる前記分岐命令に関連する引数を格納し、関数リターン命令の実行が通知されたときに当該関数リターン命令に対応する関数の引数を削除する引数スタックを備え、
前記コンパイル方法は、前記関数の呼び出しを実行する際に、当該関数の引数のうち、前記分岐命令に関連する引数を、前記引数スタックに格納させるための命令コードを生成する格納コード生成ステップを含む
ことを特徴とするコンパイル方法。 - プログラムを実行する際の分岐命令の分岐先を予測する分岐予測処理をコンピュータが実行するための分岐予測プログラムを記録したコンピュータ読み取り可能な分岐予測プログラム記録媒体であって、
前記分岐予測処理は、
関数呼び出し命令の実行を通知する関数呼び出し通知ステップと、
前記関数呼び出し通知ステップにより関数呼び出し命令の実行が通知されたときに、前記関数呼び出し命令により呼び出される関数に含まれる分岐命令に関連する引数の少なくとも一つを格納する引数スタックに格納する格納ステップと、
前記関数呼び出し命令により呼び出される前記関数に含まれる前記分岐命令が実行されることを通知する分岐命令通知ステップと、
前記分岐命令通知ステップにより前記分岐命令が実行されることを通知された場合に、当該分岐命令の位置するアドレスと、当該分岐命令が実行されたときの前記引数スタックの先頭値と、分岐先とを対応付けた分岐結果エントリを記憶する前記コンピュータに接続された分岐結果記憶媒体から、実行される当該分岐命令のアドレスと前記引数スタックに格納されている引数に一致する分岐結果エントリが記録されているかどうかを検索し、一致する分岐結果エントリがあった場合に、当該分岐結果エントリの分岐結果を当該分岐命令による分岐の予測結果とする分岐予測ステップと、
前記予測ステップにおいて予測した予測結果に基づき命令をフェッチする命令フェッチステップと、
前記分岐命令の実行完了後に、実行された当該分岐命令の位置するアドレスと、当該分岐命令の実行により分岐した分岐先のアドレスと、当該分岐命令が実行されたときの前記引数スタックの先頭値とを対応付けて、分岐結果エントリとして前記分岐結果記憶部に記録する分岐結果記録ステップと、
関数リターン命令の実行を通知する関数リターン通知ステップと、
前記引数スタックから、前記関数リターン通知ステップにおいて関数リターン命令の実行が通知されたときに、当該関数リターン命令に対応する関数の引数を削除する削除ステップとを含む
ことを特徴とする分岐予測プログラム記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011514333A JP5347023B2 (ja) | 2009-05-19 | 2010-05-19 | 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009120583 | 2009-05-19 | ||
JP2009120583 | 2009-05-19 | ||
JP2011514333A JP5347023B2 (ja) | 2009-05-19 | 2010-05-19 | 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 |
PCT/JP2010/003357 WO2010134330A1 (ja) | 2009-05-19 | 2010-05-19 | 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2010134330A1 JPWO2010134330A1 (ja) | 2012-11-08 |
JP5347023B2 true JP5347023B2 (ja) | 2013-11-20 |
Family
ID=43126023
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011514333A Expired - Fee Related JP5347023B2 (ja) | 2009-05-19 | 2010-05-19 | 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8694760B2 (ja) |
JP (1) | JP5347023B2 (ja) |
CN (1) | CN102099781A (ja) |
WO (1) | WO2010134330A1 (ja) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9652245B2 (en) | 2012-07-16 | 2017-05-16 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Branch prediction for indirect jumps by hashing current and previous branch instruction addresses |
CN103984525B (zh) * | 2013-02-08 | 2017-10-20 | 上海芯豪微电子有限公司 | 指令处理系统及方法 |
US9639368B2 (en) * | 2014-06-13 | 2017-05-02 | International Business Machines Corporation | Branch prediction based on correlating events |
US20170090927A1 (en) * | 2015-09-30 | 2017-03-30 | Paul Caprioli | Control transfer instructions indicating intent to call or return |
CN105718241B (zh) * | 2016-01-18 | 2018-03-13 | 北京时代民芯科技有限公司 | 一种基于sparc v8体系结构的分类式混合分支预测系统 |
CN106648636B (zh) * | 2016-12-08 | 2020-01-03 | 北京航空航天大学 | 一种基于图挖掘的软件函数变更预测系统及方法 |
JP2018200545A (ja) * | 2017-05-26 | 2018-12-20 | ルネサスエレクトロニクス株式会社 | プロセッサ装置 |
WO2018220836A1 (ja) * | 2017-06-02 | 2018-12-06 | 三菱電機株式会社 | プログラムコード生成装置およびプログラムコード生成プログラム |
JP6720993B2 (ja) * | 2018-03-07 | 2020-07-08 | オムロン株式会社 | サポート装置およびサポートプログラム |
CN108897699A (zh) * | 2018-07-03 | 2018-11-27 | 中国人民解放军国防科技大学 | 一种基于函数调用栈的数据预取方法和装置 |
CN109240815B (zh) * | 2018-08-24 | 2021-07-23 | 珠海格力电器股份有限公司 | 一种共享堆栈的多任务运行方法、装置及设备 |
CN111176729A (zh) * | 2018-11-13 | 2020-05-19 | 深圳市中兴微电子技术有限公司 | 一种信息处理方法、装置及计算机可读存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004533695A (ja) * | 2001-06-29 | 2004-11-04 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 分岐目標を予測する方法、プロセッサ、及びコンパイラ |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4763245A (en) * | 1985-10-30 | 1988-08-09 | International Business Machines Corporation | Branch prediction mechanism in which a branch history table is updated using an operand sensitive branch table |
US5333283A (en) * | 1991-10-29 | 1994-07-26 | International Business Machines Corporation | Case block table for predicting the outcome of blocks of conditional branches having a common operand |
JP2000132390A (ja) * | 1998-10-23 | 2000-05-12 | Toshiba Corp | プロセッサ及び分岐予測器 |
US20030131345A1 (en) * | 2002-01-09 | 2003-07-10 | Chris Wilkerson | Employing value prediction with the compiler |
US20070088937A1 (en) * | 2005-10-13 | 2007-04-19 | International Business Machines Corporation | Computer-implemented method and processing unit for predicting branch target addresses |
US7444501B2 (en) * | 2006-11-28 | 2008-10-28 | Qualcomm Incorporated | Methods and apparatus for recognizing a subroutine call |
US7870371B2 (en) * | 2007-12-17 | 2011-01-11 | Microsoft Corporation | Target-frequency based indirect jump prediction for high-performance processors |
-
2010
- 2010-05-19 US US13/001,852 patent/US8694760B2/en active Active
- 2010-05-19 JP JP2011514333A patent/JP5347023B2/ja not_active Expired - Fee Related
- 2010-05-19 WO PCT/JP2010/003357 patent/WO2010134330A1/ja active Application Filing
- 2010-05-19 CN CN2010800021370A patent/CN102099781A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004533695A (ja) * | 2001-06-29 | 2004-11-04 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 分岐目標を予測する方法、プロセッサ、及びコンパイラ |
Non-Patent Citations (3)
Title |
---|
CSNG200600734052; 豊島 隆志 他: '「レジスタ間接分岐ターゲット・フォワーディング Register Indirect Jump Target Forwarding」' 先進的計算基盤システムシンポジウム SACSIS2006 論文集 Symposium on Advanced Computing Sy 第2006巻 第5号, 20060522, 社団法人情報処理学会 Information Processing Socie * |
JPN6010034962; 豊島 隆志 他: '「レジスタ間接分岐ターゲット・フォワーディング Register Indirect Jump Target Forwarding」' 先進的計算基盤システムシンポジウム SACSIS2006 論文集 Symposium on Advanced Computing Sy 第2006巻 第5号, 20060522, 社団法人情報処理学会 Information Processing Socie * |
JPN7010001919; Amir Roth et al.: '"Improving virtual function call target prediction via dependence-based pre-computation"' Proceedings of the 13th international conference on Supercomputing , 1999, Pages: 356 - 364, ACM * |
Also Published As
Publication number | Publication date |
---|---|
JPWO2010134330A1 (ja) | 2012-11-08 |
US8694760B2 (en) | 2014-04-08 |
US20110119472A1 (en) | 2011-05-19 |
WO2010134330A1 (ja) | 2010-11-25 |
CN102099781A (zh) | 2011-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5347023B2 (ja) | 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 | |
US7508985B2 (en) | Pattern-matching system | |
JP3612294B2 (ja) | デバッグ方法およびデバッグ装置 | |
US8997040B2 (en) | Variable closure | |
US7299462B2 (en) | Relocation format for linking | |
US9626170B2 (en) | Method and computer program product for disassembling a mixed machine code | |
US8612944B2 (en) | Code evaluation for in-order processing | |
JPH07122854B2 (ja) | プログラム翻訳方法 | |
US9134973B2 (en) | Dynamic compiling and loading at runtime | |
JPH0769832B2 (ja) | プログラミング演算の効果と従属性とを表現する方法及び装置 | |
JP6659955B2 (ja) | プログラム分析方法、プログラム分析装置および分析プログラム | |
JP2012203826A (ja) | デコーダコンパイラ、プログラムおよび通信機器 | |
JP2011170749A (ja) | シミュレーション装置及びシミュレーション方法 | |
KR101851330B1 (ko) | 코드 재사용 공격 탐지 장치 및 그 방법 | |
JPH05505273A (ja) | コードトランスレータのコンピュータコードを処理する方法および装置 | |
CN108369499B (zh) | 一种代码虚拟化系统和方法 | |
JP2005190302A (ja) | 情報処理システム及びコード生成方法 | |
US9600284B2 (en) | Computer program instruction analysis | |
KR101947737B1 (ko) | 명시적 및 암시적 정보 흐름 추적 방법 및 그 장치 | |
US20090235223A1 (en) | Program generation apparatus and program generation method | |
US7155709B2 (en) | Displaying user readable information during linking | |
JP5169322B2 (ja) | 変数最適化装置、変数最適化プログラム、コンパイラ、変数最適化方法、及びコンパイル方法 | |
KR20200061280A (ko) | 네트워크 스위치 병렬화를 위한 데이터 의존성 기반의 데이터 평면 정적 분석 방법 및 이를 이용한 병렬화 장치 | |
JP2011034250A (ja) | 副作用解析装置、方法、及び、プログラム | |
JP2007272672A (ja) | コンパイル最適化方法およびコンパイラ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20121011 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130528 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20130618 |
|
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: 20130723 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130819 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |