JP2012003761A - 効率的な動的バイナリ変換のためのレジスタマッピング技術を用いた方法、物品及びシステム - Google Patents

効率的な動的バイナリ変換のためのレジスタマッピング技術を用いた方法、物品及びシステム Download PDF

Info

Publication number
JP2012003761A
JP2012003761A JP2011130887A JP2011130887A JP2012003761A JP 2012003761 A JP2012003761 A JP 2012003761A JP 2011130887 A JP2011130887 A JP 2011130887A JP 2011130887 A JP2011130887 A JP 2011130887A JP 2012003761 A JP2012003761 A JP 2012003761A
Authority
JP
Japan
Prior art keywords
code block
binary code
source
target
region
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
JP2011130887A
Other languages
English (en)
Inventor
D Ottoni Guilherme
デー. オットーニ ギルエフメ
Warne Haun
ワーン ホーン
Lee Way
リー ウエイ
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of JP2012003761A publication Critical patent/JP2012003761A/ja
Pending legal-status Critical Current

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/24Loading of the microprogram
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/45525Optimisation or modification within the same instruction set architecture, e.g. HP Dynamo

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】動的バイナリ変換の課題はオーバーヘッドであり、効率的なレジスタマッピングを用いて、レジスタのエミュレーションオーバーヘッドを減らすことを目的とする。
【解決手段】本開示書は、より多くのレジスタを備えるシステムからより少ないレジスタを備えるシステムへとレジスタをマッピングするためのシステム及び方法を提供する。リージョンは、一つ以上の相対的に頻度の高いレジスタアクセスを行うコードブロックを含むように構成される。前記最も頻繁にアクセスされるソースレジスタは、ターゲットレジスタへマッピングされる。リージョン内の各ブロックは、プロローグ及び少なくとも一つのエピローグによって境界される。プロローグは、レジスタマッピングを実装するよう構成され、エピローグは、リージョン内のブロックからリージョン内又はリージョン内でない別のブロックへのプログラムフローを管理するよう構成される。
【選択図】 図5

Description

本開示書は、効率的な動的バイナリ変換のためのレジスタマッピング技術を用いた方法、物品及びシステムに関し、特に、多くのレジスタを備える命令セットアーキテクチャ(ISA)からより少ないレジスタを備えるISAへ動的バイナリ変換を実行するための効率の良い技術を用いた方法、物品及びシステムに関する。
動的バイナリ変換(DBT)は、一つの命令セットアーキテクチャ(ISA)向けに作られたアプリケーションを異なるISAの上で実行するための手段として広く用いられている。x86ISAに基づいたPC向けにレガシーなソフトウェアが多く開発されたことにより、x86から他のISAへと変換することについて注目が得られている。小さなウルトラモバイルPC及びさらにパワフルな組込デバイス及びモバイルインターネットデバイス(例えば、スマートフォン)双方の業界における最近の傾向は、それらの異なる市場の間の境界を曖昧なものにしている。結果として、この市場の集中は、現在の組込デバイス市場及びモバイルインターネットデバイス市場を支配するISA(例えば、ARM(ARM Holdings)、MIPS(MISP Technologies)及びPowerPC(Apple−IBM−Motorolaアライアンス))からx86へのDBTに大きな関心を作り出している。
バイナリ変換(BT)は、あるソース(“ゲスト”)ISA向けにビルドされたバイナリを、別のターゲット(“ホスト”)ISAへ変換するための一般的な技術である。BTを用いると、上位レベルのソースコードのリコンパイル又はアセンブリコードの再作成の必要なく、一つのプロセッサISA向けにビルドされたアプリケーションのバイナリを、異なるアーキテクチャのプロセッサ上で実行することができる。ほとんどのレガシーなコンピュータ向けアプリケーションはバイナリ形式でのみ利用可能であるため、BTは、ビルドされておらず、それらのコンピュータに利用不可能なアプリケーションを、あるプロセッサに実行可能にする将来性により、とても魅力的である。いくつかの成功したBTプロジェクトは、過去数十年にわたって、その技術水準を高めている。前記BTプロジェクトには、Digital Equipment Coporation(“DEC”)のFX!32、IntelのIA−32 EL、TransmetaのCMS(“Code Morphing Software”)、Godson−3(MIPSアーキテクチャ)及びIBMのDAISY(“Dynamically Architected Instruction Set from Yorktown”)が含まれる。これらのツールのほとんどは、例えばAlpha(DEC)、Itanium(Intel)、Crusoe(Transmeta)及びMIPS(MIPS Technologies)などのプロセッサでレガシーなx86アプリケーションを実行することを目的とする。
上で言及したツールのほとんどは、アプリケーションが実行されるときオンザフライで変換を実行する、言い換えればランタイムに変換を実行することを意味する、動的BT(DBT)を用いる。もう一つの方法として、BTはオフラインで実行されることもできる。すなわち、静的BT(SBT)である。動的な使用モデルが、通常好ましい。なぜならば、動的な使用モデルは、より一般的(例えば、自己書き換えコードを処理できる)であり、かつ、ネイティブでないバイナリ向けにDBTを自動的に起動するよう切り替わり、単一のOSを使用するユーザに意識させることなく動作するためである。SBTと比べたDBTの主な欠点は、オーバーヘッドである。アプリケーションの変換と最適化に費やされたサイクルは、実際に前記アプリケーションコードを実行するために別の方法で用いることができたサイクルである。したがって、DBTツールは、変換/最適化に費やされる時間と、変換されたコードの実行時間に順に反映される出力結果のコードの質との間のトレードオフに直面する。
DBTによって直面する課題は、ソースとターゲットのISAに大きく依存する。近年は、x86ISAの使用をウルトラモバイル市場及び組込市場セグメント(例えば、IntelのAtomプロセッサ)へと拡張することに大きな興味がもたれている。ユーザの視点から、このことはとても便利なことである。なぜならば、レガシーPC向けソフトウェアが組込及びウルトラモバイルプラットフォーム上で効率よく動作することを可能にするためである。しかしながら、それらの新しいドメインに採用されるであろうx86のため、x86が、これらのセグメントにおいても利用可能な、主にARM(ARM Holdings)、MIPS(MIPS Technologies)及びPowerPC(Apple−IBM−Motorolaアライアンス)ISAに基づく巨大なソフトウェアベースを実行できるようにすることもまた必要である。例えば、将来のx86ベースの、加えてPCアプリケーションを実行可能なスマートフォンにおいて、例えばAppleのiPhone Appストアから、ARMベースのアプリケーションをダウンロードしてシームレスに実行できることは有益であろう。このシナリオを可能にする課題は、DBTのパフォーマンス及び電力のオーバーヘッドを低く保つことを含む。
様々なDBTシステムが提案されているが、それらの多くは同様の基本的な実行フローに従っている。最初に、ソース(ゲスト)アーキテクチャ向けに作成されたバイナリファイルは、メモリに読み込まれる。このソースバイナリのセクションは、次にターゲット(ホスト)バイナリコードへ変換される。この変換は、典型的には“オンデマンド”にて実施される。言い換えると、制御のフローがそれらに到達したとき、ソースコードの命令は変換される。一般的に、単一の入口と可能性として複数の出口を備える命令のシーケンスである基本ブロックの粒度で変換は実行される。一度基本ブロックが変換されると、その変換結果は、将来的な再使用のためメモリ内の変換キャッシュ(translation cache)(コードキャッシュとも呼ばれる)に保存される。最も積極的なDBTシステムは、異なるレベルの最適化を実行する。TransmetaのCMS及び他のDBTシステムは、これらの最適化レベルは“gears”と呼ばれている。最初に、とても高速な変換(Gear−1)が使用される。このgearは、変換されたコードの質を犠牲にして、とても高速であることを目指している。このトレードオフは、例えばOSの起動コードのようにめったに実行されないコードに望ましい傾向がある。Gear−1において、DBTは、“ホットな”(例えば、頻繁に実行される)基本ブロックを検出するために、プローブ(カウンター)もまた実装する。あるブロックが一度ホットになると、ブロックとそのブロックに相互に関連のある周囲のブロックは、リージョン(region)へとマージされる。このリージョンは、次に、コードに追加の最適化を適用する、より高いgearにより再変換される。この同様の戦略は、gearの任意の回数繰り返されることができる。実際には、gearベースのシステムは、より多くのリージョンのコードが総合実行時間に寄与すればするほど、より多くの時間が高速なコードを生成するためにそのコードを最適化するために費やされることを確実にする。
セット、回数及び適用される最適化の積極性は、DBTによって大きく異なる。典型的な最適化は、命令スケジューリング、デッドコード削除及び冗長性除去を含む。実際には、静的コンパイラ最適化と同様、ほとんどの関係する最適化のセットは、ターゲットのアーキテクチャに依存する。コンパイラ最適化と対照的に、DBTにおいては、これらの最適化は、高品質なコードを得るために用いられることのできる、正確な実行時の情報を有している。静的コンパイラと比べてDBTの主たるデメリットは、最適化時間の割り当てが非常に厳しいことである。
動的バイナリ変換(DBT)が直面する課題は、DBTが招くオーバーヘッドである。このオーバーヘッドは、ホスト(“ターゲット”)ISAへ簡単にマッピングされないゲスト(“ソース”)ISAにおいて、比較的頻繁に用いられる機能に主として由来する。例えば、ソースISAがターゲットISAより大きなレジスタセットを有しているとき、ソースレジスタからターゲットレジスタへの効率的なレジスタマッピングを用いることは、例えばメモリアクセスのようなレジスタのエミュレーションオーバーヘッドを減らすために重要である。このことは、他のISAに比べて比較的少ない数の汎用/整数レジスタ(例えば、8及び16)を有するx86及びx86−64のようなターゲットISAにとって特に重要である。例えば、PowerPC、ARM及びMIPS他のISAは32個のレジスタを有し、Itaniumは128個のレジスタを有する。
レジスタマッピングの問題は、最適なマッピング(すなわち、最小のオーバーヘッドとなるマッピング)がソースバイナリコードシーケンスに高く依存する事実によってさらに悪化する。それゆえ、最適なマッピングは、コードの部分によって異なる。理想的には、それぞれのコードのリージョンは、コードのリージョンに最適であるレジスタマッピングを用いるべきである。
本開示書は、リージョンレベルのレジスタマッピングを提供するよう構成されるシステム及び方法を提供する。前記方法は、一つのリージョンにおけるそれぞれのバイナリコードブロックのため、前記リージョンにおいて最も頻繁にアクセスされるソースのプロセッサのレジスタのうち少なくともいくつかを、ターゲットのプロセッサのレジスタへマッピングすることを含む。最も頻繁にアクセスされるソースのプロセッサのレジスタは、ソースバイナリコードのブロックに対応するターゲットバイナリコードのブロックとともに実装される、カウンタを含むプローブから決定されることができる。最適化済ターゲットバイナリコードのブロックは、最適化のために選択されたリージョンのソースバイナリコードの各ブロックのために生成されることができる。最適化済ターゲットバイナリコードのブロックは、プロローグ、変換されたソースバイナリコードを含む本体、条件ジャンプ及び少なくとも一つのエピローグを含むことができる。プロローグは、リージョンのマッピング済レジスタ又はマッピング済live−inレジスタを読み込むよう構成される。条件ジャンプは、ソースバイナリコードのブロックの境界における分岐が、リージョン内の次のバイナリブロックであるか、リージョン内でない次のバイナリブロックであるかに基づいてフローを制御するよう構成される。エピローグは、次のバイナリブロックがリージョン内にあるときブロック本体へとジャンプし、次のバイナリブロックがリージョン内にないとき次のバイナリブロックの先頭へとジャンプするよう構成される。先頭は、別のリージョンの最適化済ターゲットバイナリコードブロックのプロローグ又は最適化されていないターゲットバイナリコードブロックに一致することができる。もし次のバイナリブロックがリージョン内にないとき、リージョンのlive−outレジスタはメモリ内に保存されることができる。ターゲットバイナリコードの最適化済ブロックが実行されるたび、というよりむしろ、リージョン境界をまたぐとき、リージョンのマッピング済レジスタ又はマッピング済live−inレジスタを読み込むことにより、有利にメモリアクセスは減らされることができる。
本開示書に従う方法及び/又はシステムは、リージョンレベルのレジスタマッピングを提供するよう構成される。前記リージョンは、比較的複雑であり得る。当業者には明らかなように、例えば、任意のループのネスト、すなわちループの任意の組み合わせ、例えば親ループの内側の複数の兄弟を含むことができる。別の例では、リージョンは、例えばループへ入る複数の可能性のように、削減できないフローグラフに対応するターゲットバイナリコードブロックを含むことができる。リージョンは、隣接する及び/又は隣接しないターゲットバイナリコードブロックの形状を成すことができる。
クレームされる主題の特徴及び利点は、一致する実施態様の詳細な説明により明らかであるだろう。前記説明は、次に添付される図面への言及によって考慮されるべきである。
本開示書に従うメモリシステムを表す。 本開示書に従う動的バイナリ変換の例示的な処理のフローチャートを表す。 本開示書に従うコード最適化のための例示的な処理のフローチャートを表す。 頻繁に実行されるコードブロックのリージョンを含む例示的な制御フローグラフを表す 本開示書に従うプロローグ、本体、条件ジャンプ及び少なくとも一つのエピローグを含む、例示的な最適化済ターゲットバイナリコードブロックを表す。 本開示書に従う最適化を含むターゲットバイナリコードを実行するための例示的な処理のフローチャートを表す。 図3の制御フローグラフに一致する例示的な最適化済の制御フローグラフを表す。 本開示書に従うブロックレベルレジスタマッピング及びリージョンレベルレジスタマッピングを含む動的バイナリ変換のパフォーマンスベンチマークの比較を示すグラフである。
図1は、本開示書に従うシステム100を表す。システム100は、システムメモリ104に接続されたプロセッサ(“CPU”)102を有する。システム100は、キャッシュメモリ105(システムメモリ104に含まれ得る)及び/又はキャッシュメモリと同類であるがソフトウェアによって管理されるスクラッチパッドメモリ107を有することができる。CPU102は、複数のプロセッサレジスタ106−1、106−2、・・・、106−m(合わせてプロセッサレジスタ106)を有することができる。CPU102は、複数のコア処理ユニット(以下、“コア”又は単数で“コア”とする)を含むことができ、各コアは、複数のスレッドを実行するよう構成されることができる。システムメモリ104は、ソースバイナリアプリケーション110、動的バイナリ変換システム115及びホストオペレーティングシステム(“OS”)120を提供することができる。動的バイナリ変換システム115は、ターゲットバイナリコードブロック112、レジスタマッピングモジュール116を有する動的変換システムコード114及び/又はソースレジスタストレージ118を有することができる。ソースバイナリアプリケーション110は、ソースISAに対応する複数のソースバイナリコードブロックを含むことができる。ターゲットバイナリコードブロックは、ターゲットISAに対応する。ソースバイナリコードブロックは、例えばend withのような分岐命令を含む一つ以上の命令のシーケンスである。ターゲットバイナリコードブロックは、対応するソースバイナリコードブロックの機能を有するよう構成される。最適化済ターゲットバイナリコードブロックは、最適化済ターゲットバイナリコードブロックの本体に、ソースバイナリコードブロックに対応する機能を含むことができる。最適化済ターゲットバイナリコードブロックは、ここで説明されるように追加の機能を含むことができる。
ターゲットバイナリコードブロック112は、“コードキャッシュ”111に指定されているシステムメモリ領域に保管されることができる。コードキャッシュ111は、例えば一つ以上の対応するソースバイナリコードブロックから変換されている一つ以上のターゲットバイナリコードブロックのような、ターゲットバイナリコードブロック112のストレージとして理解されることができる。システムメモリ104は、プロセッサレジスタ106へ/から、データを読み込む/保管するよう構成されるソースレジスタストレージ118を提供することができる。いくつかの実施形態において、キャッシュメモリ105及び/又はスクラッチパッドメモリ107は、プロセッサレジスタ106へ/からデータを読み込む/保管するよう構成されている。
動的バイナリ変換コード114及びレジスタマッピングモジュール116は、ソースバイナリアプリケーション110上でソースバイナリアプリケーション110のブロックをターゲットバイナリコードブロック112へと変換するために、一つ以上のコアによって実行されることができる。ソースバイナリコードブロックは、動的にターゲットバイナリコードブロックへと変換されることができる。言い換えると、ソースバイナリコードブロックは、静的にというよりはバイナリブロックを実行するための呼び出しに応じて、すなわち実行時に先立って、ターゲットバイナリコードブロックへと変換されることができる。ターゲットバイナリコードブロックは、次に、システムメモリ104の中のコードキャッシュ111の中に保管され、実行のためにCPU102へ提供されることができる。ソースバイナリコード110のブロックをターゲットバイナリコードブロック112へと変換することは、リージョンのレジスタアクセスの頻度に少なくとも部分的に基づいて、一つ以上のソースレジスタを一つ以上のターゲットレジスタ、例えばプロセッサレジスタ106へとマッピングすることを含むことができる。例えば、ソースISAは、Ns個のソースレジスタを有することができ、ターゲットISAはNt個のターゲットレジスタ、例えばレジスタ106を有することができる。ここで、NtはNsより小さい。
図2Aは、動的バイナリ変換のフローチャート200を表す。フローチャート200の処理は、動的バイナリ変換コード114によって実行されることができる。プログラムフローは、バイナリコードブロックを実行するための呼び出し202を受けて開始することができる。バイナリコードブロックを実行するための呼び出し202に先立って、ソースバイナリアプリケーション110はシステムメモリ104に読み込まれていることは明らかである。処理204において、一つ以上のターゲットバイナリコードブロックがコードキャッシュ、例えばコードキャッシュ111内にあるかどうかが決定されることができる。各ターゲットバイナリコードブロックは、ソースバイナリアプリケーション110のソースバイナリコードブロックに対応する。ターゲットバイナリコードブロックがコードキャッシュ内にないとき、処理206は、ソースバイナリコードブロックをターゲットバイナリブロックへと変換し、プローブを実装し、ターゲットバイナリブロック及びプローブをコードキャッシュ内に保存することを含むことができる。この変換は、相対的に高速であるよう構成されることができる。例えば、プローブは、バイナリブロックが実行される回数のカウントを保持するよう構成されるカウンタを含むことができる。ソースプロセッサレジスタは、レジスタストレージ、例えばシステムメモリ104、キャッシュメモリ105及び/又はスクラッチパッドメモリ107内のソースレジスタストレージ118へとマッピングされることができる。プログラムフローは、次に、処理211へと進む。処理211において、変換されたコードブロックが実行されることができる。もし処理204において、ターゲットバイナリコードブロックがコードキャッシュ内にあるとき、プログラムフローは、処理208へと進むことができる。
処理208において、閾値に達しているかどうかが決定されることができる。閾値に達しているかどうかは、コードブロックを実行するための先の呼び出しに応じ、処理206で実装されたプローブに少なくとも部分的に基づいて決定されることができる。例えば、バイナリブロックが実行されるたびにカウントがインクリメントされることができる。カウントが所定の閾値に達したら、プローブは、プログラムフロー(すなわち、分岐)をさらなる処理のため動的バイナリ変換ソフトウェアに戻すよう構成されることができる。所定の閾値は、最適化により利益を得る、相対的に頻繁に実行されるバイナリブロックを示すよう構成されることができる。閾値に達していないとき、プログラムフローは、処理211へと進み、変換されたコードブロックを実行する。閾値に達しているとき、プログラムフローは処理210へと進むことができ、コードを最適化することができる。コードの最適化210は、ここで述べられたように、リージョン構成及びレジスタマッピングを含むよう構成される。プログラムフローは、次に、処理211へと進むことができ、変換されたコードブロックを実行することができる。
図2Bは、本開示書に従ったコード最適化のフローチャート210を表す。プログラムフローは、開始212から開始することができる。フローチャート210の処理は、レジスタマッピングモジュール116を有する動的バイナリ変換コード114によって実行されることができる。処理214において、類似閾値に一致する及び/又は超える、近隣バイナリブロックの探索が実行されることができる。近隣バイナリブロックは、コード最適化が引き起こされるバイナリブロックに関連することができる。例えば、近隣バイナリブロックは、コード最適化が引き起こされるバイナリブロックの直前又は直後に実行されるよう構成されることができる。近隣バイナリブロックは、コード最適化を引き起こしているバイナリブロックに隣接し、かつ/又は分岐もしくはジャンプによってコード最適化を引き起こしているバイナリブロックに関係することができる。バイナリブロック間又はバイナリブロック内の類似とは、バイナリブロックの実行可能性の相互関係として理解されることができる。例えば、前記相互関係は、一つのバイナリブロックから別のバイナリブロックへの分岐に起因することができる。処理216において、類似閾値に一致し、かつ/又は、超える近隣ブロックを含む、リージョンが次に構成されることができる。
処理218において、リージョン内でアクセスされた各ソースレジスタのために、アクセス回数が決定されることができる。リージョンにおける命令は、ソースレジスタを用いる、すなわちソースレジスタから読みこむことができ、かつ/又は、ソースレジスタを定義する、すなわちソースレジスタに書きこむことができる。レジスタアクセス、すなわちレジスタの使用とは、レジスタの使用及び/又は定義を含む。レジスタマッピングは、リージョンにおける各ソースレジスタの総アクセス回数に基づくことができる。
例えば、処理216において構成されたリージョンは、一つ以上のバイナリコードブロックを含むことができる。バイナリブロックの実行回数のカウントを含むプローブは、各バイナリコードブロックと関連付けられることができる。各バイナリブロックのために、レジスタアクセス回数は、バイナリブロックの実行回数、バイナリブロックの命令及び各命令によってアクセスされるレジスタのカウントに基づいて決定されることができる。リージョンにおいてアクセスされる各レジスタの総アクセス回数は、次に、リージョンにおける各バイナリブロックにおける各レジスタへのアクセス回数の和によって決定されることができる。
図3は、例示的なコードのリージョン305を有する例示的な制御フローグラフ300を表す。制御フローグラフは、ブロックA310、ブロックB320、ブロックC330、ブロックD340及びブロックE350の5つのコードのブロックを有する。各ブロックは、例えば処理206(図2A)において実装されたプローブに基づいて決定された、ブロックの実行回数に対応する、関連したカウント312、322、332、342及び352を有する。例えば、ブロックA、ブロックC及びブロックEはそれぞれ、10の関連したカウントを有し、ブロックBは1000の関連したカウントを有し、ブロックDは990の関連したカウントを有する。この例において、ブロックBは、図2Aの処理208について説明された所定の閾値を満たしていることができる。すなわち、ブロックBは、頻繁に実行されるソースバイナリコードブロックである。ブロックA、ブロックC及びブロックDは、ブロックBに関して近隣ブロックであることができる。類似閾値と一致/超える近隣ブロックを探索する、図2Bの処理214は、ブロックDを得ることができる。ブロックDは、ブロックBに関して類似閾値と一致又は超える近隣ソースバイナリコードブロックである。
類似とは、頻繁に実行されるソースバイナリコードブロック及び近隣ソースバイナリコードブロックの実行可能性の相互関係に対応する。言い換えれば、ブロックBは、相対的に高い実行(count=1000)可能性を有する。ブロックDもまた、相対的に高い実行(count=990)可能性を有する。カウント情報が過去に使われたものであり、かつ、将来の実行頻度は変わる可能性があるため、“実行可能性”の語が用いられている。ブロックDの実行可能性は、例えばブロックBとブロックDとの間の分岐に基づいて、ブロックBの実行可能性に関係している。言い換えると、ブロックDの実行可能性は、ブロックBの実行可能性と相互に関係している。
5つのコードのブロックを有するこの例では、それぞれ1000及び990の相対的に高い実行頻度(すなわちカウント)であり、かつ、類似閾値と一致又は超えるブロックB及びブロックDが、リージョン305に含まれている。ブロックBの命令は、レジスタr1、r2、r3、r4及びr5にアクセスする。レジスタr1及びr4は定義され(書き込まれ)、レジスタr1、r2、r3、r4及びr5が使用され(読み込まれ)る。言い換えると、ブロックBの各実行のため、r1及びr4は二度アクセスされ、残るレジスタはそれぞれ一度アクセスされる。したがって、1000の実行頻度であるブロックBにおいて、r1及びr4は、それぞれ2000回アクセスされ、残るレジスタはそれぞれ1000回アクセスされる。ブロックDは、レジスタr2に二度アクセス(一回の読み込みと一回の書き込み)し、かつ、レジスタr5に一度アクセス(読み込み)する命令を一つ有する。したがって、990の実行頻度であるブロックDにおいて、r2は1980回アクセスされ、r5は990回アクセスされる。それゆえ、ブロックB及びブロックDを含むリージョン305のために、r1は合計2000回、r2は合計2980回、r3は合計1000回、r4は合計2000回、r5は合成1990回アクセスされる。レジスタアクセス回数によって、最も頻繁にアクセスされるものから最も少なくアクセスされるものへとレジスタをソートすると、r2、r1とr4、r5、r3となる。
図2Bを再び参照し、処理220において、ソースレジスタはターゲットレジスタにマッピングされることができる。リージョンのもっとも高いアクセス回数、すなわち最も頻繁にアクセスされるものに対応するソースレジスタは、ターゲットレジスタにマッピングされることができる。例えば、ターゲットISAはNt個のターゲットプロセッサレジスタを有することができ、ソースISAはNs個のソースプロセッサレジスタを有することができる。ここで、NtはNsより小さい。Nt個のターゲットプロセッサレジスタのうち、N個はマッピングに使用可能である。ここでNはNtより小さいか、Ntと等しい。図3において説明される例によって続けると、Nが3であるとき、その結果レジスタr1、r2及びr4がリージョンのターゲットプロセッサレジスタへとマッピングされることができる。レジスタr3及びr5は、ターゲットプロセッサレジスタへマッピングされることができず、それゆえ、必要に応じてメモリから検索される。
いくつかの実施形態において、マッピングに利用可能なターゲットプロセッサレジスタの数であるNは、ターゲットISAのプロセッサレジスタの数Ntより小さい可能性がある。言い換えると、一つ以上のターゲットプロセッサレジスタは、例えばマッピングされないソースレジスタを使用又は定義する命令のために予約されることができる。例えば、1又は2つのターゲットプロセッサレジスタは、そのような命令のために予約されることができる。
表1は、リージョンにおける各ソースレジスタのレジスタアクセスの総数を決定し、N個のソースレジスタをN個のターゲットレジスタにマッピングするための一つの例に対応する擬似コードを有する。
Figure 2012003761
したがって、処理220の完了時において、N個のソースレジスタは、N個のターゲットレジスタにマッピングされることができる。ターゲットレジスタにマッピングされないソースレジスタは、システムメモリ内104、キャッシュメモリ105及び/又はスクラッチパッドメモリ107のソースレジスタストレージ118にマッピングされることができる。
処理222において、live−in及び/又はlive−outレジスタは、リージョンの各バイナリブロックのために特定されることができる。live−inは、バイナリブロックにおいて初めて定義(すなわち、書き込む)されることなく、バイナリブロックにおいて使用される(すなわち、読み込む)レジスタに相当する。例えば、図3において示されるリージョン305において、レジスタr2、r3及びr5は、ブロックBにおいて初めて定義されることなく使用され、レジスタr2はブロックDにおいて定義される前に使用されている。したがって、レジスタr2、r3及びr5は、リージョン305のlive−inである。live−outは、レジスタの値がバイナリブロック内の命令によって変更されている可能性があるレジスタに相当する。例えば、リージョン305において、レジスタr1及びr4の値は、ブロックBの命令によって変更される可能性があり、r2の値はブロックDの命令によって変更される可能性がある。したがって、r1、r2及びr4がリージョン305のlive−outである。いくつかの実施形態において、処理222表す点線の四角の外形によって示される、処理222が実行されなくても良い。
処理224において、例えばリージョン305の、リージョンにおける各バイナリブロックのため、最適化済ターゲットバイナリコードブロックが生成されることができる。例えば、それぞれの最適化済ターゲットバイナリコードブロックは、プロローグ、対応するソースバイナリコードブロックの変換されたソースコード及び条件ジャンプを含むブロック本体及び少なくとも一つのエピローグを含むことができる。図4は、プロローグ410、ブロック本体420及び2つのエピローグ430、440を有するターゲットコードブロック400の例を表す。条件ジャンプは、ブロック本体420に含まれる。
プロローグは、例えばソースレジスタストレージ118から、マッピング済ソースレジスタ又はマッピング済live−inソースレジスタに対応するデータとともに、ターゲットレジスタを読み込むよう構成される。マッピング済ソースレジスタ又はマッピング済live−inソースレジスタが読み込まれるかどうかは、オーバーヘッド、すなわちリージョンに入るときに全てのマッピング済ソースレジスタを読み込むことに関連するオーバーヘッドに対する、リージョンにおけるそれぞれのソースバイナリコードブロックのlive−inソースレジスタを特定することに関連するオーバーヘッドに依存することができる。例えば、リージョン305において、図3に示されるように、レジスタr1、r2及びr4はリージョン305のためにターゲットレジスタへとマッピングされている。したがって、この例において、ブロックB及びブロックDに関連する各プロローグは、それぞれ、ソースレジスタr1、r2及びr4をメモリからターゲットレジスタへと読み込むよう構成されることができる。別の例では、レジスタr2は、リージョン305のマッピング済であり、かつ、live−inである。したがって、ブロックB及びブロックDに関連する各プロローグは、それぞれ、レジスタr2を読み込むよう構成され、結果としてマッピング済ソースレジスタの全て(すなわち、r1、r2及びr4)を読み込むことに比べてより少ないメモリアクセスとなる。
少なくとも一つのエピローグは、第一のエピローグ及び第二のエピローグを有することができる。条件ジャンプは、ソースバイナリコードブロックを終了させる分岐が、リージョン内ターゲットバイナリコードブロックか、リージョン内でないターゲットバイナリコードブロックかに基づき、フローが第一のエピローグに進むか第二のエピローグに進むか制御するよう構成される。リージョン内ターゲットバイナリコードブロックは、ここで説明されるように、最適化済ターゲットバイナリコードブロックである。リージョン内でないターゲットバイナリコードは、最適化されていないターゲットバイナリコードブロック又は別のリージョンに関連する最適化済ターゲットバイナリコードブロックである。
第一のエピローグは、リージョン内ターゲットバイナリコードブロックへのジャンプを有する。例えば、図3を再度参照して、ブロックBからブロックDへのジャンプは、リージョン内ターゲットバイナリコードブロックに相当する。第二のエピローグは、例えばリージョン305内でない、リージョンの外部にあるターゲットバイナリコードブロックへのジャンプを有する。第二のエピローグは、次のターゲットバイナリコードブロックへジャンプする前にlive−outレジスタを保存するようさらに構成される。ここで説明されるように、live−inレジスタを読み込むのと同様に、第二のエピローグは次のターゲットバイナリコードブロックへジャンプする前にマッピング済レジスタ又はマッピング済live−outレジスタを保存するよう構成されることができる。
再度図3を参照して、ブロックBからブロックCへのジャンプは、リージョン外のターゲットバイナリコードブロックへのジャンプに相当する。リージョン内ターゲットバイナリコードへのジャンプは、リージョン内バイナリコードブロックに関連するプロローグをバイパスし、リージョン内バイナリコードブロックの本体へジャンプするよう構成される。リージョン外ターゲットバイナリコードブロックへのジャンプは、リージョン外ターゲットバイナリコードブロックの先頭へジャンプするよう構成される。リージョン外ターゲットバイナリコードブロックが別のリージョンに関連する最適化済ターゲットバイナリコードブロックであるとき、前記ジャンプは前記最適化済ターゲットバイナリコードブロックのプロローグへなされる。
当然のことながら、実行時のシステム、すなわちホストオペレーティングシステム120は、例えば割り込み処理のようなターゲットコードにより直接処理されない可能性のある機能を実行するよう構成される。これらの機能を適切に処理するため、ゲストの状態は一致した時点、すなわち、メモリ内の適切なデータ構造において一致するゲストの状態にあることが重要である。ゲストの状態は、ブロックの実行中に一致するのではなく、ブロックの境界において一致すればよい。したがって、動的バイナリ変換は、例えばオープンソースQEMUのように、コードブロックの最後まで割り込み処理を延期するよう構成される。ブロックの最後において一致したゲストの状態を保つため、リージョン内のブロックへジャンプした後、実行時システムへ戻る前に、live−outレジスタ(例えばソースレジスタストレージ118内)は、保存される。リージョン内でないブロックへのジャンプのため、live−outレジスタは、リージョン内でないブロックへのジャンプの前に保存されることができる。リージョン内でないブロックへのジャンプの後、制御は実行時システムへと戻ることができる。
図5は、少なくとも一つの最適化済ターゲットバイナリコードブロックを有する少なくとも一つの最適化されたコードリージョンを有するソースバイナリアプリケーションに対応するターゲットバイナリコードブロックを実行するための例示的な処理のフローチャート500を表す。プログラムフローは、開始502において開始されることができる。開始502は、少なくとも一つの最適化済ターゲットコードブロックを有する最適化済ターゲットバイナリコードの第一のリージョンへの入り口に相当する。処理504において、第一のリージョンにおける第一の最適化済ターゲットバイナリコードブロックのプロローグが実行されることができる。プロローグは、マッピング済レジスタ又はマッピング済live−inレジスタを、ここに説明されるように、メモリから読み込むよう構成される。
第一の最適化済ターゲットバイナリコードブロックの本体は、次に、処理506において実行されることができる。第一の最適化済ターゲットバイナリコードブロックに対応するソースバイナリコードブロックの境界において、分岐が、第一のリージョンにおけるターゲットバイナリコードブロックへなされるかどうか処理508において決定されることができる。もし分岐が第一のリージョンでないターゲットバイナリコードブロックへなされるとき、処理510において、マッピング済レジスタ又はマッピング済live−outレジスタは、例えばソースレジスタストレージ118のようなメモリに保存されることができる。第一のリージョンでない、次のターゲットバイナリコードブロックの先頭へのジャンプが、処理512において実行されることができる。次のターゲットバイナリコードブロックは、最適化されている可能性もあり、また、されていない可能性もある。次のターゲットバイナリコードブロックが最適化されていないとき、次のソースバイナリコードブロックに対応する次のターゲットバイナリコードブロックが、処理514において実行されることができる。例えば第二のリージョンにおける次のターゲットバイナリコードブロックが最適化されているとき、(第二のリージョンにおける次のターゲットバイナリコードブロックの)プロローグが処理504において実行されることができ、続いて処理506において次のターゲットバイナリコードブロックの本体の実行がなされる。
処理508において、分岐が第一のリージョンにおけるターゲットバイナリコードブロックになされることが決定されると、次のターゲットバイナリコードブロックの本体へのジャンプが処理516において実行されることができる。いくつかの実施形態において、レジスタは、例えば実行時システムによって割り込み処理を容易にするため、メモリ内に保存されてもよい。これらの実施形態において、実行時システムへ戻る必要があるかどうかは、処理517において決定されることができる。実行時システムへ戻る必要がないとき、プログラムフローは、処理506へ進むことができ、次に、(次のターゲットバイナリコードブロックの)本体が処理506において実行されることができる。実行時システムへ戻る必要があるとき、処理518においてレジスタはメモリ内に保存されることができ、プログラムフローは、処理520において実行時システムへ進むことができる。実行時システムから戻るとき、プログラムフローは、処理504へ進むことができ、プロローグを実行することができる。このとき、レジスタはメモリから読み込まれることができる。
図4及び図5を参照すると、処理508において、分岐がリージョン内の次のたーゲッバイナリコードになされるかどうか決定することは、最適化済ターゲットバイナリコードブロックの本体420の条件ジャンプ(jCC T)に相当する。処理516は、第一のエピローグ430に相当し、リージョン内の本体へジャンプする。処理510及び512は、第二のエピローグ440に相当する。
図6は、図3において表される制御フローグラフ300の例に対応する、最適化済の制御フローグラフ600を表す。最適化済の制御フローグラフ600において、ターゲットブロックB620は、図3の制御フローグラフのブロックB320に対応し、ターゲットブロックD640は、制御フローグラフ300のブロックDに対応する。ターゲットブロックB及びターゲットブロックDは、図4のターゲットコードブロックに従って構成される。最適化済の制御フローグラフ600におけるターゲットバイナリコードブロック間の制御フローは、フローが、一つのリージョンにおけるターゲットバイナリコードブロック間であるか、前記リージョンにおけるターゲットバイナリコードブロックと前記リージョンでないターゲットバイナリコードブロックとの間であるかに依存する。前記リージョンでないターゲットバイナリコードブロックとは、別のリージョンに関連する最適化済ターゲットバイナリコードブロックである可能性があり、あるいは、最適化されていないターゲットバイナリコードブロックである可能性がある。例えば、ターゲットブロックBからリージョン605の外であるブロックCへの制御フローは、ターゲットブロックBの(マッピング済又はマッピング済live−outを保存する)エピローグ2からブロックCへ(すなわち、ブロックCの先頭へ)となり、ブロックCからターゲットブロックDへの制御フローは、ブロックCからターゲットブロックDのプロローグ(マッピング済又はマッピング済live−inを読み込む)へとなる。共にリージョン605内のターゲットブロックBとターゲットブロックD間の制御フローは、それぞれ、パス624及びパス642によって示されるように、ブロックB又はブロックDのエピローグ1からブロックD又はブロックBの本体へとなる。
したがって、最適化済の制御フローグラフ600に示されるように、プロローグはリージョンへの入り口においてのみ実行される。リージョン内のターゲットバイナリコードブロック間のジャンプは、プロローグとマッピング済レジスタ又はマッピング済live−inレジスタに関連するメモリアクセスをバイパスし、ターゲットバイナリコードブロックの本体へとジャンプするよう構成される。有利に、このことはパフォーマンスの改善、例えば相対的に頻繁に実行されるコードのリージョンのための速度の向上をもたらすことができる。最適化済ターゲットバイナリコードブロックの複数のリージョンは、ソースアプリケーションのために生成されることができる。有利に、レジスタマッピングは、それぞれのリージョンのために、他のリージョンのために最適化されたレジスタマッピングとは独立して、最適化されることができる。このように、最適化はリージョン特有である。いくつかの実施形態において、マッピング済レジスタ又はマッピング済live−outレジスタを保存することは、さらなるパフォーマンス向上のため、リージョンを抜けるときのみ実行されても良い。
図7は、ブロックレベルでのレジスタマッピングを実装した動的バイナリ変換710、720、730、740、750と、本開示書に従うリージョンレベルでのレジスタマッピング715、725、735、745、755とのパフォーマンスベンチマークの比較を示すグラフである。パフォーマンスは、オープンソースのQEMU動的バイナリ変換(レジスタをメモリにマップする)と相対的に示される。ブロックレベルレジスタマッピングにおいて、マッピング済live−inレジスタは、各ターゲットコードブロックに入るときに読み込まれ、マッピング済live−outレジスタは、各ターゲットコードブロックを出るときに保存される。本開示書に従って示されたリージョンレベルレジスタマッピングに係る実施形態は、リージョンに入るときマッピング済live−inレジスタを(メモリから)読み込み、リージョンを出るときlive−outレジスタを(メモリに)保存する。全てのベンチマーク結果で、本開示書に従うリージョンレベルレジスタマッピングは、基準としたQEMU及びブロックレベルレジスタマッピングに比べてパフォーマンスを改善した。平均では、ベンチマークのパフォーマンス改善は、ブロックレベルレジスタマッピングと比較して17%程度の、QEMU基準と比較して31%程度であった。
したがって、ターゲットプロセッサレジスタがソースプロセッサレジスタより少ないとき、本開示書に従う方法及びシステムは、動的バイナリ変換においてソースプロセッサレジスタをターゲットプロセッサレジスタにマッピングすることを含む。“ホット”であると決定された、すなわち相対的に頻繁に実行されるコードのリージョンについて、各ソースレジスタへのアクセス回数が決定されることができる。最も頻繁にアクセスされるソースレジスタは、次に、利用可能なターゲットレジスタへとマッピングされることができる。リージョン内のソースバイナリコードの各ブロックについて、最適化済ターゲットバイナリコードの対応するブロックは、プロローグ、変換されたソースコード及び条件ジャンプを含む本体、及び少なくとも一つのエピローグを含むよう生成されることができる。条件ジャンプ及び少なくとも一つのエピローグは、第一のターゲットバイナリコードブロックから、リージョン内の次のターゲットバイナリブロックへ分岐するか、リージョン内でない次のターゲットバイナリブロックへ分岐するかに基づいて、フローを制御するよう構成される。次のターゲットバイナリコードブロックがリージョン内であるとき、次に、ジャンプはプロローグをバイパスし、次のターゲットバイナリコードブロックの本体へ向けられる。次のバイナリコードブロックがリージョン内でないとき、次に、ジャンプは次のターゲットバイナリコードブロックの先頭へ向けられる。プロローグは、メモリから、リージョンのマッピング済レジスタ又はマッピング済live−inレジスタを読み込むよう構成される。次のターゲットバイナリコードブロックがリージョン内にないとき、次に、一つのエピローグは、次のターゲットバイナリコードブロックの先頭へジャンプする前に、マッピング済レジスタ又はマッピング済live−outレジスタを保存するよう構成される。このように、リージョンに入るとき、メモリからマッピング済レジスタ又はマッピング済live−inレジスタがメモリから読み込まれ、リージョンを出るときマッピング済レジスタ又はマッピング済live−outレジスタがメモリに保存される。その結果、ブロックレベルレジスタの読み込み/保存に比べてメモリアクセスが減少する。
ここで説明するように、最適化は、ターゲットバイナリコードブロックと共に挿入される、カウンタを含むプローブに依存する。したがって、カウンタに基づいて決定される実行頻度は、有限時間を示す。コードのリージョンの実行頻度が時間と共に変化するとき、最適化によって得られた初期のパフォーマンス改善は低下する、すなわち最適でなくなる可能性がある。最適化が繰り返され得るが、ここで述べられた手順を繰り返すかどうかは、前に最適化済ターゲットバイナリコードブロックを実行するための時間に対する最適化を実行するための時間の考慮に依存し得る。
もちろん、図2A、2B及び5は、いくつかの実施形態による例示的な処理を表すが、他の実施形態において、図2A、図2B及び/又は図5に表される処理の全ては必要でない可能性があることを理解される。実際に、本開示書の他の実施形態は、図2A、図2B及び/又は図5に表された処理及び/又は追加の処理のサブコンビネーションを含むことができることが完全に予定されている。したがって、一つの図面に厳密に表されない機能及び/又は処理を対称にするクレームは、本開示書の範囲及び内容に含まれるとみなされる。
メモリ104、キャッシュメモリ105及び/又はスクラッチパッドメモリ107は、一つ以上の次のメモリの種類を含むことができる:半導体ファームウェアメモリ、プログラマブルメモリ、不揮発性メモリ、リードオンリーメモリ、電気的にプログラム可能なメモリ、ランダムアクセスメモリ、フラッシュメモリ、磁気ディスクメモリ及び/又は光学ディスクメモリ。追加的にか、あるいは代替的に、メモリ104、キャッシュメモリ105及び/又はスクラッチパッドメモリ107は、他の及び/又は後発のコンピュータ読み取り可能なメモリの種類を有することができる。
ここで述べられた方法の実施形態は、プロセッサ及び/又は他のプログラム可能なデバイスを用いて実装されることができる。そのために、ここで述べられた方法は、前記方法を実行する一つ以上のプロセッサによって実行されるとき、命令を保管する具体的なコンピュータ読み取り可能な媒体に実装されることができる。ストレージ媒体は、いかなる種類の具体的な媒体を含むことができる。例えば、フロッピー(登録商標)ディスク、光学ディスク、CD−ROM(compact disk read−only memories)、CD−RW(compact disk rewritables)及び光磁気ディスクを含むいかなる種類のディスク、
ROM(read−only memories)のような半導体デバイス、ダイナミックRAM及びスタティックRAMのようなRAM(random access memories)、EPROM(erasable programmable read−only memories)、EEPROM(electrically erabable programmable read−only memories)、フラッシュメモリ、磁気若しくは光学カード、又は電子的な命令を保存するために適切ないかなる種類の媒体を含む。
明確に他で規定される場合を除き、先立つ議論から明らかなように、明細書の議論を通して、“動作”“処理”“演算”“計算”“決定”又はそれと同様のような用語の使用は、コンピューティングシステムのレジスタ及び/若しくはメモリ内の電子のような物理的な数値として表現されたデータを、同様にコンピューティングシステムのメモリ、レジスタ若しくは他の情報ストレージ、送信デバイス若しくはディスプレイデバイス内の物理的な数値として同様に表現された他のデータへ操作する並びに/又は変換することに言及する。
いかなる本実施形態においても使用される“回路”とは、配線で接続された回路、プログラム可能な回路、ステートマシン回路及び/又はプログラム可能な回路により実行される命令を保存するファームウェアの、例えば一つずつ又は任意の組み合わせを含むことができる。
一つの態様に従って、一つの方法が開示される。前記方法は、コンピュータシステムの実行のための複数のソースバイナリコードブロックを有するソースバイナリアプリケーションを読み込む段階を含むことができる。前記コンピュータシステムは、メモリとNt個のターゲットレジスタを有する処理ユニットを有することができ、ここで、Ntは、対応するソース命令セットアーキテクチャにおけるソースレジスタの数であるNsより小さい。前記方法は、前記ソースバイナリアプリケーションの実行中、前記ソースバイナリアプリケーション内で頻繁に実行されるソースバイナリコードブロックを特定する段階;並びに
前記頻繁に実行されるソースバイナリコードブロック及び類似閾値を超える少なくとも一つの近隣ソースバイナリコードブロックを含むリージョンを定義する段階であって、
前記頻繁に実行されるソースバイナリコードブロック及び前記少なくとも一つの近隣ソースバイナリコードブロックは少なくとも一のソースレジスタアクセスを有し、かつ、それぞれ分岐命令によって境界される、段階;をさらに含むことができる。前記方法は、前記リージョン内でアクセスされる各ソースレジスタへのアクセス頻度を決定する段階;
前記リージョン内で最も頻繁にアクセスされるN個のソースレジスタの各々を、前記のNt個のターゲットレジスタの各々へそれぞれマッピングする段階であって、NはNtより小さい又は等しい、段階;及び
前記レジスタマッピングに少なくとも部分的に基づいて前記リージョン内の各ソースバイナリコードブロックと対応する最適化済ターゲットバイナリコードブロックを生成する段階;をさらに含むことができる。
別の態様に従って、プロセッサによって実行されるとき、次の処理をもたらす命令を保存する具体的なストレージ媒体を有する物品が開示される。前記処理とは、実行のために複数のソースバイナリコードブロックを有するソースバイナリアプリケーションを読み込む段階であって、前記プロセッサはNt個のターゲットレジスタを有し、ここでNtは、ソース命令セットアーキテクチャに対応するソースレジスタの数であるNs個より小さい、段階;
前記ソースバイナリアプリケーションの実行中、前記ソースバイナリアプリケーション内で頻繁に実行されるソースバイナリコードブロックを特定する段階;
前記頻繁に実行されるソースバイナリコードブロック及び類似閾値を超える少なくとも一つの隣接ソースバイナリコードブロックを含むリージョンを定義する段階であって、前記頻繁に実行されるソースバイナリコードブロック及び前記少なくとも一つの隣接ソースバイナリコードブロックは少なくとも一のソースレジスタアクセスを有し、かつ、分岐命令によってそれぞれ境界される、段階;
前記リージョン内でアクセスされる各ソースレジスタへのアクセス頻度を特定する段階;
前記リージョン内で最も頻繁にアクセスされるN個のソースレジスタの各々を、前記のNt個のターゲットレジスタの各々へそれぞれマッピングする段階であって、NはNtより小さい又は等しい、段階;並びに
前記レジスタマッピングに少なくとも部分的に基づいて前記リージョン内の各ソースバイナリコードブロックと対応する最適化済ターゲットバイナリコードブロックを生成する段階;である。
さらに別の態様により、システムが開示される。前記システムは、Nt個のターゲットレジスタを有するプロセッサであって、ここでNtは、対応するソース命令セットアーキテクチャにおけるソースレジスタの数であるNsより小さい、プロセッサ;並びに
動的バイナリ変換ソフトウェア、レジスタマッピングモジュールソフトウェア及び前記プロセッサ上で実行されるべき複数のソースバイナリコードブロックを含むソースバイナリアプリケーションを含むメモリであって、前記動的バイナリ変換ソフトウェア及びレジスタマッピングモジュールソフトウェアが前記プロセッサ上で実行されるとき、少なくとも前記動的バイナリ変換ソフトウェア及びレジスタマッピングモジュールソフトウェアのうち一つがプロセッサに:
前記ソースバイナリアプリケーションの実行中に、前記ソースバイナリアプリケーション内の頻繁に実行されるソースバイナリコードブロックを特定する処理;
前記頻繁に実行されるソースバイナリコードブロック及び類似閾値を超える少なくとも一つの隣接ソースバイナリコードブロックを有するリージョンを定義する処理であって、前記頻繁に実行されるソースバイナリコードブロック及び前記少なくとも一つの隣接ソースバイナリコードブロックは少なくとも一のソースレジスタアクセスを有し、かつ、分岐命令によってそれぞれ境界される、処理;
前記リージョン内でアクセスされる各ソースレジスタへのアクセス頻度を特定する処理;
前記リージョン内で最も頻繁にアクセスされるN個のソースレジスタの各々を、前記のNt個のターゲットレジスタの各々へそれぞれマップする処理であって、NはNtより小さい又は等しい、処理;並びに
前記レジスタマッピングに少なくとも部分的に基づいて前記リージョン内の各ソースバイナリコードブロックと対応する最適化済ターゲットバイナリコードブロックを生成する処理を行わせることができる。
ここで採用されている用語及び表現は、説明の用語として用いられ、制限としては用いられない。そのような用語及び表現の使用に際し、図示されかつ説明される(又はそれに関する一部分)機能のいかなる均等物を除外する意図はない。様々な変更がクレームの範囲内で可能であることが認識される。したがって、クレームはそのような均等物すべてをカバーするよう意図されている。
104 システムメモリ
105 キャッシュメモリ
106 レジスタ
107 スクラッチパッドメモリ
110 ソースバイナリアプリケーション
111 コードキャッシュ
112 ターゲットバイナリコードブロック
114 DBTコード
116 レジスタマッピング
118 ソースレジスタストレージ
120 OS

Claims (24)

  1. コンピュータシステムによる実行のための複数のソースバイナリコードブロックを有するソースバイナリアプリケーションを読み込む段階であって、
    前記コンピュータシステムは、メモリ及びNt個のターゲットレジスタを有する処理ユニットを有し、前記ソースバイナリアプリケーションはNs個のソースレジスタを有する環境において実行されるよう構成され、NtはNsより小さい、段階;
    前記ソースバイナリアプリケーションの実行中、前記ソースバイナリアプリケーション内で頻繁に実行されるソースバイナリコードブロックを特定する段階;
    前記頻繁に実行されるソースバイナリコードブロック及び類似閾値を超える少なくとも一つの近隣ソースバイナリコードブロックを含むリージョンを定義する段階であって、
    前記頻繁に実行されるソースバイナリコードブロック及び前記少なくとも一つの近隣ソースバイナリコードブロックは少なくとも一のソースレジスタにアクセスするための命令を共に有する、段階;
    前記リージョン内でアクセスされる各ソースレジスタへのアクセス頻度を決定する段階;及び
    前記リージョン内で最も頻繁にアクセスされるN個のソースレジスタの各々を、Nt個の前記ターゲットレジスタの各々へそれぞれマッピングする段階であって、NはNtより小さい又は等しい、段階;
    を有する、方法。
  2. 前記レジスタマッピングに少なくとも部分的に基づいて前記リージョン内の各ソースバイナリコードブロックと対応する最適化済ターゲットバイナリコードブロックを生成する段階であって、
    各最適化済ターゲットバイナリコードブロックは、
    メモリから対応するターゲットレジスタへそれぞれマッピング済ソースレジスタと関連するデータを読み込むよう構成されるプロローグ、
    前記ソースバイナリコードブロックに対応する変換済ソースバイナリコードブロック及び条件ジャンプを有する本体、及び
    少なくとも一つのエピローグ
    を有し、
    前記条件ジャンプ及び前記の少なくとも一つのエピローグは、前記リージョンの第一最適化済ターゲットバイナリコードブロックから第二ターゲットバイナリコードブロックへ、前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうかに少なくとも部分的に基づき、フローを制御するよう構成される、段階
    をさらに有する、請求項1に記載の方法。
  3. 前記複数のエピローグは、第一エピローグ及び第二エピローグを有し、
    前記第一エピローグは、前記第二ターゲットバイナリコードブロックがリージョン内の第二最適化済ターゲットバイナリコードであるとき、実行されるよう構成され、
    前記第一エピローグは、前記第二最適化済ターゲットバイナリコードブロックの本体へジャンプするための第一命令を有し、かつ、
    前記第二エピローグは、前記第二ターゲットバイナリコードブロックがリージョン内にないとき、実行されるよう構成され、
    前記第二エピローグは、それぞれマッピング済ソースレジスタに対応する各ターゲットレジスタをメモリへ保存するための第二命令及び前記第二ターゲットバイナリコードブロックの先頭へジャンプするための第三命令を有する、
    請求項2に記載の方法。
  4. 前記リージョンにおける各ソースバイナリコードブロックのlive−inレジスタ及びlive−outレジスタを特定する段階を含む、前記リージョンのlive−inレジスタ及びlive−outレジスタを特定する段階
    をさらに有する、請求項1に記載の方法。
  5. 前記レジスタマッピングに少なくとも部分的に基づいて、前記リージョン内の各ソースバイナリコードブロックに対応する最適化済ターゲットバイナリコードブロックを生成する段階であって、
    各最適化済ターゲットバイナリコードブロックは、
    メモリから対応するターゲットレジスタへ、マッピング済live−inソースレジスタそれぞれと関連するデータを読み込むよう構成されるプロローグ、
    前記ソースバイナリコードブロックに対応する変換済ソースバイナリコード及び条件ジャンプを有する本体、及び
    少なくとも一つのエピローグ
    を有し、
    前記条件ジャンプ及び前記の少なくとも一つのエピローグは、前記リージョンの第一最適化済ターゲットバイナリコードブロックから第二ターゲットバイナリコードブロックへ、前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうかに少なくとも部分的に基づき、フローを制御するよう構成される、段階
    をさらに有する、請求項4に記載の方法。
  6. 前記リージョン内の第一最適化済ターゲットバイナリコードブロックのプロローグを実行する段階であって、該段階は、前記リージョンの前記N個のマッピング済ソースレジスタの一つにそれぞれ対応するデータを含むN個のそれぞれのターゲットレジスタを読み込む段階を有する、段階;
    前記第一最適化済ターゲットバイナリコードブロックの本体を実行する段階であって、第一分岐命令を有する前記第一最適化済ターゲットバイナリコードブロックは第二ターゲットバイナリブロックへジャンプするよう構成される、段階;
    前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうか決定する段階;及び
    前記第二ターゲットコードブロックが前記リージョン内であるとき、前記第二ターゲットバイナリコードブロックに対応する第二最適化済ターゲットコードブロックの本体へジャンプするための第一エピローグを実行する段階、又は、前記第二ターゲットコードブロックが前記リージョン内にないとき、前記第二ターゲットコードブロックの先頭へジャンプするための第二エピローグを実行する段階;
    をさらに有する、請求項2に記載の方法。
  7. 前記リージョン内の第一最適化済ターゲットバイナリコードブロックのプロローグを実行する段階であって、該段階は、前記リージョン内の各マッピング済live−inソースレジスタのために、前記マッピング済live−inソースレジスタに対応するメモリからデータを含む一つのターゲットレジスタを読み込む段階を有する、段階;
    前記第一最適化済ターゲットバイナリコードブロックの本体を実行する段階であって、第一分岐命令を有する前記第一最適化済ターゲットバイナリコードブロックは第二ターゲットバイナリコードブロックへジャンプするよう構成される、段階;
    前記第二ターゲットバイナリコードブロックが前記リージョン内であるかどうか決定する段階;及び
    前記第二ターゲットコードブロックが前記リージョン内にあるとき、前記第二ターゲットコードブロックの本体へジャンプするための第一エピローグを実行する段階、又は、メモリ内に前記リージョンの前記マッピング済live−outレジスタを保存するために、及び、前記第二ターゲットコードブロックが前記リージョン内にないとき、前記第二ターゲットコードブロックの先頭へジャンプするために、第二エピローグを実行する段階;
    をさらに有する、請求項5に記載の方法。
  8. 類似とは、前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックの実行可能性の相互関係に相当する、
    請求項1に記載の方法。
  9. 前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックは、それぞれ分岐命令によって境界される、
    請求項1に記載の方法。
  10. プロセッサによって実行される以下の処理をもたらす命令を保存する具体的なストレージ媒体を有する物品であって、前記処理は、
    実行のために複数のソースバイナリコードブロックを有するソースバイナリアプリケーションを読み込む段階であって、前記プロセッサはNt個のターゲットレジスタを有し、前記ソースバイナリアプリケーションはNs個のソースレジスタを有する環境において実行されるよう構成され、NtはNsより小さい、段階;
    前記ソースバイナリアプリケーションの実行中、前記ソースバイナリアプリケーション内で頻繁に実行されるソースバイナリコードブロックを特定する段階;
    前記頻繁に実行されるソースバイナリコードブロック及び類似閾値を超える少なくとも一つの隣接ソースバイナリコードブロックを有するリージョンを定義する段階であって、類似とは、前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックの実行可能性の相互関係に相当し、前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックは、少なくとも一つのソースレジスタにアクセスするための命令を共に有し、かつ、分岐命令によってそれぞれ境界される、段階;
    前記リージョン内でアクセスされる各ソースレジスタへのアクセス頻度を特定する段階;及び
    前記リージョン内で最も頻繁にアクセスされるN個のソースレジスタの各々を、前記のNt個のターゲットレジスタの各々へそれぞれマッピングする段階であって、NはNtより小さい又は等しい、段階;
    を有する、前記処理をもたらす命令を保存する具体的なストレージ媒体を有する物品。
  11. 前記命令は、さらに
    前記レジスタマッピングに少なくとも部分的に基づいて前記リージョン内の各ソースバイナリコードブロックと対応する最適化済ターゲットバイナリコードブロックを生成する段階であって、
    各最適化済ターゲットバイナリコードブロックは、
    メモリから対応するターゲットレジスタへそれぞれマッピングされたソースレジスタに関連するデータをロードするよう構成されるプロローグ、
    前記ソースバイナリコードブロックに対応する変換済ソースバイナリコード及び条件ジャンプを有する本体、及び
    少なくとも一つのエピローグ
    を有し、
    前記条件ジャンプ及び前記の少なくとも一つのエピローグは、前記リージョンの第一最適化済ターゲットバイナリコードブロックから第二ターゲットバイナリコードブロックへ、前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうかに少なくとも部分的に基づき、フローを制御するよう構成される、段階
    を有する、請求項10に記載の物品。
  12. 前記複数のエピローグは、第一エピローグ及び第二エピローグを有し、
    前記第一エピローグは、前記第二ターゲットバイナリコードブロックがリージョン内の第二最適化済ターゲットバイナリコードであるとき、実行されるよう構成され、
    前記第一エピローグは、前記第二最適化済ターゲットバイナリコードブロックの本体へジャンプするための第一命令を有し、かつ、
    前記第二エピローグは、前記第二ターゲットバイナリコードブロックがリージョン内にないとき、実行されるよう構成され、
    前記第二エピローグは、各マッピング済ソースレジスタに対応する各ターゲットレジスタをメモリへ保存するための第二命令及び前記第二ターゲットバイナリコードブロックの先頭へジャンプするための第三命令を有する、
    請求項11に記載の物品。
  13. 前記命令は、さらに
    リージョン内の各ソースバイナリコードブロックのlive−inレジスタ及びlive−outレジスタを特定することを有する、前記リージョンのlive−inレジスタ及びlive−outレジスタを特定する段階
    を有する、請求項10に記載の物品。
  14. 前記命令は、さらに
    前記レジスタマッピングに少なくとも部分的に基づいて前記リージョン内の各ソースバイナリコードブロックと対応する最適化済ターゲットバイナリコードブロックを生成する段階であって、
    各最適化済ターゲットバイナリコードブロックは、メモリから対応するターゲットレジスタへそれぞれマッピング済のlive−inソースレジスタに関連するデータをロードするよう構成されるプロローグ、
    前記ソースバイナリコードブロックに対応する変換済ソースバイナリコード及び条件ジャンプを有する本体、及び
    少なくとも一つのエピローグ
    を有し、
    前記条件ジャンプ及び前記の少なくとも一つのエピローグは、前記リージョンの第一最適化済ターゲットバイナリコードブロックから第二ターゲットバイナリコードブロックへ、前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうかに少なくとも部分的に基づき、フローを制御するよう構成される、段階
    を有する、請求項13に記載の物品。
  15. 前記命令は、さらに
    前記リージョン内の第一最適化済ターゲットバイナリブロックのプロローグを実行するプロローグ実行段階であって、該段階は、前記リージョンの前記N個のマッピング済ソースレジスタの一つにそれぞれ対応するデータを含むN個のそれぞれのターゲットレジスタを読み込む段階を有する、段階;
    前記第一最適化済ターゲットバイナリコードブロックの本体を実行する段階であって、第一分岐命令を有する前記第一最適化済ターゲットバイナリコードブロックは第二ターゲットバイナリブロックへジャンプするよう構成される、段階;
    前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうか決定する段階;及び
    前記第二ターゲットコードブロックが前記リージョン内であるとき、前記第二ターゲットバイナリコードブロックに対応する第二最適化済ターゲットコードブロックの本体へジャンプするための第一エピローグを実行する段階、又は、前記第二ターゲットコードブロックが前記リージョン内にないとき、前記第二ターゲットコードブロックの先頭へジャンプするための第二エピローグを実行する段階;
    を有する、請求項11に記載の物品。
  16. 前記命令は、さらに
    前記リージョン内の第一最適化済ターゲットバイナリコードブロックのプロローグを実行する段階であって、該段階は、前記リージョン内の各マッピング済live−inソースレジスタのために、前記マッピング済live−inソースレジスタに対応するメモリからデータを有する一つのターゲットレジスタを読み込む段階を有する、段階;
    前記第一最適化済ターゲットバイナリコードブロックの本体を実行する段階であって、第一分岐命令を有する前記第一最適化済ターゲットバイナリコードブロックは第二ターゲットバイナリコードブロックへジャンプするよう構成される、段階;
    前記第二ターゲットバイナリコードブロックが前記リージョン内であるかどうか決定する段階;及び
    前記第二ターゲットコードブロックが前記リージョン内にあるとき、前記第二ターゲットコードブロックの本体へジャンプするための第一エピローグを実行する段階、又は、メモリ内に前記リージョンの前記マッピング済live−outレジスタを保存するために、及び、前記第二ターゲットコードブロックが前記リージョン内にないとき、前記第二ターゲットコードブロックの先頭へジャンプするために、第二エピローグを実行する段階;
    を含む、請求項14に記載の物品。
  17. Nt個のターゲットレジスタを有するプロセッサ;並びに
    動的バイナリ変換ソフトウェア、レジスタマッピングモジュールソフトウェア及びNs個のソースレジスタを有する環境において実行されるよう構成されるソースバイナリアプリケーションを保存するよう構成されるメモリ
    を有するシステムであって:
    ここでNtはNsより小さく、前記プロセッサにおいて実行されるための複数のソースバイナリコードブロックを有する前記ソースバイナリアプリケーションであり、前記動的バイナリ変換ソフトウェア及びレジスタマッピングモジュールソフトウェアが前記プロセッサ上で実行されるとき、前記動的バイナリ変換ソフトウェア及びレジスタマッピングモジュールソフトウェアのうち少なくとも一つが前記プロセッサに:
    前記ソースバイナリアプリケーションの実行中に、前記ソースバイナリアプリケーション内の頻繁に実行されるソースバイナリコードブロックを特定する処理;
    前記頻繁に実行されるソースバイナリコードブロック及び類似閾値を超える少なくとも一つの近隣ソースバイナリコードブロックを有するリージョンを定義する処理であって、前記頻繁に実行されるソースバイナリコードブロック及び少なくとも一つの近隣ソースバイナリコードブロックは、少なくとも一つのソースレジスタにアクセスする命令を共に有する、処理;
    前記リージョン内でアクセスされる各ソースレジスタへのアクセス頻度を特定する処理;及び
    前記リージョン内で最も頻繁にアクセスされるN個のソースレジスタの各々を、前記のNt個のターゲットレジスタの各々へそれぞれマッピングする処理であって、NはNtより小さい又は等しい、処理;
    を実行させる、システム。
  18. 前記レジスタマッピングモジュールソフトウェアは、前記プロセッサに、
    前記レジスタマッピングに少なくとも部分的に基づいて、前記リージョン内の各ソースバイナリコードブロックに対応する最適化済ターゲットバイナリコードブロックを生成する処理であって、
    各最適化済ターゲットバイナリコードブロックは、
    メモリから対応するターゲットレジスタへそれぞれマッピングされたソースレジスタと関連するデータを読み込むよう構成されるプロローグ、
    前記ソースバイナリコードブロックに対応する変換済ソースバイナリコードブロック及び条件ジャンプを有する本体、及び
    少なくとも一つのエピローグ
    を有し、
    前記条件ジャンプ及び前記の少なくとも一つのエピローグは、前記リージョンの第一最適化済ターゲットバイナリコードブロックから第二ターゲットバイナリコードブロックへ、前記第二ターゲットバイナリコードブロックが前記リージョン内にあるかどうかに少なくとも部分的に基づき、フローを制御するよう構成される、処理
    をさらに実行させる、請求項17に記載のシステム。
  19. 前記複数のエピローグは、第一エピローグ及び第二エピローグを有し、
    前記第一エピローグは、前記第二ターゲットバイナリコードブロックがリージョン内の第二最適化済ターゲットバイナリコードであるとき、実行されるよう構成され、
    前記第一エピローグは、前記第二最適化済ターゲットバイナリコードブロックの本体へジャンプするための第一命令を有し、かつ、
    前記第二エピローグは、前記第二ターゲットバイナリコードブロックがリージョン内にないとき、実行されるよう構成され、
    前記第二エピローグは、各マッピング済ソースレジスタに対応する各ターゲットレジスタをメモリへ保存するための第二命令及び前記第二ターゲットバイナリコードブロックの先頭へジャンプするための第三命令を有する、
    請求項18に記載のシステム。
  20. 前記レジスタマッピングモジュールソフトウェアは、前記プロセッサに、リージョン内の各ソースバイナリコードブロックのlive−inレジスタ及びlive−outレジスタを特定する処理を有する、前記リージョンのlive−inレジスタ及びlive−outレジスタを特定する処理をさらに実行させる、
    請求項17に記載のシステム。
  21. 類似とは、前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックの実行可能性の相互関係に相当する、
    請求項10に記載の物品。
  22. 前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックは、それぞれ分岐命令によって境界される、
    請求項10に記載の物品。
  23. 類似とは、前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックの実行可能性の相互関係に相当する、
    請求項17に記載のシステム。
  24. 前記頻繁に実行されるソースバイナリコードブロック及び前記の少なくとも一つの近隣ソースバイナリコードブロックは、それぞれ分岐命令によって境界される、
    請求項17に記載のシステム。
JP2011130887A 2010-06-14 2011-06-13 効率的な動的バイナリ変換のためのレジスタマッピング技術を用いた方法、物品及びシステム Pending JP2012003761A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/815,023 2010-06-14
US12/815,023 US8479176B2 (en) 2010-06-14 2010-06-14 Register mapping techniques for efficient dynamic binary translation

Publications (1)

Publication Number Publication Date
JP2012003761A true JP2012003761A (ja) 2012-01-05

Family

ID=44785163

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011130887A Pending JP2012003761A (ja) 2010-06-14 2011-06-13 効率的な動的バイナリ変換のためのレジスタマッピング技術を用いた方法、物品及びシステム

Country Status (9)

Country Link
US (1) US8479176B2 (ja)
EP (1) EP2400388A1 (ja)
JP (1) JP2012003761A (ja)
KR (2) KR20130018925A (ja)
CN (2) CN102934082B (ja)
HK (1) HK1165039A1 (ja)
RU (1) RU2515217C2 (ja)
SG (1) SG176872A1 (ja)
WO (1) WO2011159739A2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014532248A (ja) * 2012-09-21 2014-12-04 インテル コーポレイション バイナリトランスレーションを実行する方法及びシステム
JP2017509083A (ja) * 2014-03-27 2017-03-30 インテル コーポレイション バイナリトランザクションベースのプロセッサによるロックエリジョン
US10176001B2 (en) 2015-05-28 2019-01-08 Mitsubishi Electric Corporation Simulation device, simulation method, and computer readable medium
JP7436579B2 (ja) 2021-07-28 2024-02-21 ソニー・インタラクティブエンタテインメント エルエルシー レガシーゲーム用aotコンパイラ

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US8479176B2 (en) * 2010-06-14 2013-07-02 Intel Corporation Register mapping techniques for efficient dynamic binary translation
US9195486B2 (en) * 2010-07-30 2015-11-24 Apple Inc. Observation and analysis based code optimization
CN103282890B (zh) * 2011-01-12 2015-11-25 株式会社索思未来 程序执行装置以及编译器系统
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9292470B2 (en) 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US9141389B2 (en) * 2011-04-07 2015-09-22 Via Technologies, Inc. Heterogeneous ISA microprocessor with shared hardware ISA registers
US9336180B2 (en) 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9128701B2 (en) 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9043580B2 (en) 2011-04-07 2015-05-26 Via Technologies, Inc. Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9176733B2 (en) 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
US9146742B2 (en) * 2011-04-07 2015-09-29 Via Technologies, Inc. Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US9032189B2 (en) 2011-04-07 2015-05-12 Via Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US9417855B2 (en) 2011-09-30 2016-08-16 Intel Corporation Instruction and logic to perform dynamic binary translation
US10146545B2 (en) 2012-03-13 2018-12-04 Nvidia Corporation Translation address cache for a microprocessor
US9880846B2 (en) 2012-04-11 2018-01-30 Nvidia Corporation Improving hit rate of code translation redirection table with replacement strategy based on usage history table of evicted entries
US10241810B2 (en) 2012-05-18 2019-03-26 Nvidia Corporation Instruction-optimizing processor with branch-count table in hardware
US9032381B2 (en) 2012-06-29 2015-05-12 Intel Corporation State recovery methods and apparatus for computing platforms
US10157063B2 (en) * 2012-09-28 2018-12-18 Intel Corporation Instruction and logic for optimization level aware branch prediction
US20140189310A1 (en) 2012-12-27 2014-07-03 Nvidia Corporation Fault detection in instruction translations
KR20140097927A (ko) * 2013-01-30 2014-08-07 삼성전자주식회사 소프트웨어의 보안을 높이는 방법
US10108424B2 (en) * 2013-03-14 2018-10-23 Nvidia Corporation Profiling code portions to generate translations
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
WO2016162721A1 (en) * 2015-04-10 2016-10-13 Google Inc. Binary translation on shared object level
GB2554201B (en) * 2015-04-10 2022-05-11 Google Llc Binary translation into native client
US9811324B2 (en) * 2015-05-29 2017-11-07 Google Inc. Code caching system
CN107851006B (zh) * 2015-08-18 2020-12-04 华为技术有限公司 多线程寄存器映射
US10235177B2 (en) * 2016-07-02 2019-03-19 Intel Corporation Register reclamation
US10282182B2 (en) * 2016-09-23 2019-05-07 Intel Corporation Technologies for translation cache management in binary translation systems
US10191745B2 (en) * 2017-03-31 2019-01-29 Intel Corporation Optimized call-return and binary translation
KR102006242B1 (ko) * 2017-09-29 2019-08-06 주식회사 인사이너리 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템
US10613877B2 (en) * 2018-03-23 2020-04-07 International Business Machines Corporation Container hyperlinking
US10691435B1 (en) * 2018-11-26 2020-06-23 Parallels International Gmbh Processor register assignment for binary translation
CN111459572B (zh) * 2020-03-31 2023-01-31 深圳市汇顶科技股份有限公司 程序加载方法、控制器、芯片以及电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6862730B1 (en) * 2000-04-26 2005-03-01 Lucent Technologies Inc. Register allocation in code translation between processors
JP2006524382A (ja) * 2003-04-22 2006-10-26 トランジティブ リミテッド インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置
JP2007531075A (ja) * 2003-07-15 2007-11-01 トランジティブ リミテッド プログラム・コードを変換するための共用コード・キャッシングの方法および装置

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01217632A (ja) 1988-02-26 1989-08-31 Nec Corp データへのレジスタ割付け方式
US5842017A (en) * 1996-01-29 1998-11-24 Digital Equipment Corporation Method and apparatus for forming a translation unit
US6535903B2 (en) * 1996-01-29 2003-03-18 Compaq Information Technologies Group, L.P. Method and apparatus for maintaining translated routine stack in a binary translation environment
US6091897A (en) * 1996-01-29 2000-07-18 Digital Equipment Corporation Fast translation and execution of a computer program on a non-native architecture by use of background translator
US8121828B2 (en) * 1999-01-28 2012-02-21 Ati Technologies Ulc Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions
US8127121B2 (en) * 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US7275246B1 (en) * 1999-01-28 2007-09-25 Ati International Srl Executing programs for a first computer architecture on a computer of a second architecture
US6826748B1 (en) * 1999-01-28 2004-11-30 Ati International Srl Profiling program execution into registers of a computer
US6820255B2 (en) * 1999-02-17 2004-11-16 Elbrus International Method for fast execution of translated binary code utilizing database cache for low-level code correspondence
US6625807B1 (en) * 1999-08-10 2003-09-23 Hewlett-Packard Development Company, L.P. Apparatus and method for efficiently obtaining and utilizing register usage information during software binary translation
US7219336B2 (en) * 2002-01-03 2007-05-15 Intel Corporation Tracking format of registers having multiple content formats in binary translation
US20030154419A1 (en) * 2002-01-10 2003-08-14 Binyu Zang Register renaming in binary translation using rollback and recovery
US7076769B2 (en) * 2003-03-28 2006-07-11 Intel Corporation Apparatus and method for reproduction of a source ISA application state corresponding to a target ISA application state at an execution stop point
US7260705B2 (en) * 2003-06-26 2007-08-21 Intel Corporation Apparatus to implement mesocode
US7260815B1 (en) * 2003-06-30 2007-08-21 Vmware, Inc. Method and apparatus for managing registers in a binary translator
GB0316532D0 (en) * 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for partitioning code in program code conversion
US8549166B2 (en) * 2004-03-01 2013-10-01 Qualcomm Incorporated Execution of unverified programs in a wireless, device operating environment
WO2006009287A1 (ja) * 2004-07-20 2006-01-26 Star Game's Corporation 自動変換用プログラムおよびプログラム変換サーバ
US8255882B2 (en) * 2004-12-30 2012-08-28 Intel Corporation Selecting formats for multi-format instructions in binary translation of code from a hybrid source instruction set architecture to a unitary target instruction set architecture
US20070006178A1 (en) * 2005-05-12 2007-01-04 Microsoft Corporation Function-level just-in-time translation engine with multiple pass optimization
US7757221B2 (en) 2005-09-30 2010-07-13 Intel Corporation Apparatus and method for dynamic binary translator to support precise exceptions with minimal optimization constraints
US8479174B2 (en) * 2006-04-05 2013-07-02 Prevx Limited Method, computer program and computer for analyzing an executable computer file
US7596781B2 (en) * 2006-10-16 2009-09-29 International Business Machines Corporation Register-based instruction optimization for facilitating efficient emulation of an instruction stream
US7712092B2 (en) 2007-10-01 2010-05-04 The Board Of Trustees Of The Leland Stanford Junior University Binary translation using peephole translation rules
US8296749B2 (en) * 2007-12-28 2012-10-23 Intel Corporation Program translation and transactional memory formation
US20100115494A1 (en) * 2008-11-03 2010-05-06 Gorton Jr Richard C System for dynamic program profiling
US8479176B2 (en) * 2010-06-14 2013-07-02 Intel Corporation Register mapping techniques for efficient dynamic binary translation

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6862730B1 (en) * 2000-04-26 2005-03-01 Lucent Technologies Inc. Register allocation in code translation between processors
JP2006524382A (ja) * 2003-04-22 2006-10-26 トランジティブ リミテッド インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置
JP2007531075A (ja) * 2003-07-15 2007-11-01 トランジティブ リミテッド プログラム・コードを変換するための共用コード・キャッシングの方法および装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014532248A (ja) * 2012-09-21 2014-12-04 インテル コーポレイション バイナリトランスレーションを実行する方法及びシステム
JP2017509083A (ja) * 2014-03-27 2017-03-30 インテル コーポレイション バイナリトランザクションベースのプロセッサによるロックエリジョン
US10176001B2 (en) 2015-05-28 2019-01-08 Mitsubishi Electric Corporation Simulation device, simulation method, and computer readable medium
JP7436579B2 (ja) 2021-07-28 2024-02-21 ソニー・インタラクティブエンタテインメント エルエルシー レガシーゲーム用aotコンパイラ

Also Published As

Publication number Publication date
HK1165039A1 (en) 2012-09-28
KR20130018925A (ko) 2013-02-25
CN102298514B (zh) 2014-07-16
US8479176B2 (en) 2013-07-02
US20110307876A1 (en) 2011-12-15
WO2011159739A2 (en) 2011-12-22
EP2400388A1 (en) 2011-12-28
KR101381274B1 (ko) 2014-04-04
WO2011159739A3 (en) 2012-04-05
RU2011153335A (ru) 2013-07-10
CN102934082B (zh) 2017-06-09
CN102298514A (zh) 2011-12-28
KR20110136749A (ko) 2011-12-21
CN102934082A (zh) 2013-02-13
RU2515217C2 (ru) 2014-05-10
SG176872A1 (en) 2012-01-30

Similar Documents

Publication Publication Date Title
JP2012003761A (ja) 効率的な動的バイナリ変換のためのレジスタマッピング技術を用いた方法、物品及びシステム
US9304749B2 (en) Method and system for instruction scheduling
US8990786B2 (en) Program optimizing apparatus, program optimizing method, and program optimizing article of manufacture
US8752036B2 (en) Throughput-aware software pipelining for highly multi-threaded systems
US9495136B2 (en) Using aliasing information for dynamic binary optimization
US9323508B2 (en) Method and system for compiler optimization
US20120198427A1 (en) Ensuring Register Availability for Dynamic Binary Optimization
US20100095286A1 (en) Register reduction and liveness analysis techniques for program code
US20150150019A1 (en) Scheduling computing tasks for multi-processor systems
JP2011129103A (ja) バッファを用いて高効率でロード処理を実行する方法および装置
Shen et al. A retargetable static binary translator for the ARM architecture
Vocke et al. Extending halide to improve software development for imaging dsps
JP5536593B2 (ja) 最適化装置、最適化方法およびコンパイラ・プログラム
TWI743698B (zh) 解譯執行位元組碼指令流的方法及裝置
JP4093484B2 (ja) コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体
KR100498486B1 (ko) 쓰레드 바이너리 컴파일러에 의하여 프로그램에서 여러개의 쓰레드를 다이내믹하게 추출하는 컴퓨터 시스템 및그 동시 다중 쓰레딩 방법
US9875101B1 (en) Induction variable identification
CN104166633B (zh) 用于存储器访问保护的方法和系统
CN104050017A (zh) 运行虚拟机的控制方法和装置
JP4013972B2 (ja) プロセッサ、プロセッサでのプログラム実行方法
Hazrati et al. System Programming in Loaders

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130313

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130319

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130619

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20130709