JP3425069B2 - バイナリ・プログラム変換装置および方法 - Google Patents

バイナリ・プログラム変換装置および方法

Info

Publication number
JP3425069B2
JP3425069B2 JP29460897A JP29460897A JP3425069B2 JP 3425069 B2 JP3425069 B2 JP 3425069B2 JP 29460897 A JP29460897 A JP 29460897A JP 29460897 A JP29460897 A JP 29460897A JP 3425069 B2 JP3425069 B2 JP 3425069B2
Authority
JP
Japan
Prior art keywords
instruction
program
binary program
executed
binary
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
JP29460897A
Other languages
English (en)
Other versions
JPH10187460A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP29460897A priority Critical patent/JP3425069B2/ja
Publication of JPH10187460A publication Critical patent/JPH10187460A/ja
Application granted granted Critical
Publication of JP3425069B2 publication Critical patent/JP3425069B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、バイナリ・プログ
ラムを別のバイナリ・プログラムに変換するバイナリ・
プログラム変換装置・方法に関し、特に、変換前のバイ
ナリ・プログラム中の命令列を他の命令列に変換するこ
とでプログラムをバイナリ・コードレベルで改変する技
術に関する。
【0002】
【従来の技術】コンピュータ・システムにおいて、メイ
ン・メモリの高速化は、長年コンピュータシステムの性
能を向上させる上で非常に重要なテーマであった。そこ
には、ハードウェアの改善という側面もあれば、ソフト
ウェアの改善という側面もある。
【0003】しかし、近年キャッシュメモリが開発され
て様相は変化した。キャッシュメモリは、メインメモリ
とCPUの間に位置し、メインメモリに比べて容量は小さ
いが、高速アクセスが可能で、しかもメインメモリの高
速化を図るよりも低コストで高速化が可能である。
【0004】なぜならば、キャッシュメモリの容量は小
さくても、通常プログラムというものは、短時間に同じ
命令を何度も実行したり、同じデータを何度も参照した
り、あるいはある命令やデータの近傍の命令/データを
使用する確率が高いという特性を持っている。これが所
謂アクセスの局所性というもので、キャッシュメモリは
この特性を最大限に生かした高速化技術ということがで
きる。
【0005】こうしたなかで、最近のコンピュータシス
テムのほとんどが、キャッシュメモリを備えている。ま
た、市場では最近パーソナルコンピュータの普及もあっ
て、メインメモリの価格は非常に安くなってきている。
したがって、ソフトウェア側からの性能向上策として、
メインメモリにヒットさせる改善というものはほとんど
価値がない。そのようなことをしなくも、安価になった
メモリを可能な限り増設すれば足りるからである。
【0006】
【発明が解決しようとする課題】そこで、ソフトウェア
の改善としては、メイン・メモリよりも小さくて高速な
キャッシュ・メモリのヒット率を向上させることの方が
より有効である。つまり、ソフトウェアの改善により、
プログラムの局所性を高め、競合によるキャッシュ・ミ
スを削減して、キャッシュ・メモリの効果を最大限に引
き出すことが重要となる。
【0007】ところで、キャッシュ・ヒット率が高くな
るようにプログラムを改変するにあたって、ソース・プ
ログラムを必要とするリコンパイル技術では非効率的で
ユーザには受け入れられない。
【0008】コンピュータ・ハードウェアの進歩はめま
ぐるしく速く、あるハードウェアに適合するプログラム
が開発されるやいなや、さらに進んだハードウェアが開
発されるというのが実状である。
【0009】従って、プログラムを改変するにあたって
は、進化したコンピュータ・アーキテクチャに対応でき
るようにする必要もあるが、この場合も、ソース・プロ
グラムを必要とする従来のリコンパイル技術では、改変
に時間がかかり、ハードウェアの進歩にソフトウェア側
の対応が追いつかない。
【0010】以上のことから、ソース・プログラムを用
いずにバイナリ・プログラムを入力して改変すること
で、ユーザにとって受け入れやすく、そのため適用範囲
も広がり、適時にハードウェア性能を最大限に引き出す
プログラムの最適化方式が望まれる。
【0011】本発明の課題は、プログラムの実行速度の
向上、特に、複数のプログラムを同時に実行させた際の
全体としての実行速度の向上を、プログラムのソースコ
ードを変更することなく達成する点にある。
【0012】
【課題を解決するための手段】そこで本発明では、上記
課題を解決するために以下の手段をとった。すなわち、
本発明はオブジェクト・プログラムや実行可能オブジェ
クト・プログラム等のバイナリ・プログラムを別のバイ
ナリ・プログラムに変換するための発明であって、複数
の命令ブロックにより構成される変換前のバイナリ・プ
ログラムが実行された際の情報に基づき、変換後のバイ
ナリ・プログラムがキャッシュ・メモリを備えた計算機
で実行される際に、変換前のバイナリ・プログラムの実
行された命令ブロックに対応する部分を実行する際のキ
ャッシュ・メモリのヒット率が向上するように変換前の
バイナリ・プログラムの複数の命令ブロックを再構成す
ることで変換後のバイナリ・プログラムを得ることで、
通常の正常な状態でプログラムを実行した際に実際に実
行された部分を実行する際のキャッシュ・メモリのヒッ
ト率を向上させ、プログラムの実行速度を向上させる。
【0013】より具体的には、変換前のバイナリ・プロ
グラムの実行された命令ブロックが実行されなかった命
令ブロックとは分離され、実行された命令ブロックが連
続するように変換前のバイナリ・プログラムの複数の命
令ブロックを再構成することで変換後のバイナリ・プロ
グラムを得ることにより、通常の正常な状態でプログラ
ムを実行した際に実際に実行された部分を局所化するこ
とでキャッシュ・メモリの有効利用を図り、結果的にキ
ャッシュ・メモリのヒット率を向上させる。
【0014】また、同時に実行される複数のバイナリ・
プログラムを別の複数のバイナリ・プログラムに変換す
る場合に、変換前のバイナリ・プログラムの実行された
命令ブロックに対応する部分が変換後のバイナリ・プロ
グラム毎にキャッシュ・メモリ上の異なる領域にマッピ
ングされるよう複数の変換前のバイナリ・プログラムを
再構成することで複数の変換後のバイナリ・プログラム
を得るこで、複数のバイナリ・プログラム間でのキャッ
シュの競合を抑制し、複数のプログラムが同時に実行さ
れる場合の全体としての処理効率を向上させる。
【0015】さらに、変換前のバイナリ・プログラムの
実行された命令ブロックに対応する部分が高頻度でデー
タがマッピングされる領域にはマッピングされないよう
に変換前のバイナリ・プログラムを再構成することで変
換後のバイナリ・プログラムを得ることで、データと命
令との間のキャッシュの競合を軽減する。
【0016】さらに、再構成を行った結果、命令ブロッ
クの末尾が条件分岐命令で、その条件分岐先の命令ブロ
ックが条件分岐を行った命令ブロックの直後となる場合
に、前記条件分岐命令の分岐条件および条件分岐先を変
更することで、通常の正常な状態でプログラムを実行し
た際に実際に実行された部分を直線化し、CPUの実行
効率のより良いバイナリ・プログラムを得て、プログラ
ムの実行速度を向上させる。
【0017】また、変換前のバイナリ・プログラム中の
命令列を他の命令列に変換することで変換後のバイナリ
・プログラムを得ることにより、ソース・プログラムを
必要とせずCPUの性能をより引き出すバイナリ・プロ
グラムを得て、プログラムの実行速度を向上させる。な
お、本発明をコンピュータで実現するプログラムをCD
−ROMなどの記録媒体に格納して頒布することができ
る。
【0018】
【発明の実施の形態】まず、本発明の実施の形態の前提
とする計算機のアーキテクチャを説明する。なお、敢え
て説明するまでもなく、本発明がこのアーキテクチャに
のみ依存するものではない。
【0019】本発明が前提とする計算機はCPUと主記
憶装置との間にキャッシュ・メモリを備えている。ここ
では仮に、キャッシュ・メモリのサイズを1Mバイトと
する。このキャッシュ・メモリはライン(あるいは、セ
ット)と呼ばれる連続する所定のバイト数の領域に分割
されて管理される。ここではラインのサイズを仮に64
バイトとする。従って、1Mバイトのキャッシュ・メモ
リは16384のラインで構成され、各ラインは0から
16383の番号で管理される。
【0020】主記憶装置の命令が実行される場合やデー
タがアクセスされる場合は、まず命令やデータがキャッ
シュ・メモリ上にあるかどうかが調べられ、キャッシュ
・メモリ上に無い場合にはキャッシュ・ラインの単位で
主記憶装置からキャッシュ・メモリに転送が行われる。
例えば、1バイトのデータにアクセスするだけであって
も、ラインのサイズ分の、この場合は64バイトの転送
が行われる。
【0021】また、この計算機は仮想記憶をサポートし
ており、実行されるプログラムのアドレスは仮想アドレ
スで表され、実行時に、物理アドレスに変換され、主記
憶装置上に配置される。
【0022】命令やデータのアドレスから、その内容を
格納すべきラインは、その命令やデータの仮想アドレス
から、一意に決定される。具体的には、仮想アドレスを
キャッシュ・サイズ(この場合は1Mバイト)で割った
余りを、格納すべきラインのインデックスとする。
【0023】また、ソース・プログラム(あるいは、ソ
ース・コード)をコンパイルしたものを「オブジェクト
・プログラム」、それを格納したファイルを「オブジェ
クト・ファイル」と呼び、一つまたは複数の「オブジェ
クト・プログラム」をリンクし、計算機上で実行可能な
形式にしたものを「実行可能オブジェクト・プログラ
ム」と呼ぶ。また、オブジェクト・プログラムと実行可
能オブジェクト・プログラムとを総称してバイナリ・プ
ログラムと呼ぶ。
【0024】以上の前提に基づいて説明を行う。本発明
の実施の形態では、ソース・プログラムを使用すること
なく実行可能オブジェクト・プログラムの改変を実現す
るために、実行プロファイル情報を使用する。実行プロ
ファイル情報は以下のように採取される。
【0025】まず、実行可能オブジェクト・プログラム
を実行して、プログラム動作の履歴(実行トレース)を
採取する。この作業を実行トレース、あるいは、実行プ
ロファイルという。その実行プロファイル結果を実行可
能オブジェクト・プログラム単位および命令ブロック
(あるいは命令コード)単位に集計する。以上を行うの
が、実行プロファイル採取手段2である。
【0026】そして、実行プロファイル解析手段3が、
実行プロファイル結果を解析してプログラムの改変に必
要な情報を抽出する。改変に必要な情報とは、各命令ブ
ロックの実行回数、条件付き分岐命令の実行回数と条件
成立回数、各キャッシュ・ラインがデータ・アクセスに
より使用された回数などである。
【0027】改変に必要な情報を抽出したら、再配置情
報獲得手段4であるキャッシュ・アロケータ及びライン
・ログにより、他の実行可能オブジェクト・プログラム
の命令コードのフェッチや、データ・アクセスによるキ
ャッシュ・アクセスとの競合が最小限となるように、改
変プログラムが使用できるキャッシュ・ラインの配分を
行う。
【0028】プログラムの改変は、キャッシュ・システ
ムの使用を前提としており、そのために、キャッシュ・
メモリに対応したサイズのキャッシュ・ブロッキング領
域を、改変すべきプログラム毎にあらかじめ確保するキ
ャッシュ・ブロッキング領域設定手段1を備える。
【0029】キャッシュ・ブロッキング領域は、キャッ
シュ・メモリの任意のラインに対応するアドレスが実行
可能オブジェクト・プログラム中に存在するように確保
する。1メガバイトのダイレクトマップ・キャッシュ・
メモリであれば、1メガバイトのキャッシュ・ブロッキ
ング領域を各実行可能オブジェクト・プログラムに対し
て確保する。
【0030】キャッシュ・ブロッキング領域は、命令コ
ードのフェッチ時に使用されるキャッシュ・ラインを単
純に制御可能にするためにプログラム中に新たに設ける
領域で、この領域に対して、前記再配置情報にしたがっ
て、実行された命令ブロックを複写手段5により複写す
る。
【0031】命令ブロックをキャッシュ・ブロッキング
領域に複写した結果、アドレスが変わるので、そのまま
ではキャッシュ・ブロッキング領域上の命令ブロックが
実行されない。そこで、最適化手段6によって、キャッ
シュ・ブロッキング領域の命令ブロックが実行されるよ
うに、プログラム、例えば、CTI命令(Contro
l Transfer Instruction:Bran
ch、call、jmpl等の制御転送命令)のターゲット・オフ
セット/アドレスを変更する。
【0032】ここまでで、実行トレースで走った部分の
プログラムがキャッシュ上で走るプログラムに改変され
る。しかし、トレースした以外の命令が実行されること
が生じる可能性がある。そのような場合にも、誤った動
作をしないように補正コードを挿入する。補正コードと
は、すなわち元のコードに制御を転送するための命令コ
ードである。これもまた最適化手段6の機能である。
【0033】その後、キャッシュ・ブロッキング領域に
複写した命令ブロックに次のような最適化を適用する。
例えば命令ブロックに分岐命令があったとする。その分
岐命令を実行プロファイルに従って直線化する。
【0034】以上の結果、プロファイル上実行された最
適化済の命令ブロックだけがキャッシュ・ブロッキング
領域に複写される。以降、プログラムが実行されると、
キャッシュ・ブロッキング領域内の命令だけが実行され
るため、命令フェッチどうしのキャッシュ競合は一切な
くなり、さらに命令コード・サイズが圧縮されるため、
命令フェッチとデータ・アクセスとの競合も削減され
る。 <キャッシュ・ブースター>以上のように、キャッシュ
・ブロッキング領域にプロファイルの結果実行された命
令ブロックのみを複写し、キャッシュ・ヒット率の高い
プログラムに改変することを、本発明では、キャッシュ
・ブースターということとする。これにより、キャッシ
ュやCPUの使用効率を高め、その最大性能を引き出
す。これは、前記実行トレースの結果の命令ブロックを
キャッシュ・ブロッキング領域に複写する際、再配置情
報に従って各命令ブロックをキャッシュ・ブロッキング
領域に間断なく複写することで、これまで競合していた
複数の命令ブロックが、キャッシュ上で競合することな
く走行するようにすることである。この結果、キャッシ
ュ・ヒット率が向上する。すなわち、図2に示したよう
に、プログラム中において、実行トレースの結果、実行
された命令ブロックがa、b、c3つあったとする。実
行にあたって、命令ブロックa,bはキャッシュライン
上で競合することとする。
【0035】そこで、本発明では、キャッシュ・メモリ
に対応付け可能なキャッシュ・プロッキング領域という
仮想的なキャッシュ領域を予め確保し、この領域に、命
令ブロックa、b、cを実行順にできるだけ空き領域が
ないように蓄積していくのである。
【0036】したがって、変換後のプログラムを実行す
ると、キャッシュ・ブロッキング領域内ですべての命令
が走行し、しかも、キャッシュ・メモリには走行しない
無駄な命令が格納されなくなるため、キャッシュ・ヒッ
ト率が向上する。
【0037】これは、プログラムが複数存在する場合も
同様である。例えば、図3に示したように、A,B二つ
のプログラムが存在し、交互にデータをやりとりしつつ
実行されるものとする。プログラムAの命令ブロック
a,b,cがプログラムAに対応して設けられた第1の
キャッシュ・ブロッキング領域に複写されるのは、先と
同様である。
【0038】プログラムBの命令ブロックd,e,fも
同様にプログラムBに対応して設けられた第2のキャッ
シュ・ブロッキング領域に複写される。但し、この場合
は、プログラムAにおいてすでにa,b,cによって使
用されているラインと同一ラインは避けて複写される。
【0039】この結果、命令プロックa,b,c,d,
e,fのすべての命令が命令コードのフェッチにおいて
互いに競合することなくキャッシュ・メモリ上で実行さ
れることになるため、キャッシュ・ヒット率が向上す
る。
【0040】以上を、図4にてより詳しく説明する。図
4で、lineはキャッシュ・ライン番号であり、複数
個の同一な番号が存在する場合、命令どうしが競合して
いることを意味する。nは命令コードのフェッチが互い
に同一のラインで競合している数、accessは、キ
ャッシュに対するアクセス回数(つまり、ライン中にあ
る命令の実行回数の合計)、w0〜w15はライン中の
各ワードに対するアクセス回数(つまり、各命令の実行
回数)、wcは16を最大値とするアクセスされた命令
の数(つまり、実行された命令数)である。図4で、ラ
イン番号3698、3700、3702、3703、3
704、3705はいずれも競合が発生する可能性があ
るラインである。そこで、競合が発生しないようにキャ
ッシュ・ブロッキング領域を使用して、キャッシュ・メ
モリ上での命令コードの配置ラインを変更する。lin
e3698の上段のラインw0〜w15の命令コード
は、line9742のw10〜w15、line97
43のw0〜w9に配置されるラインを変更して、以降
line3699、line3700の下段、line
3701、line3702の下段、line3703
の下段、line3704の中段、line3705の
中段の命令群は圧縮して、line9743〜9748
にラインを変更する。また、line3698の上段を
はじめとする残りのラインにある命令コードは、974
2〜9748以外のラインに配置し、互いに競合が発生
しないようにする。
【0041】このように、プロファイルにおいて実行さ
れた命令ブロックを未使用領域ができるだけ少なくなる
ように圧縮しつつ、キャッシュ・ブロッキング領域へ複
写するため、キャッシュの利用効率が向上し、命令フェ
ッチでアクセスするキャッシュ・ライン数が減少する。
例では、1ラインが64バイト(16ワード)のサイズ
を持っており、キャッシュ・ブースターの適用前は、ラ
インあたり9.5ワードの使用効率(59.4%)であ
ったに対して、適用後は、ラインあたり15.1ワード
の使用効率(94.4%)となり、キャッシュの使用効
率を59%向上させている。以上説明のとおり、本発明
では、命令コードのフェッチにおいて互いに競合しない
ように、キャッシュ・ブロッキング領域を使って、命令
コードを配置するラインを変更するため、命令どうしの
競合は理論上なくなり、命令コードの圧縮率分データと
命令との競合も削減される。データと命令との競合にお
いては、さらに一定の改善が可能である。すなわち、実
行プロファイル結果から、データ・アクセスによるアク
セス頻度が高いライン群が求まり、キャッシュ・ブロッ
キング領域に命令コードを複写するときには、こうした
ライン群に相当するアドレスを避けて複写する。また、
本発明によれば、プロファイルにおいて実行された命令
ブロックだけをキャッシュ・ブロッキング領域に集めた
結果、さらに命令の最適化が可能となる。すなわち、キ
ャッシュ・ブロッキング領域に複写された命令の中に条
件付き分岐命令が含まれるとき、その分岐条件は何回成
立または不成立であったかが分かっているため、常に条
件が成立して分岐している場合には分岐条件を反転する
ことにより命令を直線実行させる。一般的に、条件が成
立し制御が離れたアドレスに転送される場合よりも、よ
り単純な直線実行の方がCPUの処理性能が高いため、
こうした最適化はほとんどのCPUアーキテクチャで有
効である。また、条件反転の前提として「常に条件が成
立して分岐する」を挙げているが、商用アプリケーショ
ン・プログラムでは、品質が重要視されるため、プログ
ラムの到る所で「現在正常な状態か」の検証を行うのが
一般的である。よって、こうした最適化はプログラムの
到る所で有効となる。具体的に、プログラムが「正常な
状態か」の判断を行っている場合、この判断文は正常時
には常に真であり、これを条件とする分岐命令は常に成
立する。条件を「現在正常な状態でないか」に反転すれ
ば、分岐は成立しなくなり命令は直線的に実行される。
また、キャッシュ・ブースターに入力されるプログラム
は、バイナリ・プログラムであるため、ソースコードを
必要とする最適化を行うことはできないが、機械語(ア
センブラ言語)をもとにした最適化を行うことは可能で
ある。たとえば、特定のCPUで非常に遅い命令や命令
の組み合わせがある場合、それらを代替命令(群)で置
換したりすることができる。CPUアーキテクチャは、
任意のプログラムを対象に(もちろん、特定の市場向け
ということはあるが)スループットを向上させることを
目的として設計されるため、得意でない(高速に実行で
きない)特定の命令(群)が存在することはしばしばあ
る。こうした命令の置き換えによる最適化は、CPUア
ーキテクチャが改良されて新たな命令が追加された場合
にも効果的に適用できる。CPUの改良により新しい機
能が追加されるとき、その新しい機能を実現するCPU
アーキテクチャに対応したコンパイラを使用して、ソー
スコード・プログラム群を再翻訳することにより改変し
ない限り、新しい機能は使用できない。こうした再翻訳
の作業は、プログラム開発者にとって面倒であり、大き
な負担を課すものである。ソースコードの管理が適切に
行われていなければ、再翻訳作業が不可能であったり、
大きな危険を伴うものにもなりかねない。したがって、
追加された機能が実際にプログラム利用者に対して普及
する速度が著しく鈍る。本発明では、ソースコード・プ
ログラムを入力する替わりに、より単純なバイナリ・プ
ログラムを入力するため、容易に新機能を活用すること
ができる。プログラム利用者は開発者の再翻訳作業を待
たずに新しいバイナリ・プログラムを生成し利用できる
ため、新機能の普及速度はほぼ「即時」と言える。例え
ば、CPUアーキテチャとして、予測ビット付き分岐命
令という新機能が追加されたとする。予測ビット付き分
岐命令とは、成立しやすい分岐命令には予め成立予測ビ
ット付きのコードを展開し、CPUは成立が予測された
分岐命令を実行するとき、分岐条件が成立したと仮定し
て後続の命令群をプリフェッチできるようにする機能で
ある。キャッシュ・ブロッキング領域に複写された条件
付き分岐命令を予測ビット付き分岐命令に書き換えるこ
とにより、新機能に対応したプログラムを生成できる。
以下、さらに詳細に説明する。 <キャッシュ・ブロッキング領域の予約>本発明では、
まず、キャッシュ・ブロッキング領域の確保をプログラ
ム毎に行う。実行されるプログラムが1つである場合は
対応するキャッシュ・ブロッキング領域は1つである
が、複数のプログラムが同一システム上で同時に実行さ
れるとき、キャッシュ・ブロッキング領域は各プログラ
ム毎に確保する。
【0042】例えば、図5に示したように、対象とする
実行可能オブジェクト・プログラムA及びBに対し、キ
ャッシュ・ブロッキング領域a、bをそれぞれ設定す
る。ここではプログラムA,Bは同一のシステム上で同
時に実行されるプログラムであるものとする。そして、
リンクエディタを使用して、前記実行可能オブジェクト
・プログラムをキャッシュ・ブロッキング領域にリンク
し、キャッシュ・ブロッキング領域を有する実行可能オ
ブジェクト・プログラムA’、B’を作製する。これ
で、キャッシュ・ブロッキング領域の予約が完了する。
【0043】なお、リンクエディタで実行可能オブジェ
クトプログラムにキャッシュブロッキング領域をリンク
した後、コンバータによる完全な再配置を可能とするた
め、リンクエディタが解決した再配置情報を実行可能オ
ブジェクトプログラム内に格納する。 <実行トレース>次いで、図5に示したように、プロフ
ァイラにより、プログラムA,Bを実行し、実行プロフ
ァイルA,Bを採取する。ここで、プロファイラは最適
化対象である複数の実行可能オブジェクト・プログラム
を同時にあるいは個別に実行し、命令あるいはデータの
アクセストレースを採取し実行プロファイルデータとし
て出力するプログラムである。 <実行プロファイルの解析>実行プロファイルA、B
は、トレース・アナライザにより解析される。トレース
・アナライザは、実行可能オブジェクト・ファイル
A’、B’と実行プロファイル結果A、Bをもとにし
て、以下のようなテキスト・テーブルとデータ使用ライ
ン・テーブルを出力する。テキスト・テーブルは、図7
に示したように、キャッシュ・ブロッキング領域に配置
すべき命令ブロックに関する指示情報であり、実行され
た命令ブロック、分岐条件の反転指示等、プログラム自
体の改変指示データである。テキスト・テーブルはより
具体的には以下の情報を有する。 ID :エントリの種類(S:ブロック、C:CT
I命令)+ブロック番号 MADDR:ブロック先頭アドレス、CTI命令のアド
レス OFF :関数先頭アドレスからのオフセット SZ :ブロックのサイズ BT :分岐命令の成立回数 RUN :ブロック、命令の実行回数 D :annulledでないCTI命令の遅延命令がn
opか否か TADDR:分岐/call命令のターゲットアドレス ICODE:CTI命令の命令コード FUNC :関数名 これらは、キャッシュブロッキング領域へ複写するブロ
ックの決定、分岐予測ビットの設定用のデータである。
例えば、走行回数の多い命令ブロックを優先して複写す
るとか、条件成立回数の多い条件分岐命令を反転させる
等の情報とする。データ使用ラインテーブルは、図8に
示したように、物理キャッシュ・ラインをデータがアク
セスした回数がすべてのキャッシュラインについて集計
される。すなわち、データ・アクセスによるアクセス頻
度の高いライン番号を識別できる。これは、テキスト・
テーブルに記載された情報をどのラインに載せたらよい
かという情報を提供することとなる。ところで、実行プ
ロファイルを解析した結果、実行された命令ブロックの
サイズ総計が、キャッシュ・ブロッキング領域のサイズ
より大きいと判定された場合問題である。その場合、す
べての命令ブロックをキャッシュ・ブロッキング領域に
複写することができず、結果として、複写できなかった
部分について、実行の際にキャッシュにヒットせず、キ
ャッシュの書き換えを行わなければ、ならなくなるから
である。このような場合、実行命令ブロック中、実行回
数の多い順で、総計がキャッシュ・ブロッキング領域の
サイズ以内に収まるように実行命令ブロックを選定し、
他はキャッシュ・ブロッキング領域への複写対象としな
いようにする。これは、絞り込み手段7による機能であ
る。こうして絞り込むか、あるいは、キャッシュ・ブロ
ッキング領域を予め大きくしておくことでも対処でき
る。 <キャッシュアロケータ、オブジェクトコードコンバー
タでの処理>キャッシュ・アロケータは、データとの競
合を避けて命令を配置すべき場所(ライン)を決定する
手段であり、オブジェクト・コード・コンバータは、最
適化を実装する手段である。まず、図6に示したよう
に、キャッシュアロケータに図7に示したようなテキス
トテーブルと、図8に示したようなデータ使用ラインテ
ーブルが入力される。キャッシュ・アロケータは、限ら
れたサイズ(ライン数)のキャッシュ・メモリを改変の
対象となる複数の実行可能オブジェクト・プログラムに
対して、データとの競合を最小限に抑えるためには、ど
のラインを使用するのが最適かを決定し、ライン・テー
ブルとして出力し、オブジェクト・コード・コンバータ
に入力する。また、実行された命令ブロックのサイズの
総計が、複写先であるキャッシュ・ブロッキング領域よ
りも大きい場合には、走行回数の少ない命令ブロックを
複写対象外とするように書き換え、テキスト・テーブル
A’、B’として出力し、オブジェクト・コード・コン
バータに入力する。結果的に、キャッシュ・ラインに対
しては、図10に示すようなイメージで配置が行われ
る。キャッシュ・ラインやキャッシュ・ライン中の各ワ
ードに対する詳細な配置イメージは、図4に示したとお
りである。オブジェクト・コード・コンバータには、キ
ャッシュ・ブロッキング領域を結合した実行可能オブジ
ェクト・プログラムA’とB’、テキスト・テーブル
A’とB’、ライン・テーブル、そして必要に応じてラ
イン・ログが入力される。最適化は、まず、プログラム
Aにつき行われる。最適化にあたって、前記図10に示
された配置イメージ(再配置情報)に従って、図4に示
したように、複写手段によってプログラムAがキャッシ
ュ・ブロッキング領域に複写される。この意味におい
て、オブジェクトコードコンバータは、複写手段6を備
えている。
【0044】そのとき、ライン・ログA(プログラムA
の改変において、キャッシュ・ブロッキング領域を使っ
て、どのキャッシュ・ラインに命令コードを配置したか
を記録したデータ)が出力される。このライン・ログ
は、プログラムBを改変するときに、オブジェクト・コ
ード・コンバータに入力する。プログラムAの最適化が
終了した後に、プログラムBの最適化が行われる。
【0045】この場合も、オブジェクトコードコンバー
タに、キャッシュ・ブロッキング領域をリンクした実行
可能オブジェクト・プログラムB’、テキスト・テーブ
ルB’、ラインテーブル、実行プロファイルの分析結
果、すなわち、最適化のための情報が入力される。ま
た、前記ラインログAもまたオブジェクトコードコンバ
ータに入力される。これにより、プログラムAの使用済
みキャッシュラインを避けて、キャッシュ・ブロッキン
グ領域にプログラムBを複写し、最適化処理を行うこと
ができる。上記の最適化処理により、複数のプログラム
のすべての命令コードが互いに競合することなく、さら
にデータとの競合も最小限に抑えられるようにキャッシ
ュ・ラインに配置されるコードが完成する。より完成度
を高めるため、変換後の実行可能オブジェクト・プログ
ラムを再度実行し、キャッシュラインの競合がみられる
場合、命令をキャッシュの未使用ラインへと移動させ
る。これによりさらに最適化が進む。次に、コード変換
処理の詳細を図とともに説明する。すべてのプログラム
について、図6で示す処理、すなわちオブジェクト・コ
ードの改変処理が行われる。まず、プログラムの命令ブ
ロックa、b、cが以下のように存在するものとする。
プログラムは、ある計算機アーキテクチャ用のアセンブ
ラ言語をもとにしている。
【0046】
【表1】{変換前} ============================ block a: ・・・ ・・・ seticc be c−. delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block b: ・・・ ・・・ ・・・ −−−−−−−−−−−−−−−−−−−−−−−−−−−− block c: ・・・ ・・・ ・・・ ============================ 命令ブロックa、b、cは、プログラム上この順序で並
んでおり、実行した結果、命令ブロックa、bだけが実
行され、cは実行されなかったとする。変換に当たって
は、表2のように、まず、実行された命令ブロックをキ
ャッシュ・ブロッキング領域に複写する。
【0047】
【表2】複写 ============================ block a: ・・・ ・・・ seticc be c−. delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block b: ・・・ ・・・ ・・・ −−−−−−−−−−−−−−−−−−−−−−−−−−−− block c: ・・・ ・・・ ・・・ ============================ block a’: ・・・ ・・・ seticc be c−. delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block b’: ・・・ ・・・ ・・・ ============================ ここで、命令ブロック a,b,cはオリジナルテキス
ト域であってメインメモリにそのまま存在し(ここでは
便宜的にメモリ・テキスト領域(MTXT)という)、
命令ブロック a’,b’はキャッシュ・ブロッキング
領域(CaB)に存在する。
【0048】命令ブロック a,bを複写しただけでは
実行されないので、リロケーションする必要がある。リ
ロケーションした結果、次の表3のようになる。
【0049】
【表3】{変換後} ============================ block a: ba,a a’−. <CaB>*1 ・・・ seticc be c−. delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block b: ba,a b’−. <CaB>*2 ・・・ ・・・ −−−−−−−−−−−−−−−−−−−−−−−−−−−− block c: ・・・ ・・・ ・・・ ============================ block a’: ・・・ ・・・ seticc be c−. <MTXT> *3 delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block b’: ・・・ ・・・ ・・・ ba,a c−.<MTXT> *4 ============================ ここで、*1、*2では、CaB領域に複写されたブロ
ックの先頭命令を複写先ブロックへの無条件分岐命令に
書き換えている。*3では、分岐命令のターゲット・オ
フセット値を書き換え、MTXT領域内のプログラムと
CaB領域内のプログラムとの間で正しいアドレスに制
御が転送されるようにする。説明は省略するが、関数の
呼出しに使用されるcall命令についても同様の書き
換えを行う。ここでは、CaB領域内に命令ブロックc
の複写であるc’が存在しないため、MTXT領域内の
cに対して制御が転送できるようにオフセット値の書き
換えを行う。*4では、後続の命令ブロックがcがCa
B領域に複写していないので、b’から直線的に実行さ
れた場合にMTXT領域中の命令ブロックcに制御が転
送できるように無条件分岐命令を挿入する。delay
は、遅延命令の意味で、プログラム上、分岐命令の次に
ある命令はすべてdelayである。この遅延命令は、
分岐命令と同時に実行される命令であり、分岐する場合
においても分岐命令とdelayの命令が実行された後
に、分岐ターゲットの命令が実行される。ba,aの
「ba」は無条件分岐(branch always)
を意味し、「,a」は上記遅延命令の無効化、すなわち
遅延命令を実行しないで、無条件分岐命令の直後に分岐
ターゲットの命令が実行される。「a’−.」は、a’
のアドレスから現在のアドレス(.)を引いた差によ
り、a’へ分岐するためのオフセット値を求めている。
seticcは、条件付き分岐命令が参照する条件コー
ドを設定する命令を意味する。beはequal条件が
成立した場合に分岐する命令(branchequa
l)である。次に、分岐条件の反転による最適化を説明
する。 <条件分岐反転最適化1>変換前が表1と同一で、命令
ブロックaとcが走行したとする。
【0050】
【表4】{変換後} ============================ block a: ba,a a’−. <CaB> *5 ・・・ seticc be c−. <CaB> *6 delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block b: ・・・ ・・・ ・・・ −−−−−−−−−−−−−−−−−−−−−−−−−−−− block c: ba,a c’−. <CaB> *7 ・・・ ・・・ ============================ block a’: ・・・ ・・・ seticc bne b−. <MTXT> *8 delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block c’: ・・・ ・・・ ・・・ ============================ 表4の*5〜*7は、既に表3をもとに説明した書き換
えと同様の処理を行う。*8では、a’からc’への直
線実行させるため、分岐条件をbeの逆であるbne
(branch not equal)に反転し、ター
ゲットをMTXT領域中のbとなるように書き換えてい
る。なお、分岐条件を反転した結果、baがbn(br
anch never、すなわち常に分岐しない)にな
った場合、bnという命令コードは無意味であるため、
命令自体を削除する。 <条件分岐反転最適化2>条件分岐命令が遅延無効化分
岐命令(アナル分岐)の場合の最適化を説明する。
【0051】
【表5】{変換前} ============================ block a: ・・・ ・・・ seticc be,a c−.(アナル分岐) delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block b: ・・・ ・・・ ・・・ −−−−−−−−−−−−−−−−−−−−−−−−−−−− block c: ・・・ ・・・ ・・・ ============================ ここで、命令ブロックaとcが走行したとする。
【0052】
【表6】{変換後} ============================ block a: ba,a a’−. <CaB> ・・・ seticc be,a c−. <CaB> delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block b: ・・・ ・・・ ・・・ −−−−−−−−−−−−−−−−−−−−−−−−−−−− block c: ba,a c’−. <CaB> ・・・ ・・・ ============================ block a’: ・・・ ・・・ seticc bne b−. <MTXT> *9 nop *10 delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block c’: ・・・ ・・・ ・・・ ============================ 条件付き分岐命令が遅延無効化分岐命令の場合、通常は
分岐命令と同時に実行される遅延命令が条件が成立した
場合のみ実行され、成立しなかった場合には実行されな
いようにする命令である。表6の*9では、*8と同様
の条件反転処理を行っているが、delayにある遅延
命令が実行するのは、プログラムがa’→c’の順に実
行される場合だけであり、a’→bの順に実行される場
合には実行されてはならない。したがって、分岐条件を
反転し遅延無効化を止めた上で遅延命令があった位置に
nop(何も有効な処理を行わない)を挿入する。 <予測ビット付き分岐命令の活用>
【0053】
【表7】{変換前} ============================ block a: ・・・ ・・・ seticc be c−.(成立しやすい)*11 delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block b: ・・・ ・・・ ・・・ −−−−−−−−−−−−−−−−−−−−−−−−−−−− block c: ・・・ seticc bg a−.(成立しやすい)*12 delay ============================ このプログラムにおいて、命令ブロックaとcが走行
し、aにある分岐命令もcにある分岐命令も成立しやす
い(条件が成立する確率が50%よりも大きい)という
実行結果が得られたとする。このような場合、以下のよ
うにコ−ド変換する。
【0054】
【表8】{変換後} ============================ block a: ba,a a’−. <CaB> ・・・ seticc be,pt c’−. <CaB> *13 delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block b: ・・・ ・・・ ・・・ −−−−−−−−−−−−−−−−−−−−−−−−−−−− block c: ba,a c’−. <CaB> ・・・ seticc bg,pt a’−. *14 delay ============================ block a’: ・・・ ・・・ seticc bne,pn b−. <MTXT> *15 delay −−−−−−−−−−−−−−−−−−−−−−−−−−−− block c’: ・・・ seticc bg,pt a−. <CaB> *16 delay ============================ *13〜*14において、ptとは条件が成立しやすい
分岐命令で、pnとは条件が成立しにくい分岐命令であ
ることを意味し、いずれも新たなCPUアーキテクチャ
に追加された新機能である予測ビット付き分岐命令を使
用している。以上の処理をフローチャート図を参照して
再度説明する。 <キャッシュ・アロケータでの処理フロー>図11に示
したように、キャッシュ・アロケータでは、テキスト・
テーブルA,B、データ使用ラインテーブルA,B、キ
ャッシュ構成情報等の各種情報を基に処理が行われる。
まず、走行した全てのブロックのサイズの合計(SU
M)を求める(ステップ100)。次いで、物理キャッ
シュサイズをCZとしたとき、SUM>CZが成立する
か否か判定する(ステップ101)。真のとき、このま
までは走行したすべての命令ブロックをキャッシュ・ブ
ロッキング領域に複写できないため、すべての実行可能
オブジェクト・プログラムに対応するテキスト・テーブ
ルから命令ブロックに関するエントリを取り出し、走行
回数(RUN)をキーに降順にソートして、SUM>C
Zを満たす最大のRUN(MAXRUN)を求める(ス
テップ102)。これは絞り込み手段6による機能であ
る。この処理は、ダイレクト・マップ方式のキャッシュ
・メモリでキャッシュ・ブロッキング領域がキャッシュ
・メモリのサイズ分、確保されていることを前提として
いる点に注意する必要がある。つまり、キャッシュ・ブ
ロッキング領域をSUMに対応して拡張すれば、当該条
件が真であるかの判定、および真である場合における以
降の処理も不要となる。次いで、RUN≦MAXRUN
であるブロックはRUNを0に変更し、再配置の対象外
となるように、テキストテーブルを修正する(ステップ
103)。この結果、SUM<CZとなる。そして、当
該キャッシュ・メモリのすべてのライン番号をライン・
テーブルに出力する(ステップ104)。本特許中で前
提とするキャッシュ・メモリの場合、先頭ライン番号が
0、最終ライン番号が16383、ライン数が1638
4である一行からなるライン・テーブルを出力する。
【0055】ステップ101で偽(SUM>CZでな
い)と判断された場合、キャッシュ構成情報とSUMを
基にすべてのブロックの配置に必要なライン数(L)を
求める(ステップ105)。次いで、すべてのオブジェ
クトのデータ使用ラインをアクセス回数(USE)をキ
ーに昇順ソートしてL個のライン番号を取り出す(ステ
ップ106)。さらに、ライン番号をキーに昇順ソート
して、連続するラインは1つのエントリにまとめて先頭
ライン番号、最終ライン番号、ライン数の形式にする
(ステップ107)。最後にライン数をキーに降順ソー
トしてラインテーブル(図9参照)に出力する。 <オブジェクトコンバータでの処理>図12に示したよ
うに、オブジェクトコンバータでは、キャッシュ・ブロ
ッキング領域を確保した実行可能オブジェクトプログラ
ムを対象に、テキストテーブル、レインテーブル、ライ
ンログ等の情報を使用して実行可能オブジェクト・プロ
グラムを改変する。
【0056】ここでは、まず、最初の変換対象オブジェ
クトか否かが判定される(ステップ110)。最初の変
換対象オブジェクトであれば、ブロック複写処理(ステ
ップ112)、CTIリロケーション処理(ステップ1
13)、アドレス定数のリロケーション処理(ステップ
114)へと順次進み、この処理がオブジェクト毎に繰
り返される。
【0057】ステップ110で、最初の変換対象オブジ
ェクトでないと判断された場合、すでに変換したオブジ
ェクトのラインログを入力し、ラインテーブルからすで
に使用したライン番号を削除し(ステップ111)、ス
テップ112へと進む。これにより、オブジェクト間で
のライン競合を避けることができる。以下、ブロック複
写処理(ステップ112)、CTIリロケーション処理
(ステップ113)、アドレス定数のリロケーション処
理(ステップ114)をより詳細に説明する。 <ブロック複写処理>ブロック複写処理は、図7で示し
たテキストテーブルのブロックエントリに関し最初から
最後まで繰り返される。
【0058】図13に示すように、まず、命令ブロック
に関するエントリSi(図7を参照)につき、RUN
(Si)≧1か否かが判定される。否である場合、Si
の命令ブロックは一度も走行しなかったことを意味し、
キャッシュ・ブロッキング領域に当該命令ブロックを複
写する必要はないため、ステップ126に進み、処理の
完了を判断したうえで必要があれば、次の命令ブロック
・エントリの処理へと移行する。
【0059】ステップ120で、RUN(Si)≧1で
ある場合、MTXT領域からCaB領域へとブロックS
iを複写する複写処理が行われる(ステップ121)。
複写処理は、図14に示したように、ラインテーブルの
情報と、キャッシュ構成情報とを基に行われる。すなわ
ち、まず、ラインテーブルの使用可能ライン番号とキャ
ッシュ構成情報とから複写先アドレスを決定する(ステ
ップ130)。すなわち、ラインテーブルには、ライン
番号が入っているため、ライン番号からアドレスを逆引
きするためには、キャッシュ構成情報をもとに算出す
る。ステップ130に次いで、ブロックSiが連続ライ
ン内に配置可能かを判定する(ステップ131)。 ブ
ロックが連続ライン内に配置可能な大きさの場合、ブロ
ックSiをキャッシュ・ブロッキング領域に複写する
(ステップ132)。
【0060】ブロックサイズが大きすぎて、一つの連続
ライン内に配置できない場合、ブロックを分割して配置
するために、最終ラインの最終ワードに、次に使用可能
な先頭ラインへの無条件分岐命令を追加し、完了するま
でSiの複写を継続する(ステップ133)。MTXT
領域からCaB領域へのブロックSiの複写が完了した
ら、Siの先頭命令をCaB領域ブロック先頭への無条
件分岐命令に変換する(ステップ122)。次いで、ブ
ロックSi内に分岐命令(Ci)があるか否かを判定す
る(ステップ123)。分岐命令Ciがあれば次にCa
B領域に複写されるブロックSjを求めて、MADDR
(Sj)=TADDR(Ci)であるか否かが判定され
る(ステップ124)。MADDRはブロックの先頭ア
ドレスであり、TADDRは分岐命令のターゲットアド
レスである。MADDR(Sj)=TADDR(Ci)
である場合、ステップ125で分岐条件反転処理が行わ
れる。
【0061】ステップ123でブロックSi内に分岐命
令(Ci)がないと判断されたとき、及び、ステップ1
24で、MADDR(Sj)=TADDR(Ci)でな
いと判断されたとき、ステップ128に移行し、MAD
DR(Sj)!=MADDR(Si)+SZ(Si)で
あるか否かが判定される。ここでSZはサイズである。
MADDR(Sj)!=MADDR(Si)+SZ(S
i)が成立した場合、アドレス(MADDR(Si)+
SZ(Si)への無条件分岐命令を、CaB領域に複写
したSiの最後に追加する(ステップ129)。
【0062】以上の処理は、すべてのブロックエントリ
について行われる(ステップ126)。 分岐条件反転
処理は図15のフローチャートに従って行われる。ま
ず、Ciがアナル分岐か否かを判定する(ステップ14
0)。遅延無効化分岐命令とは、通常は分岐命令と同時
に実行される遅延命令を条件が成立した場合のみ実行
し、成立しなかった場合には実行しないようにする分岐
命令である。遅延無効化の無条件分岐命令の場合は、常
に遅延命令を実行しない点に注意する必要がある。アナ
ル分岐であればCiの分岐条件を反転してアナルをオフ
にする(ステップ141)。そして、分岐命令と遅延命
令の間にnop命令を挿入する(ステップ142)。ス
テップ140で、Ciがアナル分岐でないと判定したと
きは単にCiの分岐条件を反転するだけに止める(ステ
ップ143)。これら分岐条件の反転により直線実行化
を図る。
【0063】ステップ142、ステップ143に続い
て、反転後の命令コードがbnか否かを判定する(ステ
ップ144)。ここで、bn(branch neve
r)とは、常に分岐しない分岐命令を意味し、命令自体
が有効な意味を持っていない。bnでなければ反転処理
はそのまま終了する。bnであるとき、分岐命令を削除
し(ステップ145)、分岐遅延命令がnopか否かを
判定する(ステップ146)。nopでないとき反転処
理は終了し、nopのときは遅延命令を削除してから
(ステップ147)、反転処理を終了する。 <CTIリロケーション処理>ブロック複写処理(ステ
ップ112)が終了したら、CTIリロケーション処理
に移行する。
【0064】これは、図16に示したように、図7に示
したようなテキストテーブルを基に、CTI命令(Bran
ch、call、jmpl等)に関し、最後まで繰り返す。まず、
CTIエントリCiについて、ターゲットアドレスTA
DDR(Ci)をCaB領域に複写したか否かを判定す
る(ステップ150)。複写してあればTADDRをリ
ロケーションする(ステップ151)。複写していなけ
れば、すべての処理が完了したかの判定分岐(ステップ
156)に移行する。TADDRをリロケーションした
ら分岐予測処理(ステップ152)へと移行する。分岐
予測処理は図17に示したように、対象CPUに予測ビ
ット付き分岐命令があるか否かを判定し(ステップ16
0)、分岐命令があればBT(Ci)(分岐命令の成立
回数/RUN(Ci)(実行回数)>0.5、か否かを
判定する(ステップ161)。ここで0.5より大きい
とき分岐条件が成立しやすいとみて、Ciの命令コード
をBPcc,ptに変換し(ステップ162)、0.5
以下のとき、分岐条件が成立しにくいものとして、Ci
の命令コードをBPcc,pnに変換する(ステップ1
62)。BPccとは、記述上、予測ビット付き分岐命
令を一般化した疑似命令である。分岐予測処理(ステッ
プ152)が終了したら、Ciを含むSiをCaB領域
に複写したか否かを判定する(ステップ153)。複写
してあればCaB領域内のターゲットアドレスをリロケ
ーションする(ステップ154)。複写していなけれ
ば、すべての処理が完了したかの判定分岐(ステップ1
56)に移行する。ステップ154でターゲットアドレ
スをリロケーションしたら前記と同様の分岐予測処理
(ステップ155)へと移行する。
【0065】全てのCTIエントリについて処理が完了
したら(ステップ156)、使用ラインログを出力する
(ステップ157)。 <アドレス定数のリロケーション処理>これは、図18
に示したように、オブジェクトプログラムを対象に、リ
ンクエディタがオブジェクトファイルに格納したアドレ
ス定数データについて、最初から最後まで繰り返し行わ
れる。
【0066】まず、アドレス定数が、CaB領域に複写
されたMTXT域内を指しているか否かの判定がなされ
る(ステップ170)。MTXT域内を指しているので
あれば、CaB領域内の命令が実行されるように、アド
レス定数を対応するCaB領域内のアドレスに書き換え
る(ステップ171)。この処理は、すべてのアドレス
定数について行われる(ステップ172)。以上の最適
化処理が終了し、改変された複数の実行可能オブジェク
ト・プログラムA”とB”が生成される。 <本発明の手段、手順の実現>本発明の手段、及び、手
順は、プログラムからなり、記録媒体として例えばCD
−ROM10に格納されて頒布される。そして、コンピ
ュータにインストールされることで、図19に示したよ
うに、キャッシュ・ブロッキング領域設定手段1、実行
プロファイル採取手段2、実行プロファイル解析手段
3、複写手段4、最適化手段5、絞り込み手段6が機能
的に実現される。これらは、前記本発明の手順を実行す
る。本発明は、キャッシュ・メモリの存在を前提とする
が、キャッシュ・メモリのアーキテクチャには、さまざ
まな方式や構成の違いがある。ここでは、以上の説明で
前提としたキャッシュ・アーキテクチャと、それ以外の
キャッシュ・アーキテクチャと本発明の関連性について
説明する。 (1)複数のキャッシュ・メモリ 最近のコンピュータ・システムでは、CPUとメイン・
メモリの間に、複数のキャッシュ・メモリを実装してい
ることが多い。たとえば、2つのキャッシュ・メモリを
備え、CPUに近い方から1次キャッシュ・メモリ、2
次キャッシュ・メモリと呼ぶ。1次キャッシュ・メモリ
は2次キャッシュ・メモリに比べて、容量は小さいが高
速なアクセスが可能である。本発明の記述では、複数の
キャッシュ・メモリについて触れていないが、これまで
に説明した方式や方法は複数のキャッシュ・メモリ・シ
ステムに対して適用可能なものである。たとえば、実施
例として挙げている1メガ・バイトの容量を持つキャッ
シュ・メモリは、具体的には2次キャッシュ・メモリを
指す。 (2)マッピング方式 キャッシュ・メモリのマッピング方式として、ダイレク
ト・マップ方式(1ウェイ・セット・アソシアティブ方
式と同値)、nウェイ・セット・アソシアティブ方式、
フル・アソシアティブ方式の3種類がある。本発明の記
述では、説明が簡略化できるダイレクト・マップ方式を
前提としてきており、実施例も同様である。しかしなが
ら、これまでに説明した方式や方法は、他のマッピング
方式にも適用可能なものである。たとえば、nウェイ・
セット・アソシエティブ方式であれば、ライン番号の替
わりにn個のアドレスがマッピング可能なセット番号を
もとにキャッシュ・メモリの場所を特定するように変更
すれば良い。 (3)命令キャッシュとデータ・キャッシュ 命令コードを保持するための命令キャッシュと、データ
を保持するためのデータ・キャッシュを分離している分
離型キャッシュ・メモリと、分離していない統合型のキ
ャッシュ・メモリが存在する。本発明の記述では、より
複雑なキャッシュ競合が発生し得る統合型のキャッシュ
・メモリを前提にしているが、データと命令との競合に
関する説明は分離型では関係のないものである。 (4)インデックス方式 命令コードやデータのアドレスから、その内容を格納す
べきキャッシュ・メモリ内の場所(ライン、あるいはセ
ット)を求めるための対応付けのことを通常インデック
スと呼ぶ。インデックスを求めるために、仮想アドレス
(VADDR)を使用する仮想インデックス方式と、物
理アドレス(PADDR)を使用する物理インデックス
方式が存在する。本説明の実施の形態では、仮想インデ
ックス方式を前提としたが、アドレスからキャッシュ・
メモリ内の場所(ライン、あるいはセット)が一意に特
定できる必要があるため、たとえば、物理インデックス
方式によるダイレクト・マップ方式のキャッシュ・メモ
リの場合、キャッシュ・メモリの容量分(たとえば1メ
ガ・バイト)、VADDR=PADDRとする必要があ
る。その具体的手段とは、たとえば、メイン・メモリの
割り当てを制御するプログラムが、キャッシュ容量以上
の大きさを持つ物理メモリを割り当てることである。こ
の様なインデックス方式の違いは本発明の本質には影響
しない。 (5)容量 実施例では、キャッシュ・ラインの大きさを64バイ
ト、キャッシュ・メモリ全体の容量を1メガ・バイト
(16384ライン)とした説明をしている部分がある
が、方式や方法自体は任意の容量に適用可能なものであ
る。 (6)まとめ 本発明における方式と方法が適用できるかどうかの条件
は、システムがキャッシュ・メモリを備えていること、
アドレスをもとにキャッシュ・メモリ内の位置(ライ
ン、あるいはセット)を決定できるキャッシュ・アーキ
テクチャであることの2つである。
【0067】
【発明の効果】本発明により、ソース・プログラムを変
更すること無く、プログラムの実行性能が向上する。
【0068】より具体的には、命令コードを走行部分の
みに圧縮することで、キャッシュ・メモリが有効に使用
され、キャッシュ・ヒット率が向上し、実行性能が向上
する。
【0069】また、複数のプログラムの間でキャッシュ
にマッピングされる位置をずらす事で、複数のプログラ
ムを同時に実行した場合のプログラム間でのキャッシュ
の競合が無くなり、キャッシュ・ヒット率が向上し、複
数のプログラムを同時に実行した場合の全体としての処
理効率が向上する。
【0070】また、データで頻繁に使用されるキャッシ
ュ・ラインを命令が使用しないようにすることで、デー
タと命令の間でのキャッシュの競合が減少し、キャッシ
ュ・ヒット率が向上し、実行性能が向上する。
【0071】さらに、再配置後のプログラムに対して直
線化の処理を行うことで、条件分岐命令を実行する際の
CPUの処理効率が向上する。また、ソース・プログラ
ムを利用しないので、新しい計算機のアーキテクチャや
CPUの新しい命令に対応する場合に、コンパイラの改
変の完了を待つ必要が無い。
【図面の簡単な説明】
【図1】キャッシュ・システムにおけるキャッシュ・ラ
インの競合を示す図
【図2】本発明におけるプログラムの最適化を示す概念
【図3】複数のプログラムを対象に最適化を図る場合の
概念図
【図4】キャッシュ・ブロッキング領域への複写状態を
示す図
【図5】本発明の手順を示す図
【図6】図5に続いて実行される手順を示す図
【図7】テキストテーブルの一例を示す図
【図8】データ使用ラインテーブルの一例を示す図
【図9】ラインテーブルの一例を示す図
【図10】キャッシュへの配置イメージを示す図
【図11】キャッシュアロケータでの処理を示すフロー
チャート図
【図12】オブジェクトコンバータでの処理を示すフロ
ーチャート図
【図13】ブロック複写処理を示すフローチャート図
【図14】命令ブロックの複写処理を示すフローチャー
ト図
【図15】分岐条件反転処理を示すフローチャート図
【図16】CTIリロケーション処理を示すフローチャ
ート図
【図17】分岐予測処理を示すフローチャート図
【図18】アドレス定数のリロケーション処理を示すフ
ローチャート図
【図19】本発明の機能実現手段を示した機能ブロック
【符号の説明】
1・・・キャッシュ・ブロッキング領域設定手段 2・・・実行プロファイル採取手段 3・・・実行プロファイル解析手段 4・・・複写手段 5・・・最適化手段 6・・・絞り込み手段 10・・・CD−ROM
───────────────────────────────────────────────────── フロントページの続き (72)発明者 北岡 正治 神奈川県川崎市中原区上小田中4丁目1 番1号 富士通株式会社内 (56)参考文献 特開 平5−324281(JP,A) 特開 平3−184126(JP,A) 冨山宏之外1名,命令キャッシュのヒ ット率向上を目的としたコード配置手 法,情報処理学会研究報告 95−ARC −115,日本,社団法人情報処理学会, 1995年12月15日,第95巻第119号,p. 133−138 Karl Pettis外1名,Pr ofile Guided Code Positioning,ACM SI GPLAN’90 Conference on Programming La nguage Design and Implementation,米国, acm PRESS,1990年 6月20 日,ACM SIGPLAN NOTI CES vol.25 no.6,p.16 −27 (58)調査した分野(Int.Cl.7,DB名) G06F 9/45 G06F 12/08

Claims (7)

    (57)【特許請求の範囲】
  1. 【請求項1】 バイナリ・プログラムを別のバイナリ・
    プログラムに変換するバイナリ・プログラム変換装置で
    あって、 複数の命令ブロックにより構成される変換前のバイナリ
    ・プログラムが実行された際の情報に基づき、変換後の
    バイナリ・プログラムがキャッシュ・メモリを備えた計
    算機で実行される際に、変換前のバイナリ・プログラム
    の実行された命令ブロックに対応する部分を実行する際
    のキャッシュ・メモリのヒット率が向上するように変換
    前のバイナリ・プログラムの複数の命令ブロックを再構
    し、 同時に実行される複数のバイナリ・プログラムを別の複
    数のバイナリ・プログラムに変換する場合に、変換前の
    バイナリ・プログラムの実行された命令ブロックに対応
    する部分が変換後のバイナリ・プログラム毎にキャッシ
    ュ・メモリ上の異なる領域にマッピングされるよう複数
    の変換前のバイナリ・プログラムを再構成し、 変換前のバイナリ・プログラムの実行された命令ブロッ
    クに対応する部分が高頻度でデータがマッピングされる
    領域にはマッピングされないように変換前のバイナリ・
    プログラムを再構成することで変換後のバイナリ・プロ
    グラムを得る バイナリ・プログラム変換装置。
  2. 【請求項2】 バイナリ・プログラムを別のバイナリ・
    プログラムに変換するバイナリ・プログラム変換装置で
    あって、 複数の命令ブロックにより構成される変換前のバイナリ
    ・プログラムが実行された際の情報に基づき、変換後の
    バイナリ・プログラムがキャッシュ・メモリを備えた計
    算機で実行される際に、変換前のバイナリ・プログラム
    の実行された命令ブロックに対応する部分を実行する際
    のキャッシュ・メモリのヒット率が向上するように変換
    前のバイナリ・プログラムの複数の命令ブロックを再構
    成し、変換前のバイナリ・プログラムの実行された命令ブロッ
    クが実行されなかった命令ブロックとは分離され、実行
    された命令ブロックが連続するように変換前のバイナリ
    ・プログラムの複数の命令ブロックを再構成し、 再構成を行った結果、命令ブロックの末尾が条件分岐命
    令で、その条件分岐先の命令ブロックが条件分岐を行っ
    た命令ブロックの直後となる場合に、前記条件 分岐命令
    の分岐条件および条件分岐先を変更する バイナリ・プロ
    グラム変換装置。
  3. 【請求項3】 変換前のバイナリ・プログラム中の命令
    列を他の命令列に変換することで変換後のバイナリ・プ
    ログラムを得る請求項1又は2に記載のバイナリ・プロ
    グラム変換装置。
  4. 【請求項4】 バイナリ・プログラムを別のバイナリ・
    プログラムに変換するバイナリ・プログラム変換方法で
    あって、 複数の命令ブロックにより構成される変換前のバイナリ
    ・プログラムが実行された際の情報に基づき、変換後の
    バイナリ・プログラムがキャッシュ・メモリを備えた計
    算機で実行される際に、変換前のバイナリ・プログラム
    の実行された命令ブロックに対応する部分を実行する際
    のキャッシュ・メモリのヒット率が向上するように変換
    前のバイナリ・プログラムの複数の命令ブロックを再構
    し、 同時に実行される複数のバイナリ・プログラムを別の複
    数のバイナリ・プログラムに変換する場合に、変換前の
    バイナリ・プログラムの実行された命令ブロックに対応
    する部分が変換後のバイナリ・プログラム毎にキャッシ
    ュ・メモリ上の異なる領域にマッピングされるよう複数
    の変換前のバイナリ・プログラムを再構成し、 変換前のバイナリ・プログラムの実行された命令ブロッ
    クに対応する部分が高頻度でデータがマッピングされる
    領域にはマッピングされないように変換前のバイナリ・
    プログラムを再構成することで変換後のバイナリ・プロ
    グラムを得るバイナリ・プログラム変換方法。
  5. 【請求項5】 バイナリ・プログラムを別のバイナリ・
    プログラムに変換するバイナリ・プログラム変換方法で
    あって、 複数の命令ブロックにより構成される変換前のバイナリ
    ・プログラムが実行された際の情報に基づき、変換後の
    バイナリ・プログラムがキャッシュ・メモリを備えた計
    算機で実行される際に、変換前のバイナリ・プログラム
    の実行された命令ブロックに対応する部分を実行する際
    のキャッシュ・メモリのヒット率が向上するように変換
    前のバイナリ・プログラムの複数の命令ブロックを再構
    成し、変換前のバイナリ・プログラムの実行された命令ブロッ
    クが実行されなかった 命令ブロックとは分離され、実行
    された命令ブロックが連続するように変換前のバイナリ
    ・プログラムの複数の命令ブロックを再構成し、 再構成を行った結果、命令ブロックの末尾が条件分岐命
    令で、その条件分岐先の命令ブロックが条件分岐を行っ
    た命令ブロックの直後となる場合に、前記条件分岐命令
    の分岐条件および条件分岐先を変更するバイナリ・プロ
    グラム変換方法。
  6. 【請求項6】 変換前のバイナリ・プログラム中の命令
    列を他の命令列に変換することで変換後のバイナリ・プ
    ログラムを得る請求項4又は5に記載のバイナリ・プロ
    グラム変換方法。
  7. 【請求項7】 請求項4ないし6のいずれかに記載の方
    法をコンピュータに実行させるコンピュータプログラム
    を格納した記憶媒体。
JP29460897A 1996-10-28 1997-10-27 バイナリ・プログラム変換装置および方法 Expired - Fee Related JP3425069B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP29460897A JP3425069B2 (ja) 1996-10-28 1997-10-27 バイナリ・プログラム変換装置および方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP28567096 1996-10-28
JP8-285670 1996-10-28
JP29460897A JP3425069B2 (ja) 1996-10-28 1997-10-27 バイナリ・プログラム変換装置および方法

Publications (2)

Publication Number Publication Date
JPH10187460A JPH10187460A (ja) 1998-07-21
JP3425069B2 true JP3425069B2 (ja) 2003-07-07

Family

ID=26555983

Family Applications (1)

Application Number Title Priority Date Filing Date
JP29460897A Expired - Fee Related JP3425069B2 (ja) 1996-10-28 1997-10-27 バイナリ・プログラム変換装置および方法

Country Status (1)

Country Link
JP (1) JP3425069B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6480862B1 (en) * 1999-04-23 2002-11-12 International Business Machines Corporation Relation-based ordering of objects in an object heap
JP2001273138A (ja) 2000-03-24 2001-10-05 Fujitsu Ltd プログラム変換装置および方法
JP4701611B2 (ja) 2004-01-15 2011-06-15 株式会社日立製作所 動的変換方式のエミュレータ向けメモリ管理方法
JP4592367B2 (ja) * 2004-09-09 2010-12-01 富士通セミコンダクター株式会社 プログラムセクションレイアウト方法およびレイアウト処理プログラム
JP5082716B2 (ja) * 2007-09-20 2012-11-28 富士通セミコンダクター株式会社 プログラム変換装置、プログラム変換方法およびプログラム変換プログラム
JP5056345B2 (ja) * 2007-10-29 2012-10-24 富士通株式会社 データ処理装置およびデータ処理方法
CN116661808B (zh) * 2023-07-26 2023-11-10 龙芯中科技术股份有限公司 二进制翻译方法、装置、电子设备及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Karl Pettis外1名,Profile Guided Code Positioning,ACM SIGPLAN’90 Conference on Programming Language Design and Implementation,米国,acm PRESS,1990年 6月20日,ACM SIGPLAN NOTICES vol.25 no.6,p.16−27
冨山宏之外1名,命令キャッシュのヒット率向上を目的としたコード配置手法,情報処理学会研究報告 95−ARC−115,日本,社団法人情報処理学会,1995年12月15日,第95巻第119号,p.133−138

Also Published As

Publication number Publication date
JPH10187460A (ja) 1998-07-21

Similar Documents

Publication Publication Date Title
KR100297172B1 (ko) 이진프로그램변환장치및이진프로그램변환방법
Sohi et al. Multiscalar processors
US6622300B1 (en) Dynamic optimization of computer programs using code-rewriting kernal module
Sudarsanam et al. Memory bank and register allocation in software synthesis for ASIPs
US5920723A (en) Compiler with inter-modular procedure optimization
US20060212440A1 (en) Program translation method and program translation apparatus
US7243195B2 (en) Software managed cache optimization system and method for multi-processing systems
JPH08328870A (ja) コンパイル処理装置
CN101375248A (zh) 硬件JavaTM字节码译码器
CA1172375A (en) Program call method
WO1999030231A1 (fr) Procede permettant d'optimiser l'acces memoire
JPH06290056A (ja) 異なるコンピュータ上でのソフトウェアの実行を最適化するための方法および装置
US7275242B2 (en) System and method for optimizing a program
JP3425069B2 (ja) バイナリ・プログラム変換装置および方法
Peterson Architectural and compiler support for effective instruction prefetching: a cooperative approach
JP3973129B2 (ja) キャッシュメモリ装置及びそれを用いた中央演算処理装置
US7313787B2 (en) Compiler and method for optimizing object codes for hierarchical memories
US7185326B2 (en) Automatically reordering variables as a part of compiling and linking source code
US7240341B2 (en) Global constant pool to allow deletion of constant pool entries
Ding et al. A compiler scheme for reusing intermediate computation results
JP3141836B2 (ja) 言語処理方法、言語処理装置及び言語処理プログラムを記録した記憶媒体
JPH08161169A (ja) Vliw方式の計算機システム及びvliwの解釈・実行方法
Baiocchi et al. Enabling dynamic binary translation in embedded systems with scratchpad memory
Chakraborty et al. Integrating software caches with scratch pad memory
CA1187200A (en) Computer with automatic mapping of memory contents into machine registers

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20030408

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

Free format text: PAYMENT UNTIL: 20080502

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20090502

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20090502

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20100502

Year of fee payment: 7

LAPS Cancellation because of no payment of annual fees