本発明の一態様によれば、ソース・コード内の選択プログラム・コメントを無視することなく認識するように翻訳コンポーネントに命令する機能が提供される。本明細書の実施形態では、翻訳コンポーネントはコンパイラであるが、他の実施形態では、インタープリタ、または機械可読コードを提供する他のコンポーネントであってよい。
プログラム・コメントは、文書化の支援として機能することが知られている。しかし、本発明の一態様によれば、プロファイラまたは他の性能解析ツールによって直接確認することができない、プログラムの関数、ループ、分岐節、命令文または他の態様、あるいはその組合せに関する有用な情報を提供し得ることが観察された。しかし、コンパイラがコンパイル・プロセス中にコメントをアクティブなエンティティとして扱わないため、この情報はプログラムに留まるに過ぎず利用されない。コメントは空白として扱われ、コンパイルの字句解析フェーズを越えて破棄される。
したがって、本発明の一態様によれば、コンパイラによって使用され得るコメントを認識し、コメントをプログラムの他のコンポーネントとして扱う機能が提供される。一例では、コンパイラがより効率的なコードを生成することができるように、これらのコメントをコンパイラ・フェーズで認識可能な構造体に翻訳する修正されたコンパイラが提供される。この機能は、コメントをコンパイラ・フラグまたはプラグマ(プラグマは、コンパイラ指令、すなわちコンパイラに意図を示すためにソース・コードに埋め込まれたデータである)に翻訳することも含み、適用可能な場合はいつでもこれらを使用してプログラムの性能を向上させることができる。この機能は、所与のプログラムをコンパイルするための最適なフラグ・セットを決定するために多大なリソースを費やすフラグ・マイニング技法を支援することができる。
効率的なコードを提供することによって、コンピュータ内の処理が容易になり改善される。効率的なコードによって提供される最適化により、コンピューティング環境内の処理が改善される。
本明細書には様々な態様が記載されている。さらに、本発明の態様の思想から逸脱することなく、多くの変形形態が可能である。本明細書に記載の各態様または特徴およびその変形例は、矛盾しない限り、他の態様または特徴と組み合わせることができることに留意されたい。
本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態について、図1を参照して説明する。一例では、コンピューティング環境は、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるz/Architecture(登録商標)に基づく。z/Architecture(登録商標)の一実施形態が、"z/Architecture Principles of Operation," IBM Publication No. SA22-7832-10, March 2015に記載されている。Z/ARCHITECTURE(登録商標)は、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションの(登録商標)である。
別の例では、コンピューティング環境は、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるPower Architecture(登録商標)に基づく。Power Architecture(登録商標)の一実施形態が、"Power ISA(TM) Version 2.07B," International Business Machines Corporation, April 9, 2015に記載されている。POWER ARCHITECTURE(登録商標)は、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションの(登録商標)である。
コンピューティング環境はまた、Intel (登録商標)x86アーキテクチャを含むがこれに限定されない他のアーキテクチャに基づいてもよい。他の例も存在する。
図1に示すように、コンピューティング環境100は、例えば汎用コンピューティング・デバイスの形態で示される、例えばコンピュータ・システム102を含む。コンピュータ・システム102は、1つもしくは複数のバスまたは他の接続110、あるいはその両方を介して互いに結合された、1つもしくは複数のプロセッサまたは処理ユニット104(例えば、中央処理装置(CPU:central processing unit))、メモリ106(例として、別名、システム・メモリ、メイン・メモリ、メイン・ストレージ、中央ストレージまたはストレージ)、および1つまたは複数の入力/出力(I/O)インターフェース108を含み得るが、これらに限定されない。
バス110は、メモリ・バスまたはメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、および様々なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを含む、いくつかのタイプのバス・アーキテクチャのいずれかの1つまたは複数を表す。限定ではなく例として、このようなアーキテクチャには、業界標準アーキテクチャ(ISA)、マイクロ・チャネル・アーキテクチャ(MCA)、拡張ISA(EISA)、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(VESA)ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト(PCI)が含まれる。
メモリ106は、例えば、プロセッサ104のローカル・キャッシュ122に結合され得る、共有キャッシュなどのキャッシュ120を含んでもよい。さらに、メモリ106は、1つもしくは複数のプログラムまたはアプリケーション130、コンパイラ131、オペレーティング・システム132、および1つまたは複数のコンピュータ可読プログラム命令134を含んでもよい。コンピュータ可読プログラム命令134は、本発明の態様の実施形態の機能を実行するように構成されてもよい。例示的なコンパイラには、XL(例えば、インターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるXL C、XL C++)、GCC(GNUコンパイラ・コレクション)、およびLLVMが含まれる。他のコンパイラも可能である。
コンピュータ・システム102はまた、例えば、I/Oインターフェース108を介して、1つもしくは複数の外部デバイス140、1つもしくは複数のネットワーク・インターフェース142、または1つもしくは複数のデータ記憶デバイス144、あるいはその組合せと通信してもよい。例示的な外部デバイスには、ユーザ端末、テープ・ドライブ、ポインティング・デバイス、ディプレイなどが含まれる。ネットワーク・インターフェース142により、コンピュータ・システム102は、他のコンピューティング・デバイスまたはシステムとの通信を提供する、ローカル・エリア・ネットワーク(LAN)、標準的な広域ネットワーク(WAN)、またはパブリック・ネットワーク(例えば、インターネット)、あるいはその組合せなどの1つまたは複数のネットワークと通信することができる。
データ記憶デバイス144は、1つまたは複数のプログラム146、1つもしくは複数のコンピュータ可読プログラム命令148またはデータあるいはその組合せなどを記憶してもよい。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成されてもよい。
コンピュータ・システム102は、取り外し可能/取り外し不可能な揮発性/不揮発性のコンピュータ・システム記憶媒体を含むか、またはそれに結合されるか、あるいはその両方であってもよい。例えば、コンピュータ・システム102は、取り外し不可能な不揮発性磁気メディア(通常「ハード・ドライブ」と呼ばれる)、取り外し可能な不揮発性磁気ディスク(例えば、「フロッピー(登録商標)・ディスク」)から読み取り、それに書き込むための磁気ディスク・ドライブ、またはCD−ROM、DVD−ROMもしくは他の光学メディアなどの取り外し可能な不揮発性光ディスクから読み取り、それに書き込むための光ディスク・ドライブ、あるいはその組合せを含むか、またはそれに結合されるか、あるいはその両方であってもよい。他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方は、コンピュータ・システム102と併せて使用され得ることを理解されたい。例として、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが含まれるが、これらに限定されない。
コンピュータ・システム102は、多数の他の汎用または専用のコンピューティング・システムの環境または構成で動作可能であってもよい。コンピュータ・システム102での使用に適し得る周知のコンピューティング・システム、環境、または構成、あるいはその組合せの例には、パーソナル・コンピュータ(PC)システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドもしくはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベースのシステム、セット・トップ・ボックス、プログラム可能な民生用電子機器、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムもしくはデバイスのいずれかを含む分散型クラウド・コンピューティング環境などが含まれるが、これらに限定されない。
上述のように、コンパイラ131などのコンパイラを使用して、ソース・コードを機械可読コードに変換する。ソース・コードを変換するために、コンパイラは、コンパイル・プロセスの複数のフェーズを使用する。様々なコンパイル・フェーズの一例について、図2を参照して説明する。
図2に示すように、コンパイラ131は、ソース・コード200を入力として受け取る。例えば、ソース・コード200は、コンパイラ131の字句解析器202に入力される。字句解析器202は、ソース・コード200をトークン210の列に分解する。トークン210は、コンパイラ131の構文解析器212に入力され、コンパイラ131は、トークン列を解析してプログラムの構文構造を識別し、解析済みコード220を生成する。例えば、コンパイラは、トークンの線形列を木構造に置き換える解析木(本明細書では構文木とも呼ぶ)を構築してもよい。構文解析器の解析済みコード220は、意味解析器222に入力され、意味解析器222は、解析木に意味情報を追加し、シンボル・テーブルを構築する。意味解析器は、意味検査、オブジェクト・バインディング、または変数割当て、あるいはその組合せを実行する。
意味解析器222の出力は修飾コード230であり、修飾コード230がコード生成器232に入力され、コード生成器232が中間コード240を生成する。中間コード240はコンパイラ131のオプティマイザ242に入力されてもよく、オプティマイザ242は、実行されるオブジェクト・コード250を作成する。
コンパイラ131の上記のフェーズは一例にすぎない。コンパイラは、より多くの、より少ない、または異なる、あるいはその組合せのフェーズを有してもよい。さらに、フェーズの1つまたは複数は、異なる順序で実行されてもよい。例えば、最適化は、コード生成の前または後あるいはその両方に実行されてもよい。他の変形形態も可能である。
本発明の一態様によれば、コンパイラは、プログラムのコメントを認識および使用して、最適化されたコードまたは環境内の他の最適化あるいはその両方を提供するように修正される。これを容易にするために、一態様では、本明細書に記載のように、他のコンパイル・フェーズに先立って前処理フェーズが実行され、前処理フェーズは、自然言語(すなわち、英語または別の言語などの非機械語)で記述されたプログラムのコメントを分類し、選ばれたコメントの符号化を、例えば、字句解析器202に渡す。
コメントは自然言語で記述されているので、教師あり多クラス分類(supervised multiclass classification)技法などの機械学習技法を使用して、コメントを2つのカテゴリに分類する。一方のカテゴリは、コンパイラがプログラムをさらに最適化するのに役立ち得る、プログラムに関する有用な情報を提供するコメントを含み、他方のカテゴリは、アプリケーションの改善の機会につながる可能性がないコメントを含む。コメントの有用性は、所定の閾値に基づいて決定される。一方のカテゴリのコメントは保持され、他方のカテゴリのコメントは破棄される。
保持されたコメントは、プログラムの一部を形成し、構文木または解析木までコンパイル・フェーズを経る。コメントからの有用な情報は、ノードの意味属性を通過し、この意味属性を使用することによって、性能を向上させるために使用され得るフラグまたはプラグマに関する推奨事項をユーザに提供するか、または最適な中間コードを提供し、それによりコンパイラによって作成されるバイナリに影響を与える。この技法は、コメントからホット・パスの挙動を推測し、コメントをコンパイラに渡すために使用することもできる。この技法は、顧客が訓練入力にアクセスしない場合、またはSPECプログラムなどの標準ベンチマーク・スイートでのみ利用可能な訓練入力を構築するのが困難であると判明した場合に有用である。
さらに説明すると、自然言語で記述されたプログラム・コメントは、コンパイラによる最適化のトリガとして、およびログ・ファイルに対するコンパイラのフラグ/プラグマ/提案に関するユーザへの推奨事項として、処理され使用される。これは、コンパイル・フェーズの前にプリプロセッサ・フェーズを追加することによって実現され、プリプロセッサ・フェーズは、例えば、教師あり多クラス分類技法を使用して、自然言語で記述されたコメントを分類する。前処理は、コンパイラの一部として実行されてもよく、またはコンパイラから分離して実行されてもよく、そこで前処理の結果がコンパイラに渡される。
一例では、コメントは、2つのカテゴリに分類される。一方のカテゴリは、コードを最適化するのに有用な情報をコンパイラに提供することができ、他方のカテゴリは、文書化の目的にのみ有用である。コンパイラに有用な情報を提供するコメントは、符号化され、プログラム内に保持される。コンパイラはこれらのコメントを処理し、最適化またはユーザへの推奨事項に翻訳する。コンパイラのフェーズはこのような特殊なコメントを認識し、これらを解析して構文木または解析木内に埋め込む。解析木のノードは属性に関連付けられており、コメント・ノードは、属性の観点で最適化に影響を与え得る情報を伝える。属性情報は、コンテキスト情報とともにその属性情報を処理するコンパイラの中間コード生成フェーズによって、コメント・ノードから選択される。さらに、それは、推奨事項を生成して最適コードの生成をトリガし、それにより性能が向上する。
一例として、図3を参照すると、前処理フェーズ300は、例えば、訓練フェーズ302、予測フェーズ320、保持フェーズ330、符号化フェーズ340などの複数のフェーズを含む。特定の一例では、訓練フェーズ302および予測フェーズ320は、教師あり多クラス分類技法の一部である。
特定の一例では、コンパイラによる最適化の有限集合(サイズN)が存在する。各最適化は、多クラス分類技法の関連においてクラスとして扱われ、各最適化は、OPTIMIZATION_CODEに関連付けられる。このOPTIMIZATION_CODEは、(a)コンパイラ・フラグ、プラグマの形式でのプログラマへの推奨事項、(b)中間コード生成に影響を与える意味動作、あるいはその両方にマッピングすることができる。例示的な最適化コードには、以下が含まれる。
訓練フェーズ302中、訓練データ304は特徴抽出器306に入力され、特徴抽出器306は、多クラス分類器310に入力される特徴308を抽出する。例えば、訓練データ・セット304は、1人または複数のプログラマによって作成され、コメントおよび関連する最適化コードの例を含む。一例では、訓練データ・セットは、タプルの集合であり、各タプル314は、[Comment:OPTIMIZATION_CODE]形式である。コメント例はクラスに分類され、クラスは多クラス分類器に入力される。多クラス分類器は、訓練モデルを構築するために訓練される。多クラス分類器は、コメントをクラスに分類し、コメントをコンパイラによる最適化または推奨事項に関連付ける。
例えば、switch case命令文の分岐最適化用の訓練セットの一例には以下が含まれる。
Void func () {
State=Prereq() ;
Switch (State) {
case ‘a’: //このcaseは最もよく取得される
Val=x+y-z;
…
Break;
case ‘b’: Val=x*10;
…
Break;
……
Default : ……
}
}
訓練セットには、例えば、以下が含まれる。
[このcaseは最もよく取得される,4123]
[このcaseはホット・パス中にある,4123]
[このswitch caseは頻繁に実行される,4123]
[80%を超えてこのswitch caseが実行される,4123]
…
各タプル314から特徴ベクトル316が抽出され、特徴ベクトル316は、分類器が訓練データから学習するモデルを構築するために使用される。例えば、タプル314の各コメントは特徴抽出器306に供給され、特徴抽出器306はコメントから特徴308を抽出する。特徴は、コメントを単語に分割することによって抽出される。特徴ベクトルに関する単語は除外され、そうでなければベクトルの次元が増加することになる。
コメントから抽出される特徴語の例には以下が含まれる。
特徴ベクトル316は、このような特徴語のそれぞれの組合せである。コメント内の特徴語の有無は、特徴ベクトルを形成し、ビットマップに符号化される。各コメントには、(コンパイラによる最適化を指す)OPTIMIZATION_CODEのラベルが付与される。
コメントは、例えばクラス名、変数、関数などの識別子を有してもよく、識別子は、最適化をトリガするために使用されてもよく、したがって、OPTIMIZATION CODEまたはOPTCODEとともにパラメータとして保持され渡される。
この特徴ベクトル316は多クラス分類器310に入力され、多クラス分類器310は、ナイーブ・ベイズ、ニューラル・ネットワーク、およびSVM(サポート・ベクター・マシン)などの技法を使用してモデルを構築する。多クラス分類器は、訓練入力を使用して、本明細書において訓練済み分類器モデルと呼ばれるこのモデルを訓練する。次いで、訓練済みモデルは、異なるタイプのコメントを理解し、コメントをそれが属する可能性のある異なるクラスに分類することができる。
一実施形態では、訓練フェーズは1回の動作である。モデルが作成されると、モデルは後に予測に使用される。訓練フェーズは、新しいコメントおよび最適化に対応するように適合されてもよい。
次のフェーズである予測フェーズ320中、ソース・コード内の各コメント322(または選ばれたコメント)について、特徴抽出器324を通して特徴語が抽出され、特徴ベクトル326が生成される。特徴ベクトル326は、(訓練フェーズ302で構築された)訓練済み分類器モデル328への入力として渡され、訓練済み分類器モデル328は、クラスごとのスコア/信頼度320を提供する。スコア/信頼度は、コメントに関連する特徴ベクトルを入力として取得する訓練済み分類器モデルによって提供される。例えば、ソース・コード内のコメントが訓練済み分類器モデルに入力されて、このコメントに最適なクラスが決定され、信頼レベル(例えば、コメントがこのクラスに適合するという一定割合の信頼度)が提供される。
保持フェーズ330中、その信頼値が例えば規定の閾値(例えば、80%)以上であるコメントが保持される。スコア値が信頼度閾値以上の場合、コメントが符号化に置き換えられ、そうでない場合、コメントは、プログラムから削除され、後続のフェーズに移ることはできない。他の閾値または他の信頼度の決定あるいはその両方が可能である(例えば、信頼値が閾値より小さいか、閾値と等しいか、または別の関係を有することがある)。他の可能性も存在する。
保持されたコメントは、符号化フェーズ340で符号化される。符号化フェーズ中、保持されたコメントはコメントの符号化に置き換えられる。符号化の一例は、/* OPTCODE params */形式であり、OPTCODEは最適化コード(例えば、NNNN)であり、paramsは中間コード生成中にコンパイラの後続のフェーズによって使用され得る追加のパラメータである。他の実施形態では、パラメータは任意選択である。他の変形形態も可能である。
例えば、
/* この関数ポインタはほとんどの場合_addFactor2()を呼び出す */
int sum = (*functionPtr) (2, 3);
は、以下に翻訳されることになる。
/* 2314 _addFactor2 */
int sum = (*functionPtr) (2, 3);
ここで、2314は、パラメータ_addFactor2を伴う間接呼出しのプロモーション用のOPTIMIZATION_CODE (OPTCODE)である。
現在のコンパイラでは、コメントはそのまま残る。しかし、本発明の一態様によれば、有用なコメント(例えば、その変数の値、分岐方向、データ・サイズ、ホットネス(hotness)に関するソース・コード・フラグメントに関する情報を提供するコメント)は、符号化されたバージョンに置き換えられ、プログラムの一部となる。図4に示すように、符号化され保持されたコメントは、字句解析器フェーズ350に渡される。本発明の一態様によれば、字句解析器フェーズ中、字句解析器は、例えば/* OPTCODE params */形式のコメントを認識する。これらのコメントが字句解析器によって認識されたことに基づいて、コメントが保持される。他のコメントは、字句解析器によってプログラムから削除される。
次のフェーズ360では、字句解析器によって解析されたトークンを使用して、コンパイラによって構文木または解析木が構築される。コメントは、命令文、ブロック、ループ、プロシージャなどのプログラム・コンポーネントとともに解析木内のノードである。
例えば、本発明の一態様によれば、コメントはプログラム内のアクティブなエンティティであり、多クラス分類器から出力されるコメント内で符号化された情報から属性を定義する。プログラム文に関連するコメントは、その文の直前に出現するように出力される。文法はこのようなコメントを認識するように変更され、その結果、コメント/* xxxx */は、そのコメントに関連する命令文の親/ピアの子として、解析木の一部として現れる。
次のフェーズ370である意味解析フェーズでは、意味動作が記述され、意味動作は、コメントに関連するノードを考慮し、それらに埋め込まれた最適化コードを対応する提供されたパラメータと使用して、性能を向上させることができる適用可能なプラグマまたはフラグあるいはその両方を含むレポート380を生成するか、またはコンピュータ内で最適コード385を生成する。
意味解析フェーズは、意味動作を生成し、型チェックを実行し、最終的に中間コードを生成することになる。さらに、本発明の一態様によれば、例えば、以下を含む追加のタスクが実行される。
・コメントから受け取った洞察に対応するフラグ/プラグマの存在に応じて、ログ・ファイル内でユーザへの推奨事項を生成する。例えば、使用されるとコード(例えば、バイナリ)の性能が向上する有用なプラグマまたはフラグあるいはその両方を含む、注釈付きレポート380が生成され得る。
・コメントから受け取った洞察に基づいて、元のコードと比較してより最適な中間コードを生成する。例えば、最適コード385がプロセッサによって自動的に生成され、最適化またはマシン固有コードの生成あるいはその両方などの、コンパイラの後続のフェーズに渡される。結果として生じたバイナリは元のバイナリよりも効率的であり、実行されると性能の向上をもたらす。
これを実現するために、意味解析フェーズでは、継承属性および合成属性を使用して、コメントのインテリジェンスをコンパイラの中間コード生成フェーズに渡す。そのため、コメントの場所は有用であり、コメントがプログラム内の関連する命令文に近いので、これらの属性は、インテリジェンスを、命令文に関するコメントから命令文のコードが生成される進路に転送するための伝達手段として使用されてもよい。
次の例は、最適コードの生成/推奨事項の提供を実行するために属性がどのように使用されるかをさらに詳細に示す。
例1:ログ・ファイル内でユーザへの提案を生成する例
多くの場合、データ構造は、必要とされるサイズよりも大きいプログラムで定義される。これらのデータ構造は、プログラム内の状態またはチェス盤上の升目を表し得る。初期設定により、プログラマはデータ構造の型をint(整数)として割り当てる。しかし、その変数のとり得る状態の数は、MAXINTまたは2^64−1よりはるかに少ない場合がある。例えば、チェス盤内およびそのようなプログラム内の可能性のある値の数を示す状態を表す情報がコメントの一部として含まれていることが確認される。このような場合、これらのコメントを活用して、元の型と比較してはるかに小さいサイズの変数を使用するという推奨事項を提供することができる。
/* 想定される状態の数は100である */
int states[64];
は、以下に翻訳され得る。
/* 10032 2 100 */
int states[64];
ここで、10032は、メモリ・フット・プリントの削減にマッピングすることができ、2および100は、状態配列のすべての要素を記憶するにはlog2(100)ビットで十分であることを示す。
この意味動作は以下の通りである。
Type-decln -> Type Varlist
Type -> Type1 int
Type1 -> /* N1 N2 N3 */ {
if(N2 == 10032 && N1==2) {
Type1.属性を、log2(N3)ビットを保持するのに十分な大きさのデータ型に設定する
}
}
Type-> Type1 int {
Type1.属性がintでない場合、intの代わりに、占有するメモリ空間が少ないType1.属性を使用するようユーザに推奨する
}
例2:中間コード生成中に命令文の順序に影響を与える例
Void func (… .args… .) Void func (… .args… .)
{ {
Pre_func(); Pre_func();
…… ……
// このif文は、ほとんどの場合真である => /* 10043 1 */
If (a > b) { If (a> b) {
C=a*b+f(a,b); C=a*b+f(a,b);
} }
else c=d-b; Else c=d-b;
} }
この意味動作は以下の通りである。
Stmt -> /* N1 N2 */ if-Stmt1
{
if (N1==10043 && N2==1)
{
if-stmt1.mostoftentrue=1;
} else {
if-stmt1.mostoftenfalse=1;
}
if-Stmt1-> if (cond) {stmt1} else {stmt2}
{
if (Stmt1.mostoftentrue == 1)
{
builtin_expect (cond,1)が存在するようにIRを出力する
…
}
if (Stmt1.mostoftenfalse==1)
{
builtin_expect (cond,0)が存在するようにIRを出力する
…
}
}
_builtin_expectは言語拡張であり、XL、GCC、およびLLVMコンパイラでサポートされている。IRは内部表現である。
プログラマが_builtin_expect(cond,1)を指定する場合、condがほとんどの場合真であることを示し、コンパイラに最適コードを生成させて分岐ペナルティを低減させる。
基本的な最適化に加えて、多くのコンパイラは、プロファイル指向フィードバック・ベースの最適化をサポートしている。これらの最適化は、最も頻繁に実行されるパスを対象とする。このようなパスは、訓練データの実行中にわたって収集されたプロファイル情報に基づいて検出される。本発明の一態様によれば、コメント内の情報を使用するこのようなパスを検出する代替手段が提供される。このようなコメントの1つは、現在使用されている実際のアプリケーションからのものである。
if (len <= 16 && available >= 16 + kMaximumTagLength && space_left >= 16 &&
output_iov_[curr_iov_index_].iov_len - curr_iov_written_ >= 16) {
//多数(約90%)の呼出しに使用される高速パス
char* ptr = GetIOVecPointer(curr_iov_index_, curr_iov_written_);
UnalignedCopy128(ip, ptr);
curr_iov_written_ += len;
total_written_ += len;
}
例3:最適化に影響を与えるプラグマを推奨する例
//ほとんどの場合、funcはパラメータ100により呼び出される
Void func (int a) {
…
}
は、以下に符号化される。
/* 10054 a 100 */
Void func(int a ) {
…
}
Stmt -> /* N1 N2 N3 */ ret-type function-name (paramlist) {
If (N1==10054) {
プラグマexpected_value (N2.値、N3.値)を使用する推奨を提供する
}
expected_valueは、XLコンパイラによって認識されるプラグマであり、コンパイラのマニュアルに記載されている。expected_value (var, X)は、ほとんどの場合変数varが値Xを有すると予想されることをコンパイラに伝える。したがって、これはコンパイラが追加の最適化を実行するのに役立つ。
例4:最適化に影響を与えるフラグを推奨する例
囲碁に由来するコード
/* 想定される升目の内容 */
enum square_t {
黒 = 0, 白 = 1, 空 = 2, 無効 = 3
};
は、以下に符号化される:
// 10064 square_t 4
enum square_t {
黒 = 0, 白 = 1, 空 = 2, 無効 = 3
};
この意味動作は以下の通りである。
enum-comment-> /* N1 Type N2 */ {enum-comment.kind=10064;
enum-comment.type=Type.val; enum-comment.size=N2.val}
Decln -> enum-comment enum-decln {enum-decln.kind=enum-comment.kind;
enum-decln.type=enum-comment.type; enum-decln.size=enum-comment.size;}
enum-decln -> enum data_name {Var1=Value1, Var2=Value2 … Varn=Valuen}
{
If enum-decln.kind==10064 {
enum-decln.sizeを1バイトで格納できる場合
frag-qenum = 1を使用する推奨を発する
偽の場合で、enum-decln.sizeを2バイトで格納できる場合
frag-qenum = 2を使用する推奨を発する
….
}
}
本明細書に記載のように、1つまたは複数の態様によれば、コメントを含むプログラムの性能を向上させることができる洞察を提供するコメントが認識され、意味のある構造体に翻訳され、コンパイラは、その構造体を使用して、効率的なコードを生成するか、またはコンパイラ・フラグもしくはプラグマをユーザに提案することができる。
一態様では、ソース・コードのコメントから有用な情報を抽出し、それらのコメントをコンパイラ・フェーズで認識可能な構造コードに翻訳することによって、コンパイラがバイナリ・コードの作成を最適化することを可能にする機能が提供される。
一例として、有用な情報(構文または特徴)は、機械学習技法を使用してコメントを解析することによって、ソース・コードのコメントまたはプラグマから識別/抽出される。スコアは分類器モデルを使用してコメントに割り当てられ、コメントの有用な部分は各コメントに割り当てられたスコアに基づいて分類される。信頼度スコアが高いコメントは保持され、実際のプログラム・エンティティとして扱われる。これらのコメントは解析木ノードとして現れ、解析木ノードへの特定の属性の割当てを容易にし、その結果ユーザへの推奨事項が生成されるか、またはコード生成に影響を与えるか、あるいはその両方である。抽出された情報は、コメントから、コンパイラで認識可能な中間コードまたはプログラム・コードに動的に変換される。変換されたプログラム・コードは、バイナリ・コードの作成を最適化するためにコンパイラに推奨される。
特定の最適化をトリガするためにコンパイラによって使用され得るコメントを選び出すために特別に設計された機械学習モデルを使用して、コメントが認識される。これらのコメントは、コンパイラの後続の工程に渡される。コンパイラはこの情報を選択し、性能向上のためのユーザへの推奨事項として有用なプラグマ/フラグを生成するか、またはコンパイラ内から最適コードの生成をトリガする。
一態様では、コンパイラ内で最適化をトリガするため、または性能の向上をもたらすことができるフラグまたはプラグマに関するユーザへの推奨事項を生成するのを助けるために使用され得る、隠し情報を含むプログラム・コメント(例えば、平易な自然言語テキストのコメント)が識別される。
さらなる態様では、前処理フェーズ中にコメント最適化マップ・ファイルが生成されてもよい。このファイルは、コメントによってトリガされた最適化/提案のメタデータを含み得る。メタデータは、例えば、コンパイラによる最適化に役立つと分類された各コメントに関する次の情報、すなわちパラメータのsource-line::OPTCODEリストを含み得る。マップ・ファイルおよび変更されていないソースのみの場合、プリプロセッサは、マップ・ファイルを使用して、そのパラメータを含むどの最適化/提案にどのコメントが縮小されたかを判断することができる。このように、時間内に任意のスナップショットで同じバイナリを確定的に取得することができる。
さらに別の態様では、機械学習モデルおよびプリプロセッサは、コンパイラの不可分な部分として扱われ、時間内にスナップショットで確実に同じバイナリとなるように両方が一緒にバージョン管理される。
別の態様では、プロファイル情報から得られるヒントとコメント解析からのヒントを比較して、提案されたどの最適化を使用するかを決定する、プロファイリングおよび検証が提供され得る。このプロファイリングおよび検証は、例えば、ユーザがコメント解析の使用に基づいて性能の低下を認めたときに実行されるが、このコメント解析は、例えば、新しいコンパイラ・フラグ「-muse_comments」を使用してアクティベートされ、このフラグを使用してコンパイルするとき、コンパイラは、最適化をトリガするために利用可能なコメント内の情報を活用することができる。この検証が許容できないコメントを指摘し、コメントの影響が抑えられると、その後のコンパイルの実行では、完全なプロファイル・フィードバックを再度行う必要はない。
本発明の1つまたは複数の態様は、コンピュータ技術と密接に関係し、コンピュータ内の処理を容易にし、その性能を向上させる。本発明の1つまたは複数の態様に関するようなコンピューティング環境内の処理を容易にする一実施形態のさらなる詳細を、図5〜図6を参照して説明する。
図5を参照すると、一実施形態では、コンピューティング環境のプロセッサの翻訳コンポーネントは、コンピューティング環境内の処理を最適化するための1つまたは複数の最適化を提供する際に翻訳コンポーネントによって使用される1つまたは複数の符号化されたコメントを取得する(400)。1つまたは複数の符号化されたコメントは、翻訳コンポーネントに提供するべき情報を有すると判定され、かつ1つまたは複数の符号化されたコメントを提供するために符号化されたコンピュータ・プログラムの1つまたは複数のコメントを含む(402)。翻訳コンポーネントは、1つまたは複数の符号化されたコメントを使用して、コンピューティング環境内の処理を最適化する(404)。
一例として、1つまたは複数の符号化されたコメントを使用して処理を最適化することは、コンピュータ・プログラムのコードを機械可読コードに翻訳する際に1つまたは複数の符号化されたコメントを使用することを含む(406)。一例では、機械可読コードは、1つまたは複数の符号化されたコメントに基づく1つまたは複数のコード最適化を含む(408)。
別の例として、1つまたは複数の符号化されたコメントを使用して処理を最適化することは、1つまたは複数の符号化されたコメントを使用して、処理を最適化するためにコンピュータ・プログラムに加えられる1つまたは複数の変更を示すレポートを生成することを含む(409)。レポートを生成することによって、コンピュータ・プログラムが変更され、コードが改善され、したがってコンピューティング環境内の処理が改善され得る。
一実施形態では、1つまたは複数の符号化されたコメントの取得に基づいて、構造体が構築される(410)。構造体は複数のノードを含み(412)、複数のノードは、コンピュータ・プログラムの1つまたは複数のプログラム・コンポーネントに対する1つまたは複数のノードと、1つまたは複数の符号化されたコメントに対する1つまたは複数のノードとを含む(414)。
さらに、一実施形態では、図6を参照すると、1つまたは複数の符号化されたコメントを取得することは、プロセッサの前処理コンポーネントから1つまたは複数の符号化されたコメントを取得することを含む(420)。前処理コンポーネントは、翻訳コンポーネントが使用するために保持されるコンピュータ・プログラムの1つまたは複数のコメントを決定し(422)、1つまたは複数のコメントを符号化して1つまたは複数の符号化されたコメントを提供する(424)。
保持する1つまたは複数のコメントを決定することは、例えば、1つまたは複数のコメントが処理を最適化するのに有用な情報を有すると予測されることを示す信頼度閾値を、1つまたは複数のコメントが満たしていると判定することを含む(426)。さらに、一例では、符号化は、1つまたは複数のコメントのコメントに対して、このコメント用の最適化コードおよび1つまたは複数のパラメータを提供して、符号化されたコメントを提供することを含む(428)。
例として、前処理コンポーネントは、翻訳コンポーネントの一部であるか、または翻訳コンポーネントとは別個であるが翻訳コンポーネントに結合されている(430)。
他の変形形態および実施形態が可能である。
他のタイプのコンピューティング環境も、エミュレーション環境を含むがこれに限定されない本発明の1つまたは複数の態様を組み込んで使用することができ、その一例を図7を参照して説明する。この例では、コンピューティング環境20は、例えば1つまたは複数のバス28または他の接続あるいはその両方を介して互いに結合された、例えば、ネイティブ中央処理装置(CPU)22、メモリ24、および1つまたは複数の入力/出力デバイスまたはインターフェースあるいはその両方26を含む。例として、コンピューティング環境20は、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるPowerPC(登録商標)プロセッサもしくはpSeries(登録商標)サーバ、またはインターナショナル・ビジネス・マシーンズ・コーポレーション、Intel(登録商標)、もしくは他の企業によって提供されるアーキテクチャに基づく他のマシン、あるいはその両方を含み得る。
ネイティブ中央処理装置22は、環境内の処理中に使用される1つもしくは複数の汎用レジスタまたは1つもしくは複数の専用レジスタあるいはその両方などの、1つまたは複数のネイティブ・レジスタ30を含む。これらのレジスタは、特定の時点での環境の状態を表す情報を含む。
さらに、ネイティブ中央処理装置22は、メモリ24に記憶されている命令およびコードを実行する。特定の一例では、中央処理装置は、メモリ24に記憶されたエミュレータ・コード32を実行する。このコードによって、あるアーキテクチャで構成されたコンピューティング環境は別のアーキテクチャをエミュレートすることが可能になる。例えば、エミュレータ・コード32によって、PowerPC(登録商標)プロセッサ、pSeries(登録商標)サーバ、または他のサーバもしくはプロセッサなどの、z/Architecture(登録商標)以外のアーキテクチャに基づくマシンは、z/Architecture(登録商標)をエミュレートし、z/Architecture(登録商標)に基づいて開発されたソフトウェアおよび命令を実行することが可能になる。
エミュレータ・コード32に関するさらなる詳細を、図8を参照して説明する。メモリ24に記憶されたゲスト命令40は、ネイティブCPU22のアーキテクチャ以外のアーキテクチャで実行されるように開発されたソフトウェア命令(例えば、マシン命令に相関する)を含む。例えば、ゲスト命令40は、z/Architecture(登録商標)プロセッサ上で実行するように設計されていてもよいが、代わりに、例えばIntel(登録商標)プロセッサであり得るネイティブCPU22上でエミュレートされている。一例では、エミュレータ・コード32は、メモリ24から1つまたは複数のゲスト命令40を取得するため、および任意選択で、取得された命令にローカル・バッファリングを提供するための、命令フェッチ・ルーチン42を含む。エミュレータ・コード32はまた、取得されているゲスト命令のタイプを決定するため、およびゲスト命令を1つまたは複数の対応するネイティブ命令46に翻訳するための、命令翻訳ルーチン44も含む。この翻訳は、例えば、ゲスト命令によって実行される機能を識別すること、およびその機能を実行するためのネイティブ命令を選択することを含む。
さらに、エミュレータ・コード32は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン48を含む。エミュレーション制御ルーチン48は、ネイティブCPU22に、以前に取得した1つまたは複数のゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、その実行の最後に、命令フェッチ・ルーチンに制御を戻して次のゲスト命令またはゲスト命令のグループの取得をエミュレートさせてもよい。ネイティブ命令46の実行は、データをメモリ24からレジスタにロードすること、データをレジスタから再びメモリに記憶すること、または翻訳ルーチンによって決定された何らかのタイプの算術演算もしくは論理演算を実行することを含み得る。
各ルーチンは、例えば、メモリ内に記憶されてネイティブ中央処理装置22によって実行される、ソフトウェア内に実装される。他の例では、1つまたは複数のルーチンまたは演算は、ファームウェア、ハードウェア、ソフトウェア、またはそれらの何らかの組合せで実装される。エミュレートされたプロセッサのレジスタは、ネイティブCPUのレジスタ30を使用して、またはメモリ24の場所を使用することによってエミュレートされてもよい。実施形態では、ゲスト命令40、ネイティブ命令46、およびエミュレータ・コード32は、同じメモリに存在してもよく、または異なるメモリ・デバイス間で分散されてもよい。
本明細書で使用される場合、ファームウェアは、例えば、プロセッサのマイクロコードまたはミリコードを含む。ファームウェアは、例えば、より高いレベルのマシン・コードの実装で使用されるハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。一実施形態では、ファームウェアは、例えば、典型的には、信頼できるソフトウェアを含むマイクロコード、または基礎となるハードウェアに固有のマイクロコードとして配信される独自のコードを含み、オペレーティング・システムのシステム・ハードウェアへのアクセスを制御する。
1つまたは複数の態様は、クラウド・コンピューティングに関連し得る。
本開示はクラウド・コンピューティングに関する詳細な説明を含むが、本明細書に記載の教示の実装は、クラウド・コンピューティング環境に限定されないことがあらかじめ理解される。むしろ、本発明の実施形態は、現在知られている、または将来開発される任意の他のタイプのコンピューティング環境と併せて実装することができる。
クラウド・コンピューティングは、最小限の管理労力またはサービス・プロバイダとの対話で迅速にプロビジョニングおよび解放することができる、構成可能なコンピューティング・リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共有プールへの簡便でオンデマンドのネットワーク・アクセスを可能にするための、サービス配信のモデルである。このクラウド・モデルは、少なくとも5つの特性、少なくとも3つのサービス・モデル、および少なくとも4つの展開モデルを含む可能性がある。
特徴は以下の通りである。
オンデマンド・セルフサービス:クラウドの利用者は、サービス・プロバイダとの間で人間の対話を必要とすることなく必要に応じて自動的に、サーバ時間およびネットワーク・ストレージなどのコンピューティング機能を一方的にプロビジョニングすることができる。
広範囲なネットワーク・アクセス:ネットワーク中にわたって機能が利用可能であり、異種のシン・クライアント・プラットフォームまたはシック・クライアント・プラットフォーム(例えば、移動電話、ラップトップ、およびPDA)による使用を促進する標準的なメカニズムを介して機能にアクセスすることができる。
リソース・プーリング:マルチテナント・モデルを使用して複数の利用者にサービスするために、プロバイダのコンピューティング・リソースがプールされ、要求に応じて異なる物理リソースおよび仮想リソースが動的に割当ておよび再割当てされる。利用者は通常、提供されるリソースの厳密な位置について制御することができないか、または知ることができないが、より高抽象化レベル(例えば、国、州、またはデータセンター)で位置を特定し得るという点で、位置の独立性がある。
迅速な柔軟性:機能を迅速かつ柔軟にプロビジョニングし、場合によっては自動的にプロビジョニングして、素早くスケール・アウトし、迅速に解放して素早くスケール・インすることができる。利用者にとっては、多くの場合、プロビジョニングに利用可能な機能が無制限であるように見え、いつでも任意の数量で購入することができる。
サービスの測定:クラウド・システムは、サービスのタイプ(例えば、ストレージ、処理、帯域幅、およびアクティブ・ユーザ・アカウント)に適した一定の抽象化レベルで計測機能を活用することによって、リソースの使用を自動的に制御および最適化する。リソースの利用状況を監視、制御、およびレポートすることができ、利用するサービスのプロバイダと利用者の両方に透明性を提供する。
サービス・モデルは以下の通りである。
ソフトウェア・アズ・ア・サービス(SaaS):利用者に提供される機能は、クラウド・インフラストラクチャ上で実行されるプロバイダのアプリケーションを利用することである。アプリケーションは、ウェブ・ブラウザ(例えば、ウェブ・ベースの電子メール)などのシン・クライアント・インターフェースを介して様々なクライアント・デバイスからアクセスすることができる。限られたユーザ固有のアプリケーション構成設定は例外である可能性があるが、利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または個々のアプリケーション機能を含む基盤となるクラウド・インフラストラクチャを管理または制御しない。
プラットフォーム・アズ・ア・サービス(PaaS):利用者に提供される機能は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、利用者が作成または取得したアプリケーションを、クラウド・インフラストラクチャに展開することである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤となるクラウド・インフラストラクチャを管理または制御しないが、展開されたアプリケーションおよび場合によっては環境構成をホストしているアプリケーションを制御する。
インフラストラクチャ・アズ・ア・サービス(IaaS):利用者に提供される機能は、オペレーティング・システムおよびアプリケーションを含み得る任意のソフトウェアを利用者が展開し実行することができる、処理、ストレージ、ネットワーク、および他の基本的なコンピューティング・リソースをプロビジョニングすることである。利用者は、基盤となるクラウド・インフラストラクチャを管理または制御しないが、オペレーティング・システム、ストレージ、展開されたアプリケーションを制御し、場合によっては、選ばれたネットワーキング・コンポーネント(例えば、ホスト・ファイアウォール)を限定的に制御する。
展開モデルは以下の通りである。
プライベート・クラウド:クラウド・インフラストラクチャは、ある組織専用に運用される。これは、組織またはサード・パーティによって管理されてもよく、オンプレミスまたはオフプレミスに存在してもよい。
コミュニティ・クラウド:クラウド・インフラストラクチャは複数の組織で共有され、共通の関心事項(例えば、ミッション、セキュリティ要件、ポリシー、およびコンプライアンスの考慮事項)を有する特定のコミュニティをサポートする。これは、組織またはサード・パーティによって管理されてもよく、オンプレミスまたはオフプレミスに存在してもよい。
パブリック・クラウド:クラウド・インフラストラクチャは、一般大衆または大規模な企業団体が利用可能であり、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラストラクチャは、固有のエンティティを保持するが、データとアプリケーションの移植を可能にする標準化された技術または独自の技術(例えば、クラウド間の負荷バランスを調整するためのクラウド・バースティング)によって互いに結合された、2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の合成である。
クラウド・コンピューティング環境は、ステートレス、低結合、モジュール性、および意味的相互運用性に重点を置いたサービスである。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを備えるインフラストラクチャである。
ここで図9を参照すると、例示的なクラウド・コンピューティング環境50が示されている。図示のように、クラウド・コンピューティング環境50は、例えば、携帯情報端末(PDA:personal digital assistant)もしくは携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、あるいはその組合せなどのクラウド利用者によって使用されるローカル・コンピューティング・デバイスが通信することができる、1つまたは複数のクラウド・コンピューティング・ノード10を備える。ノード10は、互いに通信することができる。ノード10は、本明細書で前述したプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、またはハイブリッド・クラウド、あるいはその組合せなどの1つまたは複数のネットワーク内で物理的にまたは仮想的にグループ化されてもよい(図示せず)。これにより、クラウド・コンピューティング環境50は、クラウド利用者がローカル・コンピューティング・デバイス上でリソースを維持する必要のないサービスとしてインフラストラクチャ、プラットフォーム、またはソフトウェア、あるいはその組合せを提供することができる。図9に示すコンピューティング・デバイス54A〜Nのタイプは、例示のみを意図しており、コンピューティング・ノード10およびクラウド・コンピューティング環境50は、任意のタイプのネットワークまたはネットワーク・アドレス指定可能な接続(例えば、ウェブ・ブラウザを使用して)あるいはその両方を経由して任意のタイプのコンピュータ制御デバイスと通信することができると理解される。
ここで図10を参照すると、クラウド・コンピューティング環境50(図9)によって提供される機能抽象化層のセットが示されている。図10に示すコンポーネント、層、および機能は、例示のみを意図しており、本発明の実施形態はこれに限定されないことをあらかじめ理解されたい。図示のように、以下の層および対応する機能が提供される。
ハードウェアおよびソフトウェア層60は、ハードウェアおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例には、メインフレーム61、RISC(縮小命令セット・コンピュータ:reduced instruction set computer)アーキテクチャ・ベースのサーバ62、サーバ63、ブレード・サーバ64、記憶デバイス65、ならびにネットワークおよびネットワーキング・コンポーネント66が含まれる。いくつかの実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
仮想化層70は、抽象化層を提供し、この層から、仮想エンティティの以下の例、すなわち、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75が提供され得る。
一例では、管理層80は、以下に記載の機能を提供し得る。リソース・プロビジョニング81は、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソースおよび他のリソースの動的調達を提供する。計測および価格設定82は、クラウド・コンピューティング環境内でリソースが利用されるときのコスト追跡、およびこれらのリソースの消費に対する課金または請求を提供する。一例では、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含み得る。セキュリティは、クラウド利用者およびタスクの検証、ならびにデータおよび他のリソースの保護を提供する。ユーザ・ポータル83は、利用者およびシステム管理者にクラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理84は、必要なサービス・レベルが満たされるように、クラウド・コンピューティング・リソース割当ておよび管理を提供する。サービス・レベル合意(SLA)計画および履行85は、SLAに従って将来の要件が予想されるクラウド・コンピューティング・リソースの事前手配および調達を提供する。
ワークロード層90は、クラウド・コンピューティング環境が利用され得る機能性の例を提供する。この層から提供され得る作業負荷および機能の例には、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想教室教育配信93、データ解析処理94、トランザクション処理95、およびプログラム・コメント処理96が含まれる。
本発明は、任意の可能な技術的な詳細な統合レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体(または複数の媒体)を含み得る。
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持し記憶することができる、有形のデバイスであってもよい。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、またはこれらの任意の適切な組合せであり得るが、これらに限定されない。コンピュータ可読記憶媒体のさらなる具体例の非網羅的なリストには、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読取専用メモリ(ROM)、消去可能プログラマブル読取専用メモリ(EPROMまたはフラッシュ・メモリ)、静的ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読取専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー(登録商標)・ディスク、パンチカードまたは命令が記憶されている溝の中の隆起構造などの機械的に符号化されるデバイス、および、これらの任意の適切な組合せが含まれる。本明細書で使用されるコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波路もしくは他の伝送媒体を介して伝播する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、またはワイヤを介して送信される電気信号など、それ自体が一時的な信号であるとは解釈されないものである。
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス/処理デバイスに、またはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組合せを介して外部コンピュータまたは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備え得る。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、各コンピューティング・デバイス/処理デバイス内のコンピュータ可読記憶媒体に記憶するために、コンピュータ可読プログラム命令を転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用の構成データ、またはSmalltalk、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは類似のプログラミング言語などの手続型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードもしくはオブジェクト・コードであってもよい。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上でかつ部分的にリモート・コンピュータ上で、または完全にリモート・コンピュータもしくはサーバ上で実行され得る。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータへ接続され得るか、または、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータへの接続がなされ得る。いくつかの実施形態では、例えば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル論理アレイ(PLA)を含む電子回路は、本発明の態様を実行するために、電子回路をパーソナル化するコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行してもよい。
本発明の態様は、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して本明細書に説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実施され得ることが理解されよう。
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施する手段を作成するように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってもよい。これらのコンピュータ可読プログラム命令は、記憶されている命令を有するコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作の態様を実施する命令を含む製造品を備えるように、コンピュータ、プログラム可能なデータ処理装置または他のデバイスあるいはその組合せを、特定の方式で機能するように指示し得るコンピュータ可読記憶媒体に記憶されてもよい。
コンピュータ可読プログラム命令は、コンピュータ、他のプログラム可能な装置、または他のデバイスで実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施するように、コンピュータによって実行されるプロセスを作出するべく、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスにロードされて、コンピュータ、他のプログラム可能な装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
図面のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を例示する。これに関して、フローチャートまたはブロック図における各ブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を含むモジュール、セグメント、または命令の一部を表し得る。いくつかの代替実装形態では、ブロックに示される機能は、図面に示される順序と異なって行われてもよい。例えば、連続して示されている2つのブロックは、実際には、実質的に同時に実行されてもよく、または、これらブロックは、関連する機能性に応じて、場合によっては逆の順序で実行されてもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組合せは、指定された機能または動作を実行する、または専用ハードウェアとコンピュータ命令の組合せを実行する専用ハードウェアベースのシステムによって実施され得ることも留意されたい。
上記に加えて、1つまたは複数の態様は、顧客環境の管理をもたらすサービス・プロバイダによって提供、提案、展開、管理、サービスなどされてもよい。例えば、サービス・プロバイダは、1つまたは複数の顧客のために1つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を作成、維持、サポートなどしてもよい。代わりに、サービス・プロバイダは、例として、サブスクリプション契約中または手数料契約中あるいはその両方の顧客から、支払いを受けてもよい。追加的にまたは代替的に、サービス・プロバイダは、1つまたは複数のサード・パーティへの広告コンテンツの売上から支払いを受けてもよい。
一態様では、アプリケーションは、1つまたは複数の実施形態を実行するために展開されてもよい。一例として、アプリケーションの展開は、1つまたは複数の実施形態を実行するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
さらなる態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャが展開されてもよく、コンピューティング・システムと組み合わされたコードは、1つまたは複数の実施形態を実行することができる。
さらなる態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含むコンピューティング・インフラストラクチャを統合するためのプロセスが提供されてもよい。コンピュータ・システムはコンピュータ可読媒体を含み、コンピュータ媒体は1つまたは複数の実施形態を含む。コンピュータ・システムと組み合わされたコードは、1つまたは複数の実施形態を実行することができる。
様々な実施形態が上記で説明されているが、これらは例にすぎない。例えば、1つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用されてもよい。さらに、他のタイプの訓練技法または分類器あるいはその両方が使用されてもよい。さらに、どのコメントを保持するか、または保持されたコメントをどのように符号化するか、あるいはその両方を決定するための他のメカニズムが使用されてもよい。多くの変形形態が可能である。
さらに他のタイプのコンピューティング環境が役立つ場合があり、使用される可能性がある。一例として、システム・バスを介してメモリ素子に直接的または間接的に結合された少なくとも2つのプロセッサを含む、プログラム・コードの記憶または実行あるいはその両方のために適切なデータ処理システムが使用可能である。メモリ素子は、例えば、プログラム・コードの実際の実行中に利用されるローカル・メモリ、大容量記憶装置、および実行中に大容量記憶装置からコードを取得しなければならない回数を低減させるために少なくともいくつかのプログラム・コードの一時的なストレージを提供するキャッシュ・メモリを含む。
入力/出力またはI/Oデバイス(キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サム・ドライブおよび他のメモリ媒体などを含むがこれらに限定されない)が、直接的にまたは介在するI/Oコントローラを介してシステムに結合され得る。データ処理システムが、介在するプライベート・ネットワークまたはパブリック・ネットワークを介して他のデータ処理システムまたはリモート・プリンタもしくは記憶デバイスに結合された状態になるように、ネットワーク・アダプタもまたシステムに結合され得る。モデム、ケーブル・モデム、およびEthernet(登録商標)カードは、利用可能なタイプのネットワーク・アダプタのごく一部である。
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、限定することを意図していない。本明細書で使用される場合、単数形「a(1つの)」、「an(1つの)」および「the(その)」は、文脈上特に明記されていない限り、複数形も含むことを意図している。また、「comprises(備える)」または「comprising(備えている)」あるいはその両方の用語は、本明細書で使用されるとき、記載されている特徴、整数、ステップ、動作、要素またはコンポーネントあるいはその組合せの存在を規定するが、1つまたは複数の他の特徴、整数、ステップ、動作、要素、コンポーネントまたはそのグループあるいはその組合せの存在または追加を排除しないことを理解されたい。
以下の特許請求の範囲のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、動作および均等物は、もしある場合、具体的に特許請求されている他の特許請求されている要素と組み合わせて機能を実行するための任意の構造、材料または動作を含むことを意図している。1つまたは複数の実施形態の説明は、例示および説明を目的として提示されているが、網羅的であること、または、開示された形態に限定することを意図したものではない。当業者には多くの変更および変形態様が明らかであろう。様々な態様および実際の適用を最もよく説明するため、かつ企図された特定の用途に適した様々な変更を加えた様々な実施形態を当業者が理解できるようにするために、実施形態を選択し説明した。