(57)【要約】  コンパイラなどの翻訳コンポーネントは、プログラムのコメントを認識し、そのコメントを使用して、最適化および推奨事項を提供するか、またはコンピューティング環境内の処理を改善するために最適化されたコードを生成する。コメントは、性能を向上させるのにより効率的なコードまたはプラグマを生成するための翻訳フェーズにより認識可能な構造体に翻訳される。【選択図】図５
2021502632.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境内の処理を容易にするコンピュータ実施方法であって、
前記コンピューティング環境内の処理を最適化するための１つまたは複数の最適化を提供する際に翻訳コンポーネントにより使用される１つまたは複数の符号化されたコメントを、前記コンピューティング環境のプロセッサの前記翻訳コンポーネントによって取得するステップであって、前記１つまたは複数の符号化されたコメントは、前記翻訳コンポーネントに提供するべき情報を有すると判定されかつ前記１つまたは複数の符号化されたコメントを提供するために符号化されたコンピュータ・プログラムの１つまたは複数のコメントを含む、前記取得するステップと、
前記翻訳コンポーネントによって、前記１つまたは複数の符号化されたコメントを使用して前記コンピューティング環境内の処理を最適化するステップと
を含む、コンピュータ実施方法。
【請求項２】
前記１つまたは複数の符号化されたコメントを使用して処理を最適化する前記ステップが、前記コンピュータ・プログラムのコードを機械可読コードに翻訳する際に前記１つまたは複数の符号化されたコメントを使用することを含む、請求項１に記載のコンピュータ実施方法。
【請求項３】
前記１つまたは複数の符号化されたコメントを使用して処理を最適化する前記ステップが、前記１つまたは複数の符号化されたコメントを使用して、処理を最適化するために前記コンピュータ・プログラムに加えられる１つまたは複数の変更を示すレポートを生成することを含む、請求項１に記載のコンピュータ実施方法。
【請求項４】
前記１つまたは複数の符号化されたコメントを取得する前記ステップが、前記１つまたは複数の符号化されたコメントを前記プロセッサの前処理コンポーネントから取得することを含み、前記方法は、
前記前処理コンポーネントによって、前記翻訳コンポーネントによる使用のために保持される前記コンピュータ・プログラムの前記１つまたは複数のコメントを決定するステップと、
前記前処理コンポーネントによって、前記１つまたは複数のコメントを符号化して前記１つまたは複数の符号化されたコメントを提供するステップと
をさらに含む、請求項１に記載のコンピュータ実施方法。
【請求項５】
前記符号化するステップが、前記１つまたは複数のコメントのコメントに対して、前記コメント用の最適化コードおよび１つまたは複数のパラメータを提供して、符号化されたコメントを提供することを含む、請求項４に記載のコンピュータ実施方法。
【請求項６】
前記１つまたは複数の符号化されたコメントの取得に基づいて構造体を構築するステップをさらに含み、前記構造体は複数のノードを含み、前記複数のノードは、前記コンピュータ・プログラムの１つまたは複数のプログラム・コンポーネントに対する１つまたは複数のノードと、前記１つまたは複数の符号化されたコメントに対する１つまたは複数のノードとを含む、請求項１に記載の方法。
【請求項７】
保持される前記１つまたは複数のコメントを決定する前記ステップは、前記１つまたは複数のコメントが処理の最適化に際し有用な情報を有すると予測されることを示す信頼度閾値を、前記１つまたは複数のコメントが満たしていると判定することを含む、請求項４に記載の方法。
【請求項８】
前記前処理コンポーネントが、前記翻訳コンポーネントの一部である、請求項４に記載の方法。
【請求項９】
前記前処理コンポーネントが、前記翻訳コンポーネントとは別個であるが前記翻訳コンポーネントに結合されている、請求項４に記載の方法。
【請求項１０】
請求項１ないし９のいずれかに記載の方法のすべてのステップを実行するように適合された手段を含むシステム。
【請求項１１】
コンピュータ・システム上で実行される際に、請求項１ないし９のいずれかに記載の方法のすべてのステップを実行するための命令を含む、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
１つまたは複数の態様は、一般に、コンピューティング環境内の処理に関し、詳細には、そのような処理を容易にすることに関する。
【背景技術】
【０００２】
コンピューティング環境内の処理は、コンピュータ・プログラムを実行することを含む。コンピュータ・プログラムは、実行されるタスクにおいてコンピュータに指示する。コンピュータ・プログラムは、プログラマが人間可読プログラミング言語を使用してソース・コードを生成することによって記述される。ソース・コードは、コンピュータ命令の集合であり、コンピュータ命令またはコンピュータ・プログラムの他の態様あるいはその両方を記述したコメントを含み得る。人間可読ソース・コードは、例えばコンパイラを使用して機械可読コードに翻訳される。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】"z／Architecture Principles of Operation," IBM Publication No. SA22-7832-10, March 2015
【非特許文献２】"Power ISA(TM) Version 2.07B," International Business Machines Corporation, April 9, 2015
【発明の概要】
【発明が解決しようとする課題】
【０００４】
コンパイラは、ソース・コードをコンピュータが理解可能なオブジェクト・コードまたはマシン・コードに変換する。ソース・コードを変換する際、コンパイラは、ソース・コード内に存在し得るコメントを無視する。
【課題を解決するための手段】
【０００５】
本発明の一態様によれば、例えばプログラムをコンパイルするとき、選ばれたコメントは無視されることなく考慮される。選ばれたコメントは、プログラムまたは他の処理、あるいはその両方を改善するための推奨事項を提供する際、または改善されたプログラム・コードを生成する際、あるいはその両方において有用となり得る情報を含む。
【０００６】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品の提供を通して、従来技術の欠点が克服され、さらなる利点がもたらされる。コンピュータ・プログラム製品は、方法を実行するための命令を記憶する、処理回路によって読み取り可能なコンピュータ可読記憶媒体を含む。方法は、例えば、コンピューティング環境のプロセッサの翻訳コンポーネントによって、コンピューティング環境内の処理を最適化するための１つまたは複数の最適化を提供する際に翻訳コンポーネントが使用する１つまたは複数の符号化されたコメントを取得することを含む。１つまたは複数の符号化されたコメントは、翻訳コンポーネントに提供するべき情報を有すると判定され、かつ１つまたは複数の符号化されたコメントを提供するために符号化されたコンピュータ・プログラムの１つまたは複数のコメントを含む。翻訳コンポーネントは、１つまたは複数の符号化されたコメントを使用して、コンピューティング環境内の処理を最適化する。符号化されたコメントを使用して処理を最適化することによって、性能が向上する。
【０００７】
一例として、１つまたは複数の符号化されたコメントを使用して処理を最適化することは、コンピュータ・プログラムのコードを機械可読コードに翻訳する際に１つまたは複数の符号化されたコメントを使用することを含む。機械可読コードは、１つまたは複数の符号化されたコメントに基づく１つまたは複数のコード最適化を含む。コード最適化は、コードを改善し、コンピューティング環境内の処理をさらに改善する。
【０００８】
別の例として、１つまたは複数の符号化されたコメントを使用して処理を最適化することは、１つまたは複数の符号化されたコメントを使用して、処理を最適化するためにコンピュータ・プログラムに加えられる１つまたは複数の変更を示すレポートを生成することを含む。レポートを生成することによって、コンピュータ・プログラムが変更され、コードが改善され、したがってコンピューティング環境内の処理が改善され得る。
【０００９】
一実施形態では、１つまたは複数の符号化されたコメントを取得することに基づいて、構造体が構築される。構造体は複数のノードを含み、複数のノードは、コンピュータ・プログラムの１つまたは複数のプログラム・コンポーネントに対する１つまたは複数のノードと、１つまたは複数の符号化されたコメントに対する１つまたは複数のノードとを含む。これにより、コードをコンパイルするときに特定の最適化を含めることが容易になる。
【００１０】
一例として、１つまたは複数の符号化されたコメントを取得することは、プロセッサの前処理コンポーネントから１つまたは複数の符号化されたコメントを取得することを含む。前処理コンポーネントは、翻訳コンポーネントが使用するために保持するコンピュータ・プログラムの１つまたは複数のコメントを決定し、１つまたは複数のコメントを符号化して１つまたは複数の符号化されたコメントを提供する。
【００１１】
保持する１つまたは複数のコメントを決定することは、例えば、１つまたは複数のコメントが処理を最適化するのに有用な情報を有すると予測されることを示す信頼度閾値を、１つまたは複数のコメントが満たしていると判定することを含む。
【００１２】
符号化は、例えば、１つまたは複数のコメントのコメントに対して、このコメント用の最適化コードおよび１つまたは複数のパラメータを提供して、符号化されたコメントを提供することを含む。
【００１３】
例として、前処理コンポーネントは、翻訳コンポーネントの一部であるか、または翻訳コンポーネントとは別個であるが翻訳コンポーネントに結合されている。
【００１４】
１つまたは複数の態様に関連するコンピュータ実装方法およびシステムもまた、本明細書で説明され、特許請求される。さらに、１つまたは複数の態様に関連するサービスもまた、本明細書で説明され、特許請求され得る。
【００１５】
本明細書に記載の技法を通して、さらなる特徴および利点が実現する。他の実施形態および態様は、本明細書で詳細に記載され、特許請求される態様の一部であると見なされる。
【００１６】
１つまたは複数の態様は、本明細書の最後にある特許請求の範囲において例として具体的に示され、明確に特許請求されている。上記ならびに１つまたは複数の態様の目的、特徴、および利点は、添付の図面と併せて以下の詳細な説明から明らかである。
【図面の簡単な説明】
【００１７】
【図１】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一例を示す図である。
【図２】本発明の態様に従って使用されるコンパイラの様々なフェーズの一例を示す図である。
【図３】本発明の態様に従って実行される前処理フェーズの一例を示す図である。
【図４】本発明の態様に従って使用されるコンパイル・フェーズの一例を示す図である。
【図５】本発明の態様による、コンピューティング環境内の処理を容易にする一実施形態を示す図である。
【図６】本発明の態様による、コンピューティング環境内の処理を容易にする一実施形態を示す図である。
【図７】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例を示す図である。
【図８】図７のメモリのさらなる詳細を示す図である。
【図９】クラウド・コンピューティング環境の一実施形態を示す図である。
【図１０】抽象化モデル層の一例を示す図である。
【発明を実施するための形態】
【００１８】
本発明の一態様によれば、ソース・コード内の選択プログラム・コメントを無視することなく認識するように翻訳コンポーネントに命令する機能が提供される。本明細書の実施形態では、翻訳コンポーネントはコンパイラであるが、他の実施形態では、インタープリタ、または機械可読コードを提供する他のコンポーネントであってよい。
【００１９】
プログラム・コメントは、文書化の支援として機能することが知られている。しかし、本発明の一態様によれば、プロファイラまたは他の性能解析ツールによって直接確認することができない、プログラムの関数、ループ、分岐節、命令文または他の態様、あるいはその組合せに関する有用な情報を提供し得ることが観察された。しかし、コンパイラがコンパイル・プロセス中にコメントをアクティブなエンティティとして扱わないため、この情報はプログラムに留まるに過ぎず利用されない。コメントは空白として扱われ、コンパイルの字句解析フェーズを越えて破棄される。
【００２０】
したがって、本発明の一態様によれば、コンパイラによって使用され得るコメントを認識し、コメントをプログラムの他のコンポーネントとして扱う機能が提供される。一例では、コンパイラがより効率的なコードを生成することができるように、これらのコメントをコンパイラ・フェーズで認識可能な構造体に翻訳する修正されたコンパイラが提供される。この機能は、コメントをコンパイラ・フラグまたはプラグマ（プラグマは、コンパイラ指令、すなわちコンパイラに意図を示すためにソース・コードに埋め込まれたデータである）に翻訳することも含み、適用可能な場合はいつでもこれらを使用してプログラムの性能を向上させることができる。この機能は、所与のプログラムをコンパイルするための最適なフラグ・セットを決定するために多大なリソースを費やすフラグ・マイニング技法を支援することができる。
【００２１】
効率的なコードを提供することによって、コンピュータ内の処理が容易になり改善される。効率的なコードによって提供される最適化により、コンピューティング環境内の処理が改善される。
【００２２】
本明細書には様々な態様が記載されている。さらに、本発明の態様の思想から逸脱することなく、多くの変形形態が可能である。本明細書に記載の各態様または特徴およびその変形例は、矛盾しない限り、他の態様または特徴と組み合わせることができることに留意されたい。
【００２３】
本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態について、図１を参照して説明する。一例では、コンピューティング環境は、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）に基づく。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）の一実施形態が、"z/Architecture Principles of Operation," IBM Publication No. SA22-7832-10, March 2015に記載されている。Ｚ／ＡＲＣＨＩＴＥＣＴＵＲＥ（登録商標）は、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションの（登録商標）である。
【００２４】
別の例では、コンピューティング環境は、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）に基づく。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）の一実施形態が、"Power ISA(TM) Version 2.07B," International Business Machines Corporation, April 9, 2015に記載されている。ＰＯＷＥＲ  ＡＲＣＨＩＴＥＣＴＵＲＥ（登録商標）は、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションの（登録商標）である。
【００２５】
コンピューティング環境はまた、Ｉｎｔｅｌ  （登録商標）ｘ８６アーキテクチャを含むがこれに限定されない他のアーキテクチャに基づいてもよい。他の例も存在する。
【００２６】
図１に示すように、コンピューティング環境１００は、例えば汎用コンピューティング・デバイスの形態で示される、例えばコンピュータ・システム１０２を含む。コンピュータ・システム１０２は、１つもしくは複数のバスまたは他の接続１１０、あるいはその両方を介して互いに結合された、１つもしくは複数のプロセッサまたは処理ユニット１０４（例えば、中央処理装置（ＣＰＵ：central processing unit））、メモリ１０６（例として、別名、システム・メモリ、メイン・メモリ、メイン・ストレージ、中央ストレージまたはストレージ）、および１つまたは複数の入力／出力（Ｉ／Ｏ）インターフェース１０８を含み得るが、これらに限定されない。
【００２７】
バス１１０は、メモリ・バスまたはメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、および様々なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを含む、いくつかのタイプのバス・アーキテクチャのいずれかの１つまたは複数を表す。限定ではなく例として、このようなアーキテクチャには、業界標準アーキテクチャ（ＩＳＡ）、マイクロ・チャネル・アーキテクチャ（ＭＣＡ）、拡張ＩＳＡ（ＥＩＳＡ）、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（ＶＥＳＡ）ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）が含まれる。
【００２８】
メモリ１０６は、例えば、プロセッサ１０４のローカル・キャッシュ１２２に結合され得る、共有キャッシュなどのキャッシュ１２０を含んでもよい。さらに、メモリ１０６は、１つもしくは複数のプログラムまたはアプリケーション１３０、コンパイラ１３１、オペレーティング・システム１３２、および１つまたは複数のコンピュータ可読プログラム命令１３４を含んでもよい。コンピュータ可読プログラム命令１３４は、本発明の態様の実施形態の機能を実行するように構成されてもよい。例示的なコンパイラには、ＸＬ（例えば、インターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるＸＬ  Ｃ、ＸＬ  Ｃ＋＋）、ＧＣＣ（ＧＮＵコンパイラ・コレクション）、およびＬＬＶＭが含まれる。他のコンパイラも可能である。
【００２９】
コンピュータ・システム１０２はまた、例えば、Ｉ／Ｏインターフェース１０８を介して、１つもしくは複数の外部デバイス１４０、１つもしくは複数のネットワーク・インターフェース１４２、または１つもしくは複数のデータ記憶デバイス１４４、あるいはその組合せと通信してもよい。例示的な外部デバイスには、ユーザ端末、テープ・ドライブ、ポインティング・デバイス、ディプレイなどが含まれる。ネットワーク・インターフェース１４２により、コンピュータ・システム１０２は、他のコンピューティング・デバイスまたはシステムとの通信を提供する、ローカル・エリア・ネットワーク（ＬＡＮ）、標準的な広域ネットワーク（ＷＡＮ）、またはパブリック・ネットワーク（例えば、インターネット）、あるいはその組合せなどの１つまたは複数のネットワークと通信することができる。
【００３０】
データ記憶デバイス１４４は、１つまたは複数のプログラム１４６、１つもしくは複数のコンピュータ可読プログラム命令１４８またはデータあるいはその組合せなどを記憶してもよい。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成されてもよい。
【００３１】
コンピュータ・システム１０２は、取り外し可能／取り外し不可能な揮発性／不揮発性のコンピュータ・システム記憶媒体を含むか、またはそれに結合されるか、あるいはその両方であってもよい。例えば、コンピュータ・システム１０２は、取り外し不可能な不揮発性磁気メディア（通常「ハード・ドライブ」と呼ばれる）、取り外し可能な不揮発性磁気ディスク（例えば、「フロッピー（登録商標）・ディスク」）から読み取り、それに書き込むための磁気ディスク・ドライブ、またはＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭもしくは他の光学メディアなどの取り外し可能な不揮発性光ディスクから読み取り、それに書き込むための光ディスク・ドライブ、あるいはその組合せを含むか、またはそれに結合されるか、あるいはその両方であってもよい。他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方は、コンピュータ・システム１０２と併せて使用され得ることを理解されたい。例として、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが含まれるが、これらに限定されない。
【００３２】
コンピュータ・システム１０２は、多数の他の汎用または専用のコンピューティング・システムの環境または構成で動作可能であってもよい。コンピュータ・システム１０２での使用に適し得る周知のコンピューティング・システム、環境、または構成、あるいはその組合せの例には、パーソナル・コンピュータ（ＰＣ）システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドもしくはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベースのシステム、セット・トップ・ボックス、プログラム可能な民生用電子機器、ネットワークＰＣ、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムもしくはデバイスのいずれかを含む分散型クラウド・コンピューティング環境などが含まれるが、これらに限定されない。
【００３３】
上述のように、コンパイラ１３１などのコンパイラを使用して、ソース・コードを機械可読コードに変換する。ソース・コードを変換するために、コンパイラは、コンパイル・プロセスの複数のフェーズを使用する。様々なコンパイル・フェーズの一例について、図２を参照して説明する。
【００３４】
図２に示すように、コンパイラ１３１は、ソース・コード２００を入力として受け取る。例えば、ソース・コード２００は、コンパイラ１３１の字句解析器２０２に入力される。字句解析器２０２は、ソース・コード２００をトークン２１０の列に分解する。トークン２１０は、コンパイラ１３１の構文解析器２１２に入力され、コンパイラ１３１は、トークン列を解析してプログラムの構文構造を識別し、解析済みコード２２０を生成する。例えば、コンパイラは、トークンの線形列を木構造に置き換える解析木（本明細書では構文木とも呼ぶ）を構築してもよい。構文解析器の解析済みコード２２０は、意味解析器２２２に入力され、意味解析器２２２は、解析木に意味情報を追加し、シンボル・テーブルを構築する。意味解析器は、意味検査、オブジェクト・バインディング、または変数割当て、あるいはその組合せを実行する。
【００３５】
意味解析器２２２の出力は修飾コード２３０であり、修飾コード２３０がコード生成器２３２に入力され、コード生成器２３２が中間コード２４０を生成する。中間コード２４０はコンパイラ１３１のオプティマイザ２４２に入力されてもよく、オプティマイザ２４２は、実行されるオブジェクト・コード２５０を作成する。
【００３６】
コンパイラ１３１の上記のフェーズは一例にすぎない。コンパイラは、より多くの、より少ない、または異なる、あるいはその組合せのフェーズを有してもよい。さらに、フェーズの１つまたは複数は、異なる順序で実行されてもよい。例えば、最適化は、コード生成の前または後あるいはその両方に実行されてもよい。他の変形形態も可能である。
【００３７】
本発明の一態様によれば、コンパイラは、プログラムのコメントを認識および使用して、最適化されたコードまたは環境内の他の最適化あるいはその両方を提供するように修正される。これを容易にするために、一態様では、本明細書に記載のように、他のコンパイル・フェーズに先立って前処理フェーズが実行され、前処理フェーズは、自然言語（すなわち、英語または別の言語などの非機械語）で記述されたプログラムのコメントを分類し、選ばれたコメントの符号化を、例えば、字句解析器２０２に渡す。
【００３８】
コメントは自然言語で記述されているので、教師あり多クラス分類（supervised multiclass classification）技法などの機械学習技法を使用して、コメントを２つのカテゴリに分類する。一方のカテゴリは、コンパイラがプログラムをさらに最適化するのに役立ち得る、プログラムに関する有用な情報を提供するコメントを含み、他方のカテゴリは、アプリケーションの改善の機会につながる可能性がないコメントを含む。コメントの有用性は、所定の閾値に基づいて決定される。一方のカテゴリのコメントは保持され、他方のカテゴリのコメントは破棄される。
【００３９】
保持されたコメントは、プログラムの一部を形成し、構文木または解析木までコンパイル・フェーズを経る。コメントからの有用な情報は、ノードの意味属性を通過し、この意味属性を使用することによって、性能を向上させるために使用され得るフラグまたはプラグマに関する推奨事項をユーザに提供するか、または最適な中間コードを提供し、それによりコンパイラによって作成されるバイナリに影響を与える。この技法は、コメントからホット・パスの挙動を推測し、コメントをコンパイラに渡すために使用することもできる。この技法は、顧客が訓練入力にアクセスしない場合、またはＳＰＥＣプログラムなどの標準ベンチマーク・スイートでのみ利用可能な訓練入力を構築するのが困難であると判明した場合に有用である。
【００４０】
さらに説明すると、自然言語で記述されたプログラム・コメントは、コンパイラによる最適化のトリガとして、およびログ・ファイルに対するコンパイラのフラグ／プラグマ／提案に関するユーザへの推奨事項として、処理され使用される。これは、コンパイル・フェーズの前にプリプロセッサ・フェーズを追加することによって実現され、プリプロセッサ・フェーズは、例えば、教師あり多クラス分類技法を使用して、自然言語で記述されたコメントを分類する。前処理は、コンパイラの一部として実行されてもよく、またはコンパイラから分離して実行されてもよく、そこで前処理の結果がコンパイラに渡される。
【００４１】
一例では、コメントは、２つのカテゴリに分類される。一方のカテゴリは、コードを最適化するのに有用な情報をコンパイラに提供することができ、他方のカテゴリは、文書化の目的にのみ有用である。コンパイラに有用な情報を提供するコメントは、符号化され、プログラム内に保持される。コンパイラはこれらのコメントを処理し、最適化またはユーザへの推奨事項に翻訳する。コンパイラのフェーズはこのような特殊なコメントを認識し、これらを解析して構文木または解析木内に埋め込む。解析木のノードは属性に関連付けられており、コメント・ノードは、属性の観点で最適化に影響を与え得る情報を伝える。属性情報は、コンテキスト情報とともにその属性情報を処理するコンパイラの中間コード生成フェーズによって、コメント・ノードから選択される。さらに、それは、推奨事項を生成して最適コードの生成をトリガし、それにより性能が向上する。
【００４２】
一例として、図３を参照すると、前処理フェーズ３００は、例えば、訓練フェーズ３０２、予測フェーズ３２０、保持フェーズ３３０、符号化フェーズ３４０などの複数のフェーズを含む。特定の一例では、訓練フェーズ３０２および予測フェーズ３２０は、教師あり多クラス分類技法の一部である。
【００４３】
特定の一例では、コンパイラによる最適化の有限集合（サイズＮ）が存在する。各最適化は、多クラス分類技法の関連においてクラスとして扱われ、各最適化は、OPTIMIZATION_CODEに関連付けられる。このOPTIMIZATION_CODEは、（ａ）コンパイラ・フラグ、プラグマの形式でのプログラマへの推奨事項、（ｂ）中間コード生成に影響を与える意味動作、あるいはその両方にマッピングすることができる。例示的な最適化コードには、以下が含まれる。
【００４４】
【表１】
2021502632.tif 000003
【００４５】
訓練フェーズ３０２中、訓練データ３０４は特徴抽出器３０６に入力され、特徴抽出器３０６は、多クラス分類器３１０に入力される特徴３０８を抽出する。例えば、訓練データ・セット３０４は、１人または複数のプログラマによって作成され、コメントおよび関連する最適化コードの例を含む。一例では、訓練データ・セットは、タプルの集合であり、各タプル３１４は、[Comment:OPTIMIZATION_CODE]形式である。コメント例はクラスに分類され、クラスは多クラス分類器に入力される。多クラス分類器は、訓練モデルを構築するために訓練される。多クラス分類器は、コメントをクラスに分類し、コメントをコンパイラによる最適化または推奨事項に関連付ける。
【００４６】
例えば、ｓｗｉｔｃｈ  ｃａｓｅ命令文の分岐最適化用の訓練セットの一例には以下が含まれる。
【００４７】
Void func () {
【００４８】
State=Prereq() ;
【００４９】
Switch (State)  {
【００５０】
case ‘a’:                          ／／このcaseは最もよく取得される
【００５１】
Val=x+y-z;
【００５２】
…
【００５３】
Break;
【００５４】
case ‘b’:  Val=x*10;
【００５５】
…
【００５６】
Break;
【００５７】
……
【００５８】
Default :      ……
【００５９】
}
【００６０】
}
【００６１】
訓練セットには、例えば、以下が含まれる。
【００６２】
［このｃａｓｅは最もよく取得される，４１２３］
【００６３】
［このｃａｓｅはホット・パス中にある，４１２３］
【００６４】
［このｓｗｉｔｃｈ  ｃａｓｅは頻繁に実行される，４１２３］
【００６５】
［８０％を超えてこのｓｗｉｔｃｈ  ｃａｓｅが実行される，４１２３］
【００６６】
…
【００６７】
各タプル３１４から特徴ベクトル３１６が抽出され、特徴ベクトル３１６は、分類器が訓練データから学習するモデルを構築するために使用される。例えば、タプル３１４の各コメントは特徴抽出器３０６に供給され、特徴抽出器３０６はコメントから特徴３０８を抽出する。特徴は、コメントを単語に分割することによって抽出される。特徴ベクトルに関する単語は除外され、そうでなければベクトルの次元が増加することになる。
【００６８】
コメントから抽出される特徴語の例には以下が含まれる。
【００６９】
【表２】
2021502632.tif 000004
【００７０】
特徴ベクトル３１６は、このような特徴語のそれぞれの組合せである。コメント内の特徴語の有無は、特徴ベクトルを形成し、ビットマップに符号化される。各コメントには、（コンパイラによる最適化を指す）OPTIMIZATION_CODEのラベルが付与される。
【００７１】
コメントは、例えばクラス名、変数、関数などの識別子を有してもよく、識別子は、最適化をトリガするために使用されてもよく、したがって、OPTIMIZATION CODEまたはOPTCODEとともにパラメータとして保持され渡される。
【００７２】
この特徴ベクトル３１６は多クラス分類器３１０に入力され、多クラス分類器３１０は、ナイーブ・ベイズ、ニューラル・ネットワーク、およびＳＶＭ（サポート・ベクター・マシン）などの技法を使用してモデルを構築する。多クラス分類器は、訓練入力を使用して、本明細書において訓練済み分類器モデルと呼ばれるこのモデルを訓練する。次いで、訓練済みモデルは、異なるタイプのコメントを理解し、コメントをそれが属する可能性のある異なるクラスに分類することができる。
【００７３】
一実施形態では、訓練フェーズは１回の動作である。モデルが作成されると、モデルは後に予測に使用される。訓練フェーズは、新しいコメントおよび最適化に対応するように適合されてもよい。
【００７４】
次のフェーズである予測フェーズ３２０中、ソース・コード内の各コメント３２２（または選ばれたコメント）について、特徴抽出器３２４を通して特徴語が抽出され、特徴ベクトル３２６が生成される。特徴ベクトル３２６は、（訓練フェーズ３０２で構築された）訓練済み分類器モデル３２８への入力として渡され、訓練済み分類器モデル３２８は、クラスごとのスコア／信頼度３２０を提供する。スコア／信頼度は、コメントに関連する特徴ベクトルを入力として取得する訓練済み分類器モデルによって提供される。例えば、ソース・コード内のコメントが訓練済み分類器モデルに入力されて、このコメントに最適なクラスが決定され、信頼レベル（例えば、コメントがこのクラスに適合するという一定割合の信頼度）が提供される。
【００７５】
保持フェーズ３３０中、その信頼値が例えば規定の閾値（例えば、８０％）以上であるコメントが保持される。スコア値が信頼度閾値以上の場合、コメントが符号化に置き換えられ、そうでない場合、コメントは、プログラムから削除され、後続のフェーズに移ることはできない。他の閾値または他の信頼度の決定あるいはその両方が可能である（例えば、信頼値が閾値より小さいか、閾値と等しいか、または別の関係を有することがある）。他の可能性も存在する。
【００７６】
保持されたコメントは、符号化フェーズ３４０で符号化される。符号化フェーズ中、保持されたコメントはコメントの符号化に置き換えられる。符号化の一例は、/* OPTCODE params */形式であり、OPTCODEは最適化コード（例えば、ＮＮＮＮ）であり、paramsは中間コード生成中にコンパイラの後続のフェーズによって使用され得る追加のパラメータである。他の実施形態では、パラメータは任意選択である。他の変形形態も可能である。
【００７７】
例えば、
【００７８】
/* この関数ポインタはほとんどの場合_addFactor2()を呼び出す *／
【００７９】
int sum = (*functionPtr) (2, 3);
【００８０】
は、以下に翻訳されることになる。
【００８１】
/* 2314 _addFactor2 *／
【００８２】
int sum = (*functionPtr) (2, 3);
【００８３】
ここで、２３１４は、パラメータ_addFactor2を伴う間接呼出しのプロモーション用のOPTIMIZATION_CODE (OPTCODE)である。
【００８４】
現在のコンパイラでは、コメントはそのまま残る。しかし、本発明の一態様によれば、有用なコメント（例えば、その変数の値、分岐方向、データ・サイズ、ホットネス（hotness）に関するソース・コード・フラグメントに関する情報を提供するコメント）は、符号化されたバージョンに置き換えられ、プログラムの一部となる。図４に示すように、符号化され保持されたコメントは、字句解析器フェーズ３５０に渡される。本発明の一態様によれば、字句解析器フェーズ中、字句解析器は、例えば／* OPTCODE params */形式のコメントを認識する。これらのコメントが字句解析器によって認識されたことに基づいて、コメントが保持される。他のコメントは、字句解析器によってプログラムから削除される。
【００８５】
次のフェーズ３６０では、字句解析器によって解析されたトークンを使用して、コンパイラによって構文木または解析木が構築される。コメントは、命令文、ブロック、ループ、プロシージャなどのプログラム・コンポーネントとともに解析木内のノードである。
【００８６】
例えば、本発明の一態様によれば、コメントはプログラム内のアクティブなエンティティであり、多クラス分類器から出力されるコメント内で符号化された情報から属性を定義する。プログラム文に関連するコメントは、その文の直前に出現するように出力される。文法はこのようなコメントを認識するように変更され、その結果、コメント／* xxxx *／は、そのコメントに関連する命令文の親／ピアの子として、解析木の一部として現れる。
【００８７】
次のフェーズ３７０である意味解析フェーズでは、意味動作が記述され、意味動作は、コメントに関連するノードを考慮し、それらに埋め込まれた最適化コードを対応する提供されたパラメータと使用して、性能を向上させることができる適用可能なプラグマまたはフラグあるいはその両方を含むレポート３８０を生成するか、またはコンピュータ内で最適コード３８５を生成する。
【００８８】
意味解析フェーズは、意味動作を生成し、型チェックを実行し、最終的に中間コードを生成することになる。さらに、本発明の一態様によれば、例えば、以下を含む追加のタスクが実行される。
【００８９】
・コメントから受け取った洞察に対応するフラグ／プラグマの存在に応じて、ログ・ファイル内でユーザへの推奨事項を生成する。例えば、使用されるとコード（例えば、バイナリ）の性能が向上する有用なプラグマまたはフラグあるいはその両方を含む、注釈付きレポート３８０が生成され得る。
【００９０】
・コメントから受け取った洞察に基づいて、元のコードと比較してより最適な中間コードを生成する。例えば、最適コード３８５がプロセッサによって自動的に生成され、最適化またはマシン固有コードの生成あるいはその両方などの、コンパイラの後続のフェーズに渡される。結果として生じたバイナリは元のバイナリよりも効率的であり、実行されると性能の向上をもたらす。
【００９１】
これを実現するために、意味解析フェーズでは、継承属性および合成属性を使用して、コメントのインテリジェンスをコンパイラの中間コード生成フェーズに渡す。そのため、コメントの場所は有用であり、コメントがプログラム内の関連する命令文に近いので、これらの属性は、インテリジェンスを、命令文に関するコメントから命令文のコードが生成される進路に転送するための伝達手段として使用されてもよい。
【００９２】
次の例は、最適コードの生成／推奨事項の提供を実行するために属性がどのように使用されるかをさらに詳細に示す。
【００９３】
例１：ログ・ファイル内でユーザへの提案を生成する例
【００９４】
多くの場合、データ構造は、必要とされるサイズよりも大きいプログラムで定義される。これらのデータ構造は、プログラム内の状態またはチェス盤上の升目を表し得る。初期設定により、プログラマはデータ構造の型をｉｎｔ（整数）として割り当てる。しかし、その変数のとり得る状態の数は、ＭＡＸＩＮＴまたは２＾６４−１よりはるかに少ない場合がある。例えば、チェス盤内およびそのようなプログラム内の可能性のある値の数を示す状態を表す情報がコメントの一部として含まれていることが確認される。このような場合、これらのコメントを活用して、元の型と比較してはるかに小さいサイズの変数を使用するという推奨事項を提供することができる。
【００９５】
/* 想定される状態の数は100である *／
【００９６】
int states[64];
【００９７】
は、以下に翻訳され得る。
【００９８】
/* 10032 2 100 */
【００９９】
int states[64];
【０１００】
ここで、１００３２は、メモリ・フット・プリントの削減にマッピングすることができ、２および１００は、状態配列のすべての要素を記憶するにはｌｏｇ２（１００）ビットで十分であることを示す。
【０１０１】
この意味動作は以下の通りである。
【０１０２】
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.属性を使用するようユーザに推奨する
【０１１１】
}
【０１１２】
例２：中間コード生成中に命令文の順序に影響を与える例
【０１１３】
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は言語拡張であり、ＸＬ、ＧＣＣ、およびＬＬＶＭコンパイラでサポートされている。IRは内部表現である。
【０１４６】
プログラマが_builtin_expect(cond,1)を指定する場合、condがほとんどの場合真であることを示し、コンパイラに最適コードを生成させて分岐ペナルティを低減させる。
【０１４７】
基本的な最適化に加えて、多くのコンパイラは、プロファイル指向フィードバック・ベースの最適化をサポートしている。これらの最適化は、最も頻繁に実行されるパスを対象とする。このようなパスは、訓練データの実行中にわたって収集されたプロファイル情報に基づいて検出される。本発明の一態様によれば、コメント内の情報を使用するこのようなパスを検出する代替手段が提供される。このようなコメントの１つは、現在使用されている実際のアプリケーションからのものである。
【０１４８】
if (len <= 16 && available >= 16 + kMaximumTagLength && space_left >= 16 &&
【０１４９】
output_iov_[curr_iov_index_].iov_len - curr_iov_written_ >= 16) {
【０１５０】
//多数（約９０％）の呼出しに使用される高速パス
【０１５１】
char* ptr = GetIOVecPointer(curr_iov_index_, curr_iov_written_);
【０１５２】
UnalignedCopy128(ip, ptr);
【０１５３】
curr_iov_written_ += len;
【０１５４】
total_written_ += len;
【０１５５】
}
【０１５６】
例３：最適化に影響を与えるプラグマを推奨する例
【０１５７】
／／ほとんどの場合、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は、ＸＬコンパイラによって認識されるプラグマであり、コンパイラのマニュアルに記載されている。expected_value (var, X)は、ほとんどの場合変数varが値Xを有すると予想されることをコンパイラに伝える。したがって、これはコンパイラが追加の最適化を実行するのに役立つ。
【０１７１】
例４：最適化に影響を与えるフラグを推奨する例
【０１７２】
囲碁に由来するコード
【０１７３】
／* 想定される升目の内容 *／
【０１７４】
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を使用する推奨を発する
【０１９２】
….
【０１９３】
}
【０１９４】
}
【０１９５】
本明細書に記載のように、１つまたは複数の態様によれば、コメントを含むプログラムの性能を向上させることができる洞察を提供するコメントが認識され、意味のある構造体に翻訳され、コンパイラは、その構造体を使用して、効率的なコードを生成するか、またはコンパイラ・フラグもしくはプラグマをユーザに提案することができる。
【０１９６】
一態様では、ソース・コードのコメントから有用な情報を抽出し、それらのコメントをコンパイラ・フェーズで認識可能な構造コードに翻訳することによって、コンパイラがバイナリ・コードの作成を最適化することを可能にする機能が提供される。
【０１９７】
一例として、有用な情報（構文または特徴）は、機械学習技法を使用してコメントを解析することによって、ソース・コードのコメントまたはプラグマから識別／抽出される。スコアは分類器モデルを使用してコメントに割り当てられ、コメントの有用な部分は各コメントに割り当てられたスコアに基づいて分類される。信頼度スコアが高いコメントは保持され、実際のプログラム・エンティティとして扱われる。これらのコメントは解析木ノードとして現れ、解析木ノードへの特定の属性の割当てを容易にし、その結果ユーザへの推奨事項が生成されるか、またはコード生成に影響を与えるか、あるいはその両方である。抽出された情報は、コメントから、コンパイラで認識可能な中間コードまたはプログラム・コードに動的に変換される。変換されたプログラム・コードは、バイナリ・コードの作成を最適化するためにコンパイラに推奨される。
【０１９８】
特定の最適化をトリガするためにコンパイラによって使用され得るコメントを選び出すために特別に設計された機械学習モデルを使用して、コメントが認識される。これらのコメントは、コンパイラの後続の工程に渡される。コンパイラはこの情報を選択し、性能向上のためのユーザへの推奨事項として有用なプラグマ／フラグを生成するか、またはコンパイラ内から最適コードの生成をトリガする。
【０１９９】
一態様では、コンパイラ内で最適化をトリガするため、または性能の向上をもたらすことができるフラグまたはプラグマに関するユーザへの推奨事項を生成するのを助けるために使用され得る、隠し情報を含むプログラム・コメント（例えば、平易な自然言語テキストのコメント）が識別される。
【０２００】
さらなる態様では、前処理フェーズ中にコメント最適化マップ・ファイルが生成されてもよい。このファイルは、コメントによってトリガされた最適化／提案のメタデータを含み得る。メタデータは、例えば、コンパイラによる最適化に役立つと分類された各コメントに関する次の情報、すなわちパラメータのsource-line::OPTCODEリストを含み得る。マップ・ファイルおよび変更されていないソースのみの場合、プリプロセッサは、マップ・ファイルを使用して、そのパラメータを含むどの最適化／提案にどのコメントが縮小されたかを判断することができる。このように、時間内に任意のスナップショットで同じバイナリを確定的に取得することができる。
【０２０１】
さらに別の態様では、機械学習モデルおよびプリプロセッサは、コンパイラの不可分な部分として扱われ、時間内にスナップショットで確実に同じバイナリとなるように両方が一緒にバージョン管理される。
【０２０２】
別の態様では、プロファイル情報から得られるヒントとコメント解析からのヒントを比較して、提案されたどの最適化を使用するかを決定する、プロファイリングおよび検証が提供され得る。このプロファイリングおよび検証は、例えば、ユーザがコメント解析の使用に基づいて性能の低下を認めたときに実行されるが、このコメント解析は、例えば、新しいコンパイラ・フラグ「-muse_comments」を使用してアクティベートされ、このフラグを使用してコンパイルするとき、コンパイラは、最適化をトリガするために利用可能なコメント内の情報を活用することができる。この検証が許容できないコメントを指摘し、コメントの影響が抑えられると、その後のコンパイルの実行では、完全なプロファイル・フィードバックを再度行う必要はない。
【０２０３】
本発明の１つまたは複数の態様は、コンピュータ技術と密接に関係し、コンピュータ内の処理を容易にし、その性能を向上させる。本発明の１つまたは複数の態様に関するようなコンピューティング環境内の処理を容易にする一実施形態のさらなる詳細を、図５〜図６を参照して説明する。
【０２０４】
図５を参照すると、一実施形態では、コンピューティング環境のプロセッサの翻訳コンポーネントは、コンピューティング環境内の処理を最適化するための１つまたは複数の最適化を提供する際に翻訳コンポーネントによって使用される１つまたは複数の符号化されたコメントを取得する（４００）。１つまたは複数の符号化されたコメントは、翻訳コンポーネントに提供するべき情報を有すると判定され、かつ１つまたは複数の符号化されたコメントを提供するために符号化されたコンピュータ・プログラムの１つまたは複数のコメントを含む（４０２）。翻訳コンポーネントは、１つまたは複数の符号化されたコメントを使用して、コンピューティング環境内の処理を最適化する（４０４）。
【０２０５】
一例として、１つまたは複数の符号化されたコメントを使用して処理を最適化することは、コンピュータ・プログラムのコードを機械可読コードに翻訳する際に１つまたは複数の符号化されたコメントを使用することを含む（４０６）。一例では、機械可読コードは、１つまたは複数の符号化されたコメントに基づく１つまたは複数のコード最適化を含む（４０８）。
【０２０６】
別の例として、１つまたは複数の符号化されたコメントを使用して処理を最適化することは、１つまたは複数の符号化されたコメントを使用して、処理を最適化するためにコンピュータ・プログラムに加えられる１つまたは複数の変更を示すレポートを生成することを含む（４０９）。レポートを生成することによって、コンピュータ・プログラムが変更され、コードが改善され、したがってコンピューティング環境内の処理が改善され得る。
【０２０７】
一実施形態では、１つまたは複数の符号化されたコメントの取得に基づいて、構造体が構築される（４１０）。構造体は複数のノードを含み（４１２）、複数のノードは、コンピュータ・プログラムの１つまたは複数のプログラム・コンポーネントに対する１つまたは複数のノードと、１つまたは複数の符号化されたコメントに対する１つまたは複数のノードとを含む（４１４）。
【０２０８】
さらに、一実施形態では、図６を参照すると、１つまたは複数の符号化されたコメントを取得することは、プロセッサの前処理コンポーネントから１つまたは複数の符号化されたコメントを取得することを含む（４２０）。前処理コンポーネントは、翻訳コンポーネントが使用するために保持されるコンピュータ・プログラムの１つまたは複数のコメントを決定し（４２２）、１つまたは複数のコメントを符号化して１つまたは複数の符号化されたコメントを提供する（４２４）。
【０２０９】
保持する１つまたは複数のコメントを決定することは、例えば、１つまたは複数のコメントが処理を最適化するのに有用な情報を有すると予測されることを示す信頼度閾値を、１つまたは複数のコメントが満たしていると判定することを含む（４２６）。さらに、一例では、符号化は、１つまたは複数のコメントのコメントに対して、このコメント用の最適化コードおよび１つまたは複数のパラメータを提供して、符号化されたコメントを提供することを含む（４２８）。
【０２１０】
例として、前処理コンポーネントは、翻訳コンポーネントの一部であるか、または翻訳コンポーネントとは別個であるが翻訳コンポーネントに結合されている（４３０）。
【０２１１】
他の変形形態および実施形態が可能である。
【０２１２】
他のタイプのコンピューティング環境も、エミュレーション環境を含むがこれに限定されない本発明の１つまたは複数の態様を組み込んで使用することができ、その一例を図７を参照して説明する。この例では、コンピューティング環境２０は、例えば１つまたは複数のバス２８または他の接続あるいはその両方を介して互いに結合された、例えば、ネイティブ中央処理装置（ＣＰＵ）２２、メモリ２４、および１つまたは複数の入力／出力デバイスまたはインターフェースあるいはその両方２６を含む。例として、コンピューティング環境２０は、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるＰｏｗｅｒＰＣ（登録商標）プロセッサもしくはｐＳｅｒｉｅｓ（登録商標）サーバ、またはインターナショナル・ビジネス・マシーンズ・コーポレーション、Ｉｎｔｅｌ（登録商標）、もしくは他の企業によって提供されるアーキテクチャに基づく他のマシン、あるいはその両方を含み得る。
【０２１３】
ネイティブ中央処理装置２２は、環境内の処理中に使用される１つもしくは複数の汎用レジスタまたは１つもしくは複数の専用レジスタあるいはその両方などの、１つまたは複数のネイティブ・レジスタ３０を含む。これらのレジスタは、特定の時点での環境の状態を表す情報を含む。
【０２１４】
さらに、ネイティブ中央処理装置２２は、メモリ２４に記憶されている命令およびコードを実行する。特定の一例では、中央処理装置は、メモリ２４に記憶されたエミュレータ・コード３２を実行する。このコードによって、あるアーキテクチャで構成されたコンピューティング環境は別のアーキテクチャをエミュレートすることが可能になる。例えば、エミュレータ・コード３２によって、ＰｏｗｅｒＰＣ（登録商標）プロセッサ、ｐＳｅｒｉｅｓ（登録商標）サーバ、または他のサーバもしくはプロセッサなどの、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）以外のアーキテクチャに基づくマシンは、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）をエミュレートし、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）に基づいて開発されたソフトウェアおよび命令を実行することが可能になる。
【０２１５】
エミュレータ・コード３２に関するさらなる詳細を、図８を参照して説明する。メモリ２４に記憶されたゲスト命令４０は、ネイティブＣＰＵ２２のアーキテクチャ以外のアーキテクチャで実行されるように開発されたソフトウェア命令（例えば、マシン命令に相関する）を含む。例えば、ゲスト命令４０は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）プロセッサ上で実行するように設計されていてもよいが、代わりに、例えばＩｎｔｅｌ（登録商標）プロセッサであり得るネイティブＣＰＵ２２上でエミュレートされている。一例では、エミュレータ・コード３２は、メモリ２４から１つまたは複数のゲスト命令４０を取得するため、および任意選択で、取得された命令にローカル・バッファリングを提供するための、命令フェッチ・ルーチン４２を含む。エミュレータ・コード３２はまた、取得されているゲスト命令のタイプを決定するため、およびゲスト命令を１つまたは複数の対応するネイティブ命令４６に翻訳するための、命令翻訳ルーチン４４も含む。この翻訳は、例えば、ゲスト命令によって実行される機能を識別すること、およびその機能を実行するためのネイティブ命令を選択することを含む。
【０２１６】
さらに、エミュレータ・コード３２は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン４８を含む。エミュレーション制御ルーチン４８は、ネイティブＣＰＵ２２に、以前に取得した１つまたは複数のゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、その実行の最後に、命令フェッチ・ルーチンに制御を戻して次のゲスト命令またはゲスト命令のグループの取得をエミュレートさせてもよい。ネイティブ命令４６の実行は、データをメモリ２４からレジスタにロードすること、データをレジスタから再びメモリに記憶すること、または翻訳ルーチンによって決定された何らかのタイプの算術演算もしくは論理演算を実行することを含み得る。
【０２１７】
各ルーチンは、例えば、メモリ内に記憶されてネイティブ中央処理装置２２によって実行される、ソフトウェア内に実装される。他の例では、１つまたは複数のルーチンまたは演算は、ファームウェア、ハードウェア、ソフトウェア、またはそれらの何らかの組合せで実装される。エミュレートされたプロセッサのレジスタは、ネイティブＣＰＵのレジスタ３０を使用して、またはメモリ２４の場所を使用することによってエミュレートされてもよい。実施形態では、ゲスト命令４０、ネイティブ命令４６、およびエミュレータ・コード３２は、同じメモリに存在してもよく、または異なるメモリ・デバイス間で分散されてもよい。
【０２１８】
本明細書で使用される場合、ファームウェアは、例えば、プロセッサのマイクロコードまたはミリコードを含む。ファームウェアは、例えば、より高いレベルのマシン・コードの実装で使用されるハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。一実施形態では、ファームウェアは、例えば、典型的には、信頼できるソフトウェアを含むマイクロコード、または基礎となるハードウェアに固有のマイクロコードとして配信される独自のコードを含み、オペレーティング・システムのシステム・ハードウェアへのアクセスを制御する。
【０２１９】
１つまたは複数の態様は、クラウド・コンピューティングに関連し得る。
【０２２０】
本開示はクラウド・コンピューティングに関する詳細な説明を含むが、本明細書に記載の教示の実装は、クラウド・コンピューティング環境に限定されないことがあらかじめ理解される。むしろ、本発明の実施形態は、現在知られている、または将来開発される任意の他のタイプのコンピューティング環境と併せて実装することができる。
【０２２１】
クラウド・コンピューティングは、最小限の管理労力またはサービス・プロバイダとの対話で迅速にプロビジョニングおよび解放することができる、構成可能なコンピューティング・リソース（例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス）の共有プールへの簡便でオンデマンドのネットワーク・アクセスを可能にするための、サービス配信のモデルである。このクラウド・モデルは、少なくとも５つの特性、少なくとも３つのサービス・モデル、および少なくとも４つの展開モデルを含む可能性がある。
【０２２２】
特徴は以下の通りである。
【０２２３】
オンデマンド・セルフサービス：クラウドの利用者は、サービス・プロバイダとの間で人間の対話を必要とすることなく必要に応じて自動的に、サーバ時間およびネットワーク・ストレージなどのコンピューティング機能を一方的にプロビジョニングすることができる。
【０２２４】
広範囲なネットワーク・アクセス：ネットワーク中にわたって機能が利用可能であり、異種のシン・クライアント・プラットフォームまたはシック・クライアント・プラットフォーム（例えば、移動電話、ラップトップ、およびＰＤＡ）による使用を促進する標準的なメカニズムを介して機能にアクセスすることができる。
【０２２５】
リソース・プーリング：マルチテナント・モデルを使用して複数の利用者にサービスするために、プロバイダのコンピューティング・リソースがプールされ、要求に応じて異なる物理リソースおよび仮想リソースが動的に割当ておよび再割当てされる。利用者は通常、提供されるリソースの厳密な位置について制御することができないか、または知ることができないが、より高抽象化レベル（例えば、国、州、またはデータセンター）で位置を特定し得るという点で、位置の独立性がある。
【０２２６】
迅速な柔軟性：機能を迅速かつ柔軟にプロビジョニングし、場合によっては自動的にプロビジョニングして、素早くスケール・アウトし、迅速に解放して素早くスケール・インすることができる。利用者にとっては、多くの場合、プロビジョニングに利用可能な機能が無制限であるように見え、いつでも任意の数量で購入することができる。
【０２２７】
サービスの測定：クラウド・システムは、サービスのタイプ（例えば、ストレージ、処理、帯域幅、およびアクティブ・ユーザ・アカウント）に適した一定の抽象化レベルで計測機能を活用することによって、リソースの使用を自動的に制御および最適化する。リソースの利用状況を監視、制御、およびレポートすることができ、利用するサービスのプロバイダと利用者の両方に透明性を提供する。
【０２２８】
サービス・モデルは以下の通りである。
【０２２９】
ソフトウェア・アズ・ア・サービス（ＳａａＳ）：利用者に提供される機能は、クラウド・インフラストラクチャ上で実行されるプロバイダのアプリケーションを利用することである。アプリケーションは、ウェブ・ブラウザ（例えば、ウェブ・ベースの電子メール）などのシン・クライアント・インターフェースを介して様々なクライアント・デバイスからアクセスすることができる。限られたユーザ固有のアプリケーション構成設定は例外である可能性があるが、利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または個々のアプリケーション機能を含む基盤となるクラウド・インフラストラクチャを管理または制御しない。
【０２３０】
プラットフォーム・アズ・ア・サービス（ＰａａＳ）：利用者に提供される機能は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、利用者が作成または取得したアプリケーションを、クラウド・インフラストラクチャに展開することである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤となるクラウド・インフラストラクチャを管理または制御しないが、展開されたアプリケーションおよび場合によっては環境構成をホストしているアプリケーションを制御する。
【０２３１】
インフラストラクチャ・アズ・ア・サービス（ＩａａＳ）：利用者に提供される機能は、オペレーティング・システムおよびアプリケーションを含み得る任意のソフトウェアを利用者が展開し実行することができる、処理、ストレージ、ネットワーク、および他の基本的なコンピューティング・リソースをプロビジョニングすることである。利用者は、基盤となるクラウド・インフラストラクチャを管理または制御しないが、オペレーティング・システム、ストレージ、展開されたアプリケーションを制御し、場合によっては、選ばれたネットワーキング・コンポーネント（例えば、ホスト・ファイアウォール）を限定的に制御する。
【０２３２】
展開モデルは以下の通りである。
【０２３３】
プライベート・クラウド：クラウド・インフラストラクチャは、ある組織専用に運用される。これは、組織またはサード・パーティによって管理されてもよく、オンプレミスまたはオフプレミスに存在してもよい。
【０２３４】
コミュニティ・クラウド：クラウド・インフラストラクチャは複数の組織で共有され、共通の関心事項（例えば、ミッション、セキュリティ要件、ポリシー、およびコンプライアンスの考慮事項）を有する特定のコミュニティをサポートする。これは、組織またはサード・パーティによって管理されてもよく、オンプレミスまたはオフプレミスに存在してもよい。
【０２３５】
パブリック・クラウド：クラウド・インフラストラクチャは、一般大衆または大規模な企業団体が利用可能であり、クラウド・サービスを販売する組織によって所有される。
【０２３６】
ハイブリッド・クラウド：クラウド・インフラストラクチャは、固有のエンティティを保持するが、データとアプリケーションの移植を可能にする標準化された技術または独自の技術（例えば、クラウド間の負荷バランスを調整するためのクラウド・バースティング）によって互いに結合された、２つ以上のクラウド（プライベート、コミュニティ、またはパブリック）の合成である。
【０２３７】
クラウド・コンピューティング環境は、ステートレス、低結合、モジュール性、および意味的相互運用性に重点を置いたサービスである。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを備えるインフラストラクチャである。
【０２３８】
ここで図９を参照すると、例示的なクラウド・コンピューティング環境５０が示されている。図示のように、クラウド・コンピューティング環境５０は、例えば、携帯情報端末（ＰＤＡ：personal digital assistant）もしくは携帯電話５４Ａ、デスクトップ・コンピュータ５４Ｂ、ラップトップ・コンピュータ５４Ｃ、または自動車コンピュータ・システム５４Ｎ、あるいはその組合せなどのクラウド利用者によって使用されるローカル・コンピューティング・デバイスが通信することができる、１つまたは複数のクラウド・コンピューティング・ノード１０を備える。ノード１０は、互いに通信することができる。ノード１０は、本明細書で前述したプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、またはハイブリッド・クラウド、あるいはその組合せなどの１つまたは複数のネットワーク内で物理的にまたは仮想的にグループ化されてもよい（図示せず）。これにより、クラウド・コンピューティング環境５０は、クラウド利用者がローカル・コンピューティング・デバイス上でリソースを維持する必要のないサービスとしてインフラストラクチャ、プラットフォーム、またはソフトウェア、あるいはその組合せを提供することができる。図９に示すコンピューティング・デバイス５４Ａ〜Ｎのタイプは、例示のみを意図しており、コンピューティング・ノード１０およびクラウド・コンピューティング環境５０は、任意のタイプのネットワークまたはネットワーク・アドレス指定可能な接続（例えば、ウェブ・ブラウザを使用して）あるいはその両方を経由して任意のタイプのコンピュータ制御デバイスと通信することができると理解される。
【０２３９】
ここで図１０を参照すると、クラウド・コンピューティング環境５０（図９）によって提供される機能抽象化層のセットが示されている。図１０に示すコンポーネント、層、および機能は、例示のみを意図しており、本発明の実施形態はこれに限定されないことをあらかじめ理解されたい。図示のように、以下の層および対応する機能が提供される。
【０２４０】
ハードウェアおよびソフトウェア層６０は、ハードウェアおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例には、メインフレーム６１、ＲＩＳＣ（縮小命令セット・コンピュータ：reduced instruction set computer）アーキテクチャ・ベースのサーバ６２、サーバ６３、ブレード・サーバ６４、記憶デバイス６５、ならびにネットワークおよびネットワーキング・コンポーネント６６が含まれる。いくつかの実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア６７およびデータベース・ソフトウェア６８を含む。
【０２４１】
仮想化層７０は、抽象化層を提供し、この層から、仮想エンティティの以下の例、すなわち、仮想サーバ７１、仮想ストレージ７２、仮想プライベート・ネットワークを含む仮想ネットワーク７３、仮想アプリケーションおよびオペレーティング・システム７４、ならびに仮想クライアント７５が提供され得る。
【０２４２】
一例では、管理層８０は、以下に記載の機能を提供し得る。リソース・プロビジョニング８１は、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソースおよび他のリソースの動的調達を提供する。計測および価格設定８２は、クラウド・コンピューティング環境内でリソースが利用されるときのコスト追跡、およびこれらのリソースの消費に対する課金または請求を提供する。一例では、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含み得る。セキュリティは、クラウド利用者およびタスクの検証、ならびにデータおよび他のリソースの保護を提供する。ユーザ・ポータル８３は、利用者およびシステム管理者にクラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理８４は、必要なサービス・レベルが満たされるように、クラウド・コンピューティング・リソース割当ておよび管理を提供する。サービス・レベル合意（ＳＬＡ）計画および履行８５は、ＳＬＡに従って将来の要件が予想されるクラウド・コンピューティング・リソースの事前手配および調達を提供する。
【０２４３】
ワークロード層９０は、クラウド・コンピューティング環境が利用され得る機能性の例を提供する。この層から提供され得る作業負荷および機能の例には、マッピングおよびナビゲーション９１、ソフトウェア開発およびライフサイクル管理９２、仮想教室教育配信９３、データ解析処理９４、トランザクション処理９５、およびプログラム・コメント処理９６が含まれる。
【０２４４】
本発明は、任意の可能な技術的な詳細な統合レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体（または複数の媒体）を含み得る。
【０２４５】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持し記憶することができる、有形のデバイスであってもよい。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、またはこれらの任意の適切な組合せであり得るが、これらに限定されない。コンピュータ可読記憶媒体のさらなる具体例の非網羅的なリストには、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、消去可能プログラマブル読取専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、静的ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読取専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー（登録商標）・ディスク、パンチカードまたは命令が記憶されている溝の中の隆起構造などの機械的に符号化されるデバイス、および、これらの任意の適切な組合せが含まれる。本明細書で使用されるコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波路もしくは他の伝送媒体を介して伝播する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、またはワイヤを介して送信される電気信号など、それ自体が一時的な信号であるとは解釈されないものである。
【０２４６】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスに、またはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組合せを介して外部コンピュータまたは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備え得る。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に記憶するために、コンピュータ可読プログラム命令を転送する。
【０２４７】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用の構成データ、またはＳｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語もしくは類似のプログラミング言語などの手続型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードもしくはオブジェクト・コードであってもよい。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上でかつ部分的にリモート・コンピュータ上で、または完全にリモート・コンピュータもしくはサーバ上で実行され得る。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータへ接続され得るか、または、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータへの接続がなされ得る。いくつかの実施形態では、例えば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル論理アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実行するために、電子回路をパーソナル化するコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行してもよい。
【０２４８】
本発明の態様は、本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して本明細書に説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実施され得ることが理解されよう。
【０２４９】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施する手段を作成するように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってもよい。これらのコンピュータ可読プログラム命令は、記憶されている命令を有するコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作の態様を実施する命令を含む製造品を備えるように、コンピュータ、プログラム可能なデータ処理装置または他のデバイスあるいはその組合せを、特定の方式で機能するように指示し得るコンピュータ可読記憶媒体に記憶されてもよい。
【０２５０】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラム可能な装置、または他のデバイスで実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施するように、コンピュータによって実行されるプロセスを作出するべく、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスにロードされて、コンピュータ、他のプログラム可能な装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【０２５１】
図面のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を例示する。これに関して、フローチャートまたはブロック図における各ブロックは、指定された論理機能を実施するための１つまたは複数の実行可能命令を含むモジュール、セグメント、または命令の一部を表し得る。いくつかの代替実装形態では、ブロックに示される機能は、図面に示される順序と異なって行われてもよい。例えば、連続して示されている２つのブロックは、実際には、実質的に同時に実行されてもよく、または、これらブロックは、関連する機能性に応じて、場合によっては逆の順序で実行されてもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組合せは、指定された機能または動作を実行する、または専用ハードウェアとコンピュータ命令の組合せを実行する専用ハードウェアベースのシステムによって実施され得ることも留意されたい。
【０２５２】
上記に加えて、１つまたは複数の態様は、顧客環境の管理をもたらすサービス・プロバイダによって提供、提案、展開、管理、サービスなどされてもよい。例えば、サービス・プロバイダは、１つまたは複数の顧客のために１つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を作成、維持、サポートなどしてもよい。代わりに、サービス・プロバイダは、例として、サブスクリプション契約中または手数料契約中あるいはその両方の顧客から、支払いを受けてもよい。追加的にまたは代替的に、サービス・プロバイダは、１つまたは複数のサード・パーティへの広告コンテンツの売上から支払いを受けてもよい。
【０２５３】
一態様では、アプリケーションは、１つまたは複数の実施形態を実行するために展開されてもよい。一例として、アプリケーションの展開は、１つまたは複数の実施形態を実行するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０２５４】
さらなる態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャが展開されてもよく、コンピューティング・システムと組み合わされたコードは、１つまたは複数の実施形態を実行することができる。
【０２５５】
さらなる態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含むコンピューティング・インフラストラクチャを統合するためのプロセスが提供されてもよい。コンピュータ・システムはコンピュータ可読媒体を含み、コンピュータ媒体は１つまたは複数の実施形態を含む。コンピュータ・システムと組み合わされたコードは、１つまたは複数の実施形態を実行することができる。
【０２５６】
様々な実施形態が上記で説明されているが、これらは例にすぎない。例えば、１つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用されてもよい。さらに、他のタイプの訓練技法または分類器あるいはその両方が使用されてもよい。さらに、どのコメントを保持するか、または保持されたコメントをどのように符号化するか、あるいはその両方を決定するための他のメカニズムが使用されてもよい。多くの変形形態が可能である。
【０２５７】
さらに他のタイプのコンピューティング環境が役立つ場合があり、使用される可能性がある。一例として、システム・バスを介してメモリ素子に直接的または間接的に結合された少なくとも２つのプロセッサを含む、プログラム・コードの記憶または実行あるいはその両方のために適切なデータ処理システムが使用可能である。メモリ素子は、例えば、プログラム・コードの実際の実行中に利用されるローカル・メモリ、大容量記憶装置、および実行中に大容量記憶装置からコードを取得しなければならない回数を低減させるために少なくともいくつかのプログラム・コードの一時的なストレージを提供するキャッシュ・メモリを含む。
【０２５８】
入力／出力またはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブおよび他のメモリ媒体などを含むがこれらに限定されない）が、直接的にまたは介在するＩ／Ｏコントローラを介してシステムに結合され得る。データ処理システムが、介在するプライベート・ネットワークまたはパブリック・ネットワークを介して他のデータ処理システムまたはリモート・プリンタもしくは記憶デバイスに結合された状態になるように、ネットワーク・アダプタもまたシステムに結合され得る。モデム、ケーブル・モデム、およびＥｔｈｅｒｎｅｔ（登録商標）カードは、利用可能なタイプのネットワーク・アダプタのごく一部である。
【０２５９】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、限定することを意図していない。本明細書で使用される場合、単数形「ａ（１つの）」、「ａｎ（１つの）」および「ｔｈｅ（その）」は、文脈上特に明記されていない限り、複数形も含むことを意図している。また、「ｃｏｍｐｒｉｓｅｓ（備える）」または「ｃｏｍｐｒｉｓｉｎｇ（備えている）」あるいはその両方の用語は、本明細書で使用されるとき、記載されている特徴、整数、ステップ、動作、要素またはコンポーネントあるいはその組合せの存在を規定するが、１つまたは複数の他の特徴、整数、ステップ、動作、要素、コンポーネントまたはそのグループあるいはその組合せの存在または追加を排除しないことを理解されたい。
【０２６０】
以下の特許請求の範囲のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、動作および均等物は、もしある場合、具体的に特許請求されている他の特許請求されている要素と組み合わせて機能を実行するための任意の構造、材料または動作を含むことを意図している。１つまたは複数の実施形態の説明は、例示および説明を目的として提示されているが、網羅的であること、または、開示された形態に限定することを意図したものではない。当業者には多くの変更および変形態様が明らかであろう。様々な態様および実際の適用を最もよく説明するため、かつ企図された特定の用途に適した様々な変更を加えた様々な実施形態を当業者が理解できるようにするために、実施形態を選択し説明した。
【図１】
2021502632.tif 000005
【図２】
2021502632.tif 000006
【図３】
2021502632.tif 000007
【図４】
2021502632.tif 000008
【図５】
2021502632.tif 000009
【図６】
2021502632.tif 000010
【図７】
2021502632.tif 000011
【図８】
2021502632.tif 000012
【図９】
2021502632.tif 000013
【図１０】
2021502632.tif 000014
【手続補正書】
【提出日】令和2年6月12日(2020.6.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータの情報処理によりコンピューティング環境内の処理を容易にする方法であって、コンピュータが、
前記コンピューティング環境内の処理を最適化するための１つまたは複数の最適化を提供する際に翻訳コンポーネントにより使用される１つまたは複数の符号化されたコメントを、前記コンピューティング環境のプロセッサの前記翻訳コンポーネントによって取得するステップであって、前記１つまたは複数の符号化されたコメントは、前記翻訳コンポーネントに提供するべき情報を有すると判定されかつ前記１つまたは複数の符号化されたコメントを提供するために符号化されたコンピュータ・プログラムの１つまたは複数のコメントを含む、前記取得するステップと、
前記翻訳コンポーネントによって、前記１つまたは複数の符号化されたコメントを使用して前記コンピューティング環境内の処理を最適化するステップと
を実行する、方法。
【請求項２】
前記１つまたは複数の符号化されたコメントを使用して処理を最適化する前記ステップが、前記コンピュータ・プログラムのコードを機械可読コードに翻訳する際に前記１つまたは複数の符号化されたコメントを使用することを含む、請求項１に記載の方法。
【請求項３】
前記１つまたは複数の符号化されたコメントを使用して処理を最適化する前記ステップが、前記１つまたは複数の符号化されたコメントを使用して、処理を最適化するために前記コンピュータ・プログラムに加えられる１つまたは複数の変更を示すレポートを生成することを含む、請求項１に記載の方法。
【請求項４】
前記１つまたは複数の符号化されたコメントを取得する前記ステップが、前記１つまたは複数の符号化されたコメントを前記プロセッサの前処理コンポーネントから取得することを含み、前記方法は、
前記前処理コンポーネントによって、前記翻訳コンポーネントによる使用のために保持される前記コンピュータ・プログラムの前記１つまたは複数のコメントを決定するステップと、
前記前処理コンポーネントによって、前記１つまたは複数のコメントを符号化して前記１つまたは複数の符号化されたコメントを提供するステップと
をさらに含む、請求項１に記載の方法。
【請求項５】
前記符号化するステップが、前記１つまたは複数のコメントのコメントに対して、前記コメント用の最適化コードおよび１つまたは複数のパラメータを提供して、符号化されたコメントを提供することを含む、請求項４に記載の方法。
【請求項６】
前記１つまたは複数の符号化されたコメントの取得に基づいて構造体を構築するステップをさらに含み、前記構造体は複数のノードを含み、前記複数のノードは、前記コンピュータ・プログラムの１つまたは複数のプログラム・コンポーネントに対する１つまたは複数のノードと、前記１つまたは複数の符号化されたコメントに対する１つまたは複数のノードとを含む、請求項１に記載の方法。
【請求項７】
保持される前記１つまたは複数のコメントを決定する前記ステップは、前記１つまたは複数のコメントが処理の最適化に際し有用な情報を有すると予測されることを示す信頼度閾値を、前記１つまたは複数のコメントが満たしていると判定することを含む、請求項４に記載の方法。
【請求項８】
前記前処理コンポーネントが、前記翻訳コンポーネントの一部である、請求項４に記載の方法。
【請求項９】
前記前処理コンポーネントが、前記翻訳コンポーネントとは別個であるが前記翻訳コンポーネントに結合されている、請求項４に記載の方法。
【請求項１０】
コンピュータの情報処理によりコンピューティング環境内の処理を容易にするシステムであって、
前記コンピューティング環境内の処理を最適化するための１つまたは複数の最適化を提供する際に翻訳コンポーネントにより使用される１つまたは複数の符号化されたコメントを、前記コンピューティング環境のプロセッサの前記翻訳コンポーネントによって取得するステップであって、前記１つまたは複数の符号化されたコメントは、前記翻訳コンポーネントに提供するべき情報を有すると判定されかつ前記１つまたは複数の符号化されたコメントを提供するために符号化されたコンピュータ・プログラムの１つまたは複数のコメントを含む、前記取得する手段と、
前記翻訳コンポーネントによって、前記１つまたは複数の符号化されたコメントを使用して前記コンピューティング環境内の処理を最適化する手段と
を含む、システム。
【請求項１１】
前記１つまたは複数の符号化されたコメントを使用して処理を最適化する前記ステップが、前記コンピュータ・プログラムのコードを機械可読コードに翻訳する際に前記１つまたは複数の符号化されたコメントを使用する手段を含む、請求項１０に記載のシステム。
【請求項１２】
前記１つまたは複数の符号化されたコメントを取得する前記ステップが、前記１つまたは複数の符号化されたコメントを前記プロセッサの前処理コンポーネントから取得する手段を含み、前記システムは、
前記前処理コンポーネントによって、前記翻訳コンポーネントによる使用のために保持される前記コンピュータ・プログラムの前記１つまたは複数のコメントを決定する手段と、
前記前処理コンポーネントによって、前記１つまたは複数のコメントを符号化して前記１つまたは複数の符号化されたコメントを提供する手段と
をさらに含む、請求項１０に記載のシステム。
【請求項１３】
コンピュータ・システムに対して、請求項１から請求項９のいずれか１項に記載のステップを実行させる、コンピュータ・プログラム。
【請求項１４】
請求項１３に記載の前記コンピュータ・プログラムをコンピュータ可読記憶媒体に記録した、記憶媒体。
【国際調査報告】
2021502632.tif 000015
2021502632.tif 000016