JPH1069389A - ブランチの再配置によるタグなしブランチ予測キャッシュを活用する装置 - Google Patents

ブランチの再配置によるタグなしブランチ予測キャッシュを活用する装置

Info

Publication number
JPH1069389A
JPH1069389A JP9123631A JP12363197A JPH1069389A JP H1069389 A JPH1069389 A JP H1069389A JP 9123631 A JP9123631 A JP 9123631A JP 12363197 A JP12363197 A JP 12363197A JP H1069389 A JPH1069389 A JP H1069389A
Authority
JP
Japan
Prior art keywords
branch
branches
bucket
instruction
taken
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.)
Pending
Application number
JP9123631A
Other languages
English (en)
Inventor
M Horaa Ann
アン・エム・ホラー
Y Shiyaa Lucky
ラッキー・ワイ・シャー
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.)
HP Inc
Original Assignee
Hewlett Packard Co
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 Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of JPH1069389A publication Critical patent/JPH1069389A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Abstract

(57)【要約】 【課題】 ハードウェアを別途追加せずに静的な技法を
使用してスーパースカラコンピュータシステムの性能を
向上させること 【解決手段】 ブランチの再配置によりタグなしブラン
チ予測キャッシュを活用する方法および装置。コンパイ
ルプロセスの最終パスとして他の全ての最適化を適用し
た後、各サブプログラム内の命令に対してパスを作成
し、ブランチ予測キャッシュ(BPC)を使用する全ブ
ランチをBPC内の各位置に対応するバケット内にそれ
ぞれ配置する。各ブランチと共にプロファイリングデー
タまたは静的ヒューリスティックに基づき予想される方
向を記録する。次いで各バケットを検査する。予測した
方向が矛盾するブランチを含むバケットについてそれら
のブランチのうちの幾つかを他のバケットへ移動しよう
と試みる。移動は、他のブランチのバケット位置に影響
を及ぼさないように、局所的に行うことが理想的であ
る。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はコンピュータに関
し、特に、コンパイラ用の改善されたブランチ予測方法
に関する。
【0002】
【従来の技術】現代のスーパースカラコンピュータで
は、ブランチ命令は、その方向(即ち、とられる、とら
れない)が正確に予測できなければ、潜在的な性能のか
なりの遅延および損失をもたらす。これは、プロセッサ
は、ブランチがどこへ進むかを計算しようとしている間
にその他の動作を休止しなければならないためである。
プロセッサは、ブランチがどこへ進むかを予測できれ
ば、ブランチをフェッチでき、ブランチ動作に関する不
利益がなくなる。
【0003】ブランチ予測キャッシュ(BPC)は、プ
ログラムのブランチに関する最近のブランチ実行履歴等
の情報を記憶することによって正確なブランチ予測に資
するハードウェア構成である。この情報は、後でブラン
チがとる方向を予測するのに使用する。特定のブランチ
の履歴には、そのブランチのアドレスの何らかの機能を
使用してアクセスする。その機能は、幾つかの別個のブ
ランチアドレスをテーブル上の同じエントリにマップす
る。タグなしBPCでは、多数のブランチの履歴を識別
することができず、したがってブランチの履歴を組み合
わせる。
【0004】残念ながら、異なる「とられる−とられな
い(taken-not taken)」実行パターンを有する多数のブ
ランチがBPC内の同じエントリにマップする場合、そ
れらの履歴が干渉し合い、その結果としてブランチの予
測が不正確になり、関連する性能の不利益がもたらされ
る。さらに、同様の「とられる−とられない」実行パタ
ーンを有する多数のブランチがBPC内の異なるエント
リにマップする場合、ブランチの履歴を互いに強化し合
う機会が失われる。かかる強化は、予測精度を向上さ
せ、また他のブランチが使用するためにBPCスロット
を開放することを可能にするものである。
【0005】従来技術の解決策は、主としてハードウェ
アによる技法を必要とした。例えば、BPCのサイズを
大きくして矛盾の可能性を小さくしたり、または同じ位
置にマップするブランチが識別できるように、BPCに
タグを付ける。また、2レベル予測方法を使用して、以
前に実行されたブランチの「とられる−とられない」状
態をBPCルックアップテーブルに組み込むことによっ
てブランチ予測の精度を向上させる。この技法では、同
じ位置にマップする別個のブランチを識別しやすい。上
記方法は、ハードウェアコストの増大及び過剰データの
記憶を必要とするものとなり、及び/又は要件となる比
較を実施する必要がある。更に、上記方法では、同じブ
ランチ間で共通の履歴を共有することが容易でない。
【0006】例えば、以下の文献を参照されたい。
【0007】J.E.Smith、A Study of Branch Pre
diction Strategies、8th Symposium on Computer
Architecture、pp.135−148、May 1981(予測精度
の最大化を目的とするブランチ予測方法について論じた
もの) A.Smith、J.Lee、Branch Prediction Strategies
and Branch TargetBuffer Design、Computer、pp.6
−22、January 1984(科学、商業、コンパイラ及びス
ーパバイザの4つのIBM370作業負荷、およびCDC6400お
よびDEC PDP−11作業負荷に分類される26のプログラム
アドレストレースに基づいて優れた予測方法を選択する
ための系統的方法について論じたもの) S.T.Pan、K.So、J.T.Rameh、Improving the Acc
uracy of DynamicBranch Prediction Using Branc
h Correlation、ASPLOS、pp.76−84、October 1992
(特定のブランチの履歴からの情報だけでなく、他のブ
ランチの履歴からの情報をも組み込むことによって予測
精度を向上させる相関に基づく方法) D.Patterson、J.Hennessy、Computer Architectur
e:A Qualitative Approach、2d ed.、pp.262−27
8、Morgan Kaufmann Publishers Inc.1996(ブラン
チ予測機構の精度を向上させるブランチ予測の方法の検
討)
【0008】
【発明が解決しようとする課題】追加のハードウェアを
導入することなしに、スーパースカラコンピュータシス
テムの性能を向上させる技法、即ち静的な技法を使用し
て動的性能を向上させる技法を提供することが有利であ
ろう。
【0009】
【課題を解決するための手段】本発明は、ブランチを再
配置することによってタグなしブランチ予測キャッシュ
を活用する方法および装置を提供する。コンパイルプロ
セスにおける最終パスとして、他の全ての最適化を適用
した後、各サブプログラム内の命令に対してパスを作成
し、ブランチ予測キャッシュ(BPC)を使用する全て
のブランチを、BPC内の各位置に対応するバケット内
にそれぞれ配置する。各ブランチと共に、プロファイリ
ングデータまたは静的ヒューリスティックに基づいて、
その予想される方向(とられる−とられない)を記録す
る。次いで各バケットを検査する。その予測した方向が
矛盾するブランチを含むバケットについて、それらのブ
ランチのうちの幾つかを他のバケットへ移動しようと試
みる。移動は、他のブランチのバケット位置に影響を及
ぼさないように、局所的に行うことが理想的である。他
のバケットの位置が影響を受けた場合、全てのBPCブ
ランチのバケット位置を再計算した後で、バケット検査
プロセスを再開する。一致する予測した方向をそれぞれ
有するが現時点で別々のバケット内に入っているブラン
チを同じバケット内に移動すれば、ブランチの履歴が互
いに強化し合うようになる。ヒューリスティックを使用
すれば、どのブランチについて考えるか、どんなコード
変換を使用してブランチを再配置するか、また矛盾回避
ならびに一致強化を実施するかどうかを規定できる。
【0010】
【発明の実施の形態】図1は、プロセッサキャッシュを
含むユニプロセッサコンピュータアーキテクチャ10の
概要を示すブロック図である。同図において、プロセッ
サ11は、システムバス15と通信するキャッシュ12を含
む。システムメモリ13および1つまたは複数の入出力装
置14もシステムバスと通信する。
【0011】コンパイル動作において、ユーザは、コン
ピュータ上で動作するプログラムであるソースコードプ
ログラムをコンパイラに与える。コンパイラは、ソース
コードを受容し、そのコードを処理し、対象となるコン
ピュータアーキテクチャ(例えばコンピュータアーキテ
クチャ10について最適化された実行可能ファイルをつく
り出す。
【0012】図2は、例えば図1に示されるコンピュー
タアーキテクチャ10と関連して使用されるソフトウェア
コンパイラ20の概要を示すブロック図である。コンパイ
ラフロントエンド構成要素21は、ソースコードファイル
100を読み取り、それを高レベル中間表現110に翻訳す
る。高レベルオプティマイザ22は、高レベル中間表現11
0をより効率的な形式に最適化する。コード生成器23
は、最適化された高レベル中間表現を低レベル中間表現
120に翻訳する。低レベルオプティマイザ24は、低レベ
ル中間表現120をより効率的な(機械実行可能な)形式
に最適化する。最後に、オブジェクトファイル生成器25
は、最適化された低レベル中間表現をオブジェクトファ
イル141内に書き出す。
【0013】オブジェクトファイル141は、リンカ26に
よってオブジェクトファイル140と共に処理され、コン
ピュータ10上で動作できる実行可能ファイル150が生成
される。本明細書に記載の発明では、実行可能ファイル
150は、それがコンピュータ10上で動作している場合、
後で低レベル中間表現120をよりよく最適化するために
低レベルオプティマイザ24によって使用できる実行プロ
ファイル160が生成されるように、コンパイラ20および
リンカ26によって実施できると仮定する。コンパイラ20
については以下で詳細に説明する。
【0014】プログラムは、多数の手順からなり、ある
手順中のブランチは他の手順中のブランチと矛盾する可
能性がある。本発明は、かかる矛盾を直接的に扱うもの
ではない。そうではなく、本発明は、ある手順中のブラ
ンチを検査する技法を提供する。リンカは、かかる手順
を互いにどのように配置するかを選択する。本発明の一
態様は、幾つかのクロス手順問題を対象とするが、一般
には、本願で開示する技法は一度に1つの手順に対して
作用する。
【0015】動作に際して、コンパイラは、典型的なコ
ンパイルプロセス、即ちコンパイルおよび最適化を行
う。したがって、本願の技法では手順中の全ての命令に
0から始まる番号を付ける。これは、事実上、各命令に
アドレスを与えるものとなる。また、本願の技法は複数
のバケットからなるアレイを作成する。それらのバケッ
トは、システムハードウェアによってブランチ命令が配
置されるブランチ予測キャッシュ内の位置を記号化する
ことを目的とするものである。システムハードウェアブ
ランチ予測キャッシュ内の各要素にバケットが1つずつ
存在する。したがって、本願の技法は、命令のウォーク
スルーを開始する手順を提供する。ブランチ命令に遭遇
した場合、およびそのブランチ命令がシステムハードウ
ェアによって予測できる範疇にある場合には必ず、その
ブランチ命令をバケット内に配置する。全ての命令を適
宜バケット内に配置した後、矛盾を探し出し、様々な所
定の判定基準の適用に基づいて矛盾する命令の再配置を
行うことができる。
【0016】システムハードウェアが予測を試みない幾
つかのブランチがある。システムハードウェアは、プロ
グラムカウンタに関連するブランチを予測する。システ
ムハードウェアは、ブランチが分岐しようとするターゲ
ットアドレスがレジスタ内にある場合には、そのブラン
チの予測は行わない。したがって、予測されない類のブ
ランチは、間接コールである。したがって、本発明は、
ブランチがとられない場合に、常に同じ場所に進むブラ
ンチ、即ち二通りにしか進めないブランチに適用するこ
とができる。
【0017】とられるかまたはとられないブランチ命令
に遭遇した場合、本願の技法では、その命令を表す記録
を、その命令がシステムハードウェアによってマップさ
れるバケット内に落とす。その命令を表す記録をバケッ
ト内に落とすことに加えて、ブランチが進むことが予想
される方向の記述が作成される。かかる予想は、部分的
には、後方のブランチはループの一部になりやすいので
とられやすく、前方のブランチは様々な条件をテストす
るのに使用されるのでとられにくいという概念に基づく
ものである。したがって、本発明は、部分的には、ヒュ
ーリスティック、即ちブランチに関する経験に基づく推
測に基づくものである。
【0018】ブランチがとられるか否かについて決定し
た後、命令をバケット内に入れる。全ての命令をバケッ
ト内に入れた後、それらが予測可能なバケットであれ
ば、本発明は、そのバケットのウォークスルーを行う。
バケットが2つ以上のブランチ記録を含んでいる場合、
および多数のブランチ記録がそれらの予想において矛盾
する場合、即ちあるブランチ記録はとられることが予想
されあるブランチ記録はとられないことが予想される場
合には、システムハードウェア上で矛盾が生じる。かか
る矛盾に遭遇した場合、本発明は、矛盾するブランチの
幾つかをバケット外へ移動しようと試みる。このステッ
プは、オブジェクトコード内の命令ストリームを変更す
る。
【0019】命令ストリームを変更することは必ずしも
容易ではない。矛盾する命令をノーオペレーション(no-
op)内に差し込むことによって下位に移動する場合に
は、全ての命令が下流側に移動することになる。かかる
場合には、下流側の全てのバケットを再構成しなければ
ならない。この方法は、計算に費用がかかる。
【0020】Hewlett-Packard社(カリフォルニア州パ
ロアルト)は、命令をブランチの直後に置くことがで
き、その命令がブランチの前に論理的に実行される、遅
延ブランチと呼ばれる特徴を有するシステムアーキテク
チャを提供する。ブランチを下位に移動し、2つの命令
をスワップすることができるが、この場合、現在の命令
の前に次の命令に論理的に遭遇しないことを示すブラン
チ内のビットをオンにする必要がある。この機構によ
り、他の全てのブランチを移動しなくてもブランチを下
位に移動することが可能となる。残念ながら、現在のバ
ケットのすぐ下位のバケット内にすでにブランチがあ
り、したがって命令を下位に移動すると新しい矛盾が発
生することになる。
【0021】図3は、本発明によるブランチの再配置に
よってタグなしブランチ予測キャッシュを活用する技法
の概要を示すブロック図である。プログラム手順200は
多数の命令205から構成される。本記載の技法は、命令
に番号210を付けて、バケットアレイ220を作成する。バ
ケットは、そのバケット内に入るブランチのリストのポ
インタと考えることができる。ポインタの総数は、シス
テムハードウェアブランチ予測キャッシュ230と等しい
サイズとなり、典型的なマシンでは、256個のエントリ
を有するものとなる。しかしながら、ブランチ予測キャ
ッシュは、目的とするアーキテクチャに合わせて大きく
又は小さくすることが可能である。
【0022】最初は各バケットは空である。バケットお
よび命令を上述のように初期化した後、次のステップ
は、命令のウォークスルーを行うことである。例えば、
xがラベルcに対してyよりも大きい場合に命令ij
条件付きブランチであると仮定する。かかるブランチ
は、そのブランチがとられるかまたはとられないかを予
想できるように前方または後方に進むことができる。ブ
ランチが検査されて、そのブランチがとられようとして
いるのか否かに関して情報に基づく決定が行われる。次
いで、ブランチのアドレスを使用してバケット内にマッ
プし、そのブランチおよびキャッシュを特徴づけるその
ブランチに関する記録が生成される。
【0023】このプロセスは、別のラベルとの別の比較
に関する別の条件付きブランチである別のブランチik
に遭遇するまで続行される。このブランチはとられよう
としていないものと仮定する。このブランチは、潜在的
に同じバケット内にマップする。しかしながら、命令i
kはとられないと判定されるものと仮定する。したがっ
て、かかる命令にはとられないものとして「nt(not t
aken)」とラベル付けされ、他の命令はとられるものと
して「t(taken)」とラベル付けされる。命令のウォー
クスルーを行うこのプロセスを続行して、ブランチの記
述を行い、それらをバケット内に入れる。
【0024】システムハードウェアは、テーブルのサイ
ズのアドレスモジュロを使用して、命令を配置するバケ
ットを決定する。命令のアドレスが例えば257であり、
ブランチ予測キャッシュに0〜255の番号を付けた場合に
は、命令257はブランチ予測キャッシュ内の位置1に配置
される。したがって、それらの命令は、それらが同じア
ドレスモジュロを有する場合にハードウェア矛盾を引き
起こす。したがって、各バケットを2つ以上の命令に対
して使用しなければならない手順中に十分な命令が存在
する場合には、矛盾が生じる可能性がある。反対に、そ
の全手順が、ハードウェア内のキャッシュラインの数よ
りも少ない命令を有する場合には矛盾が生じないので命
令のウォークスルーを行う必要はない。
【0025】本発明が全ての命令についてウォークスル
ーを行った後、バケットのウォークスルーを行う必要が
ある。ブランチ240間の矛盾が存在するバケットに遭遇
した場合、本発明はその矛盾を解決しようとする。
【0026】(上述の)矛盾を回避する1つの方法は、
ブランチのうちの1つを下位に移動することによってそ
れを除去することである。したがって、矛盾するエント
リのうちの1つと次の1つ下位のエントリとが一致して
いる場合には、第1のエントリを次のバケットへと下位
に移動することができ、エントリが同じであるため矛盾
は生じない、ということをヒューリスティックが規定す
る。
【0027】したがって、本発明は、様々なブランチの
履歴を共有することを可能とし、実際に履歴を強化する
ことができる。したがって、2つのブランチの履歴が互
いに強化し合う場合には一方のブランチの履歴に関して
システムハードウェアが訓練されていない時間を経験す
る必要がないので、2つの命令が同じ場合にはブランチ
予測は通常よりも良好なものとなる。
【0028】既にバケット内に矛盾が生じている場合に
は、ルックアヘッドを行うことが可能であるが、幾つか
の点で、システムは、ルックアヘッドを行い続け、バケ
ットの再編成に多くの時間を費やす。したがって、本発
明は好適には、どちらの命令が矛盾なしに下位に移動で
きるかを確かめるために1つのバケットのみをルックア
ヘッドする。移動できない場合には、本発明では、矛盾
を減らすために行えることがないか確かめるために、矛
盾の量を合計する。例えば、あるバケット内には同量の
矛盾が生じているが、次の別のバケット内にはとられな
いよりもとられる方がはるかに多い場合、本発明は、と
られる命令を下位の次のバケットに移動する。これは、
そうすることにより第2のバケット内の矛盾が減るから
であり、例えば、とられる選択が強化されるためであ
る。したがって、バケットテーブルは、コンパイラが分
岐に関する決定を行うのを助けるものとなる。
【0029】バケットテーブルは、システムハードウェ
アが何をしようとするかに関するソフトウェア上の抽象
化と考えることができる。コンピュータがプログラムを
動作させている場合、バケットテーブルは一部のハード
ウェア内で表される。ブランチをシステムハードウェア
レベルでバケットのテーブル内で下に移動した場合、シ
ステムハードウェアは、オブジェクトコードがブランチ
に遭遇するまでそれを実行する。システムハードウェア
は、バケットデータ構造220と同じサイズであるブラン
チ予測キャッシュ230を有する。ブランチ予測キャッシ
ュは、全てではないが、幾つかのアドレスビットを有
し、表記「とられる」または「とられない」を有する。
実際、ブランチ予測キャッシュは、そのアドレスに関し
て発生した最後の3つの履歴事象を覚えている。したが
って、そのアドレスが最初にとられ、次いでとられず、
次いでとられた場合、ブランチ予測は、とられる方がと
られない方よりも多いことを示し、したがってとられる
方が選択される。これにより、ブランチ予測キャッシュ
は、履歴が変化した際に適応することができる。
【0030】図4は、本発明によるブランチを再配置す
ることによってタグなしブランチ予測キャッシュを活用
する技法を示すフローチャートである。同図に示すよう
に、本願の技法は、命令が配置される正確なアドレスを
使用する必要がある(それが効果的となる場合)ので、
本発明は、低レベルオプティマイザ24と関連づけること
が好ましい。さもないと、マシン上で動作しようとして
いるオブジェクトコードが使用可能である場合に、コン
パイルプロセスの一番最後までかかるアドレスを知るこ
とができない。
【0031】コンパイルプロセスの最終パスとして、他
の全ての最適化を適用した後(300)、各サブプログラ
ム内の命令に対してパスを作成し(310)、ブランチ予
測キャッシュ(BPC)を使用する全てのブランチを、
それぞれBPC内の各位置に対応するバケット内に配置
する(315)。各ブランチと共に、プロファイリングデ
ータかまたは静的ヒューリスティック(320)に基づい
て、その予想される方向(とられる、とられない)を記
録する(325)。次いで、各バケットを検査する(33
0)。その予測した方向が矛盾するブランチを含むバケ
ットの場合(340)、それらのブランチのうちの幾つか
を他のバケットへ移動しようと試みる(345)。この移
動は、他のブランチのバケット位置に影響を及ぼさない
よう局所的に行うことが理想的である。他のバケットの
位置が影響を受けた場合(350)には、全てのBPCブ
ランチのバケット位置を再計算した後で(355)、バケ
ット検査プロセスを再開する(360)。一致する予測し
た方向を有するが、現在は別々のバケット内に入ってい
るブランチを同じバケット(370)内に移動すれば、ブ
ランチの履歴が互いに強化し合うようになる。ヒューリ
スティックを使用すれば、どのブランチについて考える
か、どんなコード変換を使用してブランチを再配置する
か、また矛盾回避ならびに一致強化を実施するかどうか
を規定することが可能となる。
【0032】以下は、ブランチを再配置することによっ
てタグなしブランチ予測キャッシュを活用するルーチン
の疑似コード例である。
【0033】1 プログラム中の各手順毎に、 2 その手順についてのコードをコンパイル及び最適化
し、 3 手順中の命令に0から始まる番号を付け、 4 バケットアレイを作成し、そのアレイの長さはブラ
ンチ予測キャッシュサイズであり、 5 手順中の各命令毎に、 6 ブランチ命令をハードウェアによって予測すべき場
合に、 7 命令の番号モジュロのブランチ予測キャッシュサイ
ズについてのバケット内に入れ、 8 ブランチが進むことが予測される方向を記述し、 9 各バケット毎に、 10 バケットが2つ以上のブランチを含む場合および方
向が矛盾する場合に、 11 矛盾するブランチの幾つかを次のバケットに移動し
ようと試みる。
【0034】したがって、本発明は、手順から命令ライ
ンをとり、番号順にそれらを整理することによって、プ
ログラムからの手順に対してブランチ予測を実施する。
次いで、本発明は、ブランチ命令を探し、そのブランチ
命令をモジュロ番号に基づいてバケットアレイに割り当
てる。このアレイは非常に大きいが、アレイ内にはバケ
ットよりも多くの命令が存在する。アレイ内の命令の数
がバケットより多くなければ、矛盾が生じることはな
く、本発明は、ブランチ命令をバケット内に入れる。
【0035】しかしながら、多くの場合、命令の数は、
バケットアレイ内の位置の数よりも多い。しばらくする
と、バケットの幾つかが互いに矛盾するブランチ命令を
含むようになる。矛盾が生じたとき、その位置が同じ命
令ブランチを含む場合、または、下位の位置が空である
場合に、その矛盾する命令をバケットアレイ内で下位に
移動するかについて選択を行う必要がある。下位の位置
が別の矛盾をもたらす場合には、ブランチ命令を移動す
ることが有用であるかを決定する必要がある。ブランチ
予測キャッシュは、コードの動作中にこのブランチ情報
を収集し、コードの処理中に実際に何が起こるかに関し
て履歴を生成することができる。これは、プログラムに
データが入力されると、ブランチが(コンパイラが実際
のデータを使用していなかったため)コンパイル時に遭
遇したブランチと異なるものとなるからである。
【0036】本発明の代替的な実施形態では、別の変換
試行を用いて、とられる方を奇数のバケット内に入れ、
とられない方を偶数のバケット内に入れることができ
る。したがって、システムハードウェアをより有効に利
用する所定の方法でブランチを編成するようにアレイ内
で作業することができる。
【0037】以上、好適実施例に関して本発明の説明を
行ってきたが、当該実施例の代わりに本発明の思想およ
び範囲から逸脱することなく他の応用例を実施可能であ
ることが当業者には理解されよう。したがって、本発明
は、特許請求の範囲によってのみ画定されるべきであ
る。
【0038】以下においては、本発明の種々の構成要件
の組み合わせからなる例示的な実施態様を示す。
【0039】1.ブランチを再配置することによってタ
グなしブランチ予測キャッシュを活用する装置であっ
て、プログラム中の各手順毎に、前記手順コードをコン
パイルし最適化するコンパイラを含み、前記コンパイラ
が前記手順中の各命令に番号を付け、前記コンパイラが
バケットアレイを作成し、前記コンパイラが、予測すべ
き前記手順中の各ブランチ命令毎に前記命令の番号モジ
ュロのブランチ予測キャッシュサイズ用のバケット内に
命令を入れ、前記コンパイラが、前記ブランチ命令が進
むことが予想される方向(とられる、とられない)を記
録し、前記コンパイラが、各バケット毎に、前記バケッ
トが2つ以上のブランチを含む場合およびブランチの方
向が矛盾する場合に、矛盾するブランチを次のバケット
に移動しようと試みることを特徴とする装置。
【0040】2.前記バケットアレイの長さがブランチ
予測キャッシュサイズに等しいことを特徴とする、前項
1に記載の装置。
【0041】3.後方ブランチがとられやすく、前方ブ
ランチがとられにくいことを特徴とする、前項1に記載
の装置。
【0042】4.前記コンパイラが2つのブランチの履
歴を使用して互いに強化し合うことを特徴とする、前項
1に記載の装置。
【0043】5.前記コンパイラが矛盾を減らすことが
できるか確かめるために矛盾の量を合計することを特徴
とする、前項1に記載の装置。
【0044】6.前記コンパイラが、方向選択を強化す
ることによって前記次のバケット内の矛盾を減らすため
に命令を下位の次のバケットへと移動することを特徴と
する、前項1に記載の装置。
【0045】7.前記バケットアレイと同じサイズであ
るシステムハードウェアブランチ予測キャッシュをさら
に含むことを特徴とする、前項1に記載の装置。
【0046】8.前記ブランチ予測キャッシュがブラン
チ履歴が変化した際に適応するように前記ブランチ予測
キャッシュが特定のアドレスに関する複数の最近の履歴
事象を記憶していることを特徴とする、前項1に記載の
装置。
【0047】9.タグなしブランチ予測キャッシュを活
用する装置であって、コンパイルプロセス中の最終パス
として、他の全ての最適化を適用した後に、サブプログ
ラム内の命令に対してパスを作成するコンパイラを含
み、前記コンパイラが、ブランチ予測キャッシュ(BP
C)を使用する全てのブランチを前記BPC内の各位置
に対応するバケット内に配置し、前記コンパイラが、各
ブランチ命令と共に、プロファイリングデータまたは静
的ヒューリスティックに基づき予想される方向(とられ
る、とられない)を前記バケット内に記録し、前記コン
パイラが各バケットを検査し、その予測した方向が矛盾
するブランチを含むバケットについて、前記移動によ
り、前記他のバケットにおいて別の矛盾を発生させまた
は悪化させることなしに前記バケットにおいて前記矛盾
が削減または除去される場合に前記コンパイラが1つま
たは複数の前記ブランチ命令を他のバケットへ移動する
ことを特徴とする装置。
【0048】10.全てのBPCのブランチ命令のバケッ
ト位置を再計算する手段と、前記バケット検査プロセス
を再開させる手段とをさらに含むことを特徴とする、前
項9に記載の装置。
【0049】11.一致する予測した方向を有するが現在
別々のバケット内に入っているブランチ命令が同じバケ
ット内に移動されて、前記ブランチ命令の履歴が互いに
強化し合うことを特徴とする、前項9に記載の装置。
【0050】12.前記コンパイラが低レベルオプティマ
イザをさらに含むことを特徴とする、前項9に記載の装
置。
【図面の簡単な説明】
【図1】ユニプロセッサコンピュータアーキテクチャの
概要を示すブロック図である。
【図2】例えば図1に示すコンピュータアーキテクチャ
と関連して使用されるソフトウェアコンパイラの概要を
示すブロック図である。
【図3】本発明によるブランチを再配置することによっ
てタグなしブランチ予測キャッシュを活用する技法の概
要を示すブロック図である。
【図4】本発明によるブランチを再配置することによっ
てタグなしブランチ予測キャッシュを活用する技法を示
すフローチャートである。
【符号の説明】
200 プログラム手順 205 命令 220 バケットアレイ 230 ブランチ予測キャッシュ 240 ブランチ

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】ブランチを再配置することによってタグな
    しブランチ予測キャッシュを活用する装置であって、プ
    ログラム中の各手順毎に、 前記手順コードをコンパイルし最適化するコンパイラを
    含み、 前記コンパイラが前記手順中の各命令に番号を付け、 前記コンパイラがバケットアレイを作成し、 前記コンパイラが、予測すべき前記手順中の各ブランチ
    命令毎に前記命令の番号モジュロのブランチ予測キャッ
    シュサイズ用のバケット内に命令を入れ、 前記コンパイラが、前記ブランチ命令が進むことが予想
    される方向(とられる、とられない)を記録し、 前記コンパイラが、各バケット毎に、前記バケットが2
    つ以上のブランチを含む場合およびブランチの方向が矛
    盾する場合に、矛盾するブランチを次のバケットに移動
    しようと試みることを特徴とする装置。
JP9123631A 1996-05-14 1997-05-14 ブランチの再配置によるタグなしブランチ予測キャッシュを活用する装置 Pending JPH1069389A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/649,142 US5721893A (en) 1996-05-14 1996-05-14 Exploiting untagged branch prediction cache by relocating branches
US649142 1996-05-14

Publications (1)

Publication Number Publication Date
JPH1069389A true JPH1069389A (ja) 1998-03-10

Family

ID=24603644

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9123631A Pending JPH1069389A (ja) 1996-05-14 1997-05-14 ブランチの再配置によるタグなしブランチ予測キャッシュを活用する装置

Country Status (2)

Country Link
US (1) US5721893A (ja)
JP (1) JPH1069389A (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5857104A (en) * 1996-11-26 1999-01-05 Hewlett-Packard Company Synthetic dynamic branch prediction
US5857105A (en) * 1997-02-05 1999-01-05 Hewlett-Packard Company Compiler for reducing number of indirect calls in an executable code
US6453411B1 (en) * 1999-02-18 2002-09-17 Hewlett-Packard Company System and method using a hardware embedded run-time optimizer
US6381691B1 (en) * 1999-08-13 2002-04-30 International Business Machines Corporation Method and apparatus for reordering memory operations along multiple execution paths in a processor
US6470438B1 (en) * 2000-02-22 2002-10-22 Hewlett-Packard Company Methods and apparatus for reducing false hits in a non-tagged, n-way cache
US20060206874A1 (en) * 2000-08-30 2006-09-14 Klein Dean A System and method for determining the cacheability of code at the time of compiling
US7493607B2 (en) 2002-07-09 2009-02-17 Bluerisc Inc. Statically speculative compilation and execution
US20050015578A1 (en) * 2003-07-14 2005-01-20 Kimming So Two-bit branch prediction scheme using reduced memory size
US20050114850A1 (en) 2003-10-29 2005-05-26 Saurabh Chheda Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control
US7996671B2 (en) * 2003-11-17 2011-08-09 Bluerisc Inc. Security of program executables and microprocessors based on compiler-architecture interaction
US8607209B2 (en) * 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
US7725695B2 (en) * 2005-05-31 2010-05-25 Arm Limited Branch prediction apparatus for repurposing a branch to instruction set as a non-predicted branch
US20070294181A1 (en) * 2006-05-22 2007-12-20 Saurabh Chheda Flexible digital rights management with secure snippets
US20080126766A1 (en) 2006-11-03 2008-05-29 Saurabh Chheda Securing microprocessors against information leakage and physical tampering
US9235390B1 (en) * 2008-03-31 2016-01-12 Symantec Corporation Application optimization for use based on feature popularity

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2010067C (en) * 1990-02-14 1993-10-26 Steven Murray Hoxey Reducing pipeline delays in compilers by code hoisting
JPH04263323A (ja) * 1991-02-18 1992-09-18 Nec Corp 機械語命令列並べ換え方式
US5452457A (en) * 1993-01-29 1995-09-19 International Business Machines Corporation Program construct and methods/systems for optimizing assembled code for execution
JPH06314203A (ja) * 1993-04-28 1994-11-08 Fujitsu Ltd コンパイラの最適化方法および装置
JPH07114473A (ja) * 1993-10-19 1995-05-02 Fujitsu Ltd コンパイラの命令列最適化方法
US5655122A (en) * 1995-04-05 1997-08-05 Sequent Computer Systems, Inc. Optimizing compiler with static prediction of branch probability, branch frequency and function frequency

Also Published As

Publication number Publication date
US5721893A (en) 1998-02-24

Similar Documents

Publication Publication Date Title
US5966539A (en) Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant analysis
US5339428A (en) Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register
EP0838755B1 (en) Binary program conversion apparatus and method
EP0273130B1 (en) Reassociation process for code optimization
US7318223B2 (en) Method and apparatus for a generic language interface to apply loop optimization transformations
US6230317B1 (en) Method and apparatus for software pipelining of nested loops
US20020013938A1 (en) Fast runtime scheme for removing dead code across linked fragments
JPH1069389A (ja) ブランチの再配置によるタグなしブランチ予測キャッシュを活用する装置
JPH0695311B2 (ja) コード最適化方法
JPH0519173B2 (ja)
JPH04225431A (ja) 命令キャッシュ効率を増大するコンピュータ命令をコンパイルする方法
JPH06103463B2 (ja) コード生成方法
US9280350B2 (en) Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments
KR102013582B1 (ko) 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
JPH10293692A (ja) 多重ループ向けデータプリフェッチ方法、プロセッサおよびプログラム生成方法
US20040193815A1 (en) Profile-guided data layout
JP4177681B2 (ja) コンパイル方法、コンパイラ、およびコンパイル装置
US20090037690A1 (en) Dynamic Pointer Disambiguation
JPH04213118A (ja) プログラム翻訳装置およびプログラム翻訳方法
US6651245B1 (en) System and method for insertion of prefetch instructions by a compiler
US7155707B2 (en) Compiling computer programs including branch instructions
US7530063B2 (en) Method and system for code modification based on cache structure
US20180189086A1 (en) Method for executing a computer program with a parameterised function
US7007272B2 (en) Compiling computer programs including branch instructions
JP3638171B2 (ja) 資源割付装置