(58)【調査した分野】(Int.Cl.,DB名)
コンピュータにより、変数アドレス参照テーブル内の位置から離れたオフセットにおける変数へのアクセスを含む変数アドレス参照テーブル関数を実施するように構成されたコード・シーケンスを識別するステップであって、前記コード・シーケンスは第1の命令の内部表現(IR)及び第2の命令のIRを含み、前記第2の命令は前記第1の命令に依存する、前記識別するステップと、
前記第1の命令の前記IR及び前記第2の命令の前記IRの少なくとも一方に関連付けられたスケジューラ・コスト関数を修正するステップであって、前記修正するステップは、前記第1の命令を前記第2の命令に隣接して配置するように構成された修正されたスケジューラ・コスト関数を生成するステップを含む、前記修正するステップと、
前記修正されたスケジューラ・コスト関数に応じて、オブジェクト・ファイルを生成するステップであって、前記オブジェクト・ファイルは、前記第2の命令に隣接して配置された前記第1の命令を含む、前記生成するステップと、
前記オブジェクト・ファイルを発行するステップと
を含む方法。
コンピュータにより、変数アドレス参照テーブル内の位置から離れたオフセットにおける変数へのアクセスを含む変数アドレス参照テーブル関数を実施するように構成されたコード・シーケンスを識別するステップであって、前記コード・シーケンスは、待ち時間により特徴付けられる命令の内部表現(IR)を含む、前記識別するステップと、
前記命令に関連付けられたスケジューラ・コスト関数を修正するステップであって、前記修正するステップは、前記命令が互いに隣接する複数の命令に拡張するステップを認識するように構成された修正されたスケジューラ・コスト関数を生成するステップを含み、前記複数の命令は、前記命令の前記IRの前記待ち時間により特徴付けられる、前記修正するステップと、
前記修正されたスケジューラ・コスト関数に応じて、オブジェクト・ファイルを生成するステップであって、前記オブジェクト・ファイルは、互いに隣接する前記複数の命令を含む、前記生成するステップと、
前記オブジェクト・ファイルを発行するステップと
を含む方法。
前記変数アドレス参照テーブルは、テーブル・オブ・コンテンツ(TOC)及びグローバル・オフセット・テーブル(GOT)のうちの一方である、請求項6に記載の方法。
【発明を実施するための形態】
【0017】
本発明の実施形態は、コンピューティング・システムにおける性能及びスループットに対する、テーブル・オブ・コンテンツ(TOC)のオーバーフローの影響を最小限にすることに向けられる。実施形態は、指定された命令シーケンス(例えば、TOCのオーバーフローを補償するためにコードに挿入されたシーケンス)を含ませるようにオブジェクト・コードを生成するように調整されたコンパイラを含む。マイクロプロセッが内部実行のためにシーケンスを最適化できるように、命令シーケンスは、ハードウェアにより認識されるように適合される。指定された命令シーケンスの1つが見つかると、マイクロプロセッサは、シーケンス内の命令をより効率的に実行される内部命令に置き換えるか、又は、シーケンス内の命令を単一の内部命令に置き換える。マイクロプロセッサにより実行されるこのプロセスは、本明細書では、デコード時間命令の最適化(decode time instruction optimization、DTIO)と呼ばれる。
【0018】
DTIOプロセスは、ハードウェア・プロセスである。本明細書で説明されるコンパイラ及びリンカは、ハードウェアによる最適化のためのコード・シーケンスを準備する。これらのコードは、例えば、命令が互いに隣接する、変位範囲が制限される場合に適切な変位範囲を有する、DTIOをイネーブルにするために破壊的コード形式に関する要件を有する場合に破壊的であり、DTIOをイネーブルにするための命令のアラインメントに関する要件を有する場合に適切にアラインされるなどの適切な特性と、DTIO対応ハードウェアにより必要とされ得るような他のいずれかのこうした特性とを有するといった、DTIO対応ハードウェアにより検出されるような方法で、コンパイラ及び/又はリンカによりコード化される。DTIO対応ハードウェアは、その全体を引用によりここに組み入れられる、本出願と共に2011年10月3日に出願された「Scalable Decode Time Instruction Sequence Optimization of Dependent Instructions」という名称の米国特許出願第13/251,409号においてさらに説明される。
【0019】
実施形態はまた、DTIO対応のもの及びDTIO対応でないものの両方の、全てのプロセッサにわたるTOC参照の性能を向上させるように調整されたリンカも含む。リンカは、参照頻度及び変位値のような特徴に基づいて、幾つかのTOC参照コードの最適化を実施する。最適化されたコードは、オリジナルのTOC参照コードと同じ機能を果たす。TOC及びGOTは、参照テーブルの例である。TOC及びGOTのどちらも、変数のアドレスを格納する変数アドレス参照テーブルとすることができる。さらに、TOCは、データを格納することもできる。特に断りのない限り、TOC及びGOTという用語は、本明細書では、プログラム変数を見つけるためにアクセスされるテーブルを指すのに交換可能に用いられる。
【0020】
DTIOプロセスは、クラウド・コンピューティング環境において実施することができる。本開示は、クラウド・コンピューティングについての詳細な説明を含むが、本明細書で述べられる教示の実装は、クラウド・コンピューティング環境に限定されるものではないことが予め理解される。むしろ、本発明の実施形態は、現在知られている又は後で開発される他のいずれかのタイプのコンピューティング環境と併せて実装することができる。
【0021】
クラウド・コンピューティングは、最小限の管理労力又はサービス・プロバイダとの対話で迅速にプロビジョニング及びリリースすることができる構成可能なコンピューティング・リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス)の共有プールへの、便利なオンデマンドのネットワーク・アクセスを可能にするサービス配信のモデルである。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、及び少なくとも4つの配備モデルを含むことができる。
【0022】
特徴は、以下の通りである。
オンデマンド・セルフサービス:クラウド・コンシューマは、必要に応じて、サーバ時間及びネットワーク・ストレージ等のコンピューティング機能を、人間がサービスのプロバイダと対話する必要なく自動的に、一方的にプロビジョニングすることができる。
広範なネットワーク・アクセス:機能は、ネットワーク上で利用可能であり、異種のシン又はシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、及びPDA)による使用を促進する標準的な機構を通じてアクセスされる。
リソースのプール化:プロバイダのコンピューティング・リソースは、マルチ・テナント・モデルを用いて、異なる物理及び仮想リソースを要求に応じて動的に割り当て及び再割り当てすることにより、複数のコンシューマにサービスを提供するためにプールされる。コンシューマは、一般に、提供されるリソースの正確な位置についての制御又は知識を持たないが、より高レベルの抽象化では位置(例えば、国、州、又はデータセンタ)を特定できる場合があるという点で、位置とは独立しているといえる。
迅速な弾力性:機能は、迅速かつ弾力的に、幾つかの場合自動的に、プロビジョニングして素早くスケール・アウトし、迅速にリリースして素早くスケール・インさせることができる。コンシューマにとって、プロビジョニングに利用可能なこれらの機能は、多くの場合、無制限であり、いつでもどんな量でも購入できるように見える。
サービスの測定:クラウド・システムは、サービスのタイプ(例えば、ストレージ、処理、帯域幅、及びアクティブなユーザ・アカウント)に適した何らかの抽象化レベルでの計量機能を用いることによって、リソース使用を自動的に制御及び最適化する。リソース使用を監視し、制御し、報告し、利用されるサービスのプロバイダとコンシューマの両方に対して透明性をもたらすことができる。
【0023】
サービス・モデルは以下の通りである。
Software as a Service(SaaS):クラウド・インフラストラクチャ上で動作しているプロバイダのアプリケーションを使用するために、コンシューマに提供される機能である。これらのアプリケーションは、ウェブ・ブラウザ(例えば、ウェブ・ベースの電子メール)などのシン・クライアント・インターフェースを通じて、種々のクライアント・デバイスからアクセス可能である。コンシューマは、限定されたユーザ固有のアプリケーション構成設定の考え得る例外として、ネットワーク、サーバ、オペレーティング・システム、ストレージ、又は個々のアプリケーション機能をも含めて、基礎をなすクラウド・インフラストラクチャを管理又は制御しない。
Platform as a Service(PaaS):プロバイダによってサポートされるプログラミング言語及びツールを用いて生成された、コンシューマが生成した又は取得したアプリケーションを、クラウド・インフラストラクチャ上に配備するために、コンシューマに提供される機能である。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、又はストレージなどの基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、配備されたアプリケーション、及び場合によってはアプリケーション・ホスティング環境構成に対して制御を有する。
Infrastructure as a Service(IaaS):コンシューマが、オペレーティング・システム及びアプリケーションを含み得る任意のソフトウェアを配備及び動作させることができる、処理、ストレージ、ネットワーク、及び他の基本的なコンピューティング・リソースをプロビジョニンングするために、コンシューマに提供される機能である。コンシューマは、基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、オペレーティング・システム、ストレージ、配備されたアプリケーションに対する制御、及び場合によってはネットワーク・コンポーネント(例えば、ホストのファイアウォール)選択の限定された制御を有する。
【0024】
配備モデルは以下の通りである。
プライベート・クラウド:クラウド・インフラストラクチャは、ある組織のためだけに運営される。このクラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、構内又は構外に存在することができる。
コミュニティ・クラウド:クラウド・インフラストラクチャは、幾つかの組織によって共有され、共通の関心事項(例えば、任務、セキュリティ要件、ポリシー、及びコンプライアンス上の考慮事項)を有する特定のコミュニティをサポートする。クラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、構内又は構外に存在することができる。
パブリック・クラウド:クラウド・インフラストラクチャは、一般公衆又は大規模な業界グループに利用可能であり、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラストラクチャは、固有のエンティティのままであるが、データ及びアプリケーションの移行性を可能にする標準化された又は専用の技術(例えば、クラウド間の負荷分散のためのクラウド・バースティング)によって結び付けられる2つ又はそれより多いクラウド(プライベート、コミュニティ、又はパブリック)の混成物である。
【0025】
クラウド・コンピューティング環境は、無国籍性、低結合性、モジュール性、及びセマンティック相互運用性に焦点を置くことを指向するサービスである。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラストラクチャである。
【0026】
ここで
図1を参照すると、クラウド・コンピューティング・ノードの一例の概略図が示される。クラウド・コンピューティング・ノード10は、好適なクラウド・コンピューティング・ノードの単なる一例であり、本明細書で説明される本発明の実施形態の使用又は機能の範囲に対するいずれかの制限を示唆することを意図するものではない。上記に関係なく、クラウド・コンピューティング・ノード10は、本明細書で上述された機能のいずれかを実装及び/又は実施することができる。
【0027】
クラウド・コンピューティング・ノード10には、他の多数の汎用又は専用コンピューティング・システム環境又は構成で動作可能な、コンピュータ・システム/サーバ12が存在する。コンピュータ・システム/サーバ12と共に用いるのに好適な周知のコンピューティング・システム、環境、及び/又は構成の例としては、これらに限定されるものではないが、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、手持ち式又はラップトップ型デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能民生電子機器、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、及び、上述のシステム又はデバイス等のいずれかを含む分散型クラウド・コンピューティング環境が含まれる。
【0028】
コンピュータ・システム/サーバ12は、コンピュータ・システムによって実行される、プログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的な文脈で説明することができる。一般に、プログラム・モジュールは、特定のタスクを実行する又は特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、論理、データ構造などを含むことができる。コンピュータ・システム/サーバ12は、通信ネットワークを通じてリンクされた遠隔処理デバイスによってタスクが実行される分散型クラウド・コンピューティング環境で実施することができる。分散型クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含む、ローカル及び遠隔両方のコンピュータ・システム・ストレージ媒体に配置することができる。
【0029】
図1に示されるように、クラウド・コンピューティング・ノード10のコンピュータ・システム/サーバ12は、汎用コンピューティング・デバイスの形で示される。コンピュータ・システム/サーバ12のコンポーネントは、これらに限定されるものではないが、1つ又は複数のプロセッサ又は処理ユニット16、システム・メモリ28、及びシステム・メモリ28を含む種々のシステム・コンポーネントをプロセッサ16に結合するバス18を含むことができる。
【0030】
バス18は、メモリ・バス又はメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、及び種々のバス・アーキテクチャのいずれかを用いるプロセッサ又はローカル・バスを含む、幾つかのタイプのバス構造のうちのいずれかの1つ又は複数を表す。限定ではなく例としては、このようなアーキテクチャは、業界標準アーキテクチャ(Industry Standard Architecture、ISA)バス、マイクロ・チャネル・アーキテクチャ(Micro Channel Architecture、MCA)バス、Enhanced ISA(EISA)バス、Video Electronics Standards Association(VESA)ローカル・バス、及びPeripheral Component Interconnect(PCI)バスを含む。
【0031】
コンピュータ・システム/サーバ12は、典型的には、種々のコンピュータ・システム可読媒体を含む。このような媒体は、コンピュータ・システム/サーバ12がアクセス可能ないずれかの利用可能媒体とすることができ、揮発性媒体及び不揮発性媒体の両方と、取り外し可能媒体及び取り外し不能媒体の両方とを含む。
【0032】
システム・メモリ28は、ランダム・アクセス・メモリ(RAM)30及び/又はキャッシュ・メモリ32など、揮発性メモリの形のコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム/サーバ12は、他の取り外し可能/取り外し不能、揮発性/不揮発性のコンピュータ・システム・ストレージ媒体をさらに含むことができる。単なる例として、取り外し不能の不揮発性磁気媒体(図示されておらず、典型的には「ハード・ドライブ」と呼ばれる)との間の読み出し及び書き込みのために、ストレージ・システム34を設けることができる。図示されていないが、取り外し可能な不揮発性磁気ディスク(例えば、「フロッピィ・ディスク」)との間の読み出し及び書き込みのための磁気ディスク・ドライブと、CD−ROM、DVD−ROM又は他の光媒体などの取り外し可能な不揮発性光ディスクとの間の読み出し及び書き込みのための光ディスク・ドライブとを設けることができる。このような例においては、それぞれを、1つ又は複数のデータ媒体インターフェースによってバス18に接続することができる。以下でさらに示され説明されるように、メモリ28は、本発明の実施形態の機能を実行するように構成されたプログラム・モジュールの組(例えば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含むことができる。
【0033】
限定ではなく例として、メモリ28内に、プログラム・モジュール42の組(少なくとも1つ)を有するプログラム/ユーティリティ40、並びにオペレーティング・システム、1つ又は複数のアプリケーション・プログラム、他のプログラム・モジュール、及びプログラム・データを格納することができる。オペレーティング・システム、1つ又は複数のアプリケーション・プログラム、他のプログラム・モジュール、及びプログラム・データ、又はそれらの何らかの組み合わせの各々は、ネットワーキング環境の実装形態を含むことができる。プログラム・モジュール42は、一般に、本明細書で説明される本発明の実施形態の機能及び/又は方法を実行する。
【0034】
コンピュータ・システム/サーバ12は、キーボード、ポインティング・デバイス、ディスプレイ24等のような1つ又は複数の外部デバイス14;ユーザがコンピュータ・システム/サーバ12と対話することを可能にする1つ又は複数のデバイス;及び/又はコンピュータ・システム/サーバ12が1つ又は複数の他のコンピューティング・デバイスと通信することを可能にするいずれかのデバイス(例えば、ネットワーク・カード、モデムなど)と通信することもできる。このような通信は、入力/出力(I/O)インターフェース22を経由して行うことができる。さらにまた、コンピュータ・システム/サーバ12は、ネットワーク・アダプタ20を介して、ローカル・エリア・ネットワーク(LAN)、汎用広域ネットワーク(WAN)、及び/又はパブリック・ネットワーク(例えば、インターネット)などの1つ又は複数のネットワークと通信することもできる。示されるように、ネットワーク・アダプタ20は、バス18を介して、コンピュータ・システム/サーバ12の他のコンポーネントと通信する。図示されないが、コンピュータ・システム/サーバ12と共に他のハードウェア及び/又はソフトウェア・コンポーネントを使用できることを理解されたい。例としては、これらに限定されるものではないが、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部のディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、及びデータ・アーカイブ・ストレージ・システムなどが含まれる。
【0035】
ここで
図2を参照すると、例示的なクラウド・コンピューティング環境50が示される。示されるように、クラウド・コンピューティング環境50は、例えば携帯情報端末(PDA)又は携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、及び/又は自動車コンピュータ・システム54Nなどといった、クラウド・コンシューマによって用いられるローカル・コンピューティング・デバイスと通信することができる、1つ又は複数のクラウド・コンピューティング・ノード10を含む。ノード10は、互いに通信することができる。これらのノードは、上述のようなプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、若しくはハイブリッド・クラウド、又はこれらの組み合わせなど、1つ又は複数のネットワークにおいて物理的又は仮想的にグループ化することができる(図示せず)。これにより、クラウド・コンピューティング環境50は、クラウド・コンシューマがローカル・コンピューティング・デバイス上にリソースを保持する必要のないサービスとして、インフラストラクチャ、プラットフォーム、及び/又はソフトウェアを提供することが可能になる。
図2に示されるコンピューティング・デバイス54A−Nのタイプは単に例示であることを意図し、コンピューティング・ノード10及びクラウド・コンピューティング環境50は、いずれのタイプのネットワーク及び/又はネットワーク・アドレス指定可能な接続上でも(例えば、ウェブ・ブラウザを用いて)、いずれのタイプのコンピュータ化された装置とも通信できることを理解されたい。
【0036】
ここで
図3を参照すると、クラウド・コンピューティング環境50(
図2)によって提供される機能抽象化層の組が示される。
図3に示されるコンポーネント、層、及び機能は単に例示であることを意図し、本発明の実施形態はそれらに限定されないことを予め理解されたい。図示されるように、以下の層及び対応する機能が提供される。
【0037】
ハードウェア及びソフトウェア層60は、ハードウェア及びソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例として、IBM(登録商標)zSeries(登録商標)システムを一例とするメインフレームと、IBM pSeries(登録商標)システムを一例とするRISC(Reduced Instruction Set Computer(縮小命令セット・コンピュータ))アーキテクチャ・ベースのサーバと、IBM xSeries(登録商標)システムと、IBM BladeCenter(登録商標)システムと、ストレージ・デバイスと、ネットワーク及びネットワーク・コンポーネントとが含まれる。ソフトウェア・コンポーネントの例として、IBM WebSphere(登録商標)アプリケーション・サーバ・ソフトウェアを一例とするネットワーク・アプリケーション・サーバ・ソフトウェアと、IBM DB2(登録商標)データベース・ソフトウェアを一例とするデータベース・ソフトウェアとが含まれる。(IBM、zSeries、xSeries、BladeCenter、WebSphere、及びDB2は、世界中の多数の管轄区域において登録されているインターナショナル・ビジネス・マシーンズ・コーポレーションの商標である。)
【0038】
仮想化層62は、抽象化層を提供し、この層により、仮想エンティティの以下の例、すなわち、仮想サーバ、仮想ストレージ、仮想プライベート・ネットワークを含む仮想ネットワーク、仮想アプリケーション及びオペレーティング・システム、並びに仮想クライアントを提供することができる。
【0039】
一例においては、管理層64は、以下で説明される機能を提供することができる。リソース・プロビジョニングは、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソース及び他のリソースの動的な調達を提供する。計量及び価格決定は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡と、リソースの消費に対する課金又は請求とを提供する。1つの例においては、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウド・コンシューマ及びタスクに対する識別情報の検証と、データ及び他のリソースに対する保護とを提供する。ユーザ・ポータルは、コンシューマ及びシステム管理者のために、クラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理は、要求されるサービス・レベルが満たされるように、クラウド・コンピューティング・リソースの割り当て及び管理を提供する。サービス・レベル・アグリーメント(Service Level Agreement、SLA)の計画及び履行は、SLAに従って将来の要件が予測されるクラウド・コンピューティング・リソースの事前配置及び調達を提供する。
【0040】
ワークロード層66は、クラウド・コンピューティング環境を利用することができる機能の例を提供する。この層から提供することができるワークロード及び機能の例には、マッピング及びナビゲーション、ソフトウェア開発及びライフサイクル管理、仮想教室教育配信、データ分析処理、トランザクション処理、及びデータ統合ワークフロー処理が含まれる。
【0041】
例示的な実施形態においては、ワークロード層66内のDTIOにより強化された(DTIO enhanced)コンパイラ70が、本明細書で説明されるDTIOシーケンスを生成するが、強化されたコンパイラ70は、いずれの層内にも実装することができ、かつ、ハードウェア及びソフトウェア層60内の種々のハードウェア・プラットフォーム上で実行されるコードを生成するために用いることができることが理解されるであろう。
【0042】
例示的な実施形態においては、ワークロード層66内のDTIOにより強化されたリンカ80が、本明細書で説明されるDTIOシーケンスを生成し、TOC参照を最適化するが、強化されたリンカ80は、いずれの層内にも実装することができ、かつ、ハードウェア及びソフトウェア層60内の種々のハードウェア・プラットフォーム上で実行されるコードを生成するために用いることができることが理解されるであろう。
【0043】
1つの実施形態において、DTIOシーケンスを生成するように最適化された強化されたコンパイラ70は、クラウド環境50において実行されるコンピュータ・システム/サーバ12の処理ユニット16上、又は、クラウド環境50用のアプリケーションを開発するように適合されたシステム54A、54B若しくは54C上で実行される。1つの実施形態において、アプリケーションにおけるテーブル参照をリンクし、最適化するように最適化された強化されたリンカ80が、クラウド環境50の同じサーバ12の処理ユニット16、又はシステム54A、54B、若しくは54Cの1つにおいて実行される。別の実施形態において、強化されたコンパイラ70及び強化されたリンカ80は、クラウド環境50に対応する少なくとも1つのサーバ若しくはコンピュータ・システムの異なる処理ユニット16、又はシステム54A、54B及び54C上で実行される。
【0044】
強化されたコンパイラ70及び強化されたリンカ80は協働して、処理ユニット16上での実行に向けられたアプリケーションを生成し、生成されたアプリケーションが、クラウド環境50のサーバ12内、又はシステム54A、54B、54C及び54Nのうちの少なくとも1つの内部で実行される際にDTIOを実施する。生成されたアプリケーションは、仮想ストレージ62、外部デバイス14、又は、内部にインストールされたシステム・フラッシュ・メモリなどの別のソリューションのようなストレージ媒体内に格納される。
【0045】
ここで
図4を参照すると、一実施形態によるTOC402及びデータ・オブジェクト404(データ「A」と表記される)が、一般的に示される。TOC402は、変数にアクセスするために用いられ、かつ、アプリケーション・コードがデータにアクセスするための位置に依存しない方法を提供することにより、共有ライブラリをサポートする。TOCは、共有ライブラリへの外部参照を解決するために用いられ、ここで、TOC内の各アドレス・エントリは、変数のアドレスを収容する。アプリケーション・コード及びデータは互いに固定されていないので、TOCは、同一のアプリケーション・コードが異なるデータを参照することを可能にする。
図4に示されるTOC402は、レジスタ「R2」内に収容されるアドレスから開始し、オフセット「D1」におけるエントリを含む複数のエントリ(各々が変数のアドレスを含む)を有する。オフセット「D1」におけるエントリのアドレスは、データ・オブジェクト404の開始アドレスである。
図4に示されるデータ・オブジェクト404は、データ・オブジェクト404の開始アドレスからオフセット「D2」において格納されたデータを有する。
【0046】
以下のオブジェクト・コード・シーケンスは、データ・オブジェクト404におけるオフセット「D2」において格納されたデータを、レジスタ「R4」にロードする。
ld R3=R2+D1
ld R4=R3+D2
【0047】
第1のロード命令は、データ・オブジェクト404のアドレスを、TOC402のオフセット「D1」からレジスタ「R3」にロードし、第2のロード命令は、データを、データ・オブジェクト404のオフセット「D2」からロードする。
【0048】
前述のように、他のアプリケーション・バイナリ・インターフェース(ABI)定義において、TOCに類似したテーブルは、GOTと呼ばれる。TOC402に言及する本明細書での説明は、GOTにも同様に適用することができる。
【0049】
強化されたコンパイラ70のようなコンパイラ及び強化されたリンカ80のようなリンカは協働して、TOCを介して変数を参照するコードを生成する。コンパイラは、オブジェクト・コードを生成し、TOCロード命令とシンボル・テーブル・エントリ(例えば、グローバル変数)との間のリンクを作成する。リンカは、シンボルの定義及び参照を解決し、データの全てをマッピングし(TOCを構築し)、次いで、コンパイラにより生成されたTOCロード命令上の変位フィールドに値を入力する。
【0050】
コンパイラが、データ・オブジェクト404のアドレスのTOC402におけるオフセット位置を知らない場合、コンパイラにより、データ・オブジェクト404のオフセット「D2」において格納されたデータをレジスタ「R4」にロードするための以下のオブジェクト・コード・シーケンスが生成される。
ld R3=R2+0 [Ref: Symbol “A”]
ld R4=R3+D2
Symbol = “A”
Length = 24
Alignment =8
等
【0051】
リンカは、アプリケーションを互いにリンクする際、オフセットをTOCに挿入する。上記コードのシンボル、長さ、及びアライメント部分は、リンカにデータ・オブジェクトについて伝え、それを第1のロード・ステートメントに結び付ける。リンカは、シンボル「A」を解決し、データをマッピングし、D1におけるTOCエントリを割り当て、次いで、関連したTOCロード命令内の変位フィールドに上書きする。
【0052】
メモリ・アクセス命令内の即値変位フィールドのアドレス指定範囲は、何がコンピュータ・アーキテクチャによりサポートされるかによって制限される。例えば、IBM Power Architecture(登録商標)において、変位は、16ビットに制限され、これはベース・レジスタからの64キロバイト(KB)以内のデータをアドレス指定するための能力を提供する。他のABIは、32ビット又は64ビットに制限される。変数の数が、TOCによりサポートされるエントリの数より大きい場合、これらの制限が問題を引き起こすことがある。
【0053】
TOC参照を生成するために用いられる命令セット(例えば、D−form、DS−form)及び規則は、事実上、TOCのサイズを制限する。D−form命令は、PowerPC(登録商標)プロセッサに対する一次メモリ・アクセス命令形式の1つであり、これは、ロード、ストア、及び即値モード計算を実施するために用いられ、16ビット・アドレス・フィールドに制限される。D−form命令のフォーマットは、ビット0−5におけるオペコード、ビット6−10におけるソース/ターゲット・レジスタ、ビット11−16におけるアドレス/指標レジスタ/オペランド、及びビット16−31における数値アドレス/オフセット/即値モード値である。従って、アドレス・フィールドは、16ビットのみであり、64KBのアドレス範囲に変換される。リンカは、レジスタを有することにより、符号付き16ビット変位(+/−32KB)を用いてTOCをマッピングする(例えば、レジスタ「R2」はTOCの中央を指し示す)。DS−form命令は、D−form命令と同じアドレス範囲を有するが、32ビットのアラインされたメモリに制限される。
【0054】
TOCのスペースがなくなる(例えば、64000すなわち64Kを上回る変数が存在する)、リンカはエラー・メッセージを有した状態で機能しなくなることがある。代替的に、リンカは、複数のTOCを作成し、「トランポリン(trampoline)」コードを用いて、複数のTOC間で切り替えることができる。従って、要求された変数が現在のTOC内に存在しない場合、要求される変数にアクセスするために、代替的なTOCのアドレスがロードされる。例えば、参照シンボル「A」のオフセットが命令の変位オフセットに適合しない場合のオブジェクト・コードが、以下に示される。:
ldR3=R2+0 [Ref: Symbol “A”]
ld R4=R3+D2
リンカにより、オブジェクト・コードに変換される。
b L1
L2: ld R4=R3+D2
........
L1:addis R3=R2,1
ld R3=R3+D1
b L2
【0055】
上に示されるように、リンカにより、分岐命令が付加される。この例では、メモリ内に互いに隣接して配置された2つの64KBのTOCが存在する。第1のTOCのベースは、レジスタ「R2」内に収容されるメモリのアドレス内に配置され、第2のTOCのベースは、レジスタ「R2」内に収容されるアドレス+64KBに配置される。第2のTOCのベースは、レジスタ「R2」のコンテンツを左に16位置だけシフトさせて第2のTOCの位置を得る「addis」命令を用いて、上に示されるように計算される。次いで、第2のTOCのベースに関して、オフセット「D1」が計算され、コードは再び「L2」に分岐して処理を続行する。
【0056】
従って、上に示されるように、より多数の変数に適応させるために、リンカは、付加的な命令をオブジェクト・コードに導入し、コード拡張及び低速実行の両方をもたらす。上に示されるような、TOCオーバーフロー・トランポリンの使用は、付加的なトランポリン・コードに起因する過度のコード拡張をもたらし、参照ごとに2つの付加的な制御フローを導入する。このことは、参照のローカル性の損失に起因するキャッシュ性能の低下、並びに、トランポリンへの分岐により導入される不連続のコードに起因する命令フェッチ性能の低下をもたらし得る。
【0057】
TOCのサイズは、実行ファイル又は共有ライブラリのサイズに概ね比例する。一般に、何百ものソース・ファイル及び何万行ものコードが存在する。あらゆる固有の参照される外部シンボル(データ又はコード)は、TOCエントリを有する。上述のように、TOCの容量は、32ビット・モードにおいて16Kエントリであり、64ビット・モードにおいては8Kエントリである。データがTOC内に格納される場合、付加的なTOCのスペースが消費される(例えば、間接(indirection)レベルを除去することにより経路長を短くするために)。
【0058】
TOCオーバーフローの問題を解決する別の現代の手法は、より大きい変位を有する新しい命令を導入することである。この手法は、より大きい変位値をサポートするコンピュータ・プラットフォームには有効であるが、新しい命令を用いるコードは、より大きい変位値をサポートしていない旧式のコンピュータ・システム又は他のコンピュータ・プラットフォーム・システム(例えば、IBM RISCアーキテクチャ)上では実行可能でない。ほとんどの場合、アプリケーション・コードは、可能な限り多くの環境において実行可能であることが望ましく、開発者は、旧式のプラットフォーム上でコードを実行する能力を制限する新しい命令フォーマットの使用をためらう。
【0059】
本明細書で説明される実施形態は、命令セット内の直接指定された変位により決定されるTOCサイズに対するTOCオーバーフローにより特徴付けられる環境において、グローバル・データにアクセスする際、プロセッサ(例えば、マイクロプロセッサ)により実行しなければならない内部操作の数を減らす。複数の命令を最適化し、組み合わせて、命令シーケンスにおいて、第2の命令を、第1の命令とは独立して実行できる内部操作(内部命令)に置き換えるためのハードウェア・プロセスは、本明細書では、デコード時間命令最適化(DTIO)と呼ばれる。第1の命令の実行において、第2の命令を実行する前に第1の命令を実行する必要がなく、又は、第1の命令を内部実行から排除することができる。DTIOは、プロセッサが、最適化された命令シーケンスに基づいて改善された命令シーケンスを生成することを可能にする技術である。本明細書で説明される実施形態によると、コンパイラは、プロセッサにおけるDTIO機能を利用するように適合されたABIシーケンスを生成する。大容量のTOC/GOTを有するプログラムの効率的な実行をサポートするために、プロセッサは、DTIOをキー・シーケンスで実行するように適合される。
【0060】
DTIOを、コンパイラにより生成された以下のコード・シーケンスに適用し、このコード・シーケンスを組み合わせてより効率的に動作する2つの命令にする。以下に示されるオブジェクト・コードは、オフセット値(リンク・プロセスの際にリンカにより入力される)の上位16ビットを、TOCの開始アドレス(アドレスは、レジスタ「R2」に格納される)に加算し、結果をレジスタ「R5」に格納する(R2+0×12340000)。第2の命令は、メモリ・コンテンツのアドレスを、レジスタ「R5」に格納されているアドレスと、オフセット値の下位16ビットの和としてロードする(R2+0×12340000+0×00005678)。その結果、レジスタ「R3」が、データ・オブジェクトのアドレスを収容する。レジスタ「R5」の値が決定されるまで第2の命令を実行できないという点で、第2の命令は第1の命令に依存している。
addis R5, R2, 0x1234
ld R3=R5+0x5678
【0061】
1つの例示的な実施形態において、DTIOを実施するようにイネーブルにされたプロセッサ・ユニット16が、上記のコード・パターンを識別し、これを、互いに依存していない以下の2つの内部命令(又は、内部操作)に置き換える。
【0062】
別のコード命令がレジスタ「R5」に格納された値を使用する場合、第1の命令の結果を計算する。DTIOにより生成された第2の内部命令、すなわちロード命令が1つの計算を実行し、この計算は、上記の隣接した2つの命令シーケンスにより既に実行されている。内部ロード命令(Power ISAによりサポートされるよりも広範囲のオフセット値を処理することができるロード命令)は、上記の命令からの組み合わせられたオフセットの値を、レジスタ「R2」に格納されたアドレスに加算する。
addis R5, R2, 0x1234
ld R3=R2+0x12345678
【0063】
後の命令がレジスタ「R5」内の値を読み出す場合、レジスタ「R5」内の中間結果を保存する必要があるため、上記のコード・シーケンスは、非破壊的(non-destructive)オペランド・シーケンスと呼ばれる。有利なことに、第2の命令を、第1の命令に対してアウト・オブ・オーダー方式で実行し、ロード命令の完了を加速することができる。
【0064】
上に示される第1のコード・シーケンスは、以下のようにGOTアクセス・シーケンスとして書くことができる。
addis R5, R2, label@got@h
ldreg, label@got@l(R5)
【0065】
このコード・シーケンスは、プロセッサ・ユニット16により、DTIOを用いて、以下のシーケンスに対応する内部操作(IOP)シーケンスに最適化される。
addis R5, R2,label@got@h
ldreg, label@got(R2)
【0066】
第1の命令は、add shift immediate IOPであり、第2の命令は、load IOPである。この非破壊的コード・シーケンスにおいて、DTIOシーケンスが実行を完了した後、レジスタ「R5」はアーキテクチャ化された状態の一部であるので、第1の命令を排除することはできない。有利なことに、第2の命令を、第1の命令に対してアウト・オブ・オーダー方式で実行し、ロード命令の完了を加速することができる。当業者であれば、1つの実施形態において、@hは、文脈依存(context-sensitive)とすることができ、addis命令と共に用いられる場合、definition addis命令に対応して計算された上位ビットを指すために用いることができ、かつ、従来技術と関連したoris命令と共に用いられる場合、definition oris命令に対応して計算された上位ビットを指すために用いることができることを理解するであろう。当業者であれば、別の実施形態において、2つの異なる指定子@ha及び@hが文脈非依存(context insensitive)方式で用いられ、@haは、addis命令と共に用いられる場合、definition addis命令に対応して計算された上位のビットを指すために用いられ、@hは、従来技術と関連したoris命令と共に用いられる場合、definition oris命令に対応して計算された上位のビットを指すために用いられることを理解するであろう。
【0067】
少なくとも1つの実施形態において、DTIOを実装するマイクロプロセッサ・ユニット16により修正される第2のコード・シーケンスは、次の通りである。レジスタ「R3」は第2の命令により上書きされるので、このコード・シーケンスは、破壊的オペランド・シーケンスと呼ぶことができる。
addis R3, R2, 0x1234
ld R3=R3+0x5678
【0068】
これらの2つの命令は、以下のように単一のload IOPに併合される。
ld R3=R2+0x12345678
有利なことに、2つの依存する操作のシーケンスの代わりに、1つのIOPしか実行する必要がない。
【0069】
上に示される第2の破壊的オペランド・コード・シーケンスは、以下のようにGOTアクセス・シーケンスとして書くことができる。
addis reg, R2,label@got@h
ld reg,label@got@l(reg)
【0070】
このコード・シーケンスは、DTIOを実装するプロセッサ・ユニット16により、単一のロード命令を含む以下のシーケンスに対応する単一のIOPに最適化される。
ld reg,label@got(R2)
【0071】
本明細書で説明される実施形態は、大容量のTOC(すなわち、命令指定の変位によって与えられるアドレス指定能力に関してオーバーフローするTOC)にアクセスするように適合された命令シーケンスを含むプログラムに向けられる。TOCにアクセスするための命令シーケンスは、DTIOプロセスによってさらに最適化することができる一連の計算命令を含む。最適化は、クリティカル依存チェーン(critical dependence chain)における、TOCにアクセスするための内部操作の数を低減させる。DTIOに従う破壊的形式のTOCアドレス指定を用いる最適化された環境において、TOCにアクセスするための内部操作の実際の数が低減される。
【0072】
DTIO最適化を用いる利点は、コード・シーケンスが、DTIOに対するハードウェア・サポートを有するプロセッサと、従来のプロセッサ(又は、非DTIOサポート型ハードウェア)の間で完全に移植可能であることである。1つの実施形態において、DTIOにより最適化されたシーケンスは、既存のISAに従った命令シーケンスに対応する。コンパイラ及びリンカは協働して、DTIOをサポートするマイクロプロセッサにおいてDTIOの最適化をもたらす方法で、シーケンスをアセンブルする。DTIOをサポートしないマイクロプロセッサにおいては、従来技術の命令からなるシーケンスは、既存のISAに従ったあらゆる他の命令シーケンスのように、直接かつ矛盾なく実行される。
【0073】
図5は、本発明の一実施形態による、TOC参照を生成するために、コンパイラにより実施されるプロセスのフロー図を示す。一実施形態において、プロセスは、
図3に示される強化されたコンパイラ70により実施される。ブロック502において、TOC参照に関する複数命令に対応する内部表現が生成される。これらの命令は、前述のようにDTIOプロセスにより最適化される。
【0074】
ブロック504において、DTIOをもたらす方法で複数命令が発行されることを保証するように、コンパイラ内のスケジューラ・コスト関数が修正される。本明細書で用いられる「スケジューラ」という用語は、「命令スケジュール」の生成、すなわち、命令がプログラム内で現れる順序の割り当てを担当するコンパイラの部分を指す。スケジューラの目的の1つは、典型的には、依存命令を互いからできるだけ離れるように移動させ、第1の命令に完了のための時間を与えてから、第2の依存命令がその結果を消費するようにすることである。多くの場合、これは、命令が互いの特定の範囲内にある、又は互いに隣接しているなど、DTIO実装命令に対する特定の要件を有し得るDTIO実装プロセッサと競合する。従って、典型的なスケジューラは、DTIO対応プロセッサにおいてDTIOをサポートする方法では命令を順序付けない。コンパイラ内のコスト関数を修正できる1つの方法は、第1の命令がTOCアクセス・シーケンスの一部として生成される際に、第1の命令(例えば、addis)に関するコスト関数をゼロに設定することによるものである。これは、addis命令がTOCシーケンスと関連付けられたときに、addis命令に対して新しい命令レジスタ(IR)を割り当てることにより行うことができる。次いで、スケジューラは、第1のaddis命令及び第2の命令を互いに隣接してスケジューリングする傾向を有する。ゼロのコスト・メトリックを有する命令がコンシューマに隣接してスケジューリングされることを保証するように、スケジューラをさらに修正することができる。DTIOをもたらす方法で複数命令が発行されることを保証する別の方法は、TOCシーケンスの第1の命令を、そのTOCシーケンスの第2の命令に隣接してスケジューリングするように、スケジューラを修正することである。これは、TOCシーケンスと関連付けられたaddisに対して新しいIRを割り当てることによって行うことができ、TOC参照のために第1の命令をスケジューリングするときに、第2の命令をスケジューリングする。DTIOをもたらす方法で複数命令が発行されることを保証する更に別の方法は、DTIOを適用できるaddis命令及び依存命令の対形成を認識し、次いで、スケジューラにそれらの命令を互いに隣接してスケジューリングさせるように、スケジューラを修正することである。
【0075】
図5を参照すると、ブロック506において、コンパイラは、例えば、再配置情報の形でリンカへの命令を生成して、GOT/TOCの一部であることを必要とするTOC(又はGOT)参照内のいずれかのエントリ、並びに、どの命令が、命令に挿入される完了したTOC内のオフセットに対応するオフセットの少なくとも一部を有する必要があるかを示す。1つの実施形態によると、複数命令シーケンスを示すように、再配置情報が生成される。別の実施形態によると、従来技術に従って、参照に関するオフセットの第1の部分及び参照に関するオフセットの第2の部分を示す別個の関係情報が生成される。
【0076】
図6は、本発明の代替的な一実施形態による、TOC参照を生成するために、コンパイラにより実施されるプロセスのフロー図を示す。
図6に示される実施形態は、コンパイラがTOC参照IR機能を有する場合に用いることができる。このことは、コンパイラが、TOC参照のために、コード内にシーケンスとして発行される単一の内部表現を使用すること、及び、命令のスケジューリングに対してこのシーケンスの実行をより正確にモデル化することを可能にし、IRにおいて「ゼロ・コスト」addis型命令を可能にするための修正を必要としない。単一のIR参照のようなTOC参照のIR表現によると、命令カウントを認識する必要があるコンパイラの部分が、OC相対分岐に関する変位を追跡するため、命令グループ形成をモデル化するため、分岐ターゲットを所望の境界にアラインさせるなどのために、複数のISA命令のようなTOC参照IR機能が発行されるという事実を認識するように修正される。
【0077】
ブロック602において、TOC参照に対応するIR表現を生成し、このIR表現がTOC参照であることをプロセッサに知らせる。ブロック604において、TOC参照に対応するIR表現が複数命令に拡張されるが(例えば、コード・オフセット及び命令のグループ化に関する判断に関して)、DTIO実装のIOPシーケンスの待ち時間が低減することを理解するように、コンパイラ内のスケジューラ及びコード生成装置を修正する。従って、命令のフォーマットのために、TOC IR参照シーケンスは、コンパイラによりオブジェクト・ファイル内に発行されるときに複数命令として扱われるが、IR参照のタイミング挙動をモデル化するために、実行時にハードウェアにおいてDTIO機能により生成された内部操作シーケンスを用いて、スケジューリングを決定する。
【0078】
ブロック606において、TOC IRを複数機械命令として拡張することにより、コードが生成される。ブロック608において、リンク・エディタによりリンクするために、オブジェクト・ファイルが発行される。
図6に示される実施形態において、コンパイラは、TOCロードがバイナリで1つより多いロード命令を使用するが、DTIO実装のシーケンスに対応する低減した数のサイクルで実行され得ることを反映する、TOC参照についての新しいIRコードをサポートするように拡張される。
【0079】
別の実施形態において、プログラマは、DTIO実装できる、TOC参照を含むアセンブリ・コードを生成し、アセンブラはオブジェクト・ファイルを生成する。プログラマは、DTIO実装のシーケンスに対応する複数のアセンブリ命令の生成を担当することができる。代替的に、複数のDTIO命令を含むTOCロード・シーケンスを生成する、アセンブラ固有の拡張されたニーモニック(mnemonic)又はマクロが提供される。
【0080】
例えば、強化されたアセンブラは、強化された構文@got32を受け入れ、破壊的形式の2つの命令シーケンスaddis/ldを生成する。この例において、単一のアセンブラ操作:
ld reg,lable@got32(R2)
は、
addis reg,lable@got@ha(R2)
ld reg,lable@got@l(reg)
と同等であるバイナリ命令及び再配置を生成する。
【0081】
これは現在のPowerISAと一致し、DTIO機能なしのPowerISAプロセッサ上で正確に実行されるが、この操作がDTIO対応プロセッサ上で最適に実行されるというプログラマの意図を反映する。
【0082】
ハードウェアの制約が、DTIOプロセスに影響を与えることがある。例えば、一部のハードウェア・システムが、破壊的DTIOシーケンスしかサポートしないことがある。他のハードウェア・システムにおいて、DTIOプロセスを施すことができる変位サイズに制限が存在する(例えば、21ビット又はそれより少ないオフセットに制限される)。これらの制限をコンパイラ及び/又はプログラマに伝えるので、コンパイラ及び/又はプログラマは、どのシーケンスがターゲット・ハードウェアのDTIO機能にマッピングされるかを認識することができる。
【0083】
例えばLinuxシステムのためにコンパイルする場合などの幾つかの実施形態において、コンパイラは、変位をTOCベースに加算することにより、メイン・モジュールがアドレスを計算する(アドレスをGOTからロードするのではなく)際に、TOC内のデータ・アドレスを導出することによりデータ・アドレスを生成するように最適化される。例示的なコード・シーケンスは、以下の通りである。
addis reg,R2,label@got@h
ld reg,label@got@l(reg)
【0084】
本発明の1つの態様において、このコードは、コード生成の際にコンパイラによって、又は、リンクの際にリンカによって、以下のコード・シーケンスに置き換えることができる。
addis reg,R2,label@toc@ha
addi reg,reg,label@toc@l
【0085】
コンパイラにおけるコード生成によりハードウェア・ベースのDTIOをイネーブルにする一態様によると、次に、DTIOを実装するマイクロプロセッサ16は、置換コード・シーケンスを以下のコード・シーケンスに最適化する。
addireg,reg,label@toc
【0086】
addis/addiを用いたTOC参照の生成をターゲットとする最適化を適用することもできる。これは、
図6に示されるプロセスに従ったTOC/GOT−ロード参照IRポイントに加えて、TOC−計算IRを割り当てること、及び
図5に示されるプロセスに従ったaddis/addiの組み合わせに関するメトリックを修正することを含むことができる。
【0087】
コンパイラはまた、GOTロードの性能を改善し、その後TOCデータ参照を続けることもできる。例示的なコード・シーケンスは以下の通りである。
addis reg,R2,label@got@h
ld reg,label@got@l(reg)
ld reg,structure_offset(reg)
【0088】
このコード・シーケンスは、以下のコード・シーケンスに置き換えることができる。
addisreg,R2,(label+structure_offset)@toc@h
ldreg,reg,(label+structure_offset)@toc@l
【0089】
次に、DTIOにより、置換コード・シーケンスが以下の単一のIOPとして最適化される。
ld reg,reg,(label+structure_offset)@toc //iop
【0090】
structure_offsetは、多くの場合、ゼロであることに留意されたい。この手法はまた、非整数データをロードするための非整数ロードに用いることもできるが、形式は破壊的ではなく、従って、非破壊的DTIOに対するサポートを必要とする。
【0091】
DTIOにより強化されたリンカ80のようなリンカの実施形態が、
図7−
図11を参照して以下に説明される。本明細書で説明されるリンカは、DTIO機能を提供するプロセッサ及びDTIO機能を提供しないプロセッサの両方に対して、TOC及び/又はGOT参照に関連したコンパイラ生成コードの性能を最適化する。当業者であれば、これらの最適化は、プログラムのコンパイル全体が完全にリンクされたオブジェクト・コードを生成することを含む場合に、コンパイルの一部としても実施し得ることを認識するであろう。
【0092】
図7は、本発明の一実施形態による、リンクされたオブジェクト・ファイルを作成するために、リンカにより実施されるプロセスのフロー図を示す。一実施形態において、リンカ・プロセスは、強化されたリンカ80により実施される。ブロック702において、リンカはオブジェクト・ファイルを読み出し、指定子:@toc@l、@toc@h、@got@l、及び@got@hのうちの1つ又は複数を見つける。リンカは、TOC及び/又はGOTを構築した後、これらの指定子を、TOC及び/又はGOT内の指定されたデータ及び/又はデータ参照の実際の上位及び下位アドレス・オフセットに置き換える。一般に、強化されたコンパイラ70により生成されたコードは、TOC及び/又はGOTにおけるデータ・レイアウト及びDTIO実装コード(すなわち、DTIOハードウェア機能により最適化されたコード)におけるアドレス指定範囲の使用;実現可能であれば、GOTロードの代わりのTOCアドレス計算の使用;及びDTIOハードウェア・サポートを有さないプロセッサにおける改善された実行のための不必要なaddis命令の排除のうちの1つ又は複数に関して、リンカによりさらに最適化され得る。
【0093】
ブロック704において、リンカは、TOCの中点を動的に判断する。TOCは、符号付き変位を用いるので、TOCの中点を見つけることにより、データ構造にわたり最も良好な範囲の低コストのアドレス指定が与えられる。性能上の理由で、アドレスの約半分が中点の上にあり、アドレスの約半分が中点の下にあることが望ましい。現代のリンカにおいて、このステップの前にTOCのサイズが固定される(例えば、16Kエントリに)ため、中点は静的に判断される。本明細書で説明される実施形態において、TOCは、固定されたサイズではなく、リンカによりリンクされるオブジェクト・コード・セグメント内の変数の数に基づいて拡張可能である。TOCのサイズが固定されていないので、TOCの中点は、リンク・プロセスの一部として、全GOT及びデータ・サイズに基づいて判断する必要がある。ブロック704は、TOCに関して説明されたが、同じプロセスを、GOTに関してリンカにより実施することができる。
【0094】
ブロック706において、これらに限定されるものではないが、参照シーケンス・プルーニング、参照頻度ベースのTOC及び/又はGOTパッキング、並びに、GOTロードからTOC計算への拡張を含む、参照コードの最適化が実施される。これらの参照コード最適化の各々の実施形態が、本明細書で以下に説明される。ブロック708において、リンカは、リンケージ・ステップ(例えば、リンク時間において解決されるシンボルへの全ての参照を実際の値に置き換え、リンクされた複数のオブジェクト・ファイルを組み合わせて単一のオブジェクト・ファイルにし、随意的に、glink又はPLTスタブのような呼び出しスタブを付加する)を実施し、@l及び@hの定義に従って、リンクされた実行ファイルを生成し、ここで、シンボル値の上位及び下位部分がリンクされた実行ファイルに挿入される。ブロック710において、プログラムのロード及び実行のために、リンクされたオブジェクト・ファイルが発行される。
【0095】
一実施形態において、強化されたリンカ80のようなリンカを用いて、メモリ参照シーケンス・プルーニングなどのメモリ参照コードの最適化プロセスを実施する。一実施形態において、メモリ参照シーケンス・プルーニングは、複数の命令を含み、かつ、ベース・アドレスからのオフセットを指定する、オブジェクト・ファイル内のコード・シーケンスを識別することを含む。ベース・アドレスからのオフセットは、変数のアドレス及びデータの一方を格納するように構成されたメモリ内のオフセット位置に対応する。識別されたコード・シーケンスは、メモリ参照関数及びメモリ・アドレス計算関数の一方を実施するように構成される。メモリ参照シーケンス・プルーニングを安全に適用するために、オフセット位置は、ベース・アドレスの指定範囲内になければならず、かつ、置換コード・シーケンスへの識別されたコード・シーケンスの置換が、プログラム意味論を変更することはできない(すなわち、プログラムの挙動を変えない)。プルーニングが「安全」である場合、オブジェクト・ファイルにおいて、識別されたコード・シーケンスが置換コード・シーケンスに置き換えられ、置換コード・シーケンスは、無動作(no-operation、NOP)命令又は識別されたコード・シーケンスよりも少ない命令を含む。本明細書で用いられる「メモリ参照関数」という用語は、アドレスを計算し、読み出し操作又は書き込み操作を用いて、計算されたアドレスによって識別されたメモリ位置にアクセスする動作を指す。ld、lwz std、又はstw、並びにlfd stfdなどの命令は、メモリ参照関数を実行するPower PC命令の例である。メモリ参照関数の例は、TOC参照関数である。本明細書で用いられる「メモリ・アドレス計算関数」という用語は、(例えば、変位をベース・アドレスに加算することにより)メモリ・アドレスを計算する動作を指す。ld、lwz std、又はstw、並びに、lfd stfdのような命令は、メモリ参照関数を実施するPower PCの命令の例である。メモリ参照関数の例は、TOC参照関数である。本明細書で用いられる「メモリ・アドレス計算関数」という用語は、メモリ・アドレスを計算する(例えば、変位をベース・アドレスに加算することによって)動作を指す。メモリ・アドレス計算の例は、要素のアドレスを計算することである。例えば、データ項目のベース・アドレスがレジスタR5内に存在し、コンパイラがR7内のstruc_offsetにおける構造フィールドのアドレスを導出する必要があると考える。コンパイラは、構造フィールドのメモリ・アドレスを計算するために、以下のシーケンス:addis R7,R5, struc_offset@ha ; addi R7,R7,struc_offset@l
を発行することができる。
【0096】
図8は、一実施形態に従って、メモリ参照シーケンス・プルーニングの最適化を実施するための、リンカにより実施されるメモリ参照コード最適化プロセスのフロー図を示す。一実施形態において、
図8に示されるプロセスは、強化されたリンカ80により実施される。前述のように、強化されたコンパイラ70は、大きな変位を必要とするメモリ参照のために、単一の命令ではなく複数命令シーケンスを生成することができる。一例は、TOC参照アクセスである。本発明の別の態様によると、大きな変位を有した状態でデータ参照にアクセスし、例えば、Cアレイ参照において:
char x[BIG_SIZE], y;
y = x[BIG_OFFSET]
は、アレイ・ベースxがレジスタ5に割り当てられるとき、以下のように変換することができ、値yは、レジスタR20にロードされるはずである。
addis R20, R5 (array base),(LARGE_OFFSET*4)@ha
ld R20, R20, (LARGE_OFFSET*4)@l
【0097】
DTIOハードウェア・サポートを有するマイクロプロセッサにおいて、複数命令シーケンスが、ハードウェアにより以下のように(依存チェーンにおける)単一のIOP操作に置き換えられる。
ld R20, R5, (LARGE_OFFSET*4)
【0098】
この置換は、DTIOハードウェア・サポートを有さないプロセッサでは行われず、
図8に示されるプロセスは、プルーニングすることができる複数命令シーケンスを識別するために用いられる、リンカにおけるプロセスを提供する。
【0099】
ブロック802において、複数命令メモリ参照シーケンスと関連した命令を識別する。複数命令TOC参照シーケンスは、複数命令メモリ参照シーケンスのフォーマットと一致する依存命令を探すことによって、識別することができる。代替的に、シーケンスは、こうしたシーケンスを明確に識別するオブジェクト・コード・フォーマットを有することにより、識別することができる。ブロック804において、識別された参照が、プルーニングされたシーケンスにロードすることができるオフセットを有する参照に対応するかどうかを判断し、ブロック806において、コード・シーケンスに対してプルーニングを実行できるかどうか(プルーニングが「安全」かどうか)を判断する。オフセットをプルーニングされたシーケンスにロードすることができ、かつ、プルーニングは安全であると判断された場合、処理は、ブロック808からブロック810に流れる。ブロック810において、完全なコード・シーケンスをプルーニングされたシーケンスに置き換え、ブロック812において、コード・シーケンス内の排除された命令をNOPに置き換える。NOPをコード・シーケンスに付加することへの代替案は、完全な再配置情報が利用可能である場合に不必要なコード・スペースを排除することである。識別された参照が、プルーニングされたシーケンスにロードすることができるオフセットを有する参照に対応していない、及び/又は、プルーニングが安全ではないと判断された場合、処理は、ブロック808からブロック814に流れる。ブロック814において、完全な複数命令参照シーケンスが、コード・シーケンス内に残される。
【0100】
例えば、ブロック802において、リンカは、以下の命令シーケンスを複数命令GOT参照として識別する。
addis reg, R5, label@ha
ld reg, reg, label@l
【0101】
この例においては、アクセスされるデータと関連した変位値は、R5に格納された32KBのアドレスの範囲内である。変位の上位ビットは必要とされないので、
図8のブロック804は、コード・シーケンスが、プルーニングされたシーケンスにロードすることができるオフセットを有すると判断する。変位値は、R5内の32KBのベース・アドレスの範囲内であり、従って、下位ビットのみにより指定することができるので、上位ビットは必要とされない。
【0102】
ブロック806において、プルーニングが安全であると判断されたと仮定すると、処理は、ブロック808からブロック810及び812に流れ、そこで、リンカが上のコード・シーケンスを以下のコード・シーケンスに置き換える。
NOP
ld reg, R2, label@got@l
【0103】
レジスタの依存性が取り除かれ、プロセッサはNOPの場合を最適化し、その結果、1つの命令だけがもたらされたので、置換コード・シーケンスは、オリジナルのコード・シーケンスよりも効率的である。
【0104】
プルーニングのための候補として識別することができる別のコード・シーケンスは、以下の通りである。
addis reg, R5, offset@ha
addi reg, reg, offset@l
【0105】
上記のコード・シーケンスにおいて、変位値がベース・レジスタにおける32KBのアドレスの範囲内にある場合、変位の上位ビットは必要とされない。
【0106】
変位値が、オフセットが付加される、32KBのベース・アドレスの範囲内である場合、リンカは、上記のコード・シーケンスを以下のコード・シーケンスに置き換える。
NOP
addi reg, R5, offset@l
【0107】
複数命令メモリ参照シーケンスの一部として
図8のブロック802において識別することができ、かつ、ブロック804において、変位の上位ビットが必要とされないため、プルーニングされたシーケンスにロードすることができるオフセットを有するものとして識別することができるコード・シーケンスの例は、以下の通りである。以下のコード・シーケンスでは、ブロック806において、リンカは、プルーニングが安全でないと判断する。
addis reg,R5,offset@ha
Li r5, 0
ld reg,reg,offset@l
【0108】
これは、以下のプルーニングされたコード・シーケンスと同等ではない。
NOP
Li R5,0
ld reg,R5,offset@l
プルーニングされたコード・シーケンスがオリジナルのコード・シーケンスと等しくないため、上記のコード・シーケンスに対するプルーニングは、安全でない。
【0109】
リンカは、プルーニングを実行できるかどうかを判断するために、1組の規則を有することができる。例えば、1つの規則は、複数命令メモリ参照シーケンスにおける命令が互いに隣接していなければならないこととすることができる。別の規則は、シーケンスの最初の命令とシーケンスの最後の命令との間で命令の分析を実施し、最初のaddisにおいて用いられ、かつ、後続の命令にいて新しいベース・レジスタとして用いられるベース・レジスタに対して書き込みが行われないことを保証するものにすることができ、そこで、プルーニングされたaddisの結果は、addis命令のベースにと置き換えられる。代替的に又は付加的に、コンパイラは、プルーニングを安全に実行できるコード・シーケンスを示すことができる。
【0110】
有利なことに、安全確認と組み合わせたメモリ参照識別方法は、コンパイル時に解決されていないオフセットが16ビットの変位に適合すると判断できる場合に、それらを用いてシーケンスを改善するための機会をリンカに提供する。従来技術においては、意味論変更最適化の導入に関する問題を回避するために、TOCベースなどの、関数内で定数であることが分かっているレジスタを用いる参照のみが使用された。本発明によれば、別の規則は、本発明に従って本明細書で教示された最適化の機会に加えて、強化された方法において付加的な従来技術のコードの改善の機会を得るために、アプリケーション・プログラムにより変更されないようにABIにより定められたTOCベース・レジスタを用いて、参照を行わなければならないというものにすることができる。
【0111】
リンカにより実施することができる別の参照コード最適化は、参照頻度ベースのTOC参照パッキング(packing)である。プロセッサに応じて、TOC(又はGOT)ベースからの距離が異なると、コストが異なり得る。ここで
図9を参照すると、本発明の一実施形態によるTOCアドレス指定スキームのブロック図が、一般的に示される。
図9は、ある範囲のメモリ・アドレスを有するTOC904と、TOC904のベースを指し示すTOCアドレス・レジスタ912(例えば、上の例のレジスタ「R2」)とを示す。
図9に示されるように、TOCアドレス・レジスタ912は、リンカにより動的に計算されたTOC904の中点を指し示す。
【0112】
図9は、DTIOハードウェア・サポートを有さないマイクロプロセッサ(MP)と関連し、参照シーケンスのプルーニングがリンカにより実施される、アクセス・コスト906を示す。
図9に示されるようなアクセス・コスト906は、TOCアドレス・レジスタ912における値から+/−32KBより多く離れている全ての参照に関する2つの命令、及びTOCアドレス・レジスタ912における値から+/−32KBの範囲内の全ての参照に関する1つの命令である(
図8を参照して上述されたようなTOCシーケンス・プルーニング最適化が、リンカにより実行される場合)。
【0113】
図9はまた、DTIOハードウェア・サポートを有するマイクロプロセッサ(MP)及び変位値を指定するための21ビットと関連したアクセス・コスト908も示す。
図9に示されるアクセス・コスト908は、TOCアドレス・レジスタ912における値から+−1MBより多く離れている全ての参照に関する2つの命令、及びTOCアドレス・レジスタ912における値から+/−1MBの範囲内にある全ての参照に関する1つの命令である。従って、変位が21ビットの範囲内に適合する場合、ハードウェアにおけるDTIOによる命令の併合が生じ、21ビットを超える変位値を有する命令は、DTIOにより改善されたシーケンスなしで実行を続ける。
【0114】
図9は、DTIOハードウェア・サポートを有するMP及び変位値を指定するための26ビットと関連したアクセス・コスト910をさらに示す。
図9に示されるアクセス・コスト910は、TOCアドレス・レジスタ912における値から+/−32MBより多く離れている全ての参照に関する2つの命令、及びTOCアドレス・レジスタ912における値から+/−32MBの範囲内にある全ての参照に関する1つの命令である。従って、変位が26ビットの範囲内に適合する場合、ハードウェアにおけるDTIOによる命令の併合が生じ、26ビットを超える変位値を有する命令は、DTIOにより改善されたシーケンスなしで実行を続ける。
【0115】
図9に示される異なる変位値と関連したアクセス・コストは例示であり、システム環境に応じて、他のアクセス・コストを用いることができる。例えば、正の方向の指定範囲外の変位値に関するアクセス・コストは、負の方向の指定範囲外の変位値に関するアクセス・コストよりも低くすることができる。付加的に、変位値がTOCアドレス・レジスタ912における値から遠ざかるにつれて、アクセス・コストは増大し得る(例えば、1命令から2命令、3命令へ等のステップ関数として)。さらに、
図9に示される例は、符号付き変位が用いられると仮定する。TOCベース・アドレスへの近接性などの要因に応じて、符号なし変位を異なるアクセス・コストと共に用いることも可能である。
【0116】
図10は、本発明の一実施形態による、参照頻度ベースのTOC(又はGOT)参照パッキングを実施するために、リンカにより実施される参照コード最適化プロセスのフロー図を示す。一実施形態において、
図10に示されるプロセスは、強化されたリンカ80により実施される。
図10に示されるように、リンカは、項目(例えば、アドレス又はデータ)と関連した参照頻度情報を使用して、最も頻繁に使用される参照を、最も低いコストを有する(例えば、TOCアドレス・レジスタ912の値に最も近い)領域に配置する。ブロック1002において、リンカは、アクセス頻度情報を読み出す。読み出された頻度情報は、プロファイル情報に基づくものであってもよく、又は、例えば、ループ・ネスティングに基づいて合成により生成されてもよい。別の代替案は、読み出された頻度情報をユーザ指定のものにすることである。
図10のブロック1004において、最も高い参照頻度を有する項目を選択し、ブロック1006において、この項目を、最も安価な利用可能コストを有するTOC内の位置に配置する。ブロック1008において、さらにデータ項目(例えば、変数)が配置されるかどうかを判断する。さらにデータ項目が配置される場合、次いで、ブロック1004において処理が続行する。さらにデータ項目が配置されない場合、次に、処理はブロック1010において終了する。
【0117】
当業者であれば、この実施形態の教示と共に、頻度以外のコスト・メトリック(例えば、オブジェクト・サイズ及び参照頻度のトレードオフなど)を用い得ることを理解するであろう。
【0118】
図11は、本発明の一実施形態による、GOTロードからTOC計算への拡張を実施するために、リンカにより実施される参照コード最適化プロセスのフロー図を示す。一実施形態において、
図11に示されるプロセスは、強化されたリンカ80により実施される。
図11に示されるように、リンカは、非ローカル(すなわち、共有)である変数への参照を発見したものの、その変数がローカル・モジュール(例えば、メイン・モジュール)において作成されることが分かった場合、リンカは、コードを最適化する。
【0119】
図11のブロック1102において、リンカは、複数命令GOTロード・シーケンスと関連した命令を識別する。識別することは、複数命令TOC参照と一致する依存命令を探すことにより、又は、こうしたシーケンスを明確に識別するオブジェクト・コード・フォーマットを有することにより、実施することができる。ブロック1104において、リンカは、参照が、TOC計算に置き換えることができるGOTロード参照に対応するかどうかを判断する。これは、メイン・モジュールをメイン・モジュール内のローカル変数への参照とリンクするリンカによって判断することができる。ブロック1106において、リンカは、例えば、TOC参照が所定範囲のアドレス参照テーブル・ベースの範囲内にあるかどうかを試験することにより、変換が「安全」であるかどうかを判断する。この範囲は、例えば、TOCデータ・アドレス計算を実施するのに用いることができる多数の変位ビットの1つに、又は、TOCデータ・アドレス計算を実施するのに用いることができる命令の数に対応することができる。例示的なシナリオは、GOTをロードするための命令シーケンスを、同様の長さ(又はより短い長さ、その場合、シーケンス長は、NOP命令の挿入による同じ長さの置換と等しくすることができる)のTOCエントリを計算するシーケンスにしか置換できない場合である。一般的に用いられる現代のリンカは、必要とする、コードへの大きな修正を行うことができないので、このシナリオは非常に一般的である。参照が、TOC計算と置き換えることができるGOTロード参照に対応し、かつ、変換が安全である場合、処理はブロック1108からブロック1110に流れ、拡張が実施される。ブロック1112において、コード・シーケンス内の排除された命令をNOPに置き換える。NOPをコード・シーケンスに付加することへの代替案は、完全な再配置情報が利用可能である場合に不必要なコード・スペースを排除することである。
【0120】
ブロック1104において、TOC計算と置き換えることができるGOTロード参照に対応することが判断される、このタイプのコード・シーケンスの例は、以下の通りである。
addis reg,R2,label@got@h
ld reg,label@got@l(reg)
図11のブロック1110において、リンカは、上記のコード・シーケンスを以下のコード・シーケンスに置き換える。
addisreg,R2,label@toc@h
addi reg,reg,label@toc@l
【0121】
上に示されるように、GOTロード命令は、TOC計算命令に変換される。さらに、ブロック1112において、リンカは、変数が32KBのTOCの範囲内にあると発見した場合には、上述のようなプルーニングを実施し、以下のようにaddis命令をNOP命令に最適化する。
NOP
addi reg,r2,label@toc@l
【0122】
変数への参照は非ローカルであるが、変数はローカル・モジュール(例えば、メイン・モジュール)において作成されることが分かった場合にリンカがコードを最適化する別の例は、以下の通りである。
addisreg,R2,label@got@h
ld reg,label@got@l(reg)
ld reg, struc_offset(reg)
【0123】
ブロック1110において、リンカは、上記のコード・シーケンスを以下のコード・シーケンスに置き換える。
NOP
addis reg,R2,(label+struc_offset)@toc@h
ld reg,reg,(label+struc_offset)@ toc@l
【0124】
さらに、ブロック1112において、リンカは、変数が32KBのTOCの範囲内にあることを発見した場合には、上述のようなプルーニングを実行し、以下のように、addis命令をNOP命令に最適化する。
NOP
NOP
ld reg, R2, (label+struc_offsete)@tol@l
【0125】
本明細書で説明される実施形態は、DTIO機能をもたない従来のハードウェア・プラットフォーム及びDTIO対応のハードウェア・プラットフォームの両方に対して、性能の改善をもたらす。本明細書で説明される新しいコードは、従来のハードウェア・プラットフォーム及びDTIO対応のハードウェア・プラットフォームの両方で実行され得る。新しいオブジェクトを、古いオブジェクトと共に散在させることができる(オブジェクトのミックス・アンド・マッチ(異質なものを組み合わせる)、ABIの連続性を中断しない)。例えば、新しい参照形式が使用されない場合にトランポリンの構築を継続しながら、古いTOCアクセス・シーケンスを有する従来のオブジェクトを新しいオブジェクトとリンクさせることができる。
【0126】
一実施形態において、新しいライブラリを有するオブジェクトを構築するために、古いリンカ/古い環境を使用する。これは、新しい参照の上位ビットの参照マーカーを無視し、新しい下位参照ビット・マーカーが従来の参照マーカーと両立する場合にうまくいく。この実施形態において、下位ビットに対して従来の参照マーカーが使用され、上位ビットに対して擬似許可が使用される。オーバーフローの場合、トランポリンと組み合わせた新しく生成されたコードは、(現代のソリューションと比べて)わずかに遅くなるが、正確な実行をもたらす。新しいライブラリを従来の環境に供給することができる。
【0127】
本明細書で説明されるプロセスは、スケジュールの高さを、従来のコードにおける短い(単一命令の)変位シーケンスに類似した高さまで低減させる。
【0128】
一実施形態において、PowerPC64拡張可能リンク形式(extensible linking format、ELF)ABIは、用語TOC及びGOTを使用する。本明細書で定義されるTOCは、64ビットのPowerOpen ABIにより定義されるものと類似のものであることが意図される。本明細書で用いられるとき、TOCは、ELF GOT+スモール・データとなるように定義される。GOTセクションは、従来のELF GOTを含み、随意的に、スモール・データ領域(浮動小数点定数など)を含むことができる。ベース(TOC)は、GOT+0×8000のアドレスであり、専用のTOCポインタ・レジスタ「R2」により参照される。GOT及びスモール・データ領域を、GOTセクション内に混ぜることができる。GOTに隣接するセクション(手続き型言語テーブル(procedure language table、PLT)及びスモール・データ)にも、専用のTOCポインタを介してアクセスされる。
【0129】
本明細書で用いられる構文SYMBOL@tocは、値(SYMBOL−base(TOC))を指す。これにより、その名称がSYMBOLである変数のアドレスが、TOCベースからのオフセットとして提供される。構文SYMBOL@toc@ha、SYMBOL@toc@h、及びSYMBOL@toc@lは、TOCオフセットの高度に調整された上位及び下位部分を指す。
【0130】
構文SYMBOL@gotは、値(SYMBOL@got−base(TOC))を指す。これにより、その名称がSYMBOLである(64ビットの)アドレス変数を含む、.gotエントリのアドレスが、TOCベースからのオフセットとして提供される。構文SYMBOL@got@ha、SYMBOL@got@h、及びSYMBOL@got@lは、GOTオフセットの高度に調整された上位及び下位部分を指す。
【0131】
強化されたコンパイラ70、強化されたリンカ80、及びDTIOハードウェアにより実施することができる種々の最適化を示すために、本明細書において特定のコード例が使用された。これらの例は、本発明の実施形態を制限することを意図するものではなく、当業者であれば、本明細書で説明される処理を実施するために、他のコード・シーケンスを用い得ることを認識するであろう。
【0132】
当業者により認識されるように、本発明の態様は、システム、方法又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形をとることができ、これらは全て本明細書において一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明の態様は、具体化されたコンピュータ可読プログラム・コードを内部に有する1つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形をとることができる。
【0133】
1つ又は複数のコンピュータ可読媒体のあらゆる組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体であってもよく、又はコンピュータ可読ストレージ媒体であってもよい。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子的、磁気的、光学的、電磁的、赤外線若しくは半導体のシステム、装置若しくはデバイス、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例(非網羅的なリスト)は、以下もの、すなわち、1つ又は複数のワイヤを有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク型読み出し専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、又は上記のいずれかの適切な組み合わせを含む。本文書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって用いられる又はそれらに関連して用いられるプログラムを収容又は格納することができる、いずれかの有形媒体とすることができる。
【0134】
コンピュータ可読信号媒体は、具体化されたコンピュータ可読プログラム・コードを、例えばベースバンド内に又は搬送波の一部としてその中に有する、伝搬データ信号を含むことができる。このような伝搬信号は、これらに限定されるものではないが、電磁的形態、光学的形態又はこれらのいずれかの適切な組み合わせを含む種々の形態のうちのいずれかをとることもできる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、かつ、命令実行システム、装置若しくはデバイスによって用いられる又はそれらに関連して用いられるプログラムを伝達、伝搬又伝送することができる、いずれかのコンピュータ可読媒体とすることができる。
【0135】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、RF等、又は上記のいずれかの適切な組み合わせを含む、いずれかの適切な媒体を用いて伝送することができる。
【0136】
本発明の態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Java、Smalltalk、C++等のようなオブジェクト指向プログラミング言語、及び「C」プログラミング言語のような従来の手続き型プログラミング言語、又は同様のプログラミング言語、1つ又は複数のプログラミング言語のいずれかの組み合わせで記述することができる。プログラム・コードは、全体がユーザのコンピュータ上で実行される場合もあり、独立型ソフトウェア・パッケージとして、一部がユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は全体が遠隔コンピュータ若しくはサーバ上で実行される場合もある。後者のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの(例えば、インターネット・サービス・プロバイダを用いるインターネットを通じた)接続がなされる場合もある。
【0137】
本発明の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して以下で説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装することができることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサにより実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装するための手段を生成するようにすることができる。
【0138】
これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスに特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。
【0139】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で、コンピュータ実装プロセスを生成するための一連の動作ステップを実施させて、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装するためのプロセスを提供するようにすることもできる。
【0140】
図中のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能性、及び動作を示す。これに関して、フローチャート又はブロック図中の各ブロックは、指定された論理機能を実施するための1つ又は複数の実行可能命令を含むコードの、モジュール、セグメント、又は部分を表すことができる。さらに、幾つかの代替的実施形態において、ブロック内に記述された機能は、図中に示したのとは別の順序で実行することができることに留意されたい。例えば、連続して示した2つのブロックは、実際には、実質的に並列に実行することができ、又はブロックは場合により、関与する機能性に応じて逆の順序で実行することができる。さらに、ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図中のブロックの組み合わせは、指定された機能又は動作を実行する専用ハードウェアをベースとするシステム、又は専用ハードウェアとコンピュータ命令との組み合わせによって実施できることにも留意されたい。
【0141】
本明細書で用いられる用語は、特定の実施形態を説明することのみを目的とし、本発明を限定することを意図したものではない。ここで用いられる単数形の「1つの(a)」、「1つの(an)」及び「その(the)」という用語は、文脈が明確に他の場合を指示していない限り、複数形も含む。「含む(comprise)」及び/又は「含んでいる(comprising)」という用語は、本明細書で用いられるとき、記述された特徴、整数、ステップ、操作、要素、及び/又はコンポーネントの存在を指定するが、1つ又は複数の他の特徴、整数、ステップ、操作、要素、コンポーネント、及び/又はその群の存在又は付加を除外するものではないことが、さらに理解されるであろう。
【0142】
下記の特許請求の範囲におけるすべての機能付き手段(ミーンズ・プラス・ファンクション)又は機能付き工程(ステップ・プラス・ファンクション)の対応する構造、材料、動作、及び均等物は、該当する場合には、具体的に請求される他の請求要素と組み合わせて本機能を実施するためのいずれかの構造、材料、又は動作を含むことを意図している。本発明の記載は、例示及び説明目的で提示されたが、網羅的であることを意図するものでも、開示された形態の発明に限定されることを意図するものでものでもない。当業者であれば、本発明の範囲及び精神から逸脱することなく、多くの修正及び変形が明らかであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明し、その他の当業者が企図される特定の使用に適した種々の修正を伴う種々の実施形態について本発明を理解できるように、選択され、説明された。
【0143】
本明細書で示されるフロー図は、単に一例である。本発明の趣旨から逸脱することなく、この図及びその中に記載されたステップ(又は動作)に対して多くの変形が存在し得る。例えば、ステップを異なる順序で実行することもでき、又はステップを追加し、削除し又は修正することもできる。これらの変形のすべては、特許請求される発明の一部と見なされる。
【0144】
本発明の好適な実施形態を説明してきたが、現在及び将来の両方において、当業者が、以下の特許請求の範囲内に入る種々の改善及び強化を行い得ることが理解されるであろう。これらの特許請求の範囲は、最初に記載される発明の適正な保護を維持するよう解釈されるべきである。