(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-08-01
(45)【発行日】2025-08-12
(54)【発明の名称】コード・パターン解析によるプログラム・コード内のポインタ位置合せ計算
(51)【国際特許分類】
G06F 8/41 20180101AFI20250804BHJP
【FI】
G06F8/41 170
(21)【出願番号】P 2023565167
(86)(22)【出願日】2022-06-10
(86)【国際出願番号】 IB2022055409
(87)【国際公開番号】W WO2022263980
(87)【国際公開日】2022-12-22
【審査請求日】2024-11-14
(32)【優先日】2021-06-16
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】クイ、シミン
【審査官】今川 悟
(56)【参考文献】
【文献】特開2012-128584(JP,A)
【文献】特開2006-107339(JP,A)
【文献】特表2016-517109(JP,A)
【文献】米国特許出願公開第2013/0055224(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/41
(57)【特許請求の範囲】
【請求項1】
コンピュータの情報処理によりプログラミングの際にポインタ位置合せを計算するための
方法であって、
フローに鈍感かつフィールドに敏感な統一ベースのポインタ解析を使用してプログラム内のポインタの同等クラスを収集したことに応答して、同等クラス・マッピング・テーブル(ECTable)内にポインタの前記同等クラスを記録することと、
前記プログラム内のポインタ参照のコード・パターン解析を実施して、事前定義された基準に従って、位置合せ計算のために前記ECTableからポインタ候補のセットを識別することと、
それぞれの識別した候補ポインタのそれぞれの参照ポイントで始まるそれぞれの識別した候補ポインタのuse-defineチェーンを通じて反復することにより、ポインタ候補の前記セットのそれぞれに関する前記位置合せ計算を実施することと、
前記位置合せ計算の結果として位置合せ情報を受け取り、前記位置合せ情報をコンパイラに提供することと
を含むコンピュータ実装方法。
【請求項2】
収集された前記ポインタの同等クラスのそれぞれについて、その値が前記プログラム内におけるstore命令を使用して記憶されている前記ポインタのサブセットを、同等ストア・マッピング・テーブル(ESTable)内に記録することをさらに含む、請求項1に記載の
方法。
【請求項3】
各候補ポインタは、前記コンパイラが前記候補ポインタのそれぞれのポインタ参照を最適化することを可能にするように、利用可能な位置合せ情報を有する前記ECTable内でマッピングされた、フラグが付けられていない同等クラスとして識別される、請求項1に記載の
方法。
【請求項4】
前記コード・パターン解析は、前記それぞれのポインタ参照の位置合せチェックが分岐除去によって削減または除去されて前記プログラムのプログラム・コードを単純化することが可能であることを、前記プログラム内の前記候補ポインタの前記それぞれのポインタ参照が示していると判定することをさらに含む、請求項3に記載の
方法。
【請求項5】
前記コード・パターン解析は、コード・バージョニングがポインタ位置合せに基づいて削減されることが可能であることを、前記プログラム内の前記候補ポインタの前記それぞれのポインタ参照が示していると判定することをさらに含み、前記ポインタ位置合せにおいて、ループ・バージョニングの使用なしにループについて危険の低減された状態で負荷推測またはデータ並列化が実施される、請求項3に記載の
方法。
【請求項6】
前記位置合せ計算を実施することは、前記識別した候補ポインタの値がロード命令からのものであると判定したことに応答して、前記ESTable内に記録されたすべての関連するマッピングされたポインタを解析することをさらに含む、請求項2に記載の
方法。
【請求項7】
前記位置合せ計算を実施することは、前記識別した候補ポインタの前記値がアドレス計算からのものであると判定したことに応答して、解析のために前記識別した候補ポインタのベース・ポインタを抽出することをさらに含む、請求項6に記載の
方法。
【請求項8】
解析のために前記ベース・ポインタを抽出することは、前記アドレス計算の残りの部分の係数についての最大公約数(GCD)の整数値を計算することと、前記計算に従って前記アドレス計算の現ステージまで位置合せ情報を取得することとをさらに含む、請求項7に記載の
方法。
【請求項9】
コンピューティング環境内のポインタ位置合せを計算するためのシステムであって、
プロセッサと、実行可能命令を記憶するメモリであって、前記実行可能命令が、前記プロセッサによって実行されるとき、前記プロセッサに、
フローに鈍感かつフィールドに敏感な統一ベースのポインタ解析を使用してプログラム内のポインタの同等クラスを収集したことに応答して、同等クラス・マッピング・テーブル(ECTable)内にポインタの前記同等クラスを記録すること、
前記プログラム内のポインタ参照のコード・パターン解析を実施して、事前定義された基準に従って、位置合せ計算のために前記ECTableからポインタ候補のセットを識別すること、
それぞれの識別した候補ポインタのそれぞれの参照ポイントで始まるそれぞれの識別した候補ポインタのuse-defineチェーンを通じて反復することにより、ポインタ候補の前記セットのそれぞれに関する前記位置合せ計算を実施すること、および
前記位置合せ計算の結果として位置合せ情報を受け取り、前記位置合せ情報をコンパイラに提供すること
を行わせる、前記メモリと
を備えるシステム。
【請求項10】
プログラミングの際にポインタ位置合せを計算するためのコンピュータ・プログラ
ムであって
、
フローに鈍感かつフィールドに敏感な統一ベースのポインタ解析を使用してプログラム内のポインタの同等クラスを収集したことに応答して、同等クラス・マッピング・テーブル(ECTable)内にポインタの前記同等クラスを記録するプログラム命令と、
前記プログラム内のポインタ参照のコード・パターン解析を実施して、事前定義された基準に従って、位置合せ計算のために前記ECTableからポインタ候補のセットを識別するプログラム命令と、
それぞれの識別した候補ポインタのそれぞれの参照ポイントで始まるそれぞれの識別した候補ポインタのuse-defineチェーンを通じて反復することにより、ポインタ候補の前記セットのそれぞれに関する前記位置合せ計算を実施するプログラム命令と、
前記位置合せ計算の結果として位置合せ情報を受け取り、前記位置合せ情報をコンパイラに提供するプログラム命令と
を含む、前記プログラム命令と
を含むコンピュータ・プログラム製品。
【請求項11】
請求項10に記載のコンピュータ・プログラムを記録した、コンピュータ可読記憶媒体。
【請求項12】
コンピュータの情報処理によりプログラミングの際にポインタの位置合せを計算するための
方法であって、
ポインタ解析動作を使用して、プログラム内のポインタの同等クラスを収集することと、
事前定義されたポインタ参照パターンに従って、前記収集されたポインタの同等クラスの一部のみをポインタ位置合せ計算のためのポインタ候補として識別することと、
各識別されたポインタ候補について前記ポインタ位置合せ計算を実施して、前記プログラムの実行を最適化するために使用される位置合せ情報を取得することと
を含む
方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般にはコンピューティング・システムに関し、より詳細には、コンピューティング・プロセッサを使用してポインタ位置合せ(pointer alignment)を計算するための様々な実施形態に関する。
【発明の概要】
【0002】
本発明の好ましい実施形態によれば、プログラミングの際にポインタの位置合せを計算するためのコンピュータ実装方法が開示される。コンピュータ実装方法は、フローに鈍感かつフィールドに敏感な統一ベースのポインタ解析(flow-insensitive and field-sensitive unification-based pointer analysis)を使用してプログラム内のポインタの同等クラスを収集したことに応答して、同等クラス・マッピング・テーブル(ECTable)内にポインタの同等クラスを記録することを含む。コンピュータ実装方法は、プログラム内のポインタ参照のコード・パターン解析を実施して、事前定義された基準に従って、位置合せ計算のためにECTableからポインタ候補のセットを識別する。コンピュータ実装方法はさらに、それぞれの識別した候補ポインタのそれぞれの参照ポイントで始まるそれぞれの識別した候補ポインタのuse-defineチェーンを通じて反復することにより、ポインタ候補のセットのそれぞれに関する位置合せ計算を実施する。コンピュータ実装方法はさらに、位置合せ計算の結果として位置合せ情報を受け取り、位置合せ情報をコンパイラに提供する。
【0003】
本発明の別の好ましい実施形態によれば、本発明はコンピュータ・システムを含む。コンピュータ・システムは、プロセッサと、メモリと、記憶デバイスと、メモリを介するプロセッサによる実行のために記憶デバイス上に記憶されたプログラム命令とを含む。プログラム命令は、プロセッサによって実行されるとき、要約して説明したのと同様の機能をプロセッサに実施させる。
【0004】
本発明の別の好ましい実施形態によれば、本発明はコンピュータ使用可能プログラム製品を含む。コンピュータ使用可能プログラム製品は、コンピュータ可読記憶デバイスと、記憶デバイス上に記憶されたプログラム命令とを含む。プログラム命令は、プロセッサによって実行されるとき、要約して説明したのと同様の機能をプロセッサに実施させる。
【0005】
次に、本発明の好ましい実施形態が、単に例として、以下の図面を参照しながら説明される。
【図面の簡単な説明】
【0006】
【
図1】本発明の一実施形態による例示的クラウド・コンピューティング・ノードを示すブロック図である。
【
図2】本発明の一実施形態によるクラウド・コンピューティング環境を示す図である。
【
図3】本発明の一実施形態による抽象化モデル層を示す図である。
【
図4】本発明の態様による、プログラミングの際にポインタ位置合せを計算するためのコンピュータ実装方法を示すフローチャート図である。
【
図5】本発明の態様による、プログラミングの際にポインタ位置合せを計算するためのコンピュータ実装方法を示す追加のフローチャート図である。
【
図6】本発明の態様による、ポインタ位置合せを計算するためのアルゴリズムの例示的プログラミング・コードを示す図である。
【発明を実施するための形態】
【0007】
データ処理システムは、メモリ・アクセス位置合せを動的にチェックする機構を提供する。メモリ・アクセスは、メモリ内の任意の個々のバイトが任意のサイズのメモリ・アクセスによってアドレス指定され得るように無制限であり得、またはメモリ・アクセスは、たとえば半ワード、ワード、ダブルワードなどの境界と位置合せされたメモリ・アクセスのみが行われ得るように制限され得る。したがって、メモリ内のデータの位置合せを実施すること(またはデータの位置合せを計算/判定すること)は、一般には、メモリ・バンクにわたってデータが記憶される方式に関連する様々な技術を指し、その方式は、プログラミング言語の必須のデータ位置合せ要件、もしくはプロセッサ・アーキテクチャによって規定される必須のデータ位置合せ要件、またはその両方に準拠するために、データの境界サイズもしくはデータ・タイプまたはその両方に依存する。
【0008】
プログラミングでは、CやC++などのポインタリッチなプログラミング言語でポインタが広く使用され、これらのポインタはまた、指し示されているアドレスが何らかの因子で均等に割り切れる(すなわち、たとえばアクセスのためにワード境界に制限される)ことを一般に参照して位置合せされる。ポインタのこの位置合せ情報は、様々なコンパイラ制御された最適化で有用であり、プログラムについての性能改良につながる。たとえば、位置合せ解析は、単一命令複数データ(SIMD)命令が適切となるループによるアクセスのためにプログラム・ポインタが位置合せされることを示し得る場合、普通なら未知のポインタ位置合せに対処するためのコード複製(動的位置合せチェッキング(dynamic alignment checking)を伴うループ・バージョニング(loop versioning)の包含など)が回避され得る。ユーザはまた、相異なるデータ・タイプについて同様のタスクを異なるように実施するために、プログラム内にコードを追加してポインタ位置合せをチェックし得る。たとえば、mfc、gcc、cam4、およびpovrayを含むSPEC CPU(登録商標)2017ベンチマークで使用されるspec_qsortルーチンでは、ソートすべきデータの1対の要素がスワップされるごとに位置合せがチェックされる。有効な位置合せ情報がそうしたデータ・ポインタについて得られた場合、これらの動的位置合せチェックはベンチマークで除去されることがあり、それにより、当然ながらベンチマーク性能が著しく改善される。これらの動的位置合せチェックを除去することはまた、やむを得ずリソースを使用して位置合せを反復的に確認するのではなく、そうしたリソースが好ましい動作に転用され得るので、他の最適化機構の効率的な使用、およびデータに関する解析を促進することになる。
【0009】
ポインタ位置合せ解析方法はポインタ解析方法と非常に類似しているとはいえ、ポインタ解析の技術分野で周知の技法は、ポインタ位置合せ解析を計算することとは別個のものである(すなわち、その前身である)ことに留意されたい。イントラおよびインター手続型ポインタ解析(intra- and inter-procedural pointer analysis)が、いくつかの提案される方法と共に長年にわたって研究されてきた。当技術分野で周知のように、解析の様々な方法が、精度と効率との間の異なるトレードオフ(たとえば、SteensgaardまたはAndersonなどのフローに鈍感な解析と比べた、スパース解析などのフローに敏感な解析)を実現する。フローに敏感な解析では、各プログラム・ポイントについて異なるpoints-to情報が計算されるのに対して、フローに鈍感な解析では、すべてのプログラム・ポイントにわたってpoints-to情報がマージされる。もちろん、フローに敏感な解析はより正確であるが、フローに鈍感な解析よりもスケーラブルではない(すなわち、動作するのにより多くのリソースを必要とし、したがってリソース「費用がかかる」)。インター手続型のフローに敏感なポインタ解析(inter-procedural flow-sensitive pointer analysis)は、プログラム内のあらゆるポイントでポインタについての情報を計算し、各プロシージャで情報を伝播し、次いで、すべてのプロシージャについて、収集された情報に関する反復的クロージュア(iterative closure)を実施する。しかしながら、そのような解析は、比較的大規模なプログラムを扱うコンパイラでは特に、極めてリソース集約的である。
【0010】
代替のイントラ手続型方法を考慮するとき、方法の効率ではなく、グラニュラリティまたは精度がさらに考慮され得る。たとえば、包含ベースの解析(たとえば、Anderson)では、ポインタは、抽象的位置のセットを指し示し得、2つのポインタが何らかの抽象位置を共に指し示し得る場合、その2つのポインタはエイリアスであり得る。統一ベースの解析(たとえば、Steensgaard)では、ポインタが同等クラス内に配置される。すなわち、ポインタpが、ポインタqが指し示し得る何らかのものを指し示し得る場合、それらは同一の同等クラス内にあると見なされる。
【0011】
これまでのところ、最も効率的なインター手続型ポインタ解析は、フローに鈍感でコンテキストに鈍感な統一ベースのSteensgaardスタイルの方法(flow-insensitive context-insensitive unification-based Steensgaard-style method)であり、前述のように、この方法は、プログラム全体内のポインタの同等クラスを計算するために使用され得る。このタイプの解析をポインタ位置合せ解析に変換することは、より複雑でより費用のかかるフローに敏感な解析よりも一般には精密ではないが、複数の間接レベルのポインタについてより正確な位置合せ情報を提供し得る。
【0012】
したがって、本発明では、フローに鈍感であるが、フィールドに敏感なポインタ解析から収集されたポインタの同等クラスに基づいてポインタ位置合せを計算するための技術が提案される。開示される本発明のフローに鈍感な態様は、特に大規模なプログラムについて、ポインタの位置合せを計算するのが、既存の技術よりも計算時間の点で著しく単純かつ安価である。さらに、これらのタイプの解析を実施する技術がフィールドに敏感となるように拡張されており、将来のコンパイラでのデータ再編成のための基礎として実装されている。
【0013】
一般に、本明細書では、「最適化する(optimize)」という用語は、「最大化する」、「最小化する」、「最良」、または1つもしくは複数の特定のターゲット、目的、目標、または意図を達成することを指し得るか、もしくはそのように定義され得るか、またはその両方であることに留意されたい。最適化するという用語はまた、経験的に観測可能な形で、ユーザにとっての恩恵を最大にすること、状況、機会、もしくはリソースを最も効果的または機能的に利用すること、またはリソースもしくはプログラムの効率を向上させることを指すことがある。
【0014】
さらに、最適化すること(optimizing)という用語は、最良の解決策または結果を指す必要はなく、たとえば、特定の適用について「十分に良好な」、または単に前よりも「良好な」解決策または結果を指すことがある。追加の態様では、最適化するという用語、もしくは最適化することという用語、またはその両方は、最適な結果が実際に達成されるか否かに関わらず、実行コストの削減やリソース利用の向上などの改善された結果を達成するために実施される動作を指すことがある。同様に、最適化するという用語は、そのような改善動作を実施するための構成要素を指すことがあり、最適化された(optimized)という用語は、そのような改善動作の結果を記述するために使用され得る。
【0015】
本開示はクラウド・コンピューティングに関する詳細な説明を含むが、本明細書に記載の教示の実装はクラウド・コンピューティング環境に限定されないことを理解されたい。むしろ、本発明の実施形態は、現在周知の、または後に開発される任意の他のタイプのコンピューティング環境と共に実装することができる。
【0016】
クラウド・コンピューティングは、最小限の管理労力またはサービスのプロバイダとの対話で迅速にプロビジョニングされ、解放され得る、構成可能なコンピューティング・リソース(たとえば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共有プールへの便利なオンデマンド・ネットワーク・アクセスを可能にするためのサービス配信のモデルである。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、および少なくとも4つのデプロイメント・モデルを含み得る。
【0017】
特徴は以下の通りである。
オンデマンド・セルフサービス:クラウド消費者は、サービスのプロバイダとの人間の対話を必要とすることなく、必要に応じて自動的に、サーバ時間やネットワーク・ストレージなどのコンピューティング機能を一方的にプロビジョニングし得る。
幅広いネットワーク・アクセス:機能がネットワークを介して利用可能であり、異種シンまたはシック・クライアント・プラットフォーム(たとえば、携帯電話、ラップトップ、およびPDA)による使用を促進する標準機構を通じてアクセスされる。
リソース・プーリング:マルチ・テナント・モデルを使用して複数の消費者にサービスするためにプロバイダのコンピューティング・リソースがプールされ、様々な物理および仮想リソースが、要求に従って動的に割当ておよび再割当てされる。消費者は一般に、提供されるリソースの厳密な位置に関する制御または知識を有さないが、より高いレベルの抽象化(たとえば、国、州、またはデータセンタ)で位置を指定することができ得るという点で、ある意味で位置独立性がある。
迅速な拡張性:機能が、迅速かつ弾力的に、あるケースでは自動的にプロビジョニングされて迅速にスケールアウトされ、迅速に解放されて迅速にスケールインされ得る。消費者にとって、プロビジョニングのために利用可能な機能はしばしば無制限であるように見え、いつでも任意の量を購入することができる。
測定されるサービス:クラウド・システムは、サービスのタイプ(たとえば、ストレージ、処理、帯域幅、およびアクティブなユーザ・アカウント)にとって適切な何らかのレベルの抽象化の計量機能を活用することによってリソース使用を自動的に制御し、最適化する。リソース使用量が監視され、制御され、レポートされ得、利用されるサービスのプロバイダと消費者の両方にとって透明性が実現される。
【0018】
サービス・モデルは以下の通りである。
サービスとしてのソフトウェア(SaaS: Software as a Service):消費者に提供される機能は、クラウド・インフラストラクチャ上で実行中のプロバイダのアプリケーションを使用することである。アプリケーションは、ウェブ・ブラウザ(たとえば、ウェブ・ベースのeメール)などのシン・クライアント・インターフェースを通じて、様々なクライアント・デバイスからアクセス可能である。消費者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、さらには個々のアプリケーション機能を含む、基礎となるクラウド・インフラストラクチャを管理または制御しないが、可能性のある例外は、限定されたユーザ特有のアプリケーション構成設定である。
サービスとしてのプラットフォーム(PaaS: Platform as a Service):消費者に提供される機能は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、消費者が作成または取得したアプリケーションをクラウド・インフラストラクチャ上にデプロイすることである。消費者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む、基礎となるクラウド・インフラストラクチャを管理または制御しないが、デプロイされるアプリケーション、および場合によってはアプリケーション・ホスティング環境構成に関する制御を有する。
サービスとしてのインフラストラクチャ(IaaS: Infrastructure as a Service):消費者に提供される機能は、処理、ストレージ、ネットワーク、および他の基本コンピューティング・リソースをプロビジョニングすることであり、消費者は、オペレーティング・システムおよびアプリケーションを含み得る、任意のソフトウェアをデプロイおよび実行することができる。消費者は、基礎となるクラウド・インフラストラクチャを管理または制御しないが、オペレーティング・システム、ストレージ、デプロイされるアプリケーションに関する制御、および場合によっては選択されたネットワーキング構成要素(たとえば、ホスト・ファイアウォール)の限定された制御を有する。
【0019】
デプロイメント・モデルは以下の通りである。
プライベート・クラウド:クラウド・インフラストラクチャが組織だけのために運用される。クラウド・インフラストラクチャは、組織または第三者によって管理され得、オンプレミスまたはオフプレミスで存在し得る。
コミュニティ・クラウド:クラウド・インフラストラクチャがいくつかの組織によって共有され、共有される関心事(たとえば、ミッション、セキュリティ要件、ポリシー、およびコンプライアンスの考慮事項)を有する特定のコミュニティをサポートする。クラウド・インフラストラクチャは、組織または第三者によって管理され得、オンプレミスまたはオフプレミスで存在し得る。
パブリック・クラウド:クラウド・インフラストラクチャが、一般社会または大規模な産業グループに対して利用可能にされ、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラストラクチャは、固有のエンティティのままであるが、データおよびアプリケーション・ポータビリティを可能にする標準化技術またはプロプライエタリ技術(たとえば、クラウド間のロード・バランシングのためのクラウド・バースティング)によって互いに結び付けられる2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の合成である。
【0020】
クラウド・コンピューティング環境は、ステートレス性、低結合性、モジュール性、および意味論的相互運用性に重点を置いたサービス指向の環境である。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラストラクチャである。
【0021】
次に
図1を参照すると、クラウド・コンピューティング・ノードの一例の概略図が示されている。クラウド・コンピューティング・ノード10は、適切なクラウド・コンピューティング・ノードの一例に過ぎず、本明細書で説明される発明の実施形態の使用または機能の範囲に関する何らかの制限を示唆するものではない。それでも、クラウド・コンピューティング・ノード10は、前述の機能のいずれかを実装するか、もしくは実施するか、またはその両方を行うことができる。
【0022】
クラウド・コンピューティング・ノード10では、コンピュータ・システム/サーバ12があり、コンピュータ・システム/サーバ12は、多数の他の汎用または専用コンピューティング・システム環境または構成と共に動作可能である。コンピュータ・システム/サーバ12と共に使用するのに適していることがある周知のコンピューティング・システム、環境、もしくは構成、またはそれらの組合せの例には、限定はしないが、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラマブル・コンシューマ・エレクトロニクス、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境などが含まれる。
【0023】
コンピュータ・システム/サーバ12は、コンピュータ・システムによって実行中の、プログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的な文脈で説明され得る。一般に、プログラム・モジュールは、特定のタスクを実施するか、または特定の抽象データ・タイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含み得る。コンピュータ・システム/サーバ12は、通信ネットワークを通じてリンクされるリモート処理デバイスによってタスクが実施される、分散型クラウド・コンピューティング環境で実施され得る。分散型クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ記憶デバイスを含む、ローカル・コンピュータ・システム記憶媒体とリモート・コンピュータ・システム記憶媒体の両方に配置され得る。
【0024】
図1に示されるように、クラウド・コンピューティング・ノード10内のコンピュータ・システム/サーバ12が、汎用コンピューティング・デバイスの形態で示されている。コンピュータ・システム/サーバ12の構成要素には、限定はしないが、1つまたは複数のプロセッサまたは処理装置16と、システム・メモリ28と、システム・メモリ28を含む様々なシステム構成要素をプロセッサ16に結合するバス18とが含まれ得る。
【0025】
バス18は、様々なバス・アーキテクチャのいずれかを使用する、メモリ・バスまたはメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、およびプロセッサまたはローカル・バスを含むいくつかのタイプのバス構造のうちのいずれか1つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャには、インダストリ・スタンダード・アーキテクチャ(ISA)バス、マイクロ・チャネル・アーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ・エレクトロニクス・スタンダード・アソシエーション(VESA)ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト(PCI)バスが含まれる。
【0026】
コンピュータ・システム/サーバ12は通常、様々なコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム/サーバ12によってアクセス可能である任意の入手可能な媒体であり得、そのような媒体には、揮発性媒体と不揮発性媒体、取外し可能媒体と取外し不能媒体の両方が含まれる。
【0027】
システム・メモリ28は、ランダム・アクセス・メモリ(RAM)30もしくはキャッシュ・メモリ32またはその両方などの、揮発性メモリの形態のコンピュータ・システム可読媒体を含み得る。コンピュータ・システム/サーバ12は、他の取外し可能/取外し不能な揮発性/不揮発性コンピュータ・システム記憶媒体をさらに含み得る。単に例として、取外し不能な不揮発性磁気媒体(図示しておらず、通常は「ハード・ドライブ」と呼ばれる)から読み取り、それに書き込むための記憶システム34が設けられ得る。図示していないが、取外し可能な不揮発性磁気ディスク(たとえば、「フロッピィ(登録商標)・ディスク」)から読み取り、それに書き込むための磁気ディスク・ドライブ、およびCD-ROM、DVD-ROM、または他の光媒体などの取外し可能な不揮発性光ディスクから読み取り、それに書き込むための光ディスク・ドライブが設けられ得る。そのような場合、それぞれは、1つまたは複数のデータ媒体インターフェースによってバス18に接続され得る。以下でさらに図示され、説明されるように、システム・メモリ28は、本発明の実施形態の機能を実施するように構成されるプログラム・モジュールのセット(たとえば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含み得る。
【0028】
限定ではなく例として、プログラム・モジュール42のセット(少なくとも1つ)を有するプログラム/ユーティリティ40、ならびにオペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データが、システム・メモリ28内に記憶され得る。オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データのそれぞれ、またはそれらの何らかの組合せは、ネットワーキング環境の実装を含み得る。プログラム・モジュール42は一般に、本明細書で説明される、本発明の実施形態の機能もしくは方法またはその両方を実施する。
【0029】
コンピュータ・システム/サーバ12はまた、キーボード、ポインティング・デバイス、ディスプレイ24などの1つもしくは複数の外部デバイス14、ユーザがコンピュータ・システム/サーバ12と対話することを可能にする1つもしくは複数のデバイス、またはコンピュータ・システム/サーバ12が1つもしくは複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス(たとえば、ネットワーク・カード、モデムなど)、またはそれらの組合せと通信し得る。そのような通信は、入力/出力(I/O)インターフェース22を介して行われ得る。さらに、コンピュータ・システム/サーバ12は、ネットワーク・アダプタ20を介して、ローカル・エリア・ネットワーク(LAN)、一般の広域ネットワーク(WAN)、もしくは公衆ネットワーク(たとえば、インターネット)、またはそれらの組合せなどの1つまたは複数のネットワークと通信し得る。図示されるように、ネットワーク・アダプタ20は、バス18を介してコンピュータ・システム/サーバ12の他の構成要素と通信する。図示していないが、他のハードウェア構成要素もしくはソフトウェア構成要素またはその両方が、コンピュータ・システム/サーバ12と共に使用され得ることを理解されたい。限定はしないが、例には、マイクロコード、デバイス・ドライバ、冗長処理装置、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、データ・アーカイブ記憶システムなどが含まれる。
【0030】
次に
図2を参照すると、例示的クラウド・コンピューティング環境50が示されている。図示されるように、クラウド・コンピューティング環境50は、たとえば携帯情報端末(PDA)もしくはセルラ電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、またはそれらの組合せなどのクラウド消費者によって使用されるローカル・コンピューティング・デバイスが通信し得る1つまたは複数のクラウド・コンピューティング・ノード10を含む。ノード10は互いに通信し得る。ノード10は、前述のようなプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、もしくはハイブリッド・クラウド、またはそれらの組合せなどの1つまたは複数のネットワーク内に物理的または仮想的にグループ化され得る(図示せず)。これにより、クラウド・コンピューティング環境50が、インフラストラクチャ、プラットフォーム、もしくはソフトウェアまたはそれらの組合せを、クラウド消費者がローカル・コンピューティング・デバイス上でそのためのリソースを維持する必要のないサービスとして提供することが可能となる。
図2に示されるコンピューティング・デバイス54A~Nのタイプは例示的なものに過ぎないこと、ならびにコンピューティング・ノード10およびクラウド・コンピューティング環境50が、(たとえば、ウェブ・ブラウザを使用して)任意のタイプのネットワークもしくはネットワーク・アドレス指定可能接続またはその両方を介して任意のタイプのコンピュータ化されたデバイスと通信し得ることを理解されたい。
【0031】
次に
図3を参照すると、クラウド・コンピューティング環境50(
図2)によって提供される機能抽象化層のセットが示されている。
図3に示される構成要素、層、および機能は例示的なものに過ぎず、本発明の実施形態はそれに限定されないことをあらかじめ理解されたい。図示されるように、以下の層および対応する機能が提供される。
【0032】
デバイス層55は、クラウド・コンピューティング環境50で様々なタスクを実施するためのエレクトロニクス、センサ、アクチュエータ、および他のオブジェクトが組み込まれた、もしくはスタンドアロンのエレクトロニクス、センサ、アクチュエータ、および他のオブジェクトである、またはその両方の、物理デバイスもしくは仮想デバイスまたはその両方を含む。デバイス層55内のデバイスのそれぞれは、他の機能抽象化層に対するネットワーキング機能を組み込み、したがって、デバイスから取得された情報が他の機能抽象化層に提供され得るか、もしくは他の抽象化層からの情報がデバイスに提供され得るか、またはその両方となり得る。一実施形態では、デバイス層55を含む様々なデバイスは、集合的に「モノのインターネット」(IoT)と呼ばれるエンティティのネットワークを組み込み得る。当業者は理解するであろうが、エンティティのそのようなネットワークにより、データの相互通信、収集、および配布が非常に様々な目的を達成することが可能となる。
【0033】
図示されるデバイス層55は、図示されるように、センサ52、アクチュエータ53、一体化された処理を備える「学習」サーモスタット56、センサ、およびネットワーキング・エレクトロニクス、カメラ57、制御可能な家庭用アウトレット/レセプタクル58、および制御可能な電気的スイッチ59を含む。他の可能なデバイスには、限定はしないが、様々な追加のセンサ・デバイス、ネットワーキング・デバイス、エレクトロニクス・デバイス(リモート・コントロール・デバイスなど)、追加のアクチュエータ・デバイス、冷蔵庫や洗濯機/乾燥機などのいわゆる「スマート」アプリケーション、および多種多様な他の可能な相互接続されたオブジェクトが含まれ得る。
【0034】
ハードウェアおよびソフトウェア層60が、ハードウェアおよびソフトウェア構成要素を含む。ハードウェア構成要素の例には、メインフレーム61、RISC(縮小命令セット・コンピュータ)アーキテクチャベースのサーバ62、サーバ63、ブレード・サーバ64、記憶デバイス65、ならびにネットワークおよびネットワーキング構成要素66が含まれる。いくつかの実施形態では、ソフトウェア構成要素は、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
【0035】
仮想化層70が抽象化層を提供し、抽象化層から仮想エンティティの以下の例が提供され得る。すなわち、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75である。
【0036】
一例として、管理層80が以下で説明される機能を与え得る。リソース・プロビジョニング81が、クラウド・コンピューティング環境内でタスクを実施するために利用されるコンピューティング・リソースおよび他のリソースの動的調達を実現する。計量および価格設定82が、クラウド・コンピューティング環境内でリソースが利用されるときのコスト追跡と、これらのリソースの消費に対する請求またはインボイス送付とを実現する。一例として、これらのリソースはアプリケーション・ソフトウェア・ライセンスを含み得る。セキュリティが、クラウド消費者およびタスクについての識別検証、ならびにデータおよび他のリソースに対する保護を実現する。ユーザ・ポータル83が、消費者およびシステム管理者のためのクラウド・コンピューティング環境へのアクセスを実現する。サービス・レベル管理84が、必要とされるサービス・レベルが満たされるようにクラウド・コンピューティング・リソース割振りおよび管理を実現する。サービス・レベル・アグリーメント(SLA)の計画および履行85が、SLAに従って、将来の必要が予想されるクラウド・コンピューティング・リソースの事前調整および調達を実現する。
【0037】
作業負荷層90が、クラウド・コンピューティング環境がそのために利用され得る機能の例を提供する。この層から提供され得る作業負荷および機能の例には、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想クラスルーム教育配信93、データ解析処理94、トランザクション処理95が含まれ、本発明の図示される実施形態の状況では、コンピュータ・プログラミング・アプリケーションでのポインタ位置合せを促進する様々な作業負荷および機能96が含まれる。さらに、作業負荷および機能96は、ポインタ位置合せ計算(pointer alignment computation)を直接的または間接的に促進するために使用される、様々な解析(たとえば、ポインタ解析)を実施して、データと、データのパラメータおよび特徴とを識別するような動作を含み得る。コンピュータ・プログラミング・アプリケーションでポインタ位置合せを計算するための作業負荷および機能96はまた、本発明の図示される実施形態の様々な目的を達成するために、ハードウェアおよびソフトウェア60、仮想化70、管理80、および他の作業負荷90(たとえば、データ解析処理94など)などでの様々な抽象化層の他の部分と共に働き得ることを当業者は理解されよう。
【0038】
次に、本発明の態様によって達成される機能の本体を参照すると、本発明の実施形態は、再び、コンパイル済みプログラム・コードの実行の際の性能を最適化または改善するために、新規なインター手続型コンパイル方法を導入して、ポインタの位置合せを効率的に計算する。本発明の実施形態は、フローに鈍感であるがフィールドに敏感なポインタ解析を実施し、プログラム全体についてのポインタの同等クラスを収集する態様からなる。追加の態様は、プログラム内のその参照(すなわち、候補ポインタの参照)のコード・パターンに基づいて位置合せをそれについて計算するための候補ポインタを、ポインタの同等クラスから識別することを含む。追加の態様は、プログラム内のその参照ポイントから始まる、それぞれの識別された候補ポインタについて、ボトムアップ(bottom-up)(すなわち、フローに鈍感)に位置合せを計算することを含む。次いで、得られた位置合せ情報がコンパイラに提供され、位置合せがそれについて計算されたこれらの候補ポインタの参照をコンパイラが最適化することが可能となり得る。
【0039】
確実に限定としてではなく、開示される技術は、いくつかのポインタのみについて位置合せ情報が必要とされる比較的大規模なプログラムに対して特に効率的であることに留意されたい。これらの技術のプロトタイプが作成され、spec_qsortでのデータ・スワッピングのための冗長な2つのバージョンの非8バイト位置合せコードをすべて除去することができたので、実行時のコンパイル済みコードの約2~4%の性能比改善と、SPEC CPU(登録商標)2017 mcf_rコードについて約8%のコード・サイズ削減が得られたことが判明した。
【0040】
次に
図4を参照すると、本発明の態様による、アプリケーションをプログラミングする際にポインタ位置合せを計算するためのコンピュータ実装方法400が示されている。方法400の機能は、たとえばコンピュータ・システム/サーバ12上の処理装置16による命令として実行され得、命令は、記憶システム34などの有形の非一過性機械可読記憶媒体上で実施される。方法400はステップ402から始まる。いくつかの実施形態では、ステップ404で、フローに鈍感(flow-insensitive)かつフィールドに敏感な(field sensitive)統一ベースのポインタ解析を使用するプログラム内のポインタの同等クラスを収集することに応答して、これらのポインタの同等クラスが、同等クラス・マッピング・テーブル(ECTable)内に記録される。ステップ406で、プログラム内のポインタ参照のコード・パターン解析が実施され、事前定義された基準に従って、位置合せ計算のためにECTableからポインタ候補のセットが識別される。これから説明されるように、コード・パターン解析は、事前定義された基準を利用して、そうした解析済みのポインタに対する参照が、コード内で最適化されることが可能であるかどうかを判定する。
【0041】
ステップ408で、ポインタ候補のセットのそれぞれに関する位置合せ計算が、プログラム内のそれぞれの識別された候補ポインタのそれぞれの参照ポイントで始まるそれぞれの識別された候補ポインタのuse-defineチェーンを通じて反復することによって実施される。ステップ410で、位置合せ計算の結果として位置合せ情報が受け取られ、この位置合せ情報がコンパイラに提供されて、プログラムの実行が最適化される。方法400はステップ412で終了する。
【0042】
次に
図5を参照すると、本発明の態様による、アプリケーションをプログラミングする際にポインタ位置合せを計算するためのコンピュータ実装方法500が示されている。方法500の機能は、たとえばコンピュータ・システム/サーバ12上の処理装置16による命令として実行され得、命令は、記憶システム34などの有形の非一過性機械可読記憶媒体上で実施される。方法500はステップ502から始まり、以下のような構成要素ステージとして見ることができる。
【0043】
ポインタ解析
ステップ502で、プログラムのプログラム・コードに関してポインタ解析が実施され、プログラム内のすべてのポインタの同等クラスが識別される。いくつかの実施形態では、ポインタ解析は、(たとえば、Steensgaardの方法を使用する)フローに鈍感でコンテキストに鈍感であるがフィールドに敏感な統一ベースのポインタ解析を含み得る。いくつかの実施形態では、ポインタの同等クラスを識別するためのポインタ解析は、単一のパス内のポインタのすべての同等クラスを通じて反復し、それを識別することによって完了し得る。ステップ504で、ポインタ解析から決定されたすべての識別されたポインタの同等クラスが、限定はしないがキャッシュ・メモリ32、RAM30、もしくは記憶システム34、またはそれらの組合せを含むシステム・メモリ28内に記憶または維持される同等クラス・マッピング・テーブル(ECTable)内に記録される。ECTable内に記憶される各ポインタは、ECTableに対するマッピングを含み、したがって、ポインタ解析によるプログラム・コードを通じて反復するとき、ポインタ割当てが解析で満たされるときはいつでも、対応する2つのポインタが同等と見なされ、この同等性がステップ506でECTable内に記録される。
【0044】
ポインタ解析を実施し、プログラム・コードを通じて反復して、ポインタの同等クラスを識別するとき、事前定義されたフラグが、それぞれのポインタのポインタ挙動もしくは特徴またはその両方に基づいて、ポインタの適用可能な同等クラスにマークされ得る。ステップ508では、これらの適用可能フラグが、そのようなポインタ挙動もしくは特徴またはその両方に従って、ポインタのそれぞれの適用可能な同等クラスについてマークされる。いくつかの実施形態では、これらのフラグは、たとえば、ポインタがプログラムをエスケープすることを示すためのフラグincomplete、およびポインタが未知の割り振られたメモリを起源とすることを示すためのフラグunknownを含み得る。ステップ510では、ECTable内に記録されたポインタの各同等クラスについて、その値がプログラム内におけるstore命令を使用して記憶されているこれらのポインタのサブセットが、同等ストア・マッピング・テーブル(ESTable)内に追加的に記録される。
【0045】
候補識別
方法500を続けて、次にステップ512を参照すると、ECTable内に記録されたポインタの同等クラスのポインタ候補のセットが、位置合せ計算のために識別される。いくつかの実施形態では、それぞれのポインタが、フラグincompleteもしくはフラグunknownまたはその両方を含むフラグでマークされない同等クラスである場合、それぞれの識別されたポインタは候補と見なされる。さらに、ポインタの同等クラスの候補のセット内の各ポインタの位置合せが、利用可能な場合にコンパイラがそれに対応する参照を最適化することを可能にする位置合せ情報に関連付けられている場合にのみ、識別されたポインタが、位置合せ計算のための候補と見なされる。候補ポインタを識別するための解析は、プログラム内のポインタの参照のコード・パターンに基づく。
【0046】
たとえば、一態様では、ポインタの参照のコード・パターンは、プログラム・コード内の位置合せチェックが削減または除去され得ることを示し得る。以下のコード・シーケンスを考慮する。
if(p & 7 == 0)
code_sequence_for_alignment_8;
else if(code & 3 == 0)
code_sequence_for_alignment_4;
else code_sequence_for_non_aligment;
【0047】
この例示的シーケンスを使用して、ポインタpの位置合せが8以上であると判定される場合、ポインタpからのすべての分岐を除去することができ、単純化の後の残りのコードはcode_sequence_for_alignment_8からなる。
【0048】
別の例では、ポインタの参照のコード・パターンは、ポインタの位置合せに基づいてコード・バージョニングを回避できることを示し得る。以下のループを考慮する。
while(*p++ !=‘s’);
ここで、ポインタpは1バイト整数を指し示す。pの位置合せが1ではないと判定される場合、SIMDizationの積極的な負荷推測(aggressive load speculation)が、位置合せチェックによるループ・バージョニングなしにループについて安全に(すなわち、誤りの危険の低減された状態で)実施され得る。これは、一般に、メモリ内の単一のページ内に包含されるすべてのメモリ・アクセスを示すことができる場合、位置合せチェックなしに負荷が安全に推測され得るからである。通常、これは、ループ・バージョニングを通じて行われ、第1の負荷がページ境界と位置合せされ、全ループ反復カウントがページ・サイズ未満であるかどうかがチェックされるが、しかしながら、この位置合せ情報を使用して、ループ・バージョニングが除去され得る。さらに、データ位置合せおよびサイズについての情報がコンパイル時に利用可能である場合、実行時チェックは不要である。
【0049】
いくつかの実施形態では、前述のように、ポインタ解析を実施するとき、位置合せ計算のための候補ポインタが、フラグincompleteまたはunknownのどちらでもマークされない同等クラスであるポインタのすべての参照を通じて反復することによって識別され得、ポインタの位置合せを計算して、ESTable内に記録し、この情報をコンパイラのオプティマイザに提供して、記録された位置合せ情報を使用してプログラム・コードを最適化する。いくつかの実施形態では、候補ポインタが識別され得、分岐除去、ループ・バージョニングなどの特定の最適化解析を実施するとき、その位置合せ計算が要求され得る。
【0050】
位置合せ計算
方法500を続けて、次にステップ514を参照すると、それぞれの識別された候補ポインタに関して位置合せ計算が実施される。この位置合せ計算は(当技術分野で周知のように)単なるポインタ解析ではなく、ポインタ解析を通じて識別された、得られる候補ポインタを使用して、それに関連するメモリ位置合せ情報(すなわち、各ポインタの位置合せ情報)が取得されることにやはり留意されたい。いくつかの実施形態では、ポインタのuse-defineチェーンを通じて反復することにより、識別されたポインタの参照ポイントで始まる位置合せが実施され得る。ポインタのuse-defineチェーンを通じて反復するとき、各ポインタ変数の定義が解析される。いくつかの実施形態では、位置合せ計算が、この参照ポイントで始まるその分岐を通じて「ボトムアップ」または「後方」(すなわち、フローに鈍感)に実施され得る。
【0051】
位置合せ計算を実施するとき、次にステップ516を参照すると、ポインタの値がロード命令からのものか、それともアドレス計算からのものかに関して判定が行われる。ステップ516で、ポインタ値がロード命令を起源とするものである場合、方法500はステップ518に進み、ESTable内に記録された(現在解析中のポインタに対する)すべての関連するマッピングされたポインタがさらに解析される。ステップ516で、ポインタ値が、ポインタ割当て、コール・サイトから渡されるポインタ・パラメータ、および関数呼出しから返されるポインタ値を含むアドレス計算を起源とすると判定される場合、方法500はステップ520に進む。ステップ520で、位置合せ計算を受けている、現在解析されているポインタのベース・ポインタが、さらなる解析のために抽出される。この解析と共に、残りのアドレス計算の最大公約数(gcd)係数の整数値が計算され、計算のこの(現)ステージまでポインタの位置合せ情報を得るために使用される。
【0052】
どちらのケースでも(すなわち、ポインタ値がロード命令からのものであると判定されても、アドレス計算からのものであると判定されても)、規定の方法を使用して候補ポインタの位置合せが計算される。ステップ522で、位置合せ計算が実施された後で、位置合せ情報が受け取られ、ステップ524で、位置合せ情報がコンパイラに提供される。次いで、コンパイラは、この位置合せ情報を使用して、前述のように、候補ポインタの参照を最適化し得るか、プログラム・コードを単純化し得るか、もしくは動的位置合せチェックを除去し得えるか、またはそれらの組み合わせを行い得、たとえば、それによって、普通ならこれらのチェックを実施することになるリソースが、他の最適化技術での使用のために、または他の目的のために転用され(divert)得る。ステップ526で、方法500は終了する。
【0053】
次に
図6を参照すると、
図6は、LLVMコンパイラ・インフラストラクチャ中間表現(IR)コード表現に基づく方法500の実装を示す、ポインタ位置合せを計算するための例示的プログラミング・コード600を示す。プログラミング・コード600はLLVM IRに基づく実装を示し、各ポインタ変数が厳密に1回割り当てられる。例示的プログラミング・コード600は本明細書で説明される技術を実装する多くの様々な方式のうちのただ1つを示し、したがって本開示の所期の範囲から逸脱することなく、それに対して多くの変形および修正が行われ得ることを当業者なら理解するはずであることに留意されたい。
【0054】
本発明は、システム、方法、もしくはコンピュータ・プログラム製品、またはそれらの組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実施させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体を含み得る。
【0055】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のために命令を保持し、記憶し得る有形デバイスであり得る。コンピュータ可読記憶媒体は、限定はしないが、たとえば、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または上記の任意の適切な組合せであり得る。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROMまたはフラッシュ・メモリ)、静的ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読取り専用メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピィ(登録商標)・ディスク、命令が記録されたパンチ・カードや溝の中の隆起構造などの機械的に符号化されたデバイス、および上記の任意の適切な組合せが含まれる。本明細書では、コンピュータ可読記憶媒体は、電波または他の自由伝播電磁波、導波路または他の伝送媒体を通じて伝播する電磁波(たとえば、光ファイバ・ケーブルを通過する光パルス)、ワイヤを通じて伝送される電気信号など、本質的に一時的信号であると解釈されるべきではない。
【0056】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、たとえばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、もしくはワイヤレス・ネットワーク、またはそれらの組合せを介して外部コンピュータまたは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、もしくはエッジ・サーバ、またはそれらの組合せを含み得る。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースが、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体内に記憶するためにコンピュータ可読プログラム命令を転送する。
【0057】
本発明の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械語命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはSmalltalk(登録商標)、C++などのオブジェクト指向プログラミング言語と、「C」プログラミング言語や類似のプログラミング言語などの従来の手続型プログラミング言語とを含む1つもしくは複数のプログラミング言語の何らかの組合せで書かれたソース・コードもしくはオブジェクト・コードであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、スタンド・アロン・ソフトウェア・パッケージとして部分的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上、および部分的にリモート・コンピュータ上で、または完全にリモート・コンピュータもしくはサーバ上で実行され得る。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続され得るか、または接続が外部コンピュータに対して(たとえば、インターネット・サービス・プロバイダを使用してインターネットを通じて)行われ得る。いくつかの実施形態では、たとえばプログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル論理アレイ(PLA)を含む電子回路が、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個別化することによってコンピュータ可読プログラム命令を実行し得る。
【0058】
本発明の態様が、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図またはその両方を参照して本明細書で説明される。フローチャート図もしくはブロック図またはその両方の各ブロックと、フローチャート図もしくはブロック図またはその両方の中のブロックの組合せが、コンピュータ可読プログラム命令によって実装され得ることを理解されよう。
【0059】
これらのコンピュータ可読プログラム命令は、コンピュータのプロセッサまたは他のプログラム可能データ処理装置を介して実行される命令が、フローチャートもしくはブロック図またはその両方の1つまたは複数のブロックで指定される機能/動作を実装するための手段を生み出すように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに与えられ、マシンが作り出され得る。これらのコンピュータ可読プログラム命令はまた、命令を記憶するコンピュータ可読記憶媒体がフローチャートもしくはブロック図またはその両方の1つまたは複数のブロックで指定される機能/動作の態様を実装する命令を含む製品を含むように、コンピュータ、プログラム可能データ処理装置、もしくは他のデバイス、またはそれらの組合せに特定の方式で機能するように指示し得るコンピュータ可読記憶媒体内に記憶され得る。
【0060】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行される命令が、フローチャートもしくはブロック図またはその両方の1つまたは複数のブロックで指定される機能/動作を実装するように、コンピュータ、他のプログラム可能データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを実施させて、コンピュータ実装プロセスが生成され得る。
【0061】
図のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。この点で、フローチャートまたはブロック図の各ブロックは、指定の論理的機能を実装するための1つまたは複数の実行可能命令を含む命令のモジュール、セグメント、または部分を表し得る。いくつかの代替実装では、ブロック内に記載の機能は、図に記載されている以外の順序で行われ得る。たとえば、連続して示される2つのブロックが、実際にはほぼ同時に実行され得るか、またはブロックが、関係する機能に応じて、時には逆の順序で実行され得る。ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方のブロックの組合せが、指定の機能または動作を実施するか、または専用ハードウェアとコンピュータ命令の組合せを実施する、専用ハードウェア・ベースのシステムによって実装され得ることにも留意されたい。
【0062】
例示のために本発明の実施形態の説明が提示されているが、網羅的であること、および開示される実施形態に限定されることは意図されない。記載の実施形態の範囲から逸脱することなく、多くの修正形態および変形形態が当業者には明らかとなるであろう。本明細書で用いられる用語は、実施形態の原理、市場で見つかる技術に勝る実際の応用もしくは技術的改善を最良に説明するために、または本明細書で開示される実施形態を当業者が理解することを可能にするために選ばれたものである。