JP5957084B2 - レジスタの生存を示すコンパイルされたコードの生成 - Google Patents

レジスタの生存を示すコンパイルされたコードの生成 Download PDF

Info

Publication number
JP5957084B2
JP5957084B2 JP2014532548A JP2014532548A JP5957084B2 JP 5957084 B2 JP5957084 B2 JP 5957084B2 JP 2014532548 A JP2014532548 A JP 2014532548A JP 2014532548 A JP2014532548 A JP 2014532548A JP 5957084 B2 JP5957084 B2 JP 5957084B2
Authority
JP
Japan
Prior art keywords
instruction
register
registers
instructions
block
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.)
Active
Application number
JP2014532548A
Other languages
English (en)
Other versions
JP2014528603A (ja
Inventor
グシュビント、マイケル
サラプラ、バレンティナ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2014528603A publication Critical patent/JP2014528603A/ja
Application granted granted Critical
Publication of JP5957084B2 publication Critical patent/JP5957084B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明は、コンピュータ・システムに関し、より具体的には、レジスタの生存(liveness)を示すコンパイルされたコードを生成することに関する。
コンピュータ・アーキテクチャにおいて、プロセッサ・レジスタは、中央演算処理ユニット(CPU)又は他のデジタル・プロセッサの一部として利用可能な小容量のストレージである。こうしたレジスタは、メイン・メモリ以外の機構によりアドレス指定され、典型的には、メイン・メモリよりも迅速にアクセスすることができる。ほとんど全てのコンピュータは、より大容量のメモリからレジスタにデータをロードし、そこでデータは、何らかの機械命令により、算術計算のために使用され、操作され、又は試験される。次に、操作されたデータは、同じ命令又はその後の命令により、再びメイン・メモリに格納されることが多い。現代のプロセッサは、スタティック・ランダム・アクセス・メモリ(RAM)又はダイナミックRAMをメイン・メモリとして使用し、後者は、1つ又は複数のキャッシュ・レベルを介して暗黙的にアクセスされることが多い。コンピュータ・プログラムの共通特性は、参照のローカル性であり、同じ値に繰り返しアクセスすることが多く、頻繁に使用される値をレジスタに保持することにより性能が改善する。プロセッサ・レジスタは、通常、メモリ階層の最上部にあり、データにアクセスする最速の方法を提供する。プロセッサ・レジスタという用語は、命令セットにより定義されるような、命令の一部として直接符号化されるレジスタ群を指す。頻繁に使用される変数をレジスタに割り当てることは、プログラムの性能に重要であり得る。
コンピュータ・ソフトウェアにおいて、アプリケーション・バイナリ・インターフェース(ABI)とは、アプリケーション・プログラムとオペレーティング・システムの間、又は、アプリケーション・プログラムと別のアプリケーションの間の低レベルのインターフェースを言う。ABIは、データ型、サイズ、及びアラインメント、関数の引数がどのように渡され、リターン値がどのように取り出されるかを制御する呼出規約、システム・コール番号及びアプリケーションがオペレーティング・システムに対してどのようにシステム・コールを行う必要があるか、並びに完全なオペレーティング・システムのABIの場合に、オブジェクト・ファイルのバイナリ形式、プログラム・ライブラリ等のような詳細をカバーする。幾つかのABI(例えば、Intel(登録商標) x86アーキテクチャにおいて、幅広いプログラムが種々のUnix(登録商標)及びLinux(登録商標)バリアント(variant)上で実行されることを可能にするInteractive Unix(登録商標) ABI)は、必要な共有ライブラリが存在し、類似の前提条件が満たされるという条件で、そのABIをサポートする1つのオペレーティング・システム(OS)からのアプリケーション・プログラムが、他のいずれかのそうしたシステム上で修正なしに実行されることを可能にする。
典型的なアプリケーション・プログラムのプログラム開発サイクルには、ソース・コードを書くこと、ソース・コードをオブジェクト・ファイルにコンパイルすること、共有ライブラリを構築すること、及びオブジェクト・ファイルを主実行可能プログラムにリンクさせることが含まれる。主実行可能プログラムのロード、及びアプリケーションの起動のための共有ライブラリのロードを含む付加的な準備は、アプリケーションが特定のハードウェア・プラットフォーム上で実行される前に行われる。
その全体が引用により本明細書に組み入れられる非特許文献1は、例示的な縮小命令セット・コンピュータ(reduced instruction set computer、RISC)命令セット・アーキテクチャ(instruction set architecture、ISA)を教示する。Power ISAは、本明細書では、例示的な実施形態を実証するのに用いられるが、本発明は、Power ISA又はRISCアーキテクチャに限定されるものではない。当業者であれば、種々のアーキテクチャにおける本発明の使用を容易に認識するであろう。
その全体が引用により本明細書に組み入れられる非特許文献2は、例示的なCISC(complexinstruction set computer、複合命令セット・コンピュータ)命令セット・アーキテクチャを教示する。
その全体を引用によりここに組み入れる非特許文献3は、PowerPC(登録商標) Executable and Linking Format(ELF)ABIに対する64ビットの補足を記載している。
その全体を引用によりここに組み入れる非特許文献4及び非特許文献5は、32ビットABIを記載している。
「Power ISA Version 2.06 Revision B」、IBM発行、2010年7月23日 「z/Architecture Principles of Operation」、IBM、SA22−7832−08、第9版、2010年8月 「64−bit PowerPC ELF Application Binary Interface Supplement 1.9」、IBM、2004年 「Power Architecture(登録商標) 32−bit Application Binary Interface Supplement 1.0 Linux(登録商標)」、power.org、2011年4月19日 「Power Architecture(登録商標) 32−bit Application Binary Interface Supplement 1.0−Embedded」、power.org、2011年4月19日 Salapura他による「Design and Implementation of the Blue Gene(登録商標)/P Snoop Filter」、Conference on High−Performance Computer Architecture、2008年
レジスタの生存を示すコンパイルされたコードを生成する方法、システム及びコンピュータ・プログラムを提供する。
例示的な実施形態によれば、コンピュータ・プログラム製品、システム、及び方法が、コンピュータにより、複数のソース・オペランドを含む内部表現からオブジェクト・コードを生成することを含む。生成することは、内部表現内の各ソース・オペランドについて、ソース・オペランドに関して最終使用が発生したかどうかを判断することを含む。判断することは、データ・フロー・グラフにアクセスして、ある生存区間(live range)の全ての使用が発行されたかどうかを判断することを含む。ソース・オペランドに関して最終使用が発生したと判断された場合、最終使用の表示のために前記ソース・オペランドと関連したアーキテクテッド・リソース(architected resource)にマーク付けする。次いで、アーキテクテッド・リソースに対して、最終使用の表示を生成する。命令及び最終使用の表示をオブジェクト・コード内に発行する。
付加的な例示的な実施形態によれば、コンピュータ・プログラム製品及びシステムが、呼び出し関数から呼び出されるように構成されたプロローグを、呼び出された関数に挿入することを含む。プロローグは、呼び出された関数に入る際に実行されるように構成され、レジスタの生存状態(liveness status)を格納するための命令を含む。さらに、呼び出された関数にエピローグを挿入する。エピローグは、呼び出された関数を出る際に実行されるように構成され、かつ、プロローグにより格納されたレジスタの生存状態を回復させるように構成された命令を含む。
本発明の技術により、付加的な特徴及び利点が実現される。本発明の他の実施形態及び態様は、本明細書で詳細に説明され、特許請求される本発明の一部であると見なされる。利点及び特徴を有する本発明をより良く理解するに、説明及び図面を参照されたい。
本発明とみなされる主題は、本明細書の最後にある特許請求の範囲において具体的に示され、明確に請求されている。本発明の前述及び他の特徴及び利点は、添付図面と併用される以下の詳細な説明から明らかである。
本発明の一実施形態によるクラウド・コンピューティング・ノードを示す。 本発明の一実施形態によるクラウド・コンピューティング環境を示す。 本発明の一実施形態による抽象化モデル層を示す。 本発明の一実施形態による、レジスタ生存インジケータを含むオブジェクト・コードを生成するために、コンパイラにより実施されるプロセスのフロー図を示す。 本発明の一実施形態による、レジスタ生存インジケータ命令を含むオブジェクト・コードを生成するために、コンパイラにより実施されるプロセスのフロー図を示す。 本発明の一実施形態による、最終使用インジケータ(last-use indicator)を含むオブジェクト・コードを生成するために、コンパイラにより実施されるプロセスのフロー図を示す。 本発明の一実施形態による、複数命令についての最終使用インジケータをいつ挿入するかを判断するためのリストを用いる、コンパイラにより実施されるプロセスのフロー図を示す。 本発明の一実施形態による、プロローグ内にコンパイラにより挿入される例示的な命令のフロー図を示す。 本発明の一実施形態による、エピローグ内にコンパイラにより挿入される例示的な命令のフロー図を示す。
現代のコンピューティング・システムにおいて、レジスタは、比較的十分でないリソースとなっている。使用されていない(不使用)レジスタを実行中のプログラムから検出し、解放する能力を有することは、必要なレジスタだけをプログラムに割り当てることを保証するのに役立つ。これは、レジスタ、及び/又は(迅速なアクセス速度を利用するために)レジスタに格納される付加的なデータ項目に関する競合量の軽減につながり得る。さらに、使用されていないとしてマーク付けされたレジスタをバックアップ及び回復操作から外すことができるので、これらの操作と関連したあらゆる不必要なオーバーヘッドを排除することができる。
本発明の一実施形態は、レジスタの生存状態を示すオブジェクト・コードの生成に向けられる。本明細書で用いられる「生存状態」という用語は、アーキテクテッド・レジスタが、実行中プログラムによりソース・オペランドとして再び使用されるかどうかを言う。「生存している(live)」すなわち「使用されている」の生存状態とは、プログラム内の将来の命令が、レジスタが「生存している」すなわち「使用されている」時点から開始する少なくとも1つのプログラム実行パスに沿って、レジスタ内に格納された値を取り出そうとすることができることを意味する。「使用されていない」すなわち「死んでいる(dead)」の生存状態は、プログラム内のいずれの命令も、レジスタが「使用されていない」すなわち「死んでいる」時点から開始するプログラム実行パスのいずれかに沿って、レジスタ内に格納された値を取り出す必要はないことを意味する。
本明細書で説明される一実施形態において、コンパイラは生存解析(liveness analysis)を行って、ひとたび命令が完了すると、もはやレジスタが使用中でない(すなわち、レジスタが使用されない)ことを示すために、最終使用インジケータをいつオブジェクト・コードに挿入するかを判断する。さらに、オブジェクト・コード命令を呼び出される関数のプロローグ内に挿入して、呼び出される関数により更新される不揮発性レジスタの呼び出しプログラムの生存状態を把握し、かつ、対応するオブジェクト・コード命令を呼び出される関数のエピローグ内に挿入して、呼び出しプログラムに戻る際に呼び出しプログラムの生存状態を回復させることができる。関数に入る際、エピローグ内に更なるオブジェクト・コード命令を挿入して、揮発性の非パラメータ・レジスタを使用されていないものとしてマーク付けすることもできる。さらに、関数を出る際、更に別のオブジェクト・コード命令を挿入して、揮発性レジスタ(結果レジスタを除く)を使用されていないものとしてマーク付けすることもできる。
コンパイルされたコード内への最終使用インジケータの挿入を、短いコード区間に関する不使用を示すのを低減させるように調整することができる。例えば、短い期間内に新しい値がレジスタに書き込まれた場合、コンパイラは、レジスタについての最終使用インジケータを生成しないことを判断することができる。コンパイラは、オブジェクト・コード・プログラム内に最終使用インジケータを挿入するかどうかを判断する際、レジスタの短期間の割り当て解除の収穫逓減(diminishing return)(例えば、性能及び信頼性に関する)と、コード肥大化(例えば、付加的な命令によりもたらされる)のバランスを取ることができる。
1つは生存ベクトルをメモリに格納するための、もう一方はメモリから生存ベクトルをロードするための2つの新しいオブジェクト・コード命令が、本明細書で説明される。これらの新しい命令は、呼び出される関数に入る際にレジスタの生存状態を格納するため、及び、呼び出される関数から出る際にレジスタの生存状態を回復させるために用いられる。
アーキテクテッド・リソースの生存状態を示すための命令の生成は、クラウド・コンピューティング環境において実施することができる。本開示は、クラウド・コンピューティングについての詳細な説明を含むが、本明細書で述べられる教示の実装は、クラウド・コンピューティング環境に限定されるものではないことが予め理解される。むしろ、本発明の実施形態は、現在知られている又は後に開発される他のいずれかのタイプのコンピューティング環境と併せて実装することができる。
クラウド・コンピューティングは、最小限の管理労力又はサービス・プロバイダとの対話で迅速にプロビジョニング及び解放することができる構成可能なコンピューティング・リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス)の共有プールへの、便利なオンデマンドのネットワーク・アクセスを可能にするサービス配信のモデルである。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、及び少なくとも4つの配備モデルを含むことができる。
特徴は、以下の通りである。
オンデマンド・セルフサービス:クラウド・コンシューマは、必要に応じて、サーバ時間及びネットワーク・ストレージ等のコンピューティング機能を、人間がサービスのプロバイダと対話する必要なく自動的に、一方的にプロビジョニングすることができる。
広範なネットワーク・アクセス:機能は、ネットワーク上で利用可能であり、異種のシン又はシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、及びPDA)による使用を促進する標準的な機構を通じてアクセスされる。
リソースのプール化:プロバイダのコンピューティング・リソースは、マルチ・テナント・モデルを用いて、異なる物理及び仮想リソースを要求に応じて動的に割り当て及び再割り当てすることにより、複数のコンシューマにサービスを提供するためにプールされる。コンシューマは、一般に、提供されるリソースの正確な位置についての制御又は知識を持たないが、より高レベルの抽象化では位置(例えば、国、州、又はデータセンタ)を特定できる場合があるという点で、位置とは独立しているといえる。
迅速な弾力性:機能は、迅速かつ弾力的に、幾つかの場合自動的に、プロビジョニングして素早くスケール・アウトし、迅速にリリースして素早くスケール・インさせることができる。コンシューマにとって、プロビジョニングに利用可能なこれらの機能は、多くの場合、無制限であり、いつでもどんな量でも購入できるように見える。
サービスの測定:クラウド・システムは、サービスのタイプ(例えば、ストレージ、処理、帯域幅、及びアクティブなユーザ・アカウント)に適した何らかの抽象化レベルでの計量機能を用いることによって、リソースの使用を自動的に制御及び最適化する。リソース使用を監視し、制御し、報告し、利用されるサービスのプロバイダとコンシューマの両方に対して透明性をもたらすことができる。
サービス・モデルは以下の通りである。
Software as a Service(SaaS):クラウド・インフラストラクチャ上で動作しているプロバイダのアプリケーションを使用するために、コンシューマに提供される機能である。これらのアプリケーションは、ウェブ・ブラウザ(例えば、ウェブ・ベースの電子メール)などのシン・クライアント・インターフェースを通じて、種々のクライアント・デバイスからアクセス可能である。コンシューマは、限定されたユーザ固有のアプリケーション構成設定の考え得る例外として、ネットワーク、サーバ、オペレーティング・システム、ストレージ、又は個々のアプリケーション機能をも含めて、基礎をなすクラウド・インフラストラクチャを管理又は制御しない。
Platform as a Service(PaaS):プロバイダによってサポートされるプログラミング言語及びツールを用いて生成された、コンシューマが生成した又は取得したアプリケーションを、クラウド・インフラストラクチャ上に配備するために、コンシューマに提供される機能である。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、又はストレージなどの基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、配備されたアプリケーション、及び場合によってはアプリケーション・ホスティング環境構成に対して制御を有する。
Infrastructure as a Service(IaaS):コンシューマが、オペレーティング・システム及びアプリケーションを含み得る任意のソフトウェアを配備及び動作させることができる、処理、ストレージ、ネットワーク、及び他の基本的なコンピューティング・リソースをプロビジョニンングするために、コンシューマに提供される機能である。コンシューマは、基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、オペレーティング・システム、ストレージ、配備されたアプリケーションに対する制御、及び場合によってはネットワーク・コンポーネント(例えば、ホストのファイアウォール)選択の限定された制御を有する。
配備モデルは以下の通りである。
プライベート・クラウド:クラウド・インフラストラクチャは、ある組織のためだけに運営される。このクラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、構内又は構外に存在することができる。
コミュニティ・クラウド:クラウド・インフラストラクチャは、幾つかの組織によって共有され、共通の関心事項(例えば、任務、セキュリティ要件、ポリシー、及びコンプライアンス上の考慮事項)を有する特定のコミュニティをサポートする。クラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、構内又は構外に存在することができる。
パブリック・クラウド:クラウド・インフラストラクチャは、一般公衆又は大規模な業界グループに利用可能であり、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラストラクチャは、固有のエンティティのままであるが、データ及びアプリケーションの移行性を可能にする標準化された又は専用の技術(例えば、クラウド間の負荷分散のためのクラウド・バースティング)によって結び付けられる2つ又はそれより多いクラウド(プライベート、コミュニティ、又はパブリック)の混成物である。
クラウド・コンピューティング環境は、無国籍性、低結合性、モジュール性、及びセマンティック相互運用性に焦点を置くことを指向するサービスである。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラストラクチャである。
ここで図1を参照すると、クラウド・コンピューティング・ノードの一例の概略図が示される。クラウド・コンピューティング・ノード10は、好適なクラウド・コンピューティング・ノードの単なる一例であり、本明細書で説明される本発明の実施形態の使用又は機能の範囲に対するいずれかの制限を示唆することを意図するものではない。上記に関係なく、クラウド・コンピューティング・ノード10は、本明細書で上述された機能のいずれかを実装及び/又は実施することができる。
クラウド・コンピューティング・ノード10には、他の多数の汎用又は専用コンピューティング・システム環境又は構成で動作可能な、コンピュータ・システム/サーバ12が存在する。コンピュータ・システム/サーバ12と共に用いるのに好適な周知のコンピューティング・システム、環境、及び/又は構成の例としては、これらに限定されるものではないが、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、手持ち式又はラップトップ型デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能民生電子機器、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、及び、上述のシステム又はデバイス等のいずれかを含む分散型クラウド・コンピューティング環境が含まれる。
コンピュータ・システム/サーバ12は、コンピュータ・システムによって実行される、プログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的な文脈で説明することができる。一般に、プログラム・モジュールは、特定のタスクを実行する又は特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、論理、データ構造などを含むことができる。コンピュータ・システム/サーバ12は、通信ネットワークを通じてリンクされた遠隔処理デバイスによってタスクが実行される分散型クラウド・コンピューティング環境で実施することができる。分散型クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含む、ローカル及び遠隔両方のコンピュータ・システム・ストレージ媒体に配置することができる。
図1に示されるように、クラウド・コンピューティング・ノード10のコンピュータ・システム/サーバ12は、汎用コンピューティング・デバイスの形で示される。コンピュータ・システム/サーバ12のコンポーネントは、これらに限定されるものではないが、1つ又は複数のプロセッサ又は処理ユニット16、システム・メモリ28、及びシステム・メモリ28を含む種々のシステム・コンポーネントをプロセッサ16に結合するバス18を含むことができる。
バス18は、メモリ・バス又はメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、及び種々のバス・アーキテクチャのいずれかを用いるプロセッサ又はローカル・バスを含む、幾つかのタイプのバス構造のうちのいずれかの1つ又は複数を表す。限定ではなく例としては、このようなアーキテクチャは、業界標準アーキテクチャ(Industry Standard Architecture、ISA)バス、マイクロ・チャネル・アーキテクチャ(Micro Channel Architecture、MCA)バス、Enhanced ISA(EISA)バス、Video Electronics Standards Association(VESA)ローカル・バス、及びPeripheral Component Interconnect(PCI)バスを含む。
コンピュータ・システム/サーバ12は、典型的には、種々のコンピュータ・システム可読媒体を含む。このような媒体は、コンピュータ・システム/サーバ12がアクセス可能ないずれかの利用可能媒体とすることができ、揮発性媒体及び不揮発性媒体の両方と、取り外し可能媒体及び取り外し不能媒体の両方とを含む。
システム・メモリ28は、ランダム・アクセス・メモリ(RAM)30及び/又はキャッシュ・メモリ32など、揮発性メモリの形のコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム/サーバ12は、他の取り外し可能/取り外し不能、揮発性/不揮発性のコンピュータ・システム・ストレージ媒体をさらに含むことができる。単なる例として、取り外し不能の不揮発性磁気媒体(図示されておらず、典型的には「ハード・ドライブ」と呼ばれる)との間の読み出し及び書き込みのために、ストレージ・システム34を設けることができる。図示されていないが、取り外し可能な不揮発性磁気ディスク(例えば、「フレキシブル・ディスク」)との間の読み出し及び書き込みのための磁気ディスク・ドライブと、CD−ROM、DVD−ROM又は他の光媒体などの取り外し可能な不揮発性光ディスクとの間の読み出し及び書き込みのための光ディスク・ドライブとを設けることができる。このような例においては、それぞれを、1つ又は複数のデータ媒体インターフェースによってバス18に接続することができる。以下でさらに示され説明されるように、メモリ28は、本発明の実施形態の機能を実行するように構成されたプログラム・モジュールの組(例えば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含むことができる。
限定ではなく例として、メモリ28内に、プログラム・モジュール42の組(少なくとも1つ)を有するプログラム/ユーティリティ40、並びにオペレーティング・システム、1つ又は複数のアプリケーション・プログラム、他のプログラム・モジュール、及びプログラム・データを格納することができる。オペレーティング・システム、1つ又は複数のアプリケーション・プログラム、他のプログラム・モジュール、及びプログラム・データ、又はそれらの何らかの組み合わせの各々は、ネットワーキング環境の実装形態を含むことができる。プログラム・モジュール42は、一般に、本明細書で説明される本発明の実施形態の機能及び/又は方法を実行する。
コンピュータ・システム/サーバ12は、キーボード、ポインティング・デバイス、ディスプレイ24等のような1つ又は複数の外部デバイス14;ユーザがコンピュータ・システム/サーバ12と対話することを可能にする1つ又は複数のデバイス;及び/又はコンピュータ・システム/サーバ12が1つ又は複数の他のコンピューティング・デバイスと通信することを可能にするいずれかのデバイス(例えば、ネットワーク・カード、モデムなど)と通信することもできる。このような通信は、入力/出力(I/O)インターフェース22を経由して行うことができる。さらにまた、コンピュータ・システム/サーバ12は、ネットワーク・アダプタ20を介して、ローカル・エリア・ネットワーク(LAN)、汎用広域ネットワーク(WAN)、及び/又はパブリック・ネットワーク(例えば、インターネット)などの1つ又は複数のネットワークと通信することもできる。示されるように、ネットワーク・アダプタ20は、バス18を介して、コンピュータ・システム/サーバ12の他のコンポーネントと通信する。図示されないが、コンピュータ・システム/サーバ12と共に他のハードウェア及び/又はソフトウェア・コンポーネントを使用できることを理解されたい。例としては、これらに限定されるものではないが、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部のディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、及びデータ・アーカイブ・ストレージ・システムなどが含まれる。
ここで図2を参照すると、例示的なクラウド・コンピューティング環境50が示される。示されるように、クラウド・コンピューティング環境50は、例えば携帯情報端末(PDA)又は携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、及び/又は自動車コンピュータ・システム54Nなどといった、クラウド・コンシューマによって用いられるローカル・コンピューティング・デバイスと通信することができる、1つ又は複数のクラウド・コンピューティング・ノード10を含む。ノード10は、互いに通信することができる。これらのノードは、上述のようなプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、若しくはハイブリッド・クラウド、又はこれらの組み合わせなど、1つ又は複数のネットワークにおいて物理的又は仮想的にグループ化することができる(図示せず)。これにより、クラウド・コンピューティング環境50は、クラウド・コンシューマがローカル・コンピューティング・デバイス上にリソースを保持する必要のないサービスとして、インフラストラクチャ、プラットフォーム、及び/又はソフトウェアを提供することが可能になる。図2に示されるコンピューティング・デバイス54A−Nのタイプは単に例示であることを意図し、コンピューティング・ノード10及びクラウド・コンピューティング環境50は、いずれのタイプのネットワーク及び/又はネットワーク・アドレス指定可能な接続上でも(例えば、ウェブ・ブラウザを用いて)、いずれのタイプのコンピュータ化された装置とも通信できることを理解されたい。
ここで図3を参照すると、クラウド・コンピューティング環境50(図2)によって提供される機能抽象化層の組が示される。図3に示されるコンポーネント、層、及び機能は単に例示であることを意図し、本発明の実施形態はそれらに限定されないことを予め理解されたい。図示されるように、以下の層及び対応する機能が提供される。
ハードウェア及びソフトウェア層60は、ハードウェア及びソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例として、IBM(登録商標)zSeriesシステムを一例とするメインフレームと、IBM(登録商標) pSeriesシステムを一例とするRISC(Reduced Instruction Set Computer(縮小命令セット・コンピュータ))アーキテクチャ・ベースのサーバと、IBM(登録商標) xSeries(登録商標)システムと、IBM(登録商標) BladeCenter(登録商標)システムと、ストレージ・デバイスと、ネットワーク及びネットワーク・コンポーネントとが含まれる。ソフトウェア・コンポーネントの例として、IBM(登録商標) WebSphere(登録商標)アプリケーション・サーバ・ソフトウェアを一例とするネットワーク・アプリケーション・サーバ・ソフトウェアと、IBM(登録商標) DB2(登録商標)データベース・ソフトウェアを一例とするデータベース・ソフトウェアとが含まれる。(IBM、zSeries、xSeries、BladeCenter、WebSphere、及びDB2は、世界中の多数の管轄区域において登録されているインターナショナル・ビジネス・マシーンズ・コーポレーションの商標である。)
仮想化層62は、抽象化層を提供し、この層により、仮想エンティティの以下の例、すなわち、仮想サーバ、仮想ストレージ、仮想プライベート・ネットワークを含む仮想ネットワーク、仮想アプリケーション及びオペレーティング・システム、並びに仮想クライアントを提供することができる。
一例においては、管理層64は、以下で説明される機能を提供することができる。リソース・プロビジョニングは、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソース及び他のリソースの動的な調達を提供する。計量及び価格決定は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡と、リソースの消費に対する課金又は請求とを提供する。1つの例においては、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウド・コンシューマ及びタスクに対する識別情報の検証と、データ及び他のリソースに対する保護とを提供する。ユーザ・ポータルは、コンシューマ及びシステム管理者のために、クラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理は、要求されるサービス・レベルが満たされるように、クラウド・コンピューティング・リソースの割り当て及び管理を提供する。サービス・レベル・アグリーメント(Service Level Agreement、SLA)の計画及び履行は、SLAに従って将来の要件が予測されるクラウド・コンピューティング・リソースの事前配置及び調達を提供する。
ワークロード層66は、クラウド・コンピューティング環境を利用することができる機能の例を提供する。この層から提供することができるワークロード及び機能の例には、マッピング及びナビゲーション、ソフトウェア開発及びライフサイクル管理、仮想教室教育配信、データ分析処理、トランザクション処理、及びデータ統合ワークフロー処理が含まれる。
例示的な実施形態においては、ワークロード層66内の強化されたコンパイラ70が、本明細書で説明される処理を行うが、強化されたコンパイラ70は、いずれの層内に実装してもよく、ハードウェア及びソフトウェア層60内の種々のハードウェア・プラットフォーム上で実行されるコードを生成するために用いてもよいことが理解されるであろう。
1つの実施形態において、強化されたコンパイラ70は、クラウド環境50において実行されているコンピュータ/サーバ12の処理ユニット16上、又は、クラウド環境50のためのアプリケーションを開発するように適合されたシステム54A、54B、若しくは54C上で実行するためのコードを生成する。生成されたコードは、仮想ストレージ62、外部デバイス14、又は、内部にインストールされたシステム・フラッシュ・メモリなどの別のソリューションのようなストレージ媒体に格納される。
ここで図4を参照すると、一実施形態による、レジスタ生存インジケータを含むオブジェクト・コードを生成するために、強化されたコンパイラ70により実施されるプロセスのフロー図が、一般的に示される。図4に示されるプロセスは、既存の命令の一部としてレジスタの最終使用を示す。この実施形態によれば、コンパイラは、命令の後に、命令の少なくとも1つのオペランドが使用されていないことを表すインジケータを含むように増強された命令セットのためのコードを生成する。この表示は、対応するレジスタの各々についての最終使用を示す目的で、命令の操作コード(オペコード)の一部として、レジスタと関連したフラグとして、又は、別個のマスク・ビットが複数のレジスタの各々に対応する場合のマスクとして符号化されるように実施することができる。1つの実施形態において、操作コード、フラグ、又はマスクは、命令内で直接指定される。別の実施形態において、オペコード、フラグ、又はマスクは、プリフィックス(prefix)命令(すなわち、命令に先行する別個の命令)、命令プリフィックス(すなわち、命令に先行するインジケータ)、ポストフィックス(postfix)命令(すなわち、命令に後続する別個の命令)、又は命令ポストフィックス(すなわち、命令に後続するインジケータ)として指定される。
図4を参照すると、プロセスはブロック402において開始し、ブロック404において、コンパイラ内の命令スケジューラに従って、オブジェクト・コードに書き込まれる次の命令を選択する。次の命令は、1つ又は複数の命令の内部表現(IR)から選択される。ブロック406において、データ・フロー・グラフ(data flow graph、DFG)において、次の命令内のソース・オペランドが生存区間(すなわち、従来技術による、コンパイラによって行われる生存区間のレジスタ割り当てに従ったレジスタ値)の最終使用を表すかどうかを判断する。本明細書で用いられる「DFG」という用語は、レジスタ(又は他のアーキテクテッド・リソース)への値の割り当てを把握するためのいずれかの種類の構造を指す。コンパイラはDFGに照会し、命令のソース・オペランドの各々について、それが最終使用に対応するかどうかを判断する(すなわち、アーキテクテッド・レジスタに割り当てられた特定のシンボル値(すなわち、生存区間)の他の全ての使用に対して命令が発行されたかどうかを判断することによって)。レジスタの最終使用を判断するこのプロセスは、命令スケジューリングと共に、又は、図4に示されるように、命令スケジューリング後のステップにおいて実施することができる。
ブロック406において、ソース・オペランドがレジスタの最終使用を表すと判断された場合、次に、処理は、命令をオブジェクト・コードに発行する(付加する)前に、最終使用インジケータを命令に付加する、ブロック408に続く。図4に示される実施形態においては、ソース・オペランドを含むレジスタの最終使用を示すために、1つ又は複数のビットを既存の命令に付加する。次いで、処理は、ブロック412に続き、オブジェクト・コード内に含ませるための命令がIR内にさらに存在するかどうかを判断する。付加的な命令が存在しない場合、次に、処理はブロック414で完了する。付加的な命令が存在する場合、次に、処理はブロック404に続き、そこで次の命令を選択する。
ブロック406において、ソース・オペランドがレジスタの最終使用を表さないと判断された場合、次に、処理は、選択された命令をオブジェクト・コードに発行するブロック410に続く。次いで、処理は、オブジェクト・コード内に含ませるための命令がIR内にさらに存在するかどうかを判断するためのブロック412に続く。付加的な命令が存在しない場合、次に、処理はブロック414で完了する。付加的な命令が存在する場合、次に、処理はブロック404に続き、そこで次の命令を選択する。
ここで図5を参照すると、一実施形態による、レジスタ生存インジケータ命令を含むオブジェクト・コードを生成するために、強化されたコンパイラ70により実施されるプロセスのフロー図が、一般的に示される。図5に示されるプロセスは、レジスタの最終使用を示すために別個の命令を挿入し、このため、実行されるとき、オブジェクト・コードは、付加的な命令の処理と関連した付加的なコスト(例えば、キャッシュ、サイクル時間等)を被る。この手法は、付加的なインジケータを有する多数の命令セットを拡張するために、又は、命令を増強するのに使用しなければならない命令プリフィックス、プリフィックス命令、命令ポストフィックス、及びポストフィックス命令の実装と関連したアーキテクチャ又はマイクロアーキテクチャの複雑化を回避するために、好ましいものである。有利なことに、この表示方法によると、1又は複数の命令の最終使用を示すための単一の命令又は少数の命令セットだけが、命令セットに付加される。
図5を参照すると、プロセスがブロック502で開始し、ブロック504において、コンパイラ内の命令スケジューラに従って、オブジェクト・コードに書き込まれる次の命令を選択する。次の命令は、1つ又は複数の命令のIRから選択される。ブロック506において、次の命令が発行される。ブロック508において、発行されたブロック506の次の命令内のソース・オペランドがDFGにおける生存区間(すなわち、レジスタ値)の最終使用を表すかどうかを判断する。付加的な命令の発行はスケジュールに影響を与えるので、レジスタの最終使用を判断するプロセスは、命令スケジューリングと共に実施されることが好ましい。
ブロック508において、ソース・オペランドがレジスタの最終使用を表すと判断された場合、次に、処理は、レジスタの最終使用を示す命令をオブジェクト・コードに発行する(付加する)ブロック510に続く。次に、処理は、ブロック512に続き、オブジェクト・コード内に含ませるための命令がIR内にさらに存在するかどうかを判断する。付加的な命令が存在しない場合、次に、処理はブロック514で完了する。付加的な命令が存在する場合、次に、処理はブロック504に続き、そこで次の命令を選択する。
ブロック506において、ソース・オペランドが最終使用を表さないと判断された場合、次に、処理は、ブロック512に続き、オブジェクト・コード内に含ませるための命令がIR内にさらに存在するかどうかを判断する。付加的な命令が存在しない場合、次に、処理はブロック514で完了する。付加的な命令が存在する場合、次に、処理はブロック504に続き、そこで次の命令を選択する。
ここで図6を参照すると、一実施形態による、最終使用インジケータを挿入するオブジェクト・コードを生成するために、コンパイラにより実施されるプロセスのフロー図が、一般的に示される。図6に示されるプロセスは、強化されたコンパイラ70により実施することができる。図6のプロセスに示されるように、最終使用インジケータ命令をオブジェクト・コードに付加する前に、最終使用インジケータ命令を発行することが、魅力的なトレードオフを提示することを検証するために、試験を実施する。考慮されるトレードオフは、レジスタの解放(レジスタの割り当て解除)により達成される性能上の利点に対する、付加的な命令を発するコスト、及び/又は解放されたレジスタを再び使用するときの再割り当てコストを含むことができる。トレードオフはまた、有用な値を保持しないレジスタにおける一時的障害の回復コストを減らすことに起因する信頼性及び可用性の改善を含むこともできる。トレードオフの確認は、予想されるメトリック(性能、信頼性)を閾値に対して比較することにより、コンパイラにより実施することができる。メトリックは、ブロック608において最終使用を有するものとして識別されたアーキテクテッド・リソース(例えば、レジスタ)に対して次の書き込みが行われるまでの命令の数とすることができる。代替的に又は付加的に、メトリックは、これらに限定されるものではないが、レジスタ・キャッシュ管理、リネーミング効率、及び/又はデコード時間命令最適化のような態様から得られる性能の改善の推定値とすることができる。閾値は、ターゲット・プロセッサ若しくは複数の異なるターゲット・プロセッサ、又はコンパイラ・ユーザにより選択されるターゲット・プロセッサのマイクロアーキテクチャに基づいた定数とすることができ、ここで定数は、付加的な命令を発するコストを表す。閾値及びメトリックは、プログラム可能であり、強化されたコンパイラ70がオブジェクト・コードを生成する前に固定することができ、IRの特徴に基づいて、強化されたコンパイラ70により調整することができ、及び/又は生成されるオブジェクト・コードの特定の予想される動作環境に合わせて調整することができる。
当業者であれば、代替的な実施形態において、スケジューリングが完了した後に、最終使用インジケータの発行を実施できることを理解するであろう。この場合、メトリックは、値に割り当てられたアーキテクテッド・リソースに対して次の書き込みが行われ、予め生成されたスケジュールに基づき最終使用を認識するまでのサイクル数の関数として求められる。閾値は、スケジュールの関数として(例えば、命令の挿入が、スケジュールに付加的な待ち時間を導入するかどうか)求められる。
図6を参照すると、処理はブロック602で開始し、ブロック604において、コンパイラ内の命令スケジューラに従って、オブジェクト・コードに書き込まれる次の命令を選択する。次の命令は、1つ又は複数の命令のIRから選択される。ブロック606において、次の命令が発行される。ブロック608において、次の命令内のソース・オペランドがDFGにおける生存区間(すなわち、レジスタ値)の最終使用を表すかどうかを判断する。
ブロック608において、ソース・オペランドがレジスタの最終使用を表すと判断された場合、次に、処理は、アーキテクテッド・リソース(例えば、レジスタ)の使用に対応するコスト・メトリック(例えば、このアーキテクテッド・リソースへの次の書き込みまでの距離)がコスト閾値を上回るかどうかを判断するブロック610に続く。1つの実施形態において、コスト・メトリックは、アーキテクテッド・レジスタへの次の書き込みが行われるまでの命令又はIRの数をカウントすることによって得られる。例えば、IRシーケンス:すなわち、
(1) add r2, r4, r5
(2) mul r2, r2, r2
(3) add r2, r2, r5
(4) addi r2, r2, 128
(5) li r4, 0
において、コスト・メトリックがアーキテクテッド・リソースの最終使用とこれに対するその後の書き込みとの間の距離に対応するコンパイラの1つの実施形態によると、IR(l)におけるレジスタr4についてのコスト・メトリックは3である。
ブロック610において、アーキテクテッド・リソースの使用に対応するコスト・メトリックがコスト閾値を上回る場合、次に、処理は、レジスタの最終使用を示す命令をオブジェクト・コードに発行する(付加する)フロック612に続く。次に、処理は、ブロック614に続き、オブジェクト・コード内に含ませるための命令がIR内にさらに存在するかどうかを判断する。付加的な命令が存在しない場合、次に、処理はブロック616で完了する。付加的な命令が存在する場合、次に、処理はブロック604に続き、そこで次の命令を選択する。ブロック610において、アーキテクテッド・リソース使用までの距離(この例においては、メトリック)がコスト閾値を上回らない場合、次に、処理はブロック614に続き、オブジェクト・コード内に含ませるための命令がIR内にさらに存在するかどうかを判断する。付加的な命令が存在しない場合、次に、処理はブロック616で完了する。付加的な命令が存在する場合、次に、処理はブロック604に続き、そこで次の命令を選択する。
ブロック608において、ソース・オペランドがレジスタの最終使用を表さないと判断された場合、次に、処理はブロック614に続き、オブジェクト・コード内に含ませるための命令がIR内にさらに存在するかどうか判断する。付加的な命令が存在しない場合、次に、処理はブロック616で完了する。付加的な命令が存在する場合、次に、処理はブロック604に続き、そこで次の命令を選択する。
上記の例示的なIRシーケンスにおいて、コスト・メトリックが所定の閾値を満たす場合、そのIRに対応するが、最終使用表示命令lu<register−number>で増強された命令シーケンスが、以下のように発行される。
add r2, r4, r5
lu r4
mul r2, r2, r2
add r2, r2, r5
addi r2, r2, 128
li r4, 0
ここで図7を参照すると、一実施形態による、複数のレジスタについての最終使用インジケータをいつ挿入するかを判断するための保留中リストを用いる、コンパイラにより実施されるプロセスのフロー図が、一般的に示される。図7に示されるプロセスは、強化されたコンパイラ70により実施することができる。図7に示される実施形態は、各レジスタについて別個の最終使用インジケータ命令が生成される、図6を参照して説明されるプロセスと比べると、最終使用インジケータ命令の挿入と関連したオーバーヘッドが低減する。図7に示されるプロセスにおいて、最終使用が認識されたレジスタのリストが保持される。このリストは、「保留中最終使用レジスタ・リスト」と呼ばれる。最終使用インジケータ命令をオブジェクト・コードに付加する前に、試験を実施して、保留中最終使用レジスタ・リスト上のレジスタについての最終使用を示す最終使用インジケータ命令を発行することが、魅力的なトレードオフを提示するかどうかを判断する。コンパイラにより考慮されるトレードオフは、レジスタの解放により達成される性能上の利点に対する、付加的な命令を発するコスト、及び/又は解放されたレジスタを再び使用するときの再割り当てコストを含むことができる。トレードオフはまた、有用な値を保持しないレジスタにおける一時的障害の回復コストを減らすことに起因する信頼性及び可用性の改善を含むこともできる。トレードオフの確認は、予想されるメトリック(性能、信頼性)を閾値に対して比較することにより実施することができる。メトリックは、保留中最終使用レジスタ・リスト上の各レジスタについてのメトリックを加算して、メトリックの総計を生成することにより、求めることができる。個々のレジスタについてのメトリックは、アーキテクテッド・リソース(例えば、レジスタ)への次の書き込みが行われ、最終使用を認識するまでの命令の数を判断することにより、求めることができる。メトリックは、これらに限定されるものではないが、レジスタ・キャッシュ管理、リネーミング効率、及び/又はデコード時間命令最適化のような態様から得られる性能の改善の推定値とすることができる。さらに、閾値は、ターゲット・プロセッサのマイクロアーキテクチャに基づいた定数とすることができ、ここで定数は、付加的な命令を発するコストを表す。閾値及びメトリックはプログラム可能であり、強化されたコンパイラ70がオブジェクト・コードを生成する前に固定することができ、IRの特徴に基づいて、強化されたコンパイラ70により調整することができ、及び/又は生成されるオブジェクト・コードの特定の予想される動作環境に合わせて調整することができる。
当業者であれば、代替的な実施形態において、スケジューリングが完了した後、最終使用インジケータの発行を実施できることを理解するであろう。この場合、メトリックは、値に割り当てられたアーキテクテッド・リソースに対する次の書き込みが行われ、予め生成されたスケジュールに基づき最終使用を認識するまでのサイクル数の関数として求められる。閾値は、スケジュールの関数として(例えば、命令の挿入が、スケジュールに付加的な待ち時間を導入するかどうか)求められる。
図7を参照すると、処理はブロック702で開始し、ブロック704において、コンパイラ内の命令スケジューラに従って、オブジェクト・コードに書き込まれる次の命令を選択する。次の命令は、1つ又は複数の命令のIRから選択される。ブロック706において、次の命令が発行される。ブロック708において、ブロック706の発行された次の命令において指定されたターゲット・レジスタを、保留中最終使用レジスタ・リストから除去する。これは、発行された次の命令のターゲット・レジスタのアーキテクテッド・レジスタが、もはや使用されなくなった(又は死んでいる)以前の生存区間に対応しておらず、むしろ発行された命令のターゲット・レジスタへの書き込みで開始した新しい生存区間に対応しているという事実に対応する。ブロック710において、次の命令内のソース・オペランドはDFGにおける生存区間(すなわち、レジスタ値)(発行された次の命令の全てのターゲット・レジスタを除く)の最終使用を表すかどうかを判断する。ブロック710において、ソース・オペランドがレジスタの最終使用を表すと判断された場合、次に、処理はブロック712に続き、そこでレジスタを保留中最終使用レジスタ・リストに付加する。ブロック714において、「保留中最終使用レジスタ」リスト上の全てのレジスタについての累積コスト・メトリック(例えば、保留中最終使用レジスタ・リスト上のレジスタの全てについての、例えばレジスタなどのアーキテクテッド・リソース使用までの距離の和)が、コスト閾値を上回るかどうかを判断する。
ブロック714において、累積コスト・メトリック(例えば、保留中最終使用レジスタ・リスト上の全てのレジスタについてのアーキテクテッド・リソースの使用までの距離の和)がコスト閾値を上回ると判断された場合、次に、処理は、保留中最終使用レジスタ・リスト上のレジスタの最終使用を示す命令をオブジェクト・コードに発行するブロック716に続く。ブロック718を実施して、そのレジスタを保留中最終使用レジスタ・リストから除去する。次に、処理はブロック720に続き、オブジェクト・コード内に含ませるための命令がIR内にさらに存在するかどうかを判断する。付加的な命令が存在しない場合、次に、処理はブロック722で完了する。付加的な命令が存在する場合、次に、処理はブロック704に続き、そこで次の命令を選択する。ブロック714において、累積コスト・メトリック(例えば、保留中最終使用レジスタ・リスト上の全てのレジスタについてのアーキテクテッド・リソースの使用までの距離の和)がコスト閾値を上回らないと判断された場合、次に、処理はブロック720に続き、オブジェクト・コード内に含ませるための命令がIR内にさらに存在するかどうかを判断する。付加的な命令が存在しない場合、次に、処理はブロック722で完了する。付加的な命令が存在する場合、次に、処理はブロック704に続き、そこで次の命令を選択する。
ブロック710において、ソース・オペランドがレジスタの最終使用を表さないと判断された場合、次に、処理はブロック720に続き、オブジェクト・コード内に含ませるための命令がIR内にさらに存在するかどうかを判断する。付加的な命令が存在しない場合、次に、処理はブロック722で完了する。付加的な命令が存在する場合、次に、処理はブロック704に続き、そこで次の命令を選択する。
当業者であれば、最終使用を示すために追加の命令を発行することとそこから得られる利点の間のトレードオフを説明するように記述された方法を用いて、レジスタの最終使用を既存の命令の一部として示す、実施形態と関連したオーバーヘッドをモデル化できることも理解するであろう。例えば最終使用インジケータが命令プリフィックスを介して指定される命令セットを用いてこの方法を実施する場合、これらに限定されるものではないが、フェッチ帯域幅の増大及びデコード帯域幅の可能な低減のようなオーバーヘッドをモデル化することができる。
当業者であれば、本明細書において実施形態がレジスタに関して説明されたが、本明細書に含まれる教示と併せて、他のアーキテクテッド・リソース(例えば、ライトバック(write back)用キャッシュ若しくは最終使用が発生したキャッシュ・ラインにおいてライトバックから除外することができ、かつ、キャッシュ・コヒーレンス・プロトコル・スヌープから除外することができ、又は、例えば非特許文献6により教示されるように、スヌープ・フィルタを用いてこうしたプロトコルからフィルタリング除去することができる、キャッシュ内のストレージ・アドレス)を用い得ることも理解するであろう。
強化されたコンパイラ70のようなコンパイラはまた、オブジェクト・コード・モジュールのプロローグ及びエピローグを修正して、関数呼び出しにわたって生存状態の完全性を保持することができる。修正により、コンパイラが、ABI規約に基づいて、生存状態を有するリンケージ・コードを生成することが可能になる。PowerPC(登録商標)に関するABI規約は、レジスタを、不揮発性(例えば、GPR14−GPR31)、揮発性(例えば、GPR3−GPR12)、専用(例えば、GPR1−GPR2)、及び予約済み(例えば、GPR 13)に分類する。System zに関する浮動小数点ABI規約は、f0−f7を揮発性として、及びf8−f15を呼び出し先退避(callee-saved)として指定する。
ABI規約によれば、幾つかのレジスタは、関数の戻り値にわたって揮発性であるように定められ(すなわち、呼び出される関数は、これらのレジスタにおける値に上書きすることができる)、呼び出し関数は、関数呼び出しを実行する前に、いずれかのデータをこれらの揮発性レジスタに保存する必要がある。揮発性レジスタの一部は、関数の入口上に所定の値を含む(対応するパラメータが存在する場合)。同じくABI規約によれば、他のレジスタは、関数の戻り値にわたって不揮発性であり、関数呼び出しを実行する前に、不揮発性レジスタのデータ・コンテンツを保存する必要はない。不揮発性レジスタは、呼び出し先(callee)(すなわち、呼び出される関数又は呼び出されるコード)により使用できるが、これらを、使用の前に保存し、呼び出し元(caller)(すなわち、呼び出し関数又は呼び出しコード)に戻る前に復元させる必要がある。不揮発性レジスタが呼び出し元において使用されない場合、これらは呼び出し先により使用されない限り及び呼び出し先により使用されるまで、使用されないままである。不揮発性レジスタが呼び出し元により使用され、かつ呼び出し先により使用される場合、レジスタは、呼び出し先により最初に使用されるまで、プロローグ内に値を保存した後使用されない。当業者であれば、スケジューリングされたプロローグの場合、値は、それが格納された時点で使用されなくなることを理解するであろう。不揮発性レジスタが呼び出し先により使用される(しかし、呼び出し元によっては使用されない)場合、エピローグにより古い値を復元させることによって、値が生存しているように見える。
以下の例は、別個にコンパイルされた関数F及びGを含む。関数F(呼び出し元)は、関数G(呼び出し先)を呼び出すためのコードを含む。ABI規約に従うと、関数Fは、関数Gを呼び出す前に、関数Fにより現在使用されているいずれかの揮発性レジスタの値を保存する。関数Gのプロローグ(すなわち、関数の入口における)は、関数Gにより更新されたあらゆる不揮発性レジスタを保存するための命令を含む。関数Gが処理を完了すると、エピローグ・コードを実行して、不揮発性レジスタの値を復元し、これらが関数Gに入るときに有していたのと同じ値を有するようにする。プロローグが処理を完了した後、関数Gは、制御を関数Fに戻す。関数Fは、関数Gから制御を取り戻すと直ちに、揮発性レジスタの値を復元し、関数Gを呼び出す前にこれが有していたのと同じ値を有するようになる。不揮発性レジスタXは、関数Gにより使用されるが、関数Fによっては使用されないと仮定する。関数Gは、関数Fが不揮発性レジスタXを使用するかどうかを知らず、関数Gは、入口においてレジスタXのコンテンツを保存し、出口においてレジスタXの値を復元させる。関数Fに戻ると、関数Gのプロローグにおいて復元が実行されたため、レジスタXは使用されているように見える。従って、レジスタXは、関数Gに入る際に使用されず、関数Gから出る際に使用されるため、矛盾が生じる。この矛盾のために、使用されていないレジスタが使用されているように見え、従って、リソースを消耗する。この矛盾を除去することにより、付加的な使用されていないレジスタの割り当てを解除する(又は、割り当ての解除を考慮する)能力がもたらされる。
ここで、関数呼び出しにわたるレジスタ生存情報の生成を参照すると、コード生成は、少なくとも2つの一般的な方法を用いて、コンパイラにより実施され得る。第1の方法は、(上述のように)ABI規約に従って、DFGにおいて生存を表示し、次いで、最終使用インジケータを発行することである。この第1の方法は、呼び出し先により保存及び復元される(そして復元後、復元された値は、それが呼び出し元において使用されていなくても「生存している」ように見える)呼び出し先退避レジスタを処理する例外により、全てのシナリオに対処する。関数の戻りの際、使用されないレジスタが使用されるレジスタのように見えることに関するこの問題を回避するために、本明細書で説明される第2の方法は、ABI規約に従って使用されていないレジスタをマーク付けするために、呼び出しサイト(call site)及び/又はプロローグ及びエピローグの一部としてコードを生成する。
第1の方法の一実施形態は、ABI規約に従って、全てのABIレジスタが、プロローグの始め及びエピローグの終わりに、生存している又は揮発性として適切に示されることを保証することを含む。プロローグ及びエピローグは、コンパイラによりIRに挿入される。コードをコンパイラにより付加して、呼び出し元において使用されていなかった呼び出し先退避レジスタに関する生存状態を保存するための特別な処理を行うことができる(例えば、以下に説明されるテンプレート・ベースの方法の一態様に従って)。当業者であれば、この手法と共に上記で概説された方法をどのように用いるかを理解するであろう。IRベースの関数呼び出し、エピローグ及びプロローグ生成と併せたABI処理の例示的な実施形態においては、関数の始めに、前述された保留中最終使用レジスタ・リストを揮発性の使用されていない(非パラメータ)レジスタのリストに初期化し、関数の入口において即時に最終使用インジケータ命令を発行するかどうかの試験を実施する。
同様に、当業者であれば、図7に関して上述された保留中リスト方法と併せて、呼び出し元において使用されなかった呼び出し先退避レジスタについての生存状態を保存するための特別な処理を実施するために、コードをどのように生成するかを理解するであろう。1つの方法は、既知の呼び出し元についての付加的な情報を(例えば、グローバル・プログラム最適化と共に)作成し、コンパイラが、全ての呼び出し元のレジスタの生存と一致する付加的な最終使用インジケータを生成するようにすることである。一実施形態においては、実行時に使用されていないレジスタのリストを格納するために、プロローグが、命令シーケンスにより拡張される。さらに、実行時に使用されていないレジスタのリストを復元するために、エピローグが命令シーケンスにより拡張される。この実施形態によれば、命令セットは、2つの付加的な命令:すなわち、ストア(store)命令(例えば、STORE LIVENESS D,B)及びロード(load)命令(例えば、LOAD LIVENESS D,B)をサポートする。一実施形態においてストア命令は、生存ベクトルをメモリに格納(ストア)し、ロード命令は、メモリから生存ベクトルをロードし、生存ベクトルは、レジスタに対応するビットを含む。
例示的なSTORE LIVENESS命令は、複数のアーキテクテッド・リソースに対応する生存データを格納する。1つの実施形態によれば、単一のビットが、各々のアーキテクテッド・リソースの使用/不使用を示すために用いられる。1つの実施形態において、生存ベクトルは、変位D及びベース・レジスタBの和に対応するアドレス「D,B」又は「D(B)」により指定されるメモリ位置(Power ISAにおけるD−Formとしても知られる)に格納される。当業者であれば、Power ISAのX form、又は、変位、ベース及び指標レジスタを指定する「D(B,X)」のようなSystem z ISAに従ったメモリ形式、又はいずれかの他の周知のアドレス指定形式といった他のアドレス指定形式を用い得ることを理解するであろう。
例示的なLOAD LIVENESS命令は、複数のアーキテクテッド・リソースに対応する生存データをロードする。1つの実施形態によれば、単一のビットが、各々のアーキテクテッド・リソースの使用/不使用を示すために用いられる。1つの実施形態において、生存ベクトルは、変位D及びベース・レジスタBの和に対応するアドレス「D,B」又は「D(B)」により指定されるメモリ位置(Power ISAにおけるD−Formとしても知られる)からロードされる。当業者であれば、Power ISAのX form、又は、変位、ベース及び指標レジスタを指定する「D(B,X)」のようなSystem z ISAに従ったメモリ形式、又はいずれかの他の周知のアドレス指定形式といった他のアドレス指定形式を用いることができることを理解するであろう。以前生存していたアーキテクテッド・レジスタに対応して、レジスタが非生存である(すなわち、死んでいる又は使用されていない)という表示がロードされた場合、そのアーキテクテッド・リソースと関連した物理リソースの割り当てを解除することができる。以前に生存していなかった(死んでいた又は使用されていなかった)アーキテクテッド・レジスタに対応して、レジスタが生存している(すなわち、使用されている)という表示がロードされた場合、仕様エラーを作成し、リソースを使用されていないものとして維持し、対応する生存表示を無視して更新せず、又は、リソースに所定の値又は未定義の値を割り当て、ロードすることができる。
全てのレジスタについての生存状態を復元することが望ましくないことがある。例えば、レジスタが、関数に入る際に使用されず、関数の出口上に計算された関数結果を支持することがある。単に生存ベクトル全体を復元することにより、計算された関数結果が失われることがある(例えば、計算された結果の値を保持している物理レジスタの割り当てを解除することにより)。一実施形態によれば、コンパイラは、プロローグ及びエピローグ内に付加的なコードを生成して、生存ベクトルを更新する。関数プロローグにおいて、STORE LIVENESS 40(SP);OI 40(SP),128のような命令シーケンスを生成して、生存を位置40+SP(すなわち、スタック・ポインタから40バイト)に格納し、次に、指定されたアドレス40+SPにおける格納された値に128をOR−Immediateし、アーキテクテッド・リソースに対応する最左端(最上位)ビットを、「1」はリソースが使用されていることを示す場合の生存ベクトルの1つの定義に従ってそれが使用されていることを示す「1」に設定することにより、生存ベクトルがその後のLOAD LIVENESS命令により再ロードされるとき、第1のアーキテクテッド・リソースに、「生存している」の生存状態がロードされるようにする。関数エピローグにおいて、LOAD LIVENESS 40(SP)のような命令シーケンスを生成し、プロローグにおける命令によって格納された生存状態を復元する。プロローグにおける命令シーケンスは、レジスタ0についての生存状態を修正し、保存する前にこれが生存している(例えば、これが結果値を支持できるので)ことを示すことに留意されたい。この例は、生存しているレジスタを示すために、ベクトル設定ビットが使用されると仮定する。
当業者であれば、呼び出し元の状態に関係なく、他のレジスタを同様に未定義にできること、及び、これを、load liveness命令の後に別個の最終使用インジケータを発行すること又はレジスタが非生存であることを強制するように生存ベクトルを修正することによって達成できることを理解するであろう。例えば、以下のコード・シーケンスは、呼び出し元から生存状態を格納し、レジスタ2が非生存であることを示す。関数プロローグにおいて、コンパイラにより、STORE LIVENESS 40(SP);NI 40(SP),(255−64)を生成して、生存を位置40+SP(すなわち、スタック・ポインタから40バイト)に格納し、次に、指定されたアドレス40+SPにおける格納された値に191でAND−Immediateし、アーキテクテッド・リソースに対応する最上位ビットから2番目のビットを、「1」はリソースが使用されていることを示し、かつ、「0」はリソースが使用されていないことを示す場合の生存ベクトルの1つの定義に従ってそれが使用されていないことを示す「0」に設定することにより、生存ベクトルがその後のLOAD LIVENESS命令により再ロードされるとき、第2のアーキテクテッド・リソースに、「生存していない」の生存状態がロードされるようにする。関数エピローグにおいて、LOAD LIVENESS 40(SP)のような命令シーケンスを生成し、プロローグにおける命令により保存された生存ベクトルを復元する。
別の例において、レジスタをベクトルに付加し、かつ、ベクトルから除去する。関数プロローグにおいて、コンパイラにより、STORE LIVENESS 40(SP);OI 40(SP),128;NI 40(SP),(255−64)を生成し、「STORE LIVENESS」によって格納された生存ベクトルを修正して、生存ベクトル内の最上位ビットに対応する第1のリソースを再ロード時に使用されるものとして示し、生存ベクトル内の2番目の上位ビットに対応する第2のリソースを再ロード時に使用されないものとして示すよう強制する。関数エピローグにおいて、LOAD LIVENESS 40(SP)のような命令シーケンスを生成し、プロローグにおける命令によって保存された生存ベクトルを復元する。
更に別の実施形態において、コンパイラは、コードの生成中、1つ又は複数のレジスタを生存している又は死んでいるものとして自動的にオーバーライドするためのマスク・ビットをさらに含む命令セットについてのコードを生成する。1つの命令符号化は、2つのマスク・フィールド:LOAD LIVENESS D(B),M1,M2を有し、ここで、生存ベクトルは、値LIVENESS=((MEM[D+B]) OR M1)AND M2に設定される。
別の態様において、メモリは値:MEM[B+D]=LIVENESS OR M,LOAD LIVENESS D(B),Mに設定され、生存ベクトルが値:LIVENESS=MEM[D+B] AND Mに設定される場合、STORE LIVENESS D(B),M1のように、ロード及びストアの各々が1つのマスク・フィールドを有し、ストア命令は、メモリに格納する前にマスクとLIVENESSレジスタ値とのOR(論理和)演算を行い、ロード命令は、生存を更新する前に、ロードされたメモリ値とマスクとのAND(論理積)演算を行う。当業者であれば、逆に、STORE LIVENESSと共にAND演算を行い、LOAD LIVENESSと共にOR演算を行い得ることを理解するであろう。RISCアーキテクチャにおいては、STORE LIVENESS及びLOAD LIVENESSを、move from SPR及びmove to SPRに置き換えることができる(ここで、示されるSPRは、生存を示す専用レジスタ(special purpose register)を指す)。少なくとも1つの実施形態において、生存レジスタがターゲットである場合のmove to SPRは、汎用レジスタの最終使用を示している。
ABIに従って死んでいるレジスタにマーク付けするように、呼び出しサイト及び/又はプロローグ及びエピローグの一部としてコードを生成する第2の方法の実施形態を次に説明する。この第2の方法は、ABIの挙動を反映するコード生成の代替的な方法である。1つの実施形態において、この第2の方法は、コードについての生存状態を生成するために他の方法では更新されなかったコード生成と併せて使用される。別の実施形態で、この第2の方法は、テンプレートに基づいてプロローグ及びエピローグを生成するコード生成方法と併せて命令を示す、生存の生成を可能にするためのテンプレートを生成するために使用される。関数呼び出し境界は、多数の無効レジスタを把握し、コード生成におけるレジスタ生存能力を利用するための魅力的な点である。
図8は、例示的な実施形態による、コンパイラによりプロローグに挿入される例示的な命令のフロー図を示す。一実施形態において、強化されたコンパイラ70が、命令をプロローグに挿入する。ブロック802において、コード・モジュールに入るとき、スタック・フレームを割り当てるための命令を挿入する。ブロック804において、不揮発性レジスタのどれが、呼び出し元プログラムにより現在生存しているとしてマーク付けされ、使用されていないとしてマーク付けされたかを示すためにレジスタ生存状態を格納する命令が、プロローグに挿入される。少なくとも1つの実施形態において、生存ベクトルは、本明細書で説明されるSTORE LIVENESS命令と共に、スタック・フレーム内に格納される。
ブロック806において、呼び出し先プログラムにより更新される不揮発性レジスタを格納するための命令をプロローグ内に挿入する。一実施形態において、非生存レジスタへのアクセスにより、エラー通知イベントが生成される。ストアが必要な場合には一部のユーザから及びストアが不必要である場合には他のユーザからコードを呼び出すことができるので、コンパイラは、ストア命令を使用して、スピル・コードについての通知を抑制する。ストアが不必要である場合にエラー通知を回避し、プログラミング・エラーを典型的に反映するシナリオを反映するために、コンパイラは、エラーを抑制する新しいストアを使用し、非生存レジスタをいつ格納するかを示す。
ブロック808において、全ての揮発性の非パラメータ・レジスタを使用されないとしてマーク付けするための命令を挿入する。一実施形態において、この形成をロードするために、コンパイラにより単一のインジケータ命令が生成される。例えば、「LOAD LIVENESS IMMEDIATE」又は「LOAD LIVENESS from a constant pool」などの命令をプロローグに挿入することができる。
ブロック810において、全ての格納された呼び出し先退避レジスタを使用されないとしてマーク付けするための命令を挿入する。これは、呼び出し先退避レジスタの各ストアにおける最終使用を表示すること、又は代替的にマスクをロードすること(例えば、LOAD LIVENESSと併せて、又は、例えば同じく呼び出し先退避レジスタを格納するCALL命令などの別の命令の一部として)によって、実施することができる。一実施形態において、ABIに従った揮発性及び保存されている呼び出し先退避レジスタに関する揮発性の両方に基づいた生存を更新するために、LOAD LIVENESS IMMEDIATE又はLOAD LIVENESS命令が挿入される。
呼び出し先退避レジスタについての生存性を格納するように適合された実施形態において、生存レジスタは、プロローグの一部として(及び、呼び出し先により保存された呼び出し先退避レジスタの不使用を示す前に)格納される。これは、前述のように実施することができる。
図9は、例示的な実施形態による、コンパイラによりエピローグに挿入される例示的な命令のフロー図を示す。一実施形態において、命令が、強化されたコンパイラ70によりエピローグに挿入される。ブロック902において、呼び出し先によりプロローグ内に保存された不揮発性レジスタを復元するための命令を挿入する。ブロック904において、コンパイラは、命令をエピローグに挿入し、プロローグ内に保存された、保存された不揮発性レジスタと関連した生存状態を復元するための命令をエピローグ内に挿入する。従って、この命令は、呼び出し先退避レジスタについての呼び出し元の生存状態を復元する。1つの実施形態において、CALL命令が、生存状態をスタック上に保存するために用いられた場合、スタックから自動的に復元するために、RET命令が用いられる。ブロック906において、戻り値を含まない、使用されていない揮発性レジスタとしてマーク付けするための命令が挿入される。ブロック908において、コンパイラは、フレーム・スタックの割り当てを解除するための命令を挿入する。
1つの実施形態において、全ての揮発性レジスタ(関数戻りレジスタを除く)を更新するための命令(例えば、LOAD LIVENESS、LOAD LIVENESS IMMEDIATE、若しくはサブルーチン呼び出しを実施し、呼び出し挿入の一部として関数プロローグと一般的に関連付けられた操作を実施するCALL命令、又は、最初に生存ベクトルをGPR内にロードし、次いでLIVENESS SPR内に移動する、本発明の少なくとも1つのRISC実施形態に従ったMTSPR「move to SPR(special purpose register)」命令)が挿入される。1つの実施形態において、命令は、関数が戻り値を有さない場合、戻りレジスタが非生存(又は使用されていない)として示されると指定する。別の実施形態において、戻りレジスタは、決して不使用としては示されない。
オブジェクト・コードの実際の実行の際、少なくとも1つのシナリオにおいて、生存していないレジスタにアクセスする条件は、プログラミング・エラーに対応し得る。従って、可能な通知イベント(例えば、デバッガ、オペレーティング・システム、ハイパーバイザ、又は別の監督プログラムの1つへの例外)を作成して、可能なプログラミング・エラーを示すように、マイクロプロセッサの実装を適合させることができる。
しかしながら、空きレジスタへの全ての参照がプログラミング・エラーではない。プログラムは、レジスタが使用中であるかどうかを知らない場合、レジスタを保存することを必要とする。従って、プログラムは続行し、(例えば、コンテキスト・スイッチ又は関数呼び出し/戻りの際に)これらのレジスタをメモリに保存(スピル)し、後で再ロード(フィル)することができる。一実施形態の一態様において、可能な例外をオーバーライドし、デフォルトの戻りを強制するために、構成レジスタ及びモード・スイッチが提供される。本発明の別の態様においては、アプリケーションによる挙動を選択するために、(例えば、PSW、CR、又はMSR状態レジスタ又は実装制御型HIDビットにおける)制御ビットが設定される。別の態様において、プリフィックスは、使用されていない参照が生じ得ることを示す能力を提供する。更に別の態様において、明確に定義されたオペコードを有する命令は、このように解放され、割り当てが解除されたレジスタにアクセスする能力を有する。
この管理の別の態様においては、非生存のディスエーブルにされたオペランドに対応する通知を作成又は抑制する、通知作成命令及び非通知生成命令が提供される。コンパイラは、コンテキスト・スイッチ又は呼び出し先退避レジスタのスピル/フィル・シーケンスが実施された際に、プログラミング・エラー・インジケータ・イベント(例えば、上記の例外)を作成しないが、むしろデフォルト値を戻す命令を生成する。本発明の一態様によれば、コンパイラは、説明された手段(制御の設定、プリフィックスの使用、又は特別なオペコードの使用)の1つを用いて、使用されていないレジスタを参照することができる重要な操作を実施する。例として、makecontext/getcontext操作又はsetjump/longjump操作の際の、関数プロローグ及びエピローグにおける呼び出し先退避(不揮発性)レジスタに対するレジスタの保存及び復元が挙げられる。これらの操作の別の態様において、コンパイラ・ライブラリ又は関数は、レジスタ生存状態の要約を保存するため(「STORE LIVENESS」)及びレジスタが再ロードされる場合にこのような情報を復元するため(「LOAD LIVENESS」)、コードを発行及び/又は使用及び/又は実行するようにも随意的に適合される。
他の態様において、オペレーティング・システム及びハイパーバイザは、類似の命令シーケンスを用いて、コンテキストをコンテキスト・スイッチ内に保存し、復元する。このような使用の一態様において、オペレーティング・システム及びハイパーバイザは、プログラミング・エラーがなく、かつ、決してプログラミング・エラー通知を作成しないが、むしろ常にデフォルト値に置き換わると予想される。このことは、z/OS(登録商標)及びAIX(登録商標)のような既知の非常に信頼性が高いオペレーティング・システムにとって望ましい。オペレーティング・システム(OS)が、OS内に多数のプログラミング・エラーが存在すると予想する別の態様においては、アプリケーション・プログラムに類似した方法が用いられ、OS及びハイパーバイザは、(例えば、通知方法を用いて)プログラミング・エラーを表示するように適合され、かつ、使用されていない/空き/割り当て解除されたレジスタを参照することが知られている、コンテキスト・スイッチのような操作についてのプログラミング・エラー通知を作成しないように適合された命令を使用する。これらの方法は、比較的不安定なOSにとって望ましいものである。さらに、z/OS(登録商標)及びAIX(登録商標)のような非常に安定したOSの製造業者は、デバッグを助け、z/OS(登録商標)及びAIX(登録商標)オペレーティング・システムにおける周知の業界トップの安定性を保持するために、それらの長期にわたる品質保証サイクルの間、通知をイネーブルにするよう選択することができる。別の態様において、モードを切り換えることができる。例えば、より安定したベースのLinux(登録商標)オペレーティング・システムがOS環境において実行される外部モジュール及びドライバを呼び出すことができるLinux(登録商標)オペレーティング・システムにおいて、オペレーティング・システムは、ドライバ又はモジュールの実行中、プログラミング・エラー通知がイネーブルにされるモードに切り換わることができる。
強化されたコンパイラ70により実施することができる種々の最適化を示すために、本明細書において特定のコード例が使用された。これらの例は、本発明の実施形態を制限することを意図するものではなく、当業者であれば、本明細書で説明される処理を実施するために、他のコード・シーケンスを用い得ることを認識するであろう。
当業者により認識されるように、本発明の態様は、システム、方法又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形をとることができ、これらは全て本明細書において一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明の態様は、具体化されたコンピュータ可読プログラム・コードを内部に有する1つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形をとることができる。
1つ又は複数のコンピュータ可読媒体のあらゆる組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体であってもよく、又はコンピュータ可読ストレージ媒体であってもよい。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子的、磁気的、光学的、電磁的、赤外線若しくは半導体のシステム、装置若しくはデバイス、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例(非網羅的なリスト)は、以下もの、すなわち、1つ又は複数のワイヤを有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク型読み出し専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、又は上記のいずれかの適切な組み合わせを含む。本文書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって用いられる又はそれらに関連して用いられるプログラムを収容又は格納することができる、いずれかの有形媒体とすることができる。
コンピュータ可読信号媒体は、具体化されたコンピュータ可読プログラム・コードを、例えばベースバンド内に又は搬送波の一部としてその中に有する、伝搬データ信号を含むことができる。このような伝搬信号は、これらに限定されるものではないが、電磁的形態、光学的形態又はこれらのいずれかの適切な組み合わせを含む種々の形態のうちのいずれかをとることもできる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、かつ、命令実行システム、装置若しくはデバイスによって用いられる又はそれらに関連して用いられるプログラムを伝達、伝搬又伝送することができる、いずれかのコンピュータ可読媒体とすることができる。
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、RF等、又は上記のいずれかの適切な組み合わせを含む、いずれかの適切な媒体を用いて伝送することができる。
本発明の態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Java(登録商標)、Smalltalk(登録商標)、C++等のようなオブジェクト指向プログラミング言語、及び「C」プログラミング言語のような従来の手続き型プログラミング言語、又は同様のプログラミング言語、1つ又は複数のプログラミング言語のいずれかの組み合わせで記述することができる。プログラム・コードは、全体がユーザのコンピュータ上で実行される場合もあり、独立型ソフトウェア・パッケージとして、一部がユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は全体が遠隔コンピュータ若しくはサーバ上で実行される場合もある。後者のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの(例えば、インターネット・サービス・プロバイダを用いるインターネットを通じた)接続がなされる場合もある。
本発明の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して以下で説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装することができることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサにより実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装するための手段を生成するようにすることができる。
これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスに特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で、コンピュータ実装プロセスを生成するための一連の動作ステップを実施させて、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装するためのプロセスを提供するようにすることもできる。
図中のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能性、及び動作を示す。これに関して、フローチャート又はブロック図中の各ブロックは、指定された論理機能を実施するための1つ又は複数の実行可能命令を含むコードの、モジュール、セグメント、又は部分を表すことができる。さらに、幾つかの代替的実施形態において、ブロック内に記述された機能は、図中に示したのとは別の順序で実行することができることに留意されたい。例えば、連続して示した2つのブロックは、実際には、実質的に並列に実行することができ、又はブロックは場合により、関与する機能性に応じて逆の順序で実行することができる。さらに、ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図中のブロックの組み合わせは、指定された機能又は動作を実行する専用ハードウェアをベースとするシステム、又は専用ハードウェアとコンピュータ命令との組み合わせによって実施できることにも留意されたい。
本明細書で用いられる用語は、特定の実施形態を説明することのみを目的とし、本発明を限定することを意図したものではない。ここで用いられる単数形の「1つの(a)」、「1つの(an)」及び「その(the)」という用語は、文脈が明確に他の場合を指示していない限り、複数形も含む。「含む(comprise)」及び/又は「含んでいる(comprising)」という用語は、本明細書で用いられるとき、記述された特徴、整数、ステップ、操作、要素、及び/又はコンポーネントの存在を指定するが、1つ又は複数の他の特徴、整数、ステップ、操作、要素、コンポーネント、及び/又はその群の存在又は付加を除外するものではないことが、さらに理解されるであろう。
下記の特許請求の範囲におけるすべての機能付き手段(ミーンズ・プラス・ファンクション)又は機能付き工程(ステップ・プラス・ファンクション)の対応する構造、材料、動作、及び均等物は、該当する場合には、具体的に請求される他の請求要素と組み合わせて本機能を実施するためのいずれかの構造、材料、又は動作を含むことを意図している。本発明の記載は、例示及び説明目的で提示されたが、網羅的であることを意図するものでも、開示された形態の発明に限定されることを意図するものでものでもない。当業者であれば、本発明の範囲及び精神から逸脱することなく、多くの修正及び変形が明らかであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明し、その他の当業者が企図される特定の使用に適した種々の修正を伴う種々の実施形態について本発明を理解できるように、選択され、説明された。
本明細書で示されるフロー図は、単に一例である。本発明の趣旨から逸脱することなく、この図及びその中に記載されたステップ(又は動作)に対して多くの変形が存在し得る。例えば、ステップを異なる順序で実行することもでき、又はステップを追加し、削除し又は修正することもできる。これらの変形の全ては、特許請求される発明の一部と見なされる。
本発明の好適な実施形態を説明してきたが、現在及び将来の両方において、当業者が、以下の特許請求の範囲内に入る種々の改善及び強化を行い得ることが理解されるであろう。これらの特許請求の範囲は、最初に記載される発明の適正な保護を維持するよう解釈されるべきである。
10:クラウド・コンピューティング・ノード
12:コンピュータ・システム/サーバ
14:外部デバイス
16:処理ユニット(プロセッサ)
18:バス
20:ネットワーク・アダプタ
22:I/Oインターフェース
24:ディスプレイ
28:システム・メモリ
30:ランダム・アクセス・メモリ(RAM)
32:キャッシュ・メモリ
34:ストレージ・システム
40:プログラム/ユーティリティ
42:プログラム・モジュール
50:クラウド・コンピューティング環境
54A:携帯情報端末(PDA)又は携帯電話
54B:デスクトップ・コンピュータ
54C:ラップトップ・コンピュータ
54N:自動車コンピュータ・システム
60:ハードウェア及びソフトウェア層
62:仮想化層
64:管理層
66:ワークロード層
70:強化されたコンパイラ

Claims (8)

  1. コンピュータにより、複数のソース・オペランドを含む内部表現からオブジェクト・コードを生成することを含み、前記生成することは、
    前記内部表現内の各ソース・オペランドについて、
    前記ソース・オペランドに関して最終使用が発生したかどうかを判断することであって、前記判断することは、データ・フロー・グラフにアクセスして、ある生存区間の全ての使用が発行されたかどうかを判断することを含む、判断することと、
    前記ソース・オペランドに関して最終使用が発生したと判断することに応答して、最終使用の表示のために前記ソース・オペランドと関連したアーキテクテッド・リソースにマーク付けすることと、
    前記マーク付けすること及びコスト・メトリックがコスト閾値を上回ることに応答して、前記アーキテクテッド・リソースに関する最終使用の表示を生成することとを含み、
    さらに、命令及び前記最終使用の表示を前記オブジェクト・コード内に発行することを含む、
    方法。
  2. 前記アーキテクテッド・リソースはレジスタである、請求項1に記載の方法。
  3. 前記ソース・オペランドの前記最終使用と関連した命令は、前記最終使用の表示を含むように修正される、請求項1に記載の方法。
  4. 前記ソース・オペランドの前記最終使用と関連した命令は、前記命令内で指定された修正された命令のオペコード、フラグ、及びマスクのうちの少なくとも1つを、プリフィックス命令、命令プリフィックス、ポストフィックス命令、又は命令ポストフィックスとして含むように修正される、請求項3に記載の方法。
  5. 前記アーキテクテッド・リソースについての前記最終使用の表示は、別個の命令である、請求項1に記載の方法。
  6. 前記コスト・メトリックは複数のアーキテクテッド・リソースについての累積コスト・メトリックであり、前記累積コスト・メトリックは複数の最終使用の表示に対応する、請求項に記載の方法。
  7. 請求項1〜請求項のいずれかに記載の前記方法の全てのステップを実行するように適合された手段を含むシステム。
  8. コンピュータ・プログラムがコンピュータ・システム上で実行されたとき、請求項1〜請求項のいずれかに記載の方法の全てのステップを実行するための命令を含む、コンピュータ・プログラム。
JP2014532548A 2011-10-03 2012-10-01 レジスタの生存を示すコンパイルされたコードの生成 Active JP5957084B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/251,803 US8756591B2 (en) 2011-10-03 2011-10-03 Generating compiled code that indicates register liveness
US13/251,803 2011-10-03
PCT/IB2012/055252 WO2013050922A1 (en) 2011-10-03 2012-10-01 Generating compiled code that indicates register liveness

Publications (2)

Publication Number Publication Date
JP2014528603A JP2014528603A (ja) 2014-10-27
JP5957084B2 true JP5957084B2 (ja) 2016-07-27

Family

ID=47993900

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014532548A Active JP5957084B2 (ja) 2011-10-03 2012-10-01 レジスタの生存を示すコンパイルされたコードの生成

Country Status (6)

Country Link
US (2) US8756591B2 (ja)
JP (1) JP5957084B2 (ja)
CN (1) CN104025049B (ja)
DE (1) DE112012003716B4 (ja)
GB (1) GB2510506B (ja)
WO (1) WO2013050922A1 (ja)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7350194B1 (en) * 2001-09-24 2008-03-25 Oracle Corporation Techniques for debugging computer programs involving multiple computing machines
WO2012025792A1 (en) * 2010-08-26 2012-03-01 Freescale Semiconductor, Inc. Optimization method for compiler, optimizer for a compiler and storage medium storing optimizing code
US9195501B2 (en) * 2011-07-12 2015-11-24 Qualcomm Incorporated Instruction culling in graphics processing unit
US9697002B2 (en) * 2011-10-03 2017-07-04 International Business Machines Corporation Computer instructions for activating and deactivating operands
US9372695B2 (en) 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US9348596B2 (en) 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
US9619230B2 (en) 2013-06-28 2017-04-11 International Business Machines Corporation Predictive fetching and decoding for selected instructions
US10496433B2 (en) 2014-11-24 2019-12-03 Red Hat, Inc. Modification of context saving functions
US9250878B1 (en) * 2014-11-24 2016-02-02 Red Hat, Inc. Function attribute for dynamic stack allocation
US9753863B2 (en) * 2014-12-27 2017-09-05 Intel Corporation Memory protection with non-readable pages
US10055209B2 (en) 2015-01-12 2018-08-21 Red Hat, Inc. Resource closing
GB2543302B (en) * 2015-10-14 2018-03-21 Advanced Risc Mach Ltd Vector load instruction
US10452409B2 (en) * 2015-10-23 2019-10-22 Oracle International Corporation Universal adapter for native calling
US10275228B2 (en) * 2016-03-29 2019-04-30 International Business Machines Corporation Relaxing user-specified register constraints for improving register allocation
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
US10488911B2 (en) * 2016-11-01 2019-11-26 National Taiwan University Method and computing system of allocating registers
US10489382B2 (en) 2017-04-18 2019-11-26 International Business Machines Corporation Register restoration invalidation based on a context switch
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
US11010192B2 (en) 2017-04-18 2021-05-18 International Business Machines Corporation Register restoration using recovery buffers
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
US10782979B2 (en) 2017-04-18 2020-09-22 International Business Machines Corporation Restoring saved architected registers and suppressing verification of registers to be restored
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
US10540184B2 (en) 2017-04-18 2020-01-21 International Business Machines Corporation Coalescing store instructions for restoration
US10545766B2 (en) 2017-04-18 2020-01-28 International Business Machines Corporation Register restoration using transactional memory register snapshots
US10445216B2 (en) 2017-08-25 2019-10-15 Microsoft Technology Licensing, Llc Debugging program code at instruction level through emulation
US10671363B2 (en) 2018-10-31 2020-06-02 International Business Machines Corporation Generating code for function calls that use multiple addressing modes
US10671362B2 (en) 2018-10-31 2020-06-02 International Business Machines Corporation Generating code for function calls that use multiple addressing modes
US10915320B2 (en) 2018-12-21 2021-02-09 Intel Corporation Shift-folding for efficient load coalescing in a binary translation based processor
US11188334B2 (en) * 2019-12-02 2021-11-30 Microsoft Technology Licensing, Llc Obsoleting values stored in registers in a processor based on processing obsolescent register-encoded instructions
US11620116B2 (en) * 2021-04-30 2023-04-04 Saleforce, Inc. Programming language interoperability engine and enforcement in multi-tenant environments

Family Cites Families (83)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4763255A (en) 1984-10-31 1988-08-09 International Business Machines Corporation Method for generating short form instructions in an optimizing compiler
EP0423989A3 (en) 1989-10-16 1992-09-23 Hewlett-Packard Company Software compiler and linker with improved line number table
US5095526A (en) 1990-01-26 1992-03-10 Apple Computer, Inc. Microprocessor with improved interrupt response with interrupt data saving dependent upon processor status
US5303358A (en) 1990-01-26 1994-04-12 Apple Computer, Inc. Prefix instruction for modification of a subsequent instruction
JPH05173788A (ja) * 1991-06-21 1993-07-13 Toshiba Corp 計算機装置
US5539911A (en) 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
US5469572A (en) 1992-12-01 1995-11-21 Taylor; James M. Post compile optimizer for linkable object code
US5590352A (en) 1994-04-26 1996-12-31 Advanced Micro Devices, Inc. Dependency checking and forwarding of variable width operands
US5761514A (en) 1995-08-31 1998-06-02 International Business Machines Corporation Register allocation method and apparatus for truncating runaway lifetimes of program variables in a computer system
US5797014A (en) 1995-12-14 1998-08-18 International Business Machines Corporation Method for reducing processor cycles used for global offset table address computation in a position independent shared library
JP3711422B2 (ja) 1995-12-20 2005-11-02 セイコーエプソン株式会社 情報処理回路
US6059840A (en) 1997-03-17 2000-05-09 Motorola, Inc. Automatic scheduling of instructions to reduce code size
US6314511B2 (en) 1997-04-03 2001-11-06 University Of Washington Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers
JPH10283188A (ja) * 1997-04-03 1998-10-23 Matsushita Electric Ind Co Ltd プロセッサにおけるレジスタ保護方法
US6094719A (en) 1997-06-25 2000-07-25 Sun Microsystems, Inc. Reducing data dependent conflicts by converting single precision instructions into microinstructions using renamed phantom registers in a processor having double precision registers
JP3220055B2 (ja) 1997-07-17 2001-10-22 松下電器産業株式会社 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。
AU1809599A (en) 1997-12-11 1999-06-28 Digits Corp. Object code analysis and remediation system and method
US7565665B2 (en) 1998-09-09 2009-07-21 Microsoft Corporation Efficient linking and loading for late binding and platform retargeting
JP3837244B2 (ja) 1998-10-23 2006-10-25 松下電器産業株式会社 プログラムリンク装置及び方法
US20020073398A1 (en) 1998-12-14 2002-06-13 Jeffrey L. Tinker Method and system for modifying executable code to add additional functionality
US6189088B1 (en) 1999-02-03 2001-02-13 International Business Machines Corporation Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location
GB2349485B (en) 1999-04-23 2003-12-10 Ibm Application management
US6408433B1 (en) * 1999-04-23 2002-06-18 Sun Microsystems, Inc. Method and apparatus for building calling convention prolog and epilog code using a register allocator
GB9920911D0 (en) 1999-09-03 1999-11-10 Sgs Thomson Microelectronics A relocation format for linking
GB9920916D0 (en) 1999-09-03 1999-11-10 Sgs Thomson Microelectronics A relocation format for linking
GB2358491A (en) 1999-09-03 2001-07-25 Sgs Thomson Microelectronics A relocation format for linking
US6748589B1 (en) 1999-10-20 2004-06-08 Transmeta Corporation Method for increasing the speed of speculative execution
US7257806B1 (en) 1999-10-21 2007-08-14 Hewlett-Packard Development Company, L.P. System and method for efficiently passing information between compiler and post-compile-time software
US6449710B1 (en) 1999-10-29 2002-09-10 Stmicroelectronics, Inc. Stitching parcels
GB2363479B (en) 1999-11-01 2004-03-17 Sgs Thomson Microelectronics A linker using relocation sequences
US6721875B1 (en) 2000-02-22 2004-04-13 Hewlett-Packard Development Company, L.P. Method and apparatus for implementing a single-syllable IP-relative branch instruction and a long IP-relative branch instruction in a processor which fetches instructions in bundle form
US6687806B1 (en) 2000-06-15 2004-02-03 Advanced Micro Devices, Inc. Apparatus and method for generating 64 bit displacement and immediate values
US6748519B1 (en) 2000-06-15 2004-06-08 International Business Machines Corporation Method and apparatus for utilizing renamed registers based upon a functional or defective operational status of the register
US7168069B1 (en) 2000-07-12 2007-01-23 Stmicroelectronics, Inc. Dynamic generation of multimedia code for image processing
CA2321016A1 (en) 2000-09-27 2002-03-27 Ibm Canada Limited-Ibm Canada Limitee Interprocedural dead store elimination
EP1199629A1 (en) 2000-10-17 2002-04-24 STMicroelectronics S.r.l. Processor architecture with variable-stage pipeline
GB0029115D0 (en) 2000-11-29 2001-01-10 Sgs Thomson Microelectronics Assembling an object code module
JP2002182926A (ja) 2000-12-12 2002-06-28 Hitachi Ltd コンパイル方法及びコンピュータ読み取り可能な記録媒体
US7228403B2 (en) 2000-12-23 2007-06-05 International Business Machines Corporation Method for handling 32 bit results for an out-of-order processor with a 64 bit architecture
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US6950926B1 (en) 2001-03-02 2005-09-27 Advanced Micro Devices, Inc. Use of a neutral instruction as a dependency indicator for a set of instructions
US7299462B2 (en) 2001-05-07 2007-11-20 Stmicroelectronics Limited Relocation format for linking
US20030009750A1 (en) 2001-07-09 2003-01-09 Robert Hundt Optimizing an executable computer program having linkage functions
US20030079210A1 (en) * 2001-10-19 2003-04-24 Peter Markstein Integrated register allocator in a compiler
US20030154419A1 (en) 2002-01-10 2003-08-14 Binyu Zang Register renaming in binary translation using rollback and recovery
JP3856737B2 (ja) 2002-07-19 2006-12-13 株式会社ルネサステクノロジ データ処理装置
US7131017B2 (en) 2002-08-16 2006-10-31 Carnegie Mellon University Programmable pipeline fabric having mechanism to terminate signal propagation
US6934830B2 (en) 2002-09-26 2005-08-23 Sun Microsystems, Inc. Method and apparatus for reducing register file access times in pipelined processors
WO2004051450A2 (en) 2002-12-04 2004-06-17 Koninklijke Philips Electronics N.V. Software-based control of microprocessor power dissipation
US7310799B2 (en) 2002-12-31 2007-12-18 International Business Machines Corporation Reducing load instructions via global data reordering
US7543284B2 (en) 2003-04-22 2009-06-02 Transitive Limited Partial dead code elimination optimizations for program code conversion
US7805536B1 (en) 2003-05-23 2010-09-28 Juniper Networks, Inc. Determining forwarding plane liveness
US7519951B2 (en) 2003-09-30 2009-04-14 International Business Machines Corporation Multi-attribute dynamic link library packaging
KR100531314B1 (ko) 2004-03-16 2005-11-29 엘지전자 주식회사 영상표시장치
US20050251662A1 (en) 2004-04-22 2005-11-10 Samra Nicholas G Secondary register file mechanism for virtual multithreading
US7395419B1 (en) 2004-04-23 2008-07-01 Apple Inc. Macroscalar processor architecture
US7284092B2 (en) 2004-06-24 2007-10-16 International Business Machines Corporation Digital data processing apparatus having multi-level register file
US20060080682A1 (en) 2004-10-12 2006-04-13 Picsel Research Ltd. Run time dynamic linking
US7412710B2 (en) 2004-11-12 2008-08-12 Red Hat, Inc. System, method, and medium for efficiently obtaining the addresses of thread-local variables
US20060174089A1 (en) 2005-02-01 2006-08-03 International Business Machines Corporation Method and apparatus for embedding wide instruction words in a fixed-length instruction set architecture
US20060190710A1 (en) 2005-02-24 2006-08-24 Bohuslav Rychlik Suppressing update of a branch history register by loop-ending branches
US7757218B2 (en) 2005-03-24 2010-07-13 Microsoft Corporation Method of instrumenting code having restrictive calling conventions
US8332598B2 (en) * 2005-06-23 2012-12-11 Intel Corporation Memory micro-tiling request reordering
US8296550B2 (en) 2005-08-29 2012-10-23 The Invention Science Fund I, Llc Hierarchical register file with operand capture ports
US7873952B2 (en) 2006-03-09 2011-01-18 Oracle America, Inc. Code transformation to optimize fragments that implement constant loading
US7380104B2 (en) 2006-04-25 2008-05-27 International Business Machines Corporation Method and apparatus for back to back issue of dependent instructions in an out of order issue queue
JP2007304663A (ja) 2006-05-08 2007-11-22 Univ Nagoya プロセッサ及びそのデータ処理方法
JP4884297B2 (ja) 2006-05-26 2012-02-29 パナソニック株式会社 コンパイラ装置、コンパイル方法およびコンパイラプログラム
US7506139B2 (en) 2006-07-12 2009-03-17 International Business Machines Corporation Method and apparatus for register renaming using multiple physical register files and avoiding associative search
US20080148022A1 (en) 2006-12-13 2008-06-19 Arm Limited Marking registers as available for register renaming
US7676653B2 (en) 2007-05-09 2010-03-09 Xmos Limited Compact instruction set encoding
US7818542B2 (en) 2007-07-10 2010-10-19 Globalfoundries Inc. Method and apparatus for length decoding variable length instructions
US7818543B2 (en) 2007-07-10 2010-10-19 Globalfoundries Inc. Method and apparatus for length decoding and identifying boundaries of variable length instructions
US8180964B1 (en) 2007-09-28 2012-05-15 The Mathworks, Inc. Optimization of cache configuration for application design
US8108614B2 (en) 2007-12-31 2012-01-31 Eric Sprangle Mechanism for effectively caching streaming and non-streaming data patterns
US20090193400A1 (en) 2008-01-30 2009-07-30 Ivan Baev Interprocedural register allocation for global variables
KR101418969B1 (ko) 2008-02-27 2014-08-13 삼성전자주식회사 프로세서 및 컴파일 방법
US20100312991A1 (en) 2008-05-08 2010-12-09 Mips Technologies, Inc. Microprocessor with Compact Instruction Set Architecture
US20100095286A1 (en) 2008-10-10 2010-04-15 Kaplan David A Register reduction and liveness analysis techniques for program code
JP5471082B2 (ja) 2009-06-30 2014-04-16 富士通株式会社 演算処理装置および演算処理装置の制御方法
CN101630269B (zh) 2009-07-03 2012-08-29 中国人民解放军国防科学技术大学 基于块对目标代码扫描并替换敏感指令的方法
US8683180B2 (en) 2009-10-13 2014-03-25 International Business Machines Corporation Intermediate register mapper
US8516465B2 (en) 2009-12-04 2013-08-20 Oracle America, Inc. Register prespill phase in a compiler

Also Published As

Publication number Publication date
DE112012003716B4 (de) 2023-03-30
CN104025049B (zh) 2017-12-22
GB2510506B (en) 2020-12-16
US8756591B2 (en) 2014-06-17
US20130086548A1 (en) 2013-04-04
WO2013050922A1 (en) 2013-04-11
DE112012003716T5 (de) 2014-07-31
US20130086598A1 (en) 2013-04-04
JP2014528603A (ja) 2014-10-27
GB201406864D0 (en) 2014-05-28
CN104025049A (zh) 2014-09-03
US8713547B2 (en) 2014-04-29
GB2510506A (en) 2014-08-06

Similar Documents

Publication Publication Date Title
JP5957084B2 (ja) レジスタの生存を示すコンパイルされたコードの生成
US10146685B2 (en) Garbage collection and other management of memory heaps
JP6899614B2 (ja) ハードウェア管理スタック・アーキテクチャにおける呼び出し元により保護されるスタック・リターンアドレス
US11036513B2 (en) Executing short pointer mode applications loaded in a memory address space having one portion addressable by short pointers and a shadow copy of the one portion
US10235144B2 (en) Reconfiguration of address space based on loading short pointer mode application
US11003452B2 (en) Effectiveness and prioritization of prefetches
US10585790B2 (en) Short pointer mode applications in long pointer mode environments
US10095493B2 (en) Call sequence generation based on type of routine
US10140133B2 (en) Marking external sibling caller routines
US20180165073A1 (en) Context information based on type of routine being called
US10180827B2 (en) Suppressing storing of context information
JP6697486B2 (ja) 特殊命令を使用しないガベージ・コレクション
WO2022043852A1 (en) Performing application snapshot using process virtual machine resources
US20230121795A1 (en) Software object identification using record generating code insertion

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141224

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160122

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160209

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160428

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160524

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160617

R150 Certificate of patent or registration of utility model

Ref document number: 5957084

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150