JP2008536236A - コンピュータシステムにおけるデータ値の整合性(コヒーレンス:coherence) - Google Patents
コンピュータシステムにおけるデータ値の整合性(コヒーレンス:coherence) Download PDFInfo
- Publication number
- JP2008536236A JP2008536236A JP2008506398A JP2008506398A JP2008536236A JP 2008536236 A JP2008536236 A JP 2008536236A JP 2008506398 A JP2008506398 A JP 2008506398A JP 2008506398 A JP2008506398 A JP 2008506398A JP 2008536236 A JP2008536236 A JP 2008536236A
- Authority
- JP
- Japan
- Prior art keywords
- target
- original
- register
- code
- data value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
本発明は、一般的なデータ値の問題に関するものであり、特に、ソースコード表現(10)からターゲットコード表現(30)に変換されたプログラムコードを実行する場合のコンピュータシステムにおける常駐問題に関するものである。本発明の基本的な概念は、プログラムコード変換中にターゲットコードのターゲットデータ値コンテナ(40)に対する参照をソースコードのオリジナルデータ値コンテナ(20)の対応するアドレス情報と関連付け、オリジナルソースコード表現のデータ値の表示(50)を維持するためにターゲットコードの実行時にオリジナルデータ値コンテナの関連するアドレス情報と共にターゲットコード命令に関する情報を記憶することである。このように、ターゲットシステムにおける変換されたターゲットコード(30)の実行時にオリジナルソースコード(10)のデータ値を追跡することは、高い効率的な方法でサポートされる。
【選択図】 なし
【選択図】 なし
Description
本発明の技術分野
本発明は、一般に、コンピュータ技術の分野に関するものであり、より詳しくは、コンピュータマイクロアーキテクチャ、コンパイラ技術及びデバッグ技術、及び、特に、プログラムコードを変換する時のコンピュータシステムにおけるデータ値の整合性の問題に関するものである。
本発明は、一般に、コンピュータ技術の分野に関するものであり、より詳しくは、コンピュータマイクロアーキテクチャ、コンパイラ技術及びデバッグ技術、及び、特に、プログラムコードを変換する時のコンピュータシステムにおけるデータ値の整合性の問題に関するものである。
本発明の背景
コンピュータマイクロアーキテクチャの分野は、計算モデルをサポートするためにコンピュータの内部構造の設計に関与している。コンパイラ技術は、1つの形式から別の形式へのコンピュータプログラムコードの変換をサポートする技術である。また、デバッグ技術は、一般的には、デバッグする技術であり、あるいは、換言すれば、コンピュータプログラムにおける誤りを検出する技術である。
コンピュータマイクロアーキテクチャの分野は、計算モデルをサポートするためにコンピュータの内部構造の設計に関与している。コンパイラ技術は、1つの形式から別の形式へのコンピュータプログラムコードの変換をサポートする技術である。また、デバッグ技術は、一般的には、デバッグする技術であり、あるいは、換言すれば、コンピュータプログラムにおける誤りを検出する技術である。
コードを1つの形式から別の形式に変換する場合、コードの位置及びデータ値の整合性の損失が問題である。これは、ソースコードを高レベル言語からターゲット形式(target format:ターゲット形式)に変換する場合、及びコードを1つの「ターゲット」形式から別の「ターゲット」形式に変換する場合の両方の場合において発生する。ソースコードは、1つ以上のステップでターゲットコードに変換される。後者の場合、任意の中間コード形式が、「ソース」形式及び「ターゲット」形式の少なくとも一方として考えられても良い。各変換ステップでは、ソース形式及びターゲット形式が存在するが、所定の変換ステップのソース形式が従前の変換ステップにおいてターゲット形式である場合がある。
高レベル言語で表現されるソースコードがターゲットコードへの変換中に変換及び最適化される場合、ターゲットレジスタとソース変数との間の直接的なマッピングは維持することはできない。変換処理は、変数値に対して動作する命令を移動及び削除するからである。また、変換処理は、変換されたプログラムの異なるポイントにおける変数の値を保持するために異なるレジスタまたはメモリ位置を使用することができる。他の変数が同一のレジスタまたはメモリ位置に値を保持するのと同時に、値を保持するためにレジスタを使用することもできる。更に、変換処理は、変数の存在区間(live range)中に値を保持するレジスタを除去することができ、定数のロードでレジスタを置換する、あるいは上述のように他の変数(群)から1つ以上の値を保持するレジスタを使用する。変数の常駐性を報告すること、即ち、変数が常駐するレジスタあるいはメモリ位置及びある特定のプログラムポイントにおいて変数が有する値を報告することは、技術的に問題がある。更に、現在の値だけでなく、実行している時にある特定のプログラムポイントにおける変数の期待値を報告することは問題である。
特に、1つの種類のマシンまたはシステム上で実行するターゲットであるバイナリコードが別の種類のマシンまたはシステムに対して変換及び最適化される場合、元(オリジナル)のバイナリコードのある特定のレジスタに記憶された値は、結果として得られるコードの他のレジスタに記憶されることになる。ターゲットアーキテクチャに対する最適化及び適応の後に元(オリジナル)のアーキテクチャの状態(レジスタのコンテンツ等)を提供することは、コンピュータ技術の分野における特有の問題である。
整合性の損失の一般的な問題は、以下の主な問題に分類される。
・ターゲットコード表現の命令アドレスを、どのようにしてソースコード表現の命令アドレスにマップするか?
・ターゲットコード表現のレジスタまたはメモリ変数等のデータ値コンテナに対するアドレスを、どのようにしてソースコード表現のデータ値コンテナのアドレスにマップするか?
・ターゲットコード表現のデータ値コンテナアドレスの複数のアクティブなインスタンスを、どのようにしてソースコード表現の正確なデータ値アドレスにマップするか?
第1の問題は、コードの位置の問題を示している。残りの2つの問題は、データ値の問題に関するものである。
・ターゲットコード表現のレジスタまたはメモリ変数等のデータ値コンテナに対するアドレスを、どのようにしてソースコード表現のデータ値コンテナのアドレスにマップするか?
・ターゲットコード表現のデータ値コンテナアドレスの複数のアクティブなインスタンスを、どのようにしてソースコード表現の正確なデータ値アドレスにマップするか?
第1の問題は、コードの位置の問題を示している。残りの2つの問題は、データ値の問題に関するものである。
データ値の問題は、時には、ある特定のプログラムポイントにおいて期待されるオリジナル(元の:original)レジスタ(または汎用高レベル言語の場合においては変数)の期待値を報告または追跡する問題として示される。
オリジナルレジスタまたは変数が割り当てられたレジスタにおいてアクセス可能であるかを判定する問題は、典型的には、文献[1]に概略が示されるように常駐問題と呼ばれる。
文献[1]は、変数の常駐性を保守的に検出するために、変数の存在区間、即ち、レジスタに対する変数の割当から別の命令においてレジスタを最後に使用した時までのコードにおける範囲を使用することが十分であることを観測する。但し、別の値が変数の値を含むレジスタを割り当てられるまで常駐し続けても良い。そのプログラムポイントは、変数の排除(eviction)ポイントである。文献[1]において、変数の排除ポイントの検出は、デバッガにおいて最適化コードにデータフロー解析を適用することにより実行される。
関連技術
文献[2]は、デバッグの効率を向上するために複数の汎用コンピュータにおいてマルチプロセッサシミュレーション環境を実現するビルトインデバッグサポートデバイスに関するものである。
文献[2]は、デバッグの効率を向上するために複数の汎用コンピュータにおいてマルチプロセッサシミュレーション環境を実現するビルトインデバッグサポートデバイスに関するものである。
文献[3]は、マイクロプロセッサに対するソフトウェアデバッグポートに関するものである。オンチップトレースキャッシュと共に使用される場合、ソフトウェアデバッグポートは、プロセッサにおいて命令実行フローを再構築するためのトレース情報を提供し、プロセッサの動作を停止することなくレジスタコンテンツを検査することができる。
文献[4]は、デバッグ例外制御部分を有するデバッグサポートデバイスに関するものである。デバッグ例外制御部分は、CPUコアからデバッグ例外の生成命令が受信される場合のレジスタの状態を保存し、かつ回復命令が受信される場合に、プログラムカウンタをデバッグ例外ハンドラのアドレスに変更しかつデバッグ生成の前の状態にレジスタを戻す。
文献[5]は、複数のトレースデータ記憶素子を有するコンパクトトレースレコード記憶装置とのデバッグインタフェースを開示している。この記憶素子は、トレース情報の種類を示すトレースコードフィールド、及びトレース情報データの種類を示すトレースデータフィールドを含む形式を有している。
文献[6]は、埋込内部ノードの論理状態を観測及び制御する機能を提供するプログラム可能論理デバイス(PLD)に関するものである。このPLDは、論理素子レジスタ、メモリセル及びI/Oレジスタ等の内部ノードに対するシャドウ記憶装置を提供する。サンプル/ロードデータパスは、論理状態を観測する内部ノードのサンプリング及び論理状態を制御する内部ノードのロードを容易にするシフトレジスタ及び両方向データバスを含んでいる。
本発明の要約
本発明の一般的な目的は、データ値の問題に対する一般的な解決策を可能にし、かつサポートすることである。
本発明の一般的な目的は、データ値の問題に対する一般的な解決策を可能にし、かつサポートすることである。
特定の目的は、ソースコード表現からターゲットコード表現に変換されるプログラムコードを実行する場合のコンピュータシステムにおける、いわゆる常駐問題に対する解決策を提供することである。
特に、オリジナルソースコードと変換されたターゲットコードとの間のデータ値の整合性をサポートするメカニズムを提供することが望ましい。
本発明の特定の目的は、コンピュータシステム上で変換されたターゲットコードを実行する際に、オリジナルソースコードのデータ値を追跡することをサポートする方法を提供することである。
本発明の別の特定の目的は、コンピュータシステム上で対応する変換されたターゲットコードを実行する場合に、オリジナルソースコードのレジスタまたはメモリ変数等のデータ値コンテナの表示を維持するデバイスまたはモジュールを提供することである。
特定の目的は、オリジナルレジスタとターゲットレジスタとの間のレジスタコヒーレンス(整合性)をサポートすることである。
特に、1つの目的は、特に元のシステム上で実行するターゲットであるバイナリコードがターゲットシステムに対して変換及び最適化される場合、異なるコンピュータシステムに対してプログラムコードを最適化及び適応させた後に、元のコンピュータシステムのデータ値の表示を維持することである。
上記目的及び他の目的は、添付の請求の範囲で定義される本発明により達成される。
上述のように、本発明は、一般的なデータ値の問題に関するものであり、特に、ソースコード表現からターゲットコード表現に変換されるプログラムコードを実行する場合のコンピュータシステムにおける常駐問題に関するものである。
本発明の基本的な概念は、プログラムコードの変換中にターゲットコードにおけるターゲットデータ値コンテナに対する参照をソースコードのオリジナルデータ値コンテナの対応するアドレス情報に関連付け、オリジナルソースコード表現のデータ値の表示を維持するためにターゲットコードの実行時にオリジナルデータ値コンテナの関連するアドレス情報と共にターゲットコード命令に関する情報を記憶することである。このように、ターゲットシステムにおける変換されたターゲットコードの実行時にオリジナルソースコードのデータ値を追跡することは、より高い効率的な方法でサポートされる。
データ値コンテナの例には、通常のマイクロコンピュータレジスタ及び高レベルプログラミング言語におけるメモリを割り当てられた変数が含まれる。従って、レジスタの場合、本発明は、ソースコードのオリジナルレジスタセットとターゲットコードのターゲットレジスタセットとの間のレジスタコヒーレンスに対するサポートを提供する。メモリ変数に関わる例は、より一般的なデータ値常駐性問題に対する解決策を与える。
本発明は、異なるコンピュータシステムに対してプログラムコードを最適化及び適応させた後、元のコンピュータシステムのデータ値の表示を維持することを可能にする。
本発明の好適な実施形態において、ターゲットコード命令は、データ値の整合性に対してコード変換中にタグが付加され、ターゲットコードのターゲットデータ値コンテナ(ターゲットレジスタまたはターゲット変数等)とソースコードのオリジナルデータ値コンテナとの間の関連付けを提供する。
ターゲットコードの実行時に関連するオリジナルデータ値コンテナと共に記憶されている情報は、対応するターゲット命令アドレス情報及び対応する命令オペランド値の少なくとも一方を含んでいるが好ましい。後者の場合、ターゲットデータ値コンテナを参照せずにオリジナルデータ値コンテナの値を追跡することが可能である。
上述の追跡情報は、以下においてゴーストレジスタファイルと呼ばれる特別に設計された追加のレジスタファイルに書き込まれることが有利であり、マイクロコンピュータアーキテクチャにおけるハードウェアレジスタファイルとして実現されることが好ましい。
タグが付加されたターゲット命令は、ソースコードにおける変数またはレジスタ等のオリジナルデータ値コンテナの割当を示す1つ以上のターゲット命令を含んでいる。追跡を完全にサポートするために、オリジナルソースコードのデータ値コンテナのアドレス情報は、ゴーストレジスタファイルにおいて1つのエントリ(またはレジスタ)から別のエントリ(またはレジスタ)に移動され得る。このように、本質的に本発明は、異なるオリジナルレジスタ(または変数)値が利用される実行パスに依存してターゲットレジスタ(または変数)を割り当てられる例をサポートする。これは、オリジナルレジスタ(または変数)の異なるインスタンスがターゲットレジスタの並列インスタンスに変換される場合にも当てはまる。
ターゲットシステムにおいてオリジナルデータ値コンテナの常駐性を一貫して反映するために、本発明は、ゴーストレジスタファイル動作の一連の整合性を維持するためのロジックを含むんでいることが好ましい。
更に本発明は、ゴーストレジスタファイル動作を選択的に変換する動作ストリーム処理を提供することが好ましい。典型的には、動作処理ロジックは、プロセッサの通常の動作ストリームを流用した動作を追加のレジスタファイルを対象とする割当、移動、記憶及びnop動作に変換する。通常、変換は、追加のレジスタファイルのいわゆる読出待ち時間ウィンドウにおいて元の通常の動作及び先に変換された動作により管理される。
ターゲットコードの命令語の追加のフィールド、追加のレジスタファイル及び動作処理ロジックにより、ターゲットデータ値コンテナの状態に加え、オリジナルソースコードのデータ値コンテナの状態は、ターゲットコード実行時に維持され、また、必要に応じて、2つの異なるコンピュータアーキテクチャの状態も維持される。
本発明は、ゴーストレジスタファイルまたは同等のメモリ素子に加え、「コンパイル時」及び「実行時」の個々の構成要素、並びに総合システムのそのような個々の構成要素の組み合わせを提供する。例として、いわゆるタグ付加を実行するように動作可能なコンパイル時の構成要素及びゴーストレジスタファイルに関連情報を記憶するように動作可能な実行時の構成要素を含んでいる。
本発明は、以下の利点を提供する:
>変数及びレジスタの両方のデータ値常駐問題に対する解決策
>コンピュータシステムにおけるデータ値の整合性のサポート
>効率的なデバッグ及びトレース解析に対する改善された機能
>変換されたターゲットコードの実行時にオリジナルソースコードのデータ値の追跡を可能にすること
>対応する変換されたターゲットコードを実行する場合に、オリジナルソースコード表現のデータ値の表示を維持する可能性
>レジスタコヒーレンスのサポート
>異なるコンピュータシステムにおいて実行するためにプログラムコードを最適化及び適応させた後、元のコンピュータシステムのデータ値の追跡をサポートすること
本発明により提供される他の利点は、本発明の実施形態の以下の説明を読むことにより理解されるだろう。
>変数及びレジスタの両方のデータ値常駐問題に対する解決策
>コンピュータシステムにおけるデータ値の整合性のサポート
>効率的なデバッグ及びトレース解析に対する改善された機能
>変換されたターゲットコードの実行時にオリジナルソースコードのデータ値の追跡を可能にすること
>対応する変換されたターゲットコードを実行する場合に、オリジナルソースコード表現のデータ値の表示を維持する可能性
>レジスタコヒーレンスのサポート
>異なるコンピュータシステムにおいて実行するためにプログラムコードを最適化及び適応させた後、元のコンピュータシステムのデータ値の追跡をサポートすること
本発明により提供される他の利点は、本発明の実施形態の以下の説明を読むことにより理解されるだろう。
発明の実施形態の詳細な説明
図中、同一の参照符号は対応する要素または同様の要素に対して使用する。
図中、同一の参照符号は対応する要素または同様の要素に対して使用する。
データ値の問題は、これまでに完全に対処または解決されていない。特に、コード変換の最適化が行なわれるコンピュータシステムにおいてオリジナルデータ値コンテナの値を追跡するためのハードウェアサポートは、マイクロプロセッサ業界及び学会により対処されていない。そのようなサポートにより、そのようなシステム上でのコンピュータプログラムのデバッグは非常に改善されるだろう。
まず、一般的な状況において、データ値常駐性問題に対する一般的な解決策として本発明を説明する。その後、高レベル言語におけるメモリ変数の追跡及びレジスタコヒーレンスのサポートに関して本発明を例示する。
図1は、本発明の好適な実施形態に従って、オリジナルソースコードとターゲットコードとの間のデータ値の整合性をサポートするメカニズムを示す概略図である。このプログラムコードは、単にソースコード10と呼ばれるオリジナルソースコード表現で与えられ、レジスタまたはメモリ変数等のデータ値コンテナ20のセットに対して動作する。オリジナルソースコードのデータ値コンテナは、オリジナルデータ値コンテナと呼ばれる。ソースコード10は、単にターゲットコード30と呼ばれるターゲットコード表現に変換される。ターゲットコード30は、データ値コンテナ40の別のセットに対して動作する。ターゲットコードのデータ値コンテナは、ターゲットデータ値コンテナと呼ばれる。一般に、コード変換は、コード変換、最適化、並びに静的変数の割当及びレジスタ割当を含んでいる。しかしながら、本発明に従えば、プログラムコード変換中の追加のタスクは、ターゲットコード命令のターゲットデータ値コンテナに対する参照(リフェレンス)をソースコードのオリジナルデータ値コンテナの対応するアドレス情報と関連付けることである。これは、オリジナルデータ値コンテナに関する関連情報でターゲットコード命令にタグを付加するすることにより達成されることが好ましい。例えば、タグ付加(tagging)処理は、オリジナルコンテナのアドレス/名前を使用して命令のデスティネーションコンテナにマークを付加(またはタグを付加)しても良い。ターゲットコード実行時間中に、タグ付ターゲットコード30を実行する場合、命令オペランド値は、ターゲットデータ値コンテナに割り当てられ、また、通常、異なるターゲットコンテナの間で移動される。加えて、本発明に従えば、ターゲットコード命令に関する情報は、オリジナルデータ値コンテナの関連アドレス情報と共に、いわゆる「ゴースト」または「シャドウ」データ値コンテナ50のセットに記憶される。このように、オリジナルソースコード表現のデータ値の表示はターゲットコード実行時に維持または維持され、デバッグ及びトレース解析の少なくとも一方を非常に容易にする。
オリジナルソースコードのデータ値の表示を維持するデータ値コンテナ50は、マイクロコンピュータアーキテクチャにおいて「ゴースト」レジスタファイルに実現されることが好ましいが、別の実現例では、通常のトランザクションメモリの使用を含んで存在する。この「ゴースト」データ値コンテナ50は、高レベルプログラミング言語の変数に割り当てられたメモリ位置であっても良い。
図2は、デバッグ及びトレース解析の少なくとも一方を含む、対応するターゲットコードの実行時にオリジナルソースコードのデータ値を追跡する好適な方法全体を概略的に示すフローチャートである。コード変換フェーズにおいて、ターゲットコード命令は、ターゲットコードのターゲットデータ値コンテナ(ターゲットレジスタまたはターゲット変数等)とソースコードのオリジナルデータ値コンテナとの間の関連付けを提供するために、データ値の整合性に対してタグが付加されることが好ましい(S1)。ターゲットコードの実行時、ターゲット命令アドレス情報等の情報及び対応する命令オペランド値の少なくとも一方は、関連するオリジナルデータ値コンテナのアドレスと共に記憶される(S2)。デバッグフェーズにおいて、オリジナルソースコードは、記憶された追跡情報に基づいて解析され得る。後述するように、ターゲット命令アドレス情報及びオリジナルデータ値コンテナアドレスが追跡情報として記憶される場合、デバッグユーティリティは、ターゲット命令アドレス情報を使用して、最適化されたターゲットコードのアクティブな値を再生成することができる。命令オペランド値自体が記憶される場合、オリジナルデータ値コンテナの値の追跡は、ターゲットデータ値コンテナを参照せずに行なうことができる。
典型的には、通常は、コンパイラであるコードアナライザ及びトランスレータ(変換部)はコードを解析して、結果として得られるターゲットコードの実行中に、後で使用されるオリジナルソースコードのデータ値コンテナ情報を選択された実行時情報と共に提供し、オリジナルソースコードのデータ値コンテナの表示を提供する。
本発明は、データ値常駐性問題、及び、特に、変数値(高レベル言語変換の場合)またはオリジナルレジスタ値(バイナリ変換の場合)が変換された最適化コードにより設定された時に、それらの値を報告する問題及びトレース/ブレークポイントにおいてそれら値が常駐するターゲットレジスタを報告する問題の少なくとも一方についてのソリューションを提供する。
レジスタコヒーレンス
以下では、オリジナルコードのオリジナルレジスタ及びターゲットコードのターゲットレジスタに関して、データ値の問題の詳細な解析を行なう。
以下では、オリジナルコードのオリジナルレジスタ及びターゲットコードのターゲットレジスタに関して、データ値の問題の詳細な解析を行なう。
レジスタコヒーレンスの種々の問題を示すために、2つの基本的なコード例を以下に与える。オリジナルアーキテクチャのレジスタには、オリジナルレジスタOREGと名前を付ける。ターゲットアーキテクチャに関係するレジスタには、ターゲットレジスタtreg:sと名前を付ける。
例1:
ld tregB, ADDR0; //ターゲットレジスタtregBは、アドレスADDR0にお //いてメモリから値を得る
mv tregA, tregB; //ターゲットレジスタtregBの値は、tregAに移動さ //れる
ld tregB, ADDR1; //tregBは新規の値を得る
...
st tregA, ADDR2; //tregBの先の値は、アドレスADDR2においてメモリ //にスピル(spill)する
...
ld tregC, ADDR2; //tregBの先の値は、レジスタtregCにリロードされ //る
conditional_jump L1;
mv tregC, tregD; //tregDの値は、TREGCにロードされる
L1)
mv tregE, tregC; //tregDの値またはtregBの先の値は、tregEの //割当において使用される
tregBは最初にADDR0においてメモリセルからオリジナルレジスタOREG1の値を得て(即ち、第1のオリジナル命令がOREG1をADDR0からロードした)、tregDはOREG2の値を含んでいたとすると、tregEがL1において得た値は何であるか?この問題に対する解答は、実行されるコードが通過するパス及びコンパイラが割当に関して与えることができる情報に依存する。これは、動的情報及び静的情報が使用される場合の問題に対する解決策を示している。
ld tregB, ADDR0; //ターゲットレジスタtregBは、アドレスADDR0にお //いてメモリから値を得る
mv tregA, tregB; //ターゲットレジスタtregBの値は、tregAに移動さ //れる
ld tregB, ADDR1; //tregBは新規の値を得る
...
st tregA, ADDR2; //tregBの先の値は、アドレスADDR2においてメモリ //にスピル(spill)する
...
ld tregC, ADDR2; //tregBの先の値は、レジスタtregCにリロードされ //る
conditional_jump L1;
mv tregC, tregD; //tregDの値は、TREGCにロードされる
L1)
mv tregE, tregC; //tregDの値またはtregBの先の値は、tregEの //割当において使用される
tregBは最初にADDR0においてメモリセルからオリジナルレジスタOREG1の値を得て(即ち、第1のオリジナル命令がOREG1をADDR0からロードした)、tregDはOREG2の値を含んでいたとすると、tregEがL1において得た値は何であるか?この問題に対する解答は、実行されるコードが通過するパス及びコンパイラが割当に関して与えることができる情報に依存する。これは、動的情報及び静的情報が使用される場合の問題に対する解決策を示している。
最適化処理は、オリジナルコードの異なる時間ポイントのオリジナルレジスタの値をターゲットコードの同一の時間ポイントに配信することができる。これは、例2で示される。
例2:
LD OREGA, ADDR1; //メモリアドレスADDR1の値をOREGAにロードする
... //OREGAの値に基づく計算チェーン
... //OREGBの結果を仮定する
ST OREGB, ADDR1 //新規の値をメモリに記憶する
LD OREGA, ADDR2 //別の値をOREGAにロードする
... //新規の値に基づく別の計算チェーン
... //OREGCの結果を仮定する
ST OREGC, ADDR2 //次の新規の値をメモリに記憶する
ここで、OREGAレジスタは異なる時間の値に対して使用される。VLIW(超長命令語)マシン等のより広範囲の発行マシンにおいて、2つの計算チェーンが並列化されている。
LD OREGA, ADDR1; //メモリアドレスADDR1の値をOREGAにロードする
... //OREGAの値に基づく計算チェーン
... //OREGBの結果を仮定する
ST OREGB, ADDR1 //新規の値をメモリに記憶する
LD OREGA, ADDR2 //別の値をOREGAにロードする
... //新規の値に基づく別の計算チェーン
... //OREGCの結果を仮定する
ST OREGC, ADDR2 //次の新規の値をメモリに記憶する
ここで、OREGAレジスタは異なる時間の値に対して使用される。VLIW(超長命令語)マシン等のより広範囲の発行マシンにおいて、2つの計算チェーンが並列化されている。
//OREGAの2つのインスタンスは、treg17及びtreg19に保持される2 //つの並列インスタンスに変換されている
ld treg17, addr1; ld treg19, addr2; nop; nop;
//2つの計算チェーンは、VLIWマシン機能性ユニットを介して並列化される
...
//記憶は並列化され、gr21及びgr23を結果として得る
st treg21, addr1, st treg23, addr2
これは、どの値がOREGAのどのインスタンスを構成するかをデバッガ及びトレースユーティリティの少なくとも一方が理解する必要があるため問題を生じる。
ld treg17, addr1; ld treg19, addr2; nop; nop;
//2つの計算チェーンは、VLIWマシン機能性ユニットを介して並列化される
...
//記憶は並列化され、gr21及びgr23を結果として得る
st treg21, addr1, st treg23, addr2
これは、どの値がOREGAのどのインスタンスを構成するかをデバッガ及びトレースユーティリティの少なくとも一方が理解する必要があるため問題を生じる。
本発明の方法において、ターゲットシステムにおける動的な計算は、どのオリジナルレジスタ(バイナリ変換の場合)または変数(高レベル変換の場合)がどのターゲットレジスタに割り当てられるかに対して通常利用される。この情報は、「ゴースト」レジスタファイルに維持されることが好ましい。つまり、所定のポイントにおいて、オリジナルレジスタ(または変数)の常駐性は、「ゴースト」レジスタファイルを探索することにより判定される。そこで検出されるオリジナルレジスタ(または変数)は常駐しており、また、検出されないオリジナルレジスタ(または変数)は常駐していない。
ソースコードにおけるオリジナルレジスタまたは変数に対する変換システムの常駐問題の場合、[1]と比較される本発明の方法は、ある特定の割当におけるオリジナルレジスタによるコンパイラの命令のタグ付加と組み合わされる比較的単純なハードウェア実装とデバッガのデータフロー計算を交換する。
この方法の利点は、排除したオリジナルレジスタ(または変数値)が別のオリジナルレジスタ(または変数)値により排除されない限り依然として報告されることである。
以下では、ソース命令アドレスは、コンパイル中に対応するターゲット命令に与えられると考えられ、適切な方法でトレース/デバッグユーティリティに提示されると仮定する。
好適な実施形態において、VLIWまたはRISC基本命令(プリミティブ)等のターゲット命令の基本命令におけるデスティネーション(宛先)レジスタの符号化は、オリジナルレジスタアドレスに対する追加のフィールドを有する。このフィールドが有効なオリジナルレジスタアドレスを有する場合、動作の結果は、オリジナルレジスタセットの整合性を維持するゴーストレジスタに書き込まれることになる。このゴーストレジスタセットは、トレース及びデバッグの目的以外で読み出されることはない。従って、ゴーストレジスタファイルに対する長い動作待ち時間(レイテンシ)の許容範囲(トレーランス)が存在する。これは、ゴーストレジスタファイルがクリティカルパスから外れ、かつそのゴーストレジスタファイルへのアクセスがタイミング要求を満たすためにパイプライン化されることを意味し、また、ゴーストレジスタファイルは、チップ上のいずれかの場所に配置することができる。「ターゲットレジスタのオリジナルレジスタ値」の追跡がサポートされる場合、ゴーストレジスタファイルは、通常は、エミュレートされたレジスタタグをゴーストレジスタ素子間で転送する。これは、移動動作が「オリジナルレジスタ値のみ」の追跡がサポートされる場合にタグが付加されているオリジナルレジスタでない場合に当てはまる。このような場合、移動動作が読出及び書込の組み合わせであるため、典型的には、ゴーストレジスタからの読出が必要である。移動動作は、GRF待ち時間に起因する隣接するGRF動作への依存性を推測する。これは、長いGRF動作待ち時間の許容範囲を利用することにより対処することができる。以下に、これについての詳細を更に示す。
オリジナルレジスタセットからターゲットレジスタセットへのマッピングを認識しているコンパイラは、命令がソースコードのオリジナルレジスタの割当を表現している場合、オリジナルレジスタのアドレス/名前で命令のデスティネーションレジスタにタグを付加する。上記例において、これは以下のことを意味する:
例1:
ld tregB(OREG1), ADDR0 //オリジナルレジスタOREG1の値は、tregBに //ロードされる
mv tregA(OREG1), tregB; //オリジナルレジスタOREG1の値は、tregAに //移動される
ld tregB, ADDR1; //tregBは新規の値を取得する
...
st tregA, ADDR2; //OREG1の値は、アドレスADDR1においてメモ //リにスピルする
...
ld tregC(OREG1), ADDR1 //OREG1の値は、レジスタtregCにリロードさ //れる
conditional_jump L1;
mv tregC(OREG2), tregD; //OREG2の値は、tregCにロードされる
L1)
mv tregE, tregC; //OREG1またはOREG2の値は、tregEの割 //当において使用される
tregEに割り当てられる値がオリジナルレジスタOREG1の値であるかまたはOREG2の値であるかはL1の命令文への到達方法に依存するため、コンパイラはこれを推定できない。動的な情報なしでは、OREG1またはOREG2の値がtregEに割り当てられるかを識別することは不可能である。しかしながら、推定できることは、他の値がタグOREG1を有するターゲットレジスタを割り当てられていないため、OREG1の最新の値がADDR0からの値であることである。同様に、OREG2の最新の値はtregDの値である(ここで、OREG1と同様に、tregDは先にメモリから値を取得できている)。
例1:
ld tregB(OREG1), ADDR0 //オリジナルレジスタOREG1の値は、tregBに //ロードされる
mv tregA(OREG1), tregB; //オリジナルレジスタOREG1の値は、tregAに //移動される
ld tregB, ADDR1; //tregBは新規の値を取得する
...
st tregA, ADDR2; //OREG1の値は、アドレスADDR1においてメモ //リにスピルする
...
ld tregC(OREG1), ADDR1 //OREG1の値は、レジスタtregCにリロードさ //れる
conditional_jump L1;
mv tregC(OREG2), tregD; //OREG2の値は、tregCにロードされる
L1)
mv tregE, tregC; //OREG1またはOREG2の値は、tregEの割 //当において使用される
tregEに割り当てられる値がオリジナルレジスタOREG1の値であるかまたはOREG2の値であるかはL1の命令文への到達方法に依存するため、コンパイラはこれを推定できない。動的な情報なしでは、OREG1またはOREG2の値がtregEに割り当てられるかを識別することは不可能である。しかしながら、推定できることは、他の値がタグOREG1を有するターゲットレジスタを割り当てられていないため、OREG1の最新の値がADDR0からの値であることである。同様に、OREG2の最新の値はtregDの値である(ここで、OREG1と同様に、tregDは先にメモリから値を取得できている)。
例(1)は、オリジナルレジスタの最新の値を保持するためには、コンパイル/リンク時にオリジナルデスティネーションレジスタによりターゲットデスティネーションレジスタにタグを付加し、実行時にゴーストレジスタに値を書き込むだけで十分であることを示している。プログラムの各ポイントでオリジナルレジスタ値が常駐する場所を常時監視するために、利用される実行パスに依存して異なるオリジナルレジスタ値がターゲットレジスタに割り当てられてもよい場合に対して、ゴーストレジスタファイルにおける実行時のサポートを有する必要がある。以下に説明するように、これはゴーストレジスタファイル内で情報を移動する特定のゴーストレジスタ動作の種類により達成されることがが好ましい。
例2:
//OREGAの2つのインスタンスは、gr17及びgr19に保持される2つの並列 /インスタンスに変換されている。
//OREGAの2つのインスタンスは、gr17及びgr19に保持される2つの並列 /インスタンスに変換されている。
ld treg 17(OREGA), addr1; ld treg 19(OREGA), addr2; nop; nop;
ターゲット命令語の追加のフィールド、追加のレジスタファイル及び動作処理ロジックにより、オリジナルソースコード及び変換されたターゲットコードの両方のデータ値コンテナの状態は、ターゲットコード実行時に維持され、また、必要に応じて、ターゲットコードが元の(オリジナルの)システムとは異なるターゲットシステム上での実行に対して最適化される場合には2つの異なるコンピュータアーキテクチャの状態も保持することができる。
ターゲット命令語の追加のフィールド、追加のレジスタファイル及び動作処理ロジックにより、オリジナルソースコード及び変換されたターゲットコードの両方のデータ値コンテナの状態は、ターゲットコード実行時に維持され、また、必要に応じて、ターゲットコードが元の(オリジナルの)システムとは異なるターゲットシステム上での実行に対して最適化される場合には2つの異なるコンピュータアーキテクチャの状態も保持することができる。
図3は、本発明の特定の実施形態に従う好適なプロセッサ環境におけるゴーストレジスタを示す図である。単純化された図において、好適なプロセッサ100は、命令フェッチ110、復号化120、実行130及びコミット140の4つの段階を有する。プロセッサシステムは、通常のレジスタファイル40及びゴーストレジスタファイル50を更に有している。ゴーストレジスタ動作は、復号化段階120において通常のコードストリームから復号化され、メモリ及び通常のアーキテクチャレジスタファイル40に対する通常の命令動作がコミットされる場合にゴーストレジスタ50に対してコミットされる。ゴーストレジスタファイルからメモリへの書込データパスは、通常のメモリ書込データパスを使用する。ゴーストレジスタファイル50は、読出待ち時間に対処するために実行パイプから離れて複数のパイプステップに常駐することが好ましい。実際の数は、実装を容易にするように選択される。メモリ読出データパスは、データ読出アドレスバス及び命令アドレスバス等の他の必要な共通構造と共に省略される。
ゴーストレジスタファイル(GRF)50に記憶される追跡情報は、オリジナルソースコードのデバッグ及びトレース解析の少なくとも一方を実行するためのデバッグユーティリティ200により読み出すことができる。当然、デバッグユーティリティは、通常のレジスタファイル40から情報を読み出し、ターゲットコードデバッグをサポートしても良い。デバッグユーティリティは、メモリに記憶されたGRFのスナップショットを読み出す。実際には、通常のレジスタファイルが(通常の)記憶動作によりメモリに記憶されるのと同様に、GRFのスナップショットは、通常は、ゴースト記憶動作を実行することでGRFのコンテンツをメモリに順序付けることにより取得される。ゴースト記憶動作の実際の符号化は、オペコードフィールドまたはアドレスフィールドで行われ得る。
本発明の特定の実施形態において、コンパイラ/リンカの観点から、命令がレジスタ書込先をレジスタに書き込むことができる方法が3つ存在する:
1)ターゲットレジスタのみ(ONLY)への書込
2)ターゲットレジスタへの書込及び(AND)ゴーストレジスタへの書込
3)ゴーストレジスタのみ(ONLY)への書込
例えば、ゴーストレジスタセットは、3つの書込モードに基づいていても良い。書込モードは、レジスタに書き込む命令の中にレジスタ書込先の異なるセットを含んでいる。
1)ターゲットレジスタのみ(ONLY)への書込
2)ターゲットレジスタへの書込及び(AND)ゴーストレジスタへの書込
3)ゴーストレジスタのみ(ONLY)への書込
例えば、ゴーストレジスタセットは、3つの書込モードに基づいていても良い。書込モードは、レジスタに書き込む命令の中にレジスタ書込先の異なるセットを含んでいる。
第1の書込モードは、レジスタコヒーレンス(整合性)の情報が書き込まれない例1の場合である。レジスタ書込先の例1のみが、このモードにおいて命令の中から検出される。
第2の書込モードは、標準のレジスタコヒーレンスサポートである例2の場合である。即ち、オリジナルレジスタを割り当てる除去されない命令文のデスティネーションレジスタのみにタグが付加される。レジスタ書込先の例1及び2は、このモードにおいて命令の中から検出され得る。即ち、オリジナルレジスタによりタグが付加されないデスティネーションレジスタを含む命令はターゲットレジスタに書き込まれることになり、オリジナルレジスタによりタグが付加されるデスティネーションレジスタを含む命令はターゲットレジスタ及びゴーストレジスタの両方に書き込まれることになる。
第3の書込モードは、追加のレジスタコヒーレンスサポートである例3の場合である。即ち、実際の割当が最適化において除去されているが、コンパイラは、デスティネーションレジスタがオリジナルレジスタタグ及び書込先3タグによりタグが付加される「ゴースト」割当命令文を保持する。この書込モードにおいて、全てのレジスタ書込先の例が命令の中から検出される。これは、レジスタ書込先の例1及び2(第2の書込モード)に加え、レジスタ書込先の例3がこのモードにおいて命令の中から検出されることを意味する。レジスタ書込先3を含む命令は、最適化中にコンパイラにより除去されている命令を示している。
レジスタ割当は、ゴーストレジスタの割当をターゲットレジスタと分離できないので、即ち、レジスタ割当が除去された命令を介して割当を行なうので、第3の書込モードの殆どの理論的な関心はレジスタコヒーレンスに関してである。コードにおいてゴーストのみの割当が存在することにより、レジスタの使用量及びスピルに影響を与える(レジスタファイルのサイズに依存する)。1つ以上のオリジナルレジスタに対して第3の書込モードのみを使用すること、ターゲットレジスタセット(十分に大きい場合)を2つのセット(一方の大きい方は実際の割当に対するものであり、他方の小さい方はゴーストの割当に対するものである)に分割すること、あるいは「オリジナルレジスタ値のみの追跡」と関連付けて第3の書込モードのみを使用すること等の上記問題に対する対応策が存在し得る。
書込モードは、使用される場合、プロセッサ制御レジスタにおいて指定される。
デバッガ/トレースユーティリティは、ゴーストレジスタのセット及び各ゴーストレジスタが書き込まれた命令アドレスに対するアクセスを有する。また、デバッガ/トレースユーティリティはレジスタ書込先識別を有することになるので、ゴーストレジスタがどのようにして書き込まれたかを推定することができる。これにより、ユーティリティは、最適化されたターゲットコードにおいてアクティブであるオリジナルレジスタ値を再生成することができる。
一般に、ゴーストレジスタファイルは、ターゲットアーキテクチャのレジスタ数と同数のエントリを含み、更に、スピル領域を含んでいることが好ましい。このスピル領域がターゲットレジスタセットと同一の大きさである場合、全てのゴーストレジスタは容易にスピルすることができる。各エントリは、レジスタが書き込まれる及びデータ値が記憶されていることの少なくとも一方である、命令アドレスと共にオリジナルレジスタ番号を含んでいることが好ましい。
特定の好適な実装において、各エントリが以下のフィールドを含むように、追加のオプションの情報が追加されることが好ましい。
・OR−オリジナルレジスタ番号
・RWD−レジスタ書込先(通常1ビットであり、例2及び3を符号化する)
・TMIA−ターゲットマシン命令アドレス
・E−排除された値(通常1ビット)
・V−値
ターゲットレジスタにおいてオリジナルレジスタ値を追跡する場合、値が対応するターゲットレジスタにおいて検出されるので、値フィールド(V)は必要ない。
・RWD−レジスタ書込先(通常1ビットであり、例2及び3を符号化する)
・TMIA−ターゲットマシン命令アドレス
・E−排除された値(通常1ビット)
・V−値
ターゲットレジスタにおいてオリジナルレジスタ値を追跡する場合、値が対応するターゲットレジスタにおいて検出されるので、値フィールド(V)は必要ない。
オリジナルレジスタ値のみを追跡する場合、ターゲットレジスタは新規の値を割り当てられ、その場合に、古い値(群)はターゲットレジスタから排除されるため、値フィールド(V)は必要である。
典型的には、RWDフィールドは、第2の書込先(第1の書込先は、ゴーストレジスタに存在することはない)に対してプロセッサ制御レジスタのモード値により生成される。プロセッサが第3の書込モードであり、かつターゲット及びターゲットデスティネーションレジスタが無効として定義される場合、第3の書込先はRWDフィールドを割り当てられる。ターゲットレジスタ未変更動作の符号化は、オペコードまたはモードビットフィールドの1ビット及びターゲットデスティネーションレジスタの1ビットを介して行なわれ得る。レジスタ書込先2のみが必要である場合、RWDフィールドは省略され得る。
別のオプション(命令ビットを保存するための)は、レジスタアドレスマップの1つのレジスタエントリを無効マーカとして使用することである。このレジスタエントリへの書込は、そのコンテンツを変更しない。このレジスタエントリは、使用される場合は常にゼロを生成するために使用され得る。
Eビットがセットされる場合、値(V)は、オリジナルレジスタ値ではないレジスタ値によりTMIAのターゲットレジスタから排除される。
図4及び図5は、それぞれ「一連コード(sequential code)」及び「並列コード(parallel code)」の場合のゴーストレジスタファイルに対する好適な動作を示している。ゴーストレジスタファイル及びターゲットレジスタファイルは、隣接するように示されている。一般的には、これは、ターゲットレジスタファイルのルーティング及びターゲットレジスタファイルの周囲の配置に干渉しないようにする場合には当てはまらない。図は、論理的な図を与えているだけである。図4及び図5は、上述の例1)及び2)に対応する。
図4の例1)は、「ターゲットレジスタにおけるソースレジスタ値の追跡」が可能であり、かつ「ソースレジスタのみの値の追跡」が可能である場合に、ゴーストレジスタファイルの異なる用途を示すために使用される。明確にするために、Vフィールドは両方の場合において存在する。例1)は一連コードとして提供される。即ち、例1)は、例えば、VLIW命令語に並列化されていない。ゴーストレジスタの用途は、RISC命令語から書き込まれるかまたはVLIW命令語から書き込まれるかに関わらず同一である。
図4の実線の矢印は、ソースレジスタの値を追跡する場合の動作を示していて、破線の矢印は、ターゲットレジスタのソースレジスタ値を追跡する場合の追加の動作を示している。例えば、ターゲット命令IAにおいて実行されるADDR0の値をターゲットレジスタtregBにロードする動作「ld tregB(OREG1), ADDR0」は、情報[OREG1, 2, IA, [ADDR0]]がゴーストレジスタ「ghost tregB」に書き込まれることを示している。ここで、ORはOREG1であり、RWDは2であり、ターゲットマシン命令アドレスはIAであり、値VはADDR0のメモリ位置から取得される。tregBの値をtregAに移動する動作「move tregA(OREG1), tregB」は、tregBの値をゴーストレジスタghost tregAに割り当てるゴースト動作にマップされる。ここで、ORはOREG1であり、RWDは2であり、移動動作の命令アドレスはghost tregAにも書き込まれる:[OREG1, 2, IA, tregB]。
例1)において、移動動作は、静的に推定される場合にオリジナルレジスタアドレスを使用してコンパイラによりタグが付加される。別の例において、移動動作にタグを付加しないで(初期割当またはロード動作のみタグを付加しない)、ゴースト移動動作がゴーストソースレジスタ値(OR、RWD、TMIA、E、V)をゴーストデスティネーションレジスタに常にコピーする。この別の例は、ゴーストレジスタファイル動作の記載及び以下のコンパイラの記載において仮定される。
プロセッサ制御レジスタの制御ビット(EVICT)は、タグが付加されていないターゲットレジスタの割当(即ち、ゴーストレジスタフィールドにおける非有効レジスタアドレス)がゴーストレジスタにおけるオリジナルレジスタアドレス(OR)の先の割当を無効化すべきであるかを定義する。これにより、2つの異なる用途が可能になる。ターゲットレジスタのオリジナルレジスタ値が追跡されるべきである場合、EVICTは常に設定されるべきである。オリジナルレジスタ値が対象となっている場合にのみ、EVICT制御ビットは重要である。クリアされる場合、オリジナルレジスタ値は、ターゲットレジスタに存在しない場合でも保持され、オリジナルレジスタによりタグが付加されている命令によってのみ上書きされる。設定される場合、オリジナルレジスタ値は、タグが付加されていない割当によりゴーストレジスタファイルから排除され得る。これは、以下の表2において要約される。
スナップショットまたはポストモーテム(post-mortem:事後分析)解析が実行される場合、トレースは不可能であり、ゴーストレジスタメモリは、ゴーストレジスタダンプルーチンを介して読み出され、かつメインメモリに書き込まれる。
ゴーストレジスタダンプルーチンにトラップを挿入することにより、元(オリジナル)のアーキテクチャレジスタセットのスナップショットまたはチェックポイントは後の解析のために保存される。
図5の例2)は、「一連の」ターゲットレジスタがいくつかの並列(パラレル)「インスタンス」を有するように一連のコードでターゲットレジスタが並列化される場合のゴーストレジスタファイルの用途を示すために使用される。
ゴーストレジスタファイルの内部構造
ゴーストレジスタファイル(スピル領域を含む)は、オリジナルソースコードのレジスタの表示またはターゲットアーキテクチャ上にエミュレートされている元のアーキテクチャを保持するスクラッチパッドである。このスクラッチパッドは、2つの基本的な種類の動作により制御される。
ゴーストレジスタファイル(スピル領域を含む)は、オリジナルソースコードのレジスタの表示またはターゲットアーキテクチャ上にエミュレートされている元のアーキテクチャを保持するスクラッチパッドである。このスクラッチパッドは、2つの基本的な種類の動作により制御される。
ゴーストレジスタ動作の種類
1つの動作は、実行パイプにおける算術またはロード命令の副作用である割当動作である。これら算術またはロード命令は、オリジナルレジスタデスティネーションフィールドの対応するオリジナルレジスタ名を明示的に指示している。
1つの動作は、実行パイプにおける算術またはロード命令の副作用である割当動作である。これら算術またはロード命令は、オリジナルレジスタデスティネーションフィールドの対応するオリジナルレジスタ名を明示的に指示している。
他の動作は、移動動作である。この移動動作は、実行パイプの移動命令から発生する。相違点は、この動作がゴーストレジスタファイルに書き込むために明示的に名前を示されるオリジナルレジスタを有さないことである。移動動作は、移動動作ソースターゲットレジスタ番号によりインデックスが付加されるゴーストレジスタエントリのORフィールドを移動動作デスティネーションターゲットレジスタ番号によりインデックスが付加されたゴーストレジスタエントリにコピーしなければならない。
ターゲットレジスタファイルの全ての移動動作が、ゴーストレジスタファイルの移動動作を招くわけではない。例えば、排除されない場合にORのタグが付加されない移動命令は、ゴーストレジスタに到達する場合にNOPとなる。ORのタグが付加されている移動動作は、ゴーストレジスタ割当動作に変換されることになる。
ゴースト記憶動作は、ゴーストレジスタコンテンツをメモリに書き込むために使用される。ゴースト記憶動作は、コードストリームの観測ポイントにおいてゴーストレジスタコンテンツのスナップショットを取得する場合に使用される。ゴースト記憶命令を含むコードは、必要とする観測のセットアップ方法に依存して、例外または割込ルーチンのコードかまたは通常のコードとなり得る。それらの観測スナップショットは、解析デバッグソフトウェアに対する入力として使用される。
NOP命令は、ゴーストレジスタファイルに対して動作しない空動作である。
ゴースト移動動作は、OR値をゴーストレジスタファイルに書き込むことをできるようにするために、ゴーストレジスタファイルから読み出す必要がある。割当動作は、ゴーストレジスタファイルに対してのみ書き込む必要がある。割当動作は、コンパイラからゴーストレジスタファイルへのOR情報の静的な搬送をサポートする。移動動作は、ゴーストレジスタファイルのOR情報の実行に依存する動的な搬送をサポートする。
移動動作及び割当動作をサポートするために、好適な解決策は、アクティブな機能性プロセッサユニット毎に、即ち、プロセッサ内のアクティブな動作生成エンティティ毎に1つの書込ポート及び1つの読出ポートをゴーストレジスタファイルに提供することである。換言すれば、発行スロット毎に1つの読出ポート及び1つの書込ポートを提供することである。
ゴーストレジスタ動作の一連の一貫性
読出動作が完了前に待ち時間を有するため、動作ストリームにおいて一連の一貫性を維持するための追加のロジックが必要である。読み出された移動動作の結果は、ストリームにおける後の他の動作が移動動作のデスティネーションエントリを読み出すかまたは書き込む前に書き込まれなければならない。この一貫性が維持されない場合、ゴーストレジスタファイルは、コンパイラにより指定される割当動作及び移動動作、並びにターゲットマシンの動的実行パスに従って、元のアーキテクチャのレジスタ状態を表現することはない。実行パイプラインの状態におけるデータハザードに関する一般的な説明については、文献[7]を参照。
読出動作が完了前に待ち時間を有するため、動作ストリームにおいて一連の一貫性を維持するための追加のロジックが必要である。読み出された移動動作の結果は、ストリームにおける後の他の動作が移動動作のデスティネーションエントリを読み出すかまたは書き込む前に書き込まれなければならない。この一貫性が維持されない場合、ゴーストレジスタファイルは、コンパイラにより指定される割当動作及び移動動作、並びにターゲットマシンの動的実行パスに従って、元のアーキテクチャのレジスタ状態を表現することはない。実行パイプラインの状態におけるデータハザードに関する一般的な説明については、文献[7]を参照。
複雑なデバッグに対しては、ゴーストレジスタファイルは、一貫性を保証するためのロジックを必要とする。ゴーストレジスタファイル動作の一連の一貫性を保証するためのゴーストレジスタファイルパイプステップロジックの一例を示す(1つの動作ストリームを示す)図6を使用してこれを説明する。
ゴーストレジスタファイル50がマシン中の機能性ユニットと同数の動作ストリームをサポートする必要があるため、このロジックは二重化される。図6は、簡単にするために、RWD及びTMIA要素の転送及び書込を省略する。メモリへの記憶パス、即ち、実行パイプへのデータパス及び記憶アドレスパスも省略される。
この例において、複数のパイプレジスタ(P1、P2、P3、...)が導入される。これらレジスタは、RWDフラグ、TMIA値(図6においては、両方とも省略される)、デスティネーションターゲットレジスタ番号(dtreg)、オリジナルレジスタ番号(動作が割当の場合、oreg)またはソースターゲットレジスタ(動作が移動の場合、treg)及び動作指示器(インジケータ)(割当または移動)を含んでいる。
転送/書込制御ユニット60は、パイプレジスタデータを監視することが好ましい。移動動作が検出される場合、転送/書込制御ユニット60は、移動動作が最後のパイプ段階にある場合に書き込むためのレジスタファイルからのデータ(OR値)を有するように、ソースターゲットレジスタ番号(streg)を読出アドレスポートに転送する。
移動動作ソースに対する1つ以上の割当がパイプにおいて検出される場合、移動前の最後のOR割当は、移動書込において書き込まれるデータとしてセットアップされることになる。この場合、配信された古いOR値は無視されることになる。
このことは、最後のパイプステップレジスタデスティネーションターゲットレジスタ番号(ゴーストファイルへの書込インデックス)を先のパイプステップレジスタソースターゲットレジスタ番号と比較することにより実行されることが好ましい(パイプレジスタが移動動作を含んでいる場合)。これら2つのターゲットレジスタインデックスが合致(マッチ)する場合、ゴーストファイルからのOR値の配信を待機するレジスタは、最後のパイプレジスタのOR値でロードされる。ゴーストファイルからのOR配信(古い値)は次のサイクルでは無視され、かつ移動のソースレジスタに書き込まれる新規のOR値が使用されることになる。
この例示のロジックは、以下の擬似コードによって説明される。必要とされる記憶構造(レジスタ)は、ポートインタフェース構造の要素としてゴーストレジスタファイル前の最後のパイプステップであるP0と呼ばれる。尚、コードは取消フラグ処理を省略するな等、完全ではないことに留意されたい。記憶動作処理も省略される。記憶動作はGRF読出であるが、記憶動作はGRFではなくメモリへの書込を行なう。記憶前の全ての動作は、移動ソースアドレス転送を介して一貫性を維持する。擬似コードは、ロジックをより理解するために概略図として提供される。
P0.radr; //移動アドレスの転送のために使用されるアドレスの読出
P0.rdata; //移動動作がゴーストファイルにおいて完了される場合、移動先に書き //込まれる移動元から、OR値であるデータの読出
P0.we; //書込可能
P0.rdati; //ゴーストレジスタファイルからのデータが無視される場合、取消(無 //視)フラグを読み出す
P0.wadr; //移動動作の最後の部分及び割当動作において使用される書込アドレス //であるアドレスの書込
P0.wdata //割当動作からのOR値または移動動作からのOR値であるデータの書 //込。移動動作のOR値は、ゴーストファイルの読出または移動動作の //ソースへの割当動作の書込データから発生する
P0.wadr //割当または移動動作デスティネーションであるアドレスの書込
転送及び書込制御ユニットにおける最後のパイプステップに対する入力データは、先のパイプステップP1、P2、P3のデータとなる。
P0.rdata; //移動動作がゴーストファイルにおいて完了される場合、移動先に書き //込まれる移動元から、OR値であるデータの読出
P0.we; //書込可能
P0.rdati; //ゴーストレジスタファイルからのデータが無視される場合、取消(無 //視)フラグを読み出す
P0.wadr; //移動動作の最後の部分及び割当動作において使用される書込アドレス //であるアドレスの書込
P0.wdata //割当動作からのOR値または移動動作からのOR値であるデータの書 //込。移動動作のOR値は、ゴーストファイルの読出または移動動作の //ソースへの割当動作の書込データから発生する
P0.wadr //割当または移動動作デスティネーションであるアドレスの書込
転送及び書込制御ユニットにおける最後のパイプステップに対する入力データは、先のパイプステップP1、P2、P3のデータとなる。
{P3-P1}.dtreg; //デスティネーションターゲットレジスタ番号、ゴーストレジスタフ //ァイルへのインデックスの書込
{P3-P1}.streg //ソースターゲットレジスタ、インデックスをゴーストレジスタファイルに読み込む。動作が移動である場合に有効な番号
{P3-P1}.oreg; //オリジナルレジスタ番号、ORデータ値。動作が割当である場合に //有効な番号
{P3-P1}.op; //nop、移動または割当のいずれかの動作
//移動動作がパイプに存在する場合、
//移動動作は読出アドレスの転送をトリガする
IF(P4.op == 'move')
THEN
P0.radr := streg;
P0.rdati := FALSE; //配信されるデータの受付
ENDIF
IF(P1.op == 'assignment')
//実行対象の動作が
//割当である場合
THEN
//.. load write addr. w/dest. treg.
P0.wadr := P1.dtreg;
//..書込対象の明示的なOR値
P0.wdata := P1.oreg;
P0.we := TRUE;
ELSE
IF(P1.op == 'move')
//実行対象の動作が
//移動である場合
THEN
//..load write addr. w/dest. treg.
P0.wadr := P1.dtreg;
//ゴーストレジスタファイルからロードされたOR値
P0.wdata := P0.rdata;
P0.we := TRUE;
ELSE
IF(P1.op == 'nop')
//動作がnopである場合、
//書込不能にする
THEN
P0.we := FALSE
END
//移動動作ソースを更新する動作によって、
//移動が行なわれる場合
IF(P2.op == 'move' AND P2.streg == P1.dtreg)
THEN
IF(P1.op == 'assignment')
//先行する動作(op)が割当
THEN
//先行する動作(op)のOR値を
//データレジスタのOR値にロードする
P0.rdata := P1.oreg;
//古い値を無視
P0.rdati := TRUE;
ELSE
IF(P1.op == 'move')
//先行する動作(op)が移動である場合
THEN
//先行する移動のフェッチされた
//OR値を再利用する
P0.rdata := P0.rdata;
//ゴーストファイルからの
//移動の値を無視する
P0.rdati := TRUE;
ENDIF //動作がNOPである場合、何も行なわない
ENDIF
より長い読出待ち時間は、より多くのパイプステップにより対処することができる。移動動作のソースコンテンツの先の更新の転送及び制御に対処することは、先の動作数の増加に伴ってある程度複雑になる。
{P3-P1}.streg //ソースターゲットレジスタ、インデックスをゴーストレジスタファイルに読み込む。動作が移動である場合に有効な番号
{P3-P1}.oreg; //オリジナルレジスタ番号、ORデータ値。動作が割当である場合に //有効な番号
{P3-P1}.op; //nop、移動または割当のいずれかの動作
//移動動作がパイプに存在する場合、
//移動動作は読出アドレスの転送をトリガする
IF(P4.op == 'move')
THEN
P0.radr := streg;
P0.rdati := FALSE; //配信されるデータの受付
ENDIF
IF(P1.op == 'assignment')
//実行対象の動作が
//割当である場合
THEN
//.. load write addr. w/dest. treg.
P0.wadr := P1.dtreg;
//..書込対象の明示的なOR値
P0.wdata := P1.oreg;
P0.we := TRUE;
ELSE
IF(P1.op == 'move')
//実行対象の動作が
//移動である場合
THEN
//..load write addr. w/dest. treg.
P0.wadr := P1.dtreg;
//ゴーストレジスタファイルからロードされたOR値
P0.wdata := P0.rdata;
P0.we := TRUE;
ELSE
IF(P1.op == 'nop')
//動作がnopである場合、
//書込不能にする
THEN
P0.we := FALSE
END
//移動動作ソースを更新する動作によって、
//移動が行なわれる場合
IF(P2.op == 'move' AND P2.streg == P1.dtreg)
THEN
IF(P1.op == 'assignment')
//先行する動作(op)が割当
THEN
//先行する動作(op)のOR値を
//データレジスタのOR値にロードする
P0.rdata := P1.oreg;
//古い値を無視
P0.rdati := TRUE;
ELSE
IF(P1.op == 'move')
//先行する動作(op)が移動である場合
THEN
//先行する移動のフェッチされた
//OR値を再利用する
P0.rdata := P0.rdata;
//ゴーストファイルからの
//移動の値を無視する
P0.rdati := TRUE;
ENDIF //動作がNOPである場合、何も行なわない
ENDIF
より長い読出待ち時間は、より多くのパイプステップにより対処することができる。移動動作のソースコンテンツの先の更新の転送及び制御に対処することは、先の動作数の増加に伴ってある程度複雑になる。
上記例は、1つの動作ストリームのみを示すために簡略化されている。他の動作ストリームからの先行する動作は、動作を変更する移動ソースに対してチェックされなければならない。複数の移動動作がチェックされなければならないように、レジスタメモリを介する待ち時間は短くなるように選択されている。複数の移動動作が転送ウィンドウに存在することにより、可能な複数の変更値に対して必要な記憶装置の数は増加することになる。
ゴーストレジスタファイルに対する動作の完了は任意の適切な数のサイクルを有するアクティビティを生成する動作に後続することができるため、ゴーストレジスタファイル50はクリティカルパスを外れる。これにより、ゴーストレジスタファイル及びそのサポートロジックの小さなセットをチップ上のいずれかの位置に配置することは容易になる。位置及びルートタイミングの問題が存在する場合は、複数のパイプステップを動作転送パスに追加するだけである。
ゴーストレジスタ動作ストリーム処理
図7は、ゴーストレジスタファイル動作を選択的に変換する動作ストリーム処理ロジックの一例を示している。先行する動作の解析は、ゴーストレジスタファイル50から逆方向に移動することで、十分な解析時間を保証することができる。動作ストリーム処理ロジック70は、機能性ユニット(FU:s)からの無関係の命令コードをゴーストレジスタファイルnop:sに対してフィルタリングする。更に、動作ストリーム処理ロジック70は、転送された移動動作読出アドレスを詰め、移動の前にソース変更動作が行なわれる場合、移動動作を割当動作と置換しても良い。新しい割当動作は、先行するソース変更動作からデスティネーションレジスタ値を取得する。
図7は、ゴーストレジスタファイル動作を選択的に変換する動作ストリーム処理ロジックの一例を示している。先行する動作の解析は、ゴーストレジスタファイル50から逆方向に移動することで、十分な解析時間を保証することができる。動作ストリーム処理ロジック70は、機能性ユニット(FU:s)からの無関係の命令コードをゴーストレジスタファイルnop:sに対してフィルタリングする。更に、動作ストリーム処理ロジック70は、転送された移動動作読出アドレスを詰め、移動の前にソース変更動作が行なわれる場合、移動動作を割当動作と置換しても良い。新しい割当動作は、先行するソース変更動作からデスティネーションレジスタ値を取得する。
動作ストリーム処理は、いくつかの移動動作をnop:s及び割当動作に変換することになる(上記ゴーストレジスタ動作の種類の説明を参照)。また、動作ストリーム処理は、いくつかのロード及び記憶(スピル及びリロード)を移動動作に変換してもよい(以下のレジスタ割当の説明と比較する)。
動作ストリームの処理70は、任意の位置に配置することができ、かつゴーストレジスタファイル50に向かう。ゴーストレジスタファイル50及び動作処理70は隣接する必要はない。
デバッガ/トレースユーティリティ解析
ユーティリティは、ゴーストレジスタデータをメモリから読み出す。利用される各スナップショットは、通常は、以下のデータを含むことになる:
・ターゲットマシン命令アドレス(スナップショットが発生する場合)
・ゴーストレジスタファイルコンテンツ
ユーティリティは、スナップショットのターゲットマシン命令アドレスを使用して、ユーティリティ自体をターゲットマシンコードにインデックスとして付加する。従って、ユーティリティは、各々がオリジナルコードの命令アドレスによるものである複数のターゲットマシン(例えば、VLIW)基本命令を検出することになる。
ユーティリティは、ゴーストレジスタデータをメモリから読み出す。利用される各スナップショットは、通常は、以下のデータを含むことになる:
・ターゲットマシン命令アドレス(スナップショットが発生する場合)
・ゴーストレジスタファイルコンテンツ
ユーティリティは、スナップショットのターゲットマシン命令アドレスを使用して、ユーティリティ自体をターゲットマシンコードにインデックスとして付加する。従って、ユーティリティは、各々がオリジナルコードの命令アドレスによるものである複数のターゲットマシン(例えば、VLIW)基本命令を検出することになる。
これらのオリジナルコードの命令アドレスにより、ユーティリティはオリジナルコードにマップされる。
コンパイラ
この方式におけるコンパイラのタスクは、オリジナルレジスタ値をターゲットレジスタに割り当てる命令のデスティネーションレジスタにタグを付加することである。これは、まずコンパイラの変換フェーズで行なわれ、ここで、各ソース命令文は1つ以上のターゲット命令文に変換される。ソース命令文がオリジナルレジスタを割り当てる場合、少なくとも1つのターゲット命令文は、この時点ではオリジナルレジスタを示す仮想またはシンボリックレジスタに値を割り当てる。
この方式におけるコンパイラのタスクは、オリジナルレジスタ値をターゲットレジスタに割り当てる命令のデスティネーションレジスタにタグを付加することである。これは、まずコンパイラの変換フェーズで行なわれ、ここで、各ソース命令文は1つ以上のターゲット命令文に変換される。ソース命令文がオリジナルレジスタを割り当てる場合、少なくとも1つのターゲット命令文は、この時点ではオリジナルレジスタを示す仮想またはシンボリックレジスタに値を割り当てる。
しかし、コンパイラのタスクは変換フェーズにおいて通常は停止しない。コンパイラは、リンカ及びオブジェクト形式に情報を最終的に渡すまで、最適化及びレジスタ割当フェーズを通して仮想レジスタ上にタグを維持しなければならない。
以下において、「標準」または「追加」の整合性(上記書込モード2及び3に関して)は、オプションとしてコンパイラに与えられていると仮定する。整合性が与えられない場合、通常のコンパイルが実行される。
変換フェーズ
変換フェーズは、ソース命令が一連の1つ以上のターゲット命令に変換されるコンパイラにおけるフェーズである。通常、これは、ソースプログラムまたはオブジェクトを示す中間形式からターゲットプログラムまたはオブジェクトを示す中間形式に変換することにより行なわれる。一般に、変換は、サイズに制限のないシンボリックまたは仮想レジスタセットに対して行なわれる。換言すると、変換フェーズは、ターゲットレジスタをターゲット命令に割り当てる必要がない。以下において、ターゲットレジスタと言う場合、レジスタ割当フェーズまでは仮想ターゲットレジスタを意味する。
変換フェーズは、ソース命令が一連の1つ以上のターゲット命令に変換されるコンパイラにおけるフェーズである。通常、これは、ソースプログラムまたはオブジェクトを示す中間形式からターゲットプログラムまたはオブジェクトを示す中間形式に変換することにより行なわれる。一般に、変換は、サイズに制限のないシンボリックまたは仮想レジスタセットに対して行なわれる。換言すると、変換フェーズは、ターゲットレジスタをターゲット命令に割り当てる必要がない。以下において、ターゲットレジスタと言う場合、レジスタ割当フェーズまでは仮想ターゲットレジスタを意味する。
表現「変換」は、コード全体の変換またはターゲットコードへのソースコードの変換を含んでいて、これは、最適化及びレジスタ割当を含むことが理解されるべきである。
この方式において、変換段階におけるコンパイラのタスクは、変換された命令毎に、オリジナルデスティネーションレジスタを示す番号または名前でターゲットデスティネーションレジスタにタグを付加することである。通常、このタグは、ターゲットプログラムを示す中間形式の属性として保持される。更に詳細には、タグは変換された命令を示すデータ構造内に保持される。
コンパイラは、ターゲット命令の順番で、ターゲットデスティネーションレジスタへのオリジナルレジスタ値のロードを実行するソース命令を示すターゲット命令にタグを付加することを選択する。
これは、全てのターゲットロード命令がオリジナルデスティネーションレジスタによりタグが付加されるわけではないことを意味する。例えば、アドレス計算命令、一時的な計算命令、インデックスまたはポインタチェック、あるいは他の実行時間チェック命令は、ロードまたはオリジナルレジスタを表さないので、当然タグが付加されることはない。これにより、オリジナルレジスタ値ではないレジスタ値が割り当てられるターゲットレジスタに存在するオリジナルレジスタ値を無効化しないまたは無効化するオプションが提供される(上述を参照)。
最適化フェーズ
最適化フェーズは、通常は、中間形式で示されるターゲットプログラムが特定のターゲットシステムに適合するようにオプションで解析、変換及び調整されるフェーズである。後述するレジスタ割当及び命令スケジューラは、最適化フェーズであると考えられる。
最適化フェーズは、通常は、中間形式で示されるターゲットプログラムが特定のターゲットシステムに適合するようにオプションで解析、変換及び調整されるフェーズである。後述するレジスタ割当及び命令スケジューラは、最適化フェーズであると考えられる。
一般に、最適化フェーズのコンパイラのタスクは、変換中にオリジナルレジスタ値をロードする命令のターゲットデスティネーションレジスタ上にオリジナルレジスタタグ(変換フェーズが設定する)を保持することである。
種々の例が発生する:
・タグが付加されている命令は除去される−オプションの「追加」の整合性がコンパイラに与えられる場合、その命令は除去されないが、「ゴーストレジスタのみへの書込」という命令であると考えられる。オプションの「標準」の整合性が与えられる場合、その命令は除去される。
・タグが付加されている命令は除去される−オプションの「追加」の整合性がコンパイラに与えられる場合、その命令は除去されないが、「ゴーストレジスタのみへの書込」という命令であると考えられる。オプションの「標準」の整合性が与えられる場合、その命令は除去される。
・タグが付加されている命令は置換される−デスティネーションレジスタ上のタグは、古い命令を置換する命令においてデスティネーションレジスタに移動される。
・タグが付加されている命令は採用または除去される−未変更のデスティネーションレジスタ上のタグを含むターゲット命令は採用または除去される。
レジスタ割当
レジスタ割当は、コード中の仮想またはシンボリックレジスタの無制限のセットのインスタンスがターゲットアーキテクチャから物理レジスタ名を割り当てられる場合を説明する。制限された数の物理レジスタがマシンに存在するので、レジスタアロケータ(allocator:割当器)は、メモリに対して及びレジスタ間でレジスタ値をロード、記憶及び移動する命令を挿入及び除去する場合がある。あるプログラムポイントにおいてフリー物理レジスタの制限された可用性に起因するメモリに対するレジスタ値の記憶及びロードは、「レジスタのスピル」と呼ばれる。仮想レジスタの1つのインスタンスは、物理レジスタの1つのインスタンスに必ずしもマップされるとは限らない。
レジスタ割当は、コード中の仮想またはシンボリックレジスタの無制限のセットのインスタンスがターゲットアーキテクチャから物理レジスタ名を割り当てられる場合を説明する。制限された数の物理レジスタがマシンに存在するので、レジスタアロケータ(allocator:割当器)は、メモリに対して及びレジスタ間でレジスタ値をロード、記憶及び移動する命令を挿入及び除去する場合がある。あるプログラムポイントにおいてフリー物理レジスタの制限された可用性に起因するメモリに対するレジスタ値の記憶及びロードは、「レジスタのスピル」と呼ばれる。仮想レジスタの1つのインスタンスは、物理レジスタの1つのインスタンスに必ずしもマップされるとは限らない。
レジスタアロケータのタスクは、他のフェーズと同様に、レジスタ割当の種々の段階におけるターゲットレジスタの種々の中間表現に関わらず、レジスタ割当フェーズを通してターゲットデスティネーションレジスタ上にオリジナルレジスタタグを保持することである。
追跡モードが「ソースレジスタ値のみ」である場合、割当においてタグを維持することのみを考慮しなければならない。その結果、ゴーストレジスタファイルには、実行時のゴーストレジスタの値が割り当てられる。
追跡モードが「ターゲットレジスタ値のオリジナルレジスタ値の追跡」である場合、ゴーストレジスタファイルの移動動作はレジスタ間の値の追跡を考慮することになる。しかしながら、メモリにスピルされ、かつリロードされるオリジナルレジスタ値を追跡することを可能にするために、レジスタアロケータのスピルコードジェネレータは、静的に推定することができる場合、オリジナルレジスタ名または番号で挿入されたロード命令のデスティネーションレジスタにタグを付加しなければならない。静的に推定することができない場合、スピルコードは、スピルしたレジスタからゴーストレジスタファイルのスピル領域へのゴーストレジスタの移動を含まなければならず、リロードコードは、ゴーストレジスタファイルスピル領域からターゲットレジスタセットに対応するゴーストレジスタファイルの領域への移動を含まなければならない。
動的な場合、以下の方法で符号化されてもよい:
スピル記憶は、ゴーストレジスタファイルに到達するようにコンパイラによりマークが付加される。ゴーストレジスタファイルの処理ロジックは、スピル記憶を移動に変換する。この移動は、ゴーストレジスタデータをスピル領域に転送する。
スピル記憶は、ゴーストレジスタファイルに到達するようにコンパイラによりマークが付加される。ゴーストレジスタファイルの処理ロジックは、スピル記憶を移動に変換する。この移動は、ゴーストレジスタデータをスピル領域に転送する。
リロードのロード命令は、ゴーストレジスタファイルの処理ロジックがそのロード命令をスピル領域からターゲットレジスタセットに対応するゴーストレジスタファイルの領域への移動に変換するように、コンパイラによりマークが付加される(ゴーストレジスタファイルに到達する通常のロードは割当に変換される)。リロードのロードのOR値はコンパイラによりスピルしたターゲットレジスタ番号を割り当てられ、これはゴーストレジスタ移動動作におけるソースレジスタオペランドとして使用される。
これは、以下の表3で示され、かつ図8に示される。
図8は、「動的」な場合のゴーストレジスタファイル50のスピル及びリロード動作の例を示している。
追跡モードがプロセッサの状態であるので、両方の追跡モードをサポートするコンパイラは、可能である場合には、リロードコードにタグを付加しなければならない、あるいはゴーストレジスタファイルのスピル領域に対する移動を導入しなければならない。
命令スケジューラ
命令スケジューラは、マシンのマイクロアーキテクチャが効率的に利用されるように、また待ち時間及びハードウェアリソースの制約がコードによって破れられ、かつ当然プログラムの意味論(シマンテック)が保存されるように、命令がコードストリームに配置されるフェーズである。
命令スケジューラは、マシンのマイクロアーキテクチャが効率的に利用されるように、また待ち時間及びハードウェアリソースの制約がコードによって破れられ、かつ当然プログラムの意味論(シマンテック)が保存されるように、命令がコードストリームに配置されるフェーズである。
この結果、命令は一連のコードストリームに移動され、VLIWシステムに対しては、このフェーズはVLIW語への命令の並列化を意味することになる。
この方式において、命令スケジューラは、命令上にオリジナルレジスタタグを保持する。
リンカ
リンカは、再配置可能なアドレスが物理アドレスに分解されるフェーズである。レジスタについては言及しないが、リンク時間の最適化が存在する場合、同一のルールがコンパイラにおける最適化に関して当てはまる。
リンカは、再配置可能なアドレスが物理アドレスに分解されるフェーズである。レジスタについては言及しないが、リンク時間の最適化が存在する場合、同一のルールがコンパイラにおける最適化に関して当てはまる。
上述のように、ゴーストレジスタの動作(割当、nop、移動)は、通常のトランザクションメモリに対して指示され得る。逆方向の解析は、トレースデータのオフロード後の解析段階(SWにおいて実現される)またはデバッガにより行なわれる。ここでは、データの圧縮は無駄になる。ゴーストレジスタファイルのサポートロジックは、データ(動作トランザクション)のより大きなセット及びゴーストレジスタイメージのオフラインマルチパス再構成と交換される。トレースは、全てのターゲットレジスタを定義する動作に対応するために十分な大きさでなければならず、その定義は、ゴーストレジスタファイルが存在する場合は常に直接アクセス可能となる。
一般的な高レベルの場合のメモリを割り当てられた変数の値の追跡
変数の値を追跡する場合、上述のようなゴーストレジスタ語の符号化は異なる。オリジナルレジスタ番号を保持するORフィールドの代わりに、ORフィールドはある特定の状況における1つの変数を示している。符号化は、プログラムアドレス範囲の各生存変数が固有の符号化番号を有するように変換システム(コンパイラ/リンカ)により行なわれる。この変数の符号化のフィールドは、変数の符号化(VE)と呼ばれる。
変数の値を追跡する場合、上述のようなゴーストレジスタ語の符号化は異なる。オリジナルレジスタ番号を保持するORフィールドの代わりに、ORフィールドはある特定の状況における1つの変数を示している。符号化は、プログラムアドレス範囲の各生存変数が固有の符号化番号を有するように変換システム(コンパイラ/リンカ)により行なわれる。この変数の符号化のフィールドは、変数の符号化(VE)と呼ばれる。
符号化は、変換システムからの出力としてデバッガ/トレースシステムに提供されなければならない。TMIAは、TMIAと関連付けられるVEに対して固有の変数アイデンティティを常に有するアドレス範囲に常に含まれるので、TMIAフィールドは、変数の符号化の解決に対して重要なものである。
コンパイラは、変数の符号化番号を有する変数からレジスタをロードする各ターゲット命令にタグを付加する。これは、レジスタコヒーレンスの場合と同様に、ゴーストレジスタファイルまたは同等のモジュールにおける割当を結果としてもたらす。変数値がターゲットレジスタ間で移動される場合は、これは、レジスタコヒーレンスの場合と同様に、ゴーストレジスタファイルにおける移動動作を結果としてもたらす。
尚、変数値を保持するレジスタが常に変数のメモリ一にスピルされるので、ゴーストレジスタファイルのスピル領域は変数値追跡時には必要とされないことに注意するべきである。当然、コンパイラは、変数をターゲットレジスタファイルにリロードする命令にタグを付加しなければならない。
この方法は、レジスタに存在する変数の現在の値及び常駐性を示している。
上述の実施形態は例として与えられているにすぎず、本発明はそれらに限定されないことが理解されるべきである。開示され、かつ請求項で定義される基本原理を保持する更なる変形、変更及び改善は本発明の範囲内である。
参考文献
[1]「Evicted Variables and the Interaction of Global Register Allocation and Symbolic Debugging」Ali-Reza Adl Tabatabai, Thomas Gross, Proceeding of the 20th ACM symposium on Principles of Programming Languages
[2]特許第8,221,296号公報
[3]米国特許第6,185,732号公報
[4]特許公開第2000−181746号公報
[5]米国特許第6,094,729号公報
[6]米国特許第6,243,304号公報
[7]「Computer Architecture, A Quantitative Approach」John L. Hennessy, David A. Patterson, Morgan Kaufmann Publishers, chapter 3.4「Data Hazards」
[1]「Evicted Variables and the Interaction of Global Register Allocation and Symbolic Debugging」Ali-Reza Adl Tabatabai, Thomas Gross, Proceeding of the 20th ACM symposium on Principles of Programming Languages
[2]特許第8,221,296号公報
[3]米国特許第6,185,732号公報
[4]特許公開第2000−181746号公報
[5]米国特許第6,094,729号公報
[6]米国特許第6,243,304号公報
[7]「Computer Architecture, A Quantitative Approach」John L. Hennessy, David A. Patterson, Morgan Kaufmann Publishers, chapter 3.4「Data Hazards」
Claims (28)
- コンピュータシステムにおいて、ターゲットコードとして参照される変換された形式のオリジナルソースコードの実行時に、オリジナルソースコードのデータ値の追跡をサポートする方法であって、
プログラムコードの変換中に、ターゲットコード命令におけるターゲットデータ値コンテナに対する参照を前記オリジナルソースコードのオリジナルデータ値コンテナのアドレス情報に関連付けるステップと、
ターゲットコードの実行時に、オリジナルソースコード表現のデータ値の表示を維持するために、前記オリジナルソースコードのオリジナルデータ値コンテナのアドレス情報と共にターゲットコード命令に関する情報を記憶するステップと
を備えることを特徴とする方法。 - 前記関連付けるステップは、前記オリジナルソースコードの対応するオリジナルデータ値コンテナのアドレス情報で、ターゲットコード命令にタグを付加するステップを含んでいる
ことを特徴とする請求項1に記載の方法。 - 前記ターゲットコード命令に関する情報は、
対応するターゲット命令アドレス情報と、
ターゲットデータ値コンテナを参照せずにオリジナルデータ値コンテナの値を追跡することを可能にするための、対応する命令オペランド値と
の少なくとも一方を含んでいる
ことを特徴とする請求項1に記載の方法。 - 前記記憶するステップは、前記オリジナルソースコードのオリジナルデータ値コンテナのアドレス情報と共に前記ターゲットコード命令に関する情報をゴーストレジスタファイルに書き込むステップを含んでいる
ことを特徴とする請求項1に記載の方法。 - 前記オリジナルソースコードのオリジナルデータ値コンテナのアドレス情報を、前記ゴーストレジスタファイル内の第1のゴーストレジスタから第2のゴーストレジスタへ移動するステップを更に備える
ことを特徴とする請求項4に記載の方法。 - ターゲットコード命令で表現されるターゲットデータ値コンテナのアドレス情報は、前記ゴーストレジスタファイルにインデックスを付加する
ことを特徴とする請求項4に記載の方法。 - ターゲットシステムにおいてオリジナルデータ値コンテナの常駐性を一貫して反映するために、読出待ち時間に対処するための複数のパイプレジスタに基づいて、ゴーストレジスタファイル動作の一連の一貫性を維持するステップを更に備える
ことを特徴とする請求項4に記載の方法。 - ゴーストレジスタファイル動作を選択的に変換するための動作ストリーム処理を更に備える
ことを特徴とする請求項4に記載の方法。 - 前記ターゲットコード命令は、前記オリジナルソースコードのオリジナルデータ値コンテナの割当を示す少なくとも1つのターゲットコード命令を含んでいる
ことを特徴とする請求項1に記載の方法。 - 前記オリジナルソースコードのオリジナルデータ値コンテナは、オリジナルレジスタセットに対応し、
前記ターゲットコードのターゲットデータ値コンテナは、ターゲットレジスタセットに対応し、
前記記憶するステップは、前記オリジナルソースコードのレジスタ表示を維持するためのゴーストレジスタファイルに前記情報を書き込み、前記オリジナルレジスタセットと前記ターゲットレジスタセット間のレジスタコヒーレンスをサポートするステップを備える
ことを特徴とする請求項1に記載の方法。 - 前記オリジナルソースコードは、オリジナルコンピュータシステムに対して適合されていて、
前記ターゲットコードは、前記オリジナルコンピュータシステムとは異なるターゲットコンピュータシステムに対して適合されている
ことを特徴とする請求項1に記載の方法。 - 前記データ値コンテナは、汎用高レベルプログラミング言語におけるメモリを割り当てられた変数に対応する
ことを特徴とする請求項1に記載の方法。 - オリジナルプログラムコードと、ターゲットコードとして参照される、変換された形式の前記オリジナルプログラムコード間のデータ値の整合性をサポートするためのシステムであって、
前記ターゲットコードの実行時に、前記オリジナルプログラムコードのデータ値の表示を維持するために、前記オリジナルプログラムコードにおけるオリジナルデータ値コンテナの割当を示す少なくとも1つのターゲットコード命令に関する情報と共に、関連する前記オリジナルデータ値コンテナのアドレス情報を記憶する手段を備える
ことを特徴とするシステム。 - プログラムコードの変換中に、ターゲットコード命令におけるターゲットデータ値コンテナに対する参照を前記オリジナルプログラムコードのオリジナルデータ値コンテナの対応するアドレス情報に関連付ける手段を更に備える
ことを特徴とする請求項13に記載のシステム。 - 前記ターゲットコード命令に関する情報は、
対応するターゲット命令アドレス情報と、
ターゲットデータ値コンテナを参照せずにオリジナルデータ値コンテナの値を追跡することを可能にするための、対応する命令オペランド値と
の少なくとも一方を含んでいる
ことを特徴とする請求項13に記載のシステム。 - 前記記憶する手段は、前記オリジナルデータ値コンテナのアドレス情報と共に少なくとも1つの前記ターゲットコード命令に関する情報をゴーストレジスタファイルに書き込む手段を備えている
ことを特徴とする請求項13に記載のシステム。 - 前記オリジナルプログラムコードのオリジナルデータ値コンテナのアドレス情報を、前記ゴーストレジスタファイル内の第1のゴーストレジスタエントリから第2のゴーストレジスタエントリへ移動する手段を更に備える
ことを特徴とする請求項16に記載のシステム。 - ターゲットコード命令で表現されるターゲットデータ値コンテナのアドレス情報は、前記ゴーストレジスタファイルにインデックスを付加する
ことを特徴とする請求項16に記載のシステム。 - 読出待ち時間に対処するための複数のパイプレジスタに基づいて、ゴーストレジスタファイル動作の一連の一貫性を維持するロジックを更に備える
ことを特徴とする請求項16に記載のシステム。 - 前記ゴーストレジスタファイル上の動作は、割当、移動、記憶及びnop動作を含み、
ゴーストレジスタファイル動作を選択的に変換するための動作ストリーム処理ロジックを更に備える
ことを特徴とする請求項16に記載のシステム。 - 前記記憶されている情報に基づいて、オリジナルプログラムコードのデバッグ及びトレース解析の少なくとも一方を実行するためのデバッグユーティリティを更に備える
ことを特徴とする請求項13に記載のシステム。 - 前記オリジナルプログラムコードのオリジナルデータ値コンテナは、オリジナルレジスタセットに対応し、
前記ターゲットコードのターゲットデータ値コンテナは、ターゲットレジスタセットに対応し、
前記記憶する手段は、前記オリジナルプログラムコードのレジスタ表示を維持するためのゴーストレジスタファイルに前記情報を書き込み、前記オリジナルレジスタセットと前記ターゲットレジスタセット間のレジスタコヒーレンスをサポートする手段を備える
ことを特徴とする請求項13に記載のシステム。 - 前記オリジナルソースコードは、オリジナルコンピュータシステムに対して適合されていて、
前記ターゲットコードは、前記オリジナルコンピュータシステムとは異なるターゲットコンピュータシステムに対して適合されている
ことを特徴とする請求項22に記載のシステム。 - 前記データ値コンテナは、汎用高レベルプログラミング言語におけるメモリを割り当てられた変数に対応する
ことを特徴とする請求項13に記載のシステム。 - オリジナルプログラムコードと、ターゲットコードとして参照される、変換された形式の前記オリジナルプログラムコード間のデータ値の整合性をサポートするためのシステムであって、
前記ターゲットコードの実行時にオリジナルプログラムコードのオリジナルデータ値コンテナの表示の提供を可能にするために、プログラムコード変換中に、前記オリジナルプログラムコードのオリジナルデータ値コンテナの対応するアドレス情報で、ターゲットコード命令におけるターゲットデータ値コンテナに対する参照にタグを付加する手段を備える
ことを特徴とするシステム。 - コンピュータシステム上の対応する変換されたターゲットコードの実行時に、オリジナルソースコードのオリジナルデータ値コンテナの表示を維持するための装置であって、
いくつかのゴーストレジスタエントリを有するゴーストレジスタファイルを含み、
前記ゴーストレジスタエントリそれぞれは、
i)前記オリジナルソースコードのオリジナルデータ値コンテナの割当を示すターゲットコード表現に関する情報に対する、少なくとも1つのフィールドと、
ii)前記オリジナルソースコードのオリジナルデータ値コンテナに関連付けられているアドレス情報に対するフィールドとを含む
ことを特徴とする装置。 - ターゲットコード命令に関する情報に対する、前記少なくとも1つのフィールドは、
対応するターゲット命令アドレス情報に対するフィールドと、
対応する命令オペランド値に対する値フィールドと
の少なくとも1つを含んでいる
ことを特徴とする請求項26に記載の装置。 - 前記ゴーストレジスタエントリのそれぞれは、更に、ターゲットデータ値コンテナを参照せずにオリジナルデータ値コンテナの値を追跡する際に、命令オペランド値を対応するターゲットデータ値コンテナから消去する場合に、前記ゴーストレジスタで、前記命令オペランド値が保持されるべきであるかどうかを示すための排除フィールドを含んでいる
ことを特徴とする請求項26に記載の装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/SE2005/000534 WO2006110069A1 (en) | 2005-04-13 | 2005-04-13 | Data value coherence in computer systems |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008536236A true JP2008536236A (ja) | 2008-09-04 |
Family
ID=37087276
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008506398A Pending JP2008536236A (ja) | 2005-04-13 | 2005-04-13 | コンピュータシステムにおけるデータ値の整合性(コヒーレンス:coherence) |
Country Status (6)
Country | Link |
---|---|
US (1) | US8095915B2 (ja) |
EP (1) | EP1869551A1 (ja) |
JP (1) | JP2008536236A (ja) |
CN (1) | CN101198930B (ja) |
CA (1) | CA2604573A1 (ja) |
WO (1) | WO2006110069A1 (ja) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9009692B2 (en) * | 2009-12-26 | 2015-04-14 | Oracle America, Inc. | Minimizing register spills by using register moves |
JP5303531B2 (ja) * | 2010-09-28 | 2013-10-02 | 株式会社日立製作所 | 組込システムの保守支援装置 |
CN104360949B (zh) * | 2014-11-29 | 2017-05-17 | 中国航空工业集团公司第六三一研究所 | 一种符合do‑178b/c a级软件目标码覆盖分析方法 |
US9733911B2 (en) * | 2015-11-11 | 2017-08-15 | National Instruments Corporation | Value transfer between program variables using dynamic memory resource mapping |
CN105843605B (zh) * | 2016-03-17 | 2019-03-08 | 中国银行股份有限公司 | 一种数据映射方法及装置 |
US11010192B2 (en) | 2017-04-18 | 2021-05-18 | International Business Machines Corporation | Register restoration using recovery buffers |
US10489382B2 (en) | 2017-04-18 | 2019-11-26 | International Business Machines Corporation | Register restoration invalidation based on a context switch |
US10540184B2 (en) | 2017-04-18 | 2020-01-21 | International Business Machines Corporation | Coalescing store instructions for restoration |
US10572265B2 (en) | 2017-04-18 | 2020-02-25 | International Business Machines Corporation | Selecting register restoration or register reloading |
US10552164B2 (en) | 2017-04-18 | 2020-02-04 | International Business Machines Corporation | Sharing snapshots between restoration and recovery |
US10782979B2 (en) | 2017-04-18 | 2020-09-22 | International Business Machines Corporation | Restoring saved architected registers and suppressing verification of registers to be restored |
US10740108B2 (en) | 2017-04-18 | 2020-08-11 | International Business Machines Corporation | Management of store queue based on restoration operation |
US10838733B2 (en) | 2017-04-18 | 2020-11-17 | International Business Machines Corporation | Register context restoration based on rename register recovery |
US10649785B2 (en) | 2017-04-18 | 2020-05-12 | International Business Machines Corporation | Tracking changes to memory via check and recovery |
US10963261B2 (en) | 2017-04-18 | 2021-03-30 | International Business Machines Corporation | Sharing snapshots across save requests |
US10564977B2 (en) | 2017-04-18 | 2020-02-18 | International Business Machines Corporation | Selective register allocation |
US10545766B2 (en) | 2017-04-18 | 2020-01-28 | International Business Machines Corporation | Register restoration using transactional memory register snapshots |
US10545740B2 (en) * | 2017-10-25 | 2020-01-28 | Saudi Arabian Oil Company | Distributed agent to collect input and output data along with source code for scientific kernels of single-process and distributed systems |
JP6890557B2 (ja) * | 2018-01-17 | 2021-06-18 | 株式会社日立製作所 | 分析モデル作成システム、プログラミング装置および分析モデル作成方法 |
CN110737501A (zh) * | 2018-07-18 | 2020-01-31 | 中标软件有限公司 | Docker容器中检查点和恢复点的功能实现方法及*** |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0282634A (ja) * | 1988-09-20 | 1990-03-23 | Mitsubishi Electric Corp | テープキャリア |
JPH0695866A (ja) * | 1991-03-20 | 1994-04-08 | Fujitsu Ltd | プログラムデータ解析表示方式 |
JPH0997182A (ja) * | 1995-09-29 | 1997-04-08 | Matsushita Electric Ind Co Ltd | プログラム変換装置およびデバッグ装置 |
JPH10289110A (ja) * | 1997-04-14 | 1998-10-27 | Matsushita Electric Ind Co Ltd | プログラム変換装置とデバッグ装置 |
JP2000227861A (ja) * | 1999-02-05 | 2000-08-15 | Nec Ic Microcomput Syst Ltd | デバッグ方法及びデバッグ装置 |
JP2000322285A (ja) * | 1999-05-14 | 2000-11-24 | Nec Corp | プリコンパイルされる言語で記述されたプログラムのデバッグ方法及びそのシステム並びに情報記録媒体 |
JP2002108649A (ja) * | 2000-09-29 | 2002-04-12 | Toshiba Corp | トレース解析を支援するためのプログラムを記録した記録媒体及びプログラム製品 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5781753A (en) * | 1989-02-24 | 1998-07-14 | Advanced Micro Devices, Inc. | Semi-autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for speculative and out-of-order execution of complex instructions |
US5768575A (en) * | 1989-02-24 | 1998-06-16 | Advanced Micro Devices, Inc. | Semi-Autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for sepculative and out-of-order execution of complex instructions |
GB2272085A (en) * | 1992-10-30 | 1994-05-04 | Tao Systems Ltd | Data processing system and operating system. |
US5713010A (en) * | 1995-02-10 | 1998-01-27 | Hewlett-Packard Company | Source line tracking in optimized code |
JP2728002B2 (ja) | 1995-02-15 | 1998-03-18 | 日本電気株式会社 | 組み込みソフトウェアデバッグ支援装置 |
US5581729A (en) * | 1995-03-31 | 1996-12-03 | Sun Microsystems, Inc. | Parallelized coherent read and writeback transaction processing system for use in a packet switched cache coherent multiprocessor system |
US5832297A (en) * | 1995-04-12 | 1998-11-03 | Advanced Micro Devices, Inc. | Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations |
US5881288A (en) | 1995-09-29 | 1999-03-09 | Matsushita Electric Industrial Co., Ltd. | Debugging information generation system |
US5764079A (en) * | 1996-03-11 | 1998-06-09 | Altera Corporation | Sample and load scheme for observability of internal nodes in a PLD |
US6094729A (en) | 1997-04-08 | 2000-07-25 | Advanced Micro Devices, Inc. | Debug interface including a compact trace record storage |
US6185732B1 (en) | 1997-04-08 | 2001-02-06 | Advanced Micro Devices, Inc. | Software debug port for a microprocessor |
US5999734A (en) * | 1997-10-21 | 1999-12-07 | Ftl Systems, Inc. | Compiler-oriented apparatus for parallel compilation, simulation and execution of computer programs and hardware models |
JP3178403B2 (ja) * | 1998-02-16 | 2001-06-18 | 日本電気株式会社 | プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 |
US6311327B1 (en) * | 1998-03-02 | 2001-10-30 | Applied Microsystems Corp. | Method and apparatus for analyzing software in a language-independent manner |
US6397242B1 (en) * | 1998-05-15 | 2002-05-28 | Vmware, Inc. | Virtualization system including a virtual machine monitor for a computer with a segmented architecture |
US6704925B1 (en) * | 1998-09-10 | 2004-03-09 | Vmware, Inc. | Dynamic binary translator with a system and method for updating and maintaining coherency of a translation cache |
US7516453B1 (en) * | 1998-10-26 | 2009-04-07 | Vmware, Inc. | Binary translator with precise exception synchronization mechanism |
JP2000181746A (ja) | 1998-12-18 | 2000-06-30 | Toshiba Corp | デバッグサポート付プロセッサ、及びデバッグ機能実行制御方法 |
US6598128B1 (en) * | 1999-10-01 | 2003-07-22 | Hitachi, Ltd. | Microprocessor having improved memory management unit and cache memory |
US6412043B1 (en) * | 1999-10-01 | 2002-06-25 | Hitachi, Ltd. | Microprocessor having improved memory management unit and cache memory |
KR100362193B1 (ko) * | 1999-11-26 | 2002-11-23 | 주식회사 하이닉스반도체 | 디디알 동기식 메모리 장치의 데이터 출력 장치 |
US20030018694A1 (en) * | 2000-09-01 | 2003-01-23 | Shuang Chen | System, method, uses, products, program products, and business methods for distributed internet and distributed network services over multi-tiered networks |
US20020156977A1 (en) * | 2001-04-23 | 2002-10-24 | Derrick John E. | Virtual caching of regenerable data |
US6754782B2 (en) * | 2001-06-21 | 2004-06-22 | International Business Machines Corporation | Decentralized global coherency management in a multi-node computer system |
US7418536B2 (en) * | 2001-07-30 | 2008-08-26 | Cisco Technology, Inc. | Processor having systolic array pipeline for processing data packets |
US7051191B2 (en) * | 2001-12-26 | 2006-05-23 | Intel Corporation | Resource management using multiply pendent registers |
WO2004021176A2 (de) * | 2002-08-07 | 2004-03-11 | Pact Xpp Technologies Ag | Verfahren und vorrichtung zur datenverarbeitung |
US7707621B2 (en) * | 2002-12-02 | 2010-04-27 | Silverbrook Research Pty Ltd | Creation and usage of mutually exclusive messages |
DE10335888B4 (de) * | 2003-08-06 | 2008-03-13 | Man Roland Druckmaschinen Ag | Verfahren und Vorrichtung zum Regeln des Gesamt-Schnittregisterfehlers einer Rollenrotationsdruckmaschine |
US7472184B2 (en) * | 2003-09-19 | 2008-12-30 | International Business Machines Corporation | Framework for restricting resources consumed by ghost agents |
US7584329B2 (en) * | 2005-02-10 | 2009-09-01 | International Business Machines Corporation | Data processing system and method for efficient communication utilizing an Ig coherency state |
US7293158B2 (en) * | 2005-03-02 | 2007-11-06 | International Business Machines Corporation | Systems and methods for implementing counters in a network processor with cost effective memory |
US8301868B2 (en) * | 2005-09-23 | 2012-10-30 | Intel Corporation | System to profile and optimize user software in a managed run-time environment |
JP4572169B2 (ja) * | 2006-01-26 | 2010-10-27 | エヌイーシーコンピュータテクノ株式会社 | マルチプロセッサシステム及びその動作方法 |
-
2005
- 2005-04-13 CN CN2005800501216A patent/CN101198930B/zh not_active Expired - Fee Related
- 2005-04-13 JP JP2008506398A patent/JP2008536236A/ja active Pending
- 2005-04-13 US US11/911,265 patent/US8095915B2/en not_active Expired - Fee Related
- 2005-04-13 CA CA002604573A patent/CA2604573A1/en not_active Abandoned
- 2005-04-13 EP EP05736464A patent/EP1869551A1/en not_active Withdrawn
- 2005-04-13 WO PCT/SE2005/000534 patent/WO2006110069A1/en active Application Filing
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0282634A (ja) * | 1988-09-20 | 1990-03-23 | Mitsubishi Electric Corp | テープキャリア |
JPH0695866A (ja) * | 1991-03-20 | 1994-04-08 | Fujitsu Ltd | プログラムデータ解析表示方式 |
JPH0997182A (ja) * | 1995-09-29 | 1997-04-08 | Matsushita Electric Ind Co Ltd | プログラム変換装置およびデバッグ装置 |
JPH10289110A (ja) * | 1997-04-14 | 1998-10-27 | Matsushita Electric Ind Co Ltd | プログラム変換装置とデバッグ装置 |
JP2000227861A (ja) * | 1999-02-05 | 2000-08-15 | Nec Ic Microcomput Syst Ltd | デバッグ方法及びデバッグ装置 |
JP2000322285A (ja) * | 1999-05-14 | 2000-11-24 | Nec Corp | プリコンパイルされる言語で記述されたプログラムのデバッグ方法及びそのシステム並びに情報記録媒体 |
JP2002108649A (ja) * | 2000-09-29 | 2002-04-12 | Toshiba Corp | トレース解析を支援するためのプログラムを記録した記録媒体及びプログラム製品 |
Also Published As
Publication number | Publication date |
---|---|
US20080178157A1 (en) | 2008-07-24 |
WO2006110069A1 (en) | 2006-10-19 |
CN101198930A (zh) | 2008-06-11 |
EP1869551A1 (en) | 2007-12-26 |
CA2604573A1 (en) | 2006-10-19 |
US8095915B2 (en) | 2012-01-10 |
CN101198930B (zh) | 2011-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8095915B2 (en) | Data value coherence in computer systems | |
Halstead Jr et al. | MASA: A multithreaded processor architecture for parallel symbolic computing | |
Gove | Multicore Application Programming: For Windows, Linux, and Oracle Solaris | |
KR101559090B1 (ko) | 이종 코어를 위한 자동 커널 마이그레이션 | |
Marino et al. | A case for an SC-preserving compiler | |
Lustig et al. | PipeCheck: Specifying and verifying microarchitectural enforcement of memory consistency models | |
US8990786B2 (en) | Program optimizing apparatus, program optimizing method, and program optimizing article of manufacture | |
US20090165016A1 (en) | Method for Parallelizing Execution of Single Thread Programs | |
Abdulla et al. | Context-bounded analysis for POWER | |
US20090164755A1 (en) | Optimizing Execution of Single-Threaded Programs on a Multiprocessor Managed by Compilation | |
Eizenberg et al. | Barracuda: Binary-level analysis of runtime races in cuda programs | |
Mikushin et al. | KernelGen--The Design and Implementation of a Next Generation Compiler Platform for Accelerating Numerical Models on GPUs | |
Honarmand et al. | Replay debugging: Leveraging record and replay for program debugging | |
US20130024675A1 (en) | Return address optimisation for a dynamic code translator | |
Stattelmann et al. | Hybrid source-level simulation of data caches using abstract cache models | |
Schardl et al. | The CSI framework for compiler-inserted program instrumentation | |
Sheikh et al. | Control-flow decoupling | |
Nagarajan et al. | ECMon: exposing cache events for monitoring | |
TWI540509B (zh) | 用以部署處理器特徵之方法以及用於硬體轉譯之製造物件、含有故障偵測與轉返功能的處理器、多處理器以及計算系統 | |
Cao et al. | Mixed model universal software thread-level speculation | |
Zhang | URSIM reference manual | |
Sampaio et al. | Spill code placement for simd machines | |
Baumann et al. | Cudagrind: Memory-usage checking for cuda | |
Grossman et al. | Efficient checkpointing of multi-threaded applications as a tool for debugging, performance tuning, and resiliency | |
Lee et al. | Putting Weak Memory in Order via a Promising Intermediate Representation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110422 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20110926 |