(57)【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに結合されたハードウェア・アクセラレータと、
前記少なくとも１つのプロセッサに結合されたメモリと、
前記メモリ内に存在するコンピュータ・プログラムと、
前記メモリ内に存在し、関数が前記ハードウェア・アクセラレータに割り当てられる場合を決定する基準を規定するアクセラレータ・ポリシと、
前記メモリ内に存在し、前記少なくとも１つのプロセッサによって実行されるアクセラレータ作業割り当てメカニズムであって、前記コンピュータ・プログラム内の前記関数に関するプロセッサの実行の予測時間と、前記関数に関するハードウェア・アクセラレータの実行の予測時間とに基づき、前記アクセラレータ・ポリシ内の前記基準が満たされる場合、前記関数を前記ハードウェア・アクセラレータに実行時に割り当てる、前記アクセラレータ作業割り当てメカニズムと、
を含み、
前記アクセラレータ作業割り当てメカニズムは、前記コンピュータ・プログラムが実行されるとプロファイル・データを提供する複数の命令を前記コンピュータ・プログラムに挿入する、コード・インストルメンテーション・メカニズムを含み、前記関数に関する前記プロセッサの実行の予測時間と、前記関数に関する前記ハードウェア・アクセラレータの実行の予測時間とは、前記プロファイル・データから得られる、
装置。
【請求項２】
前記アクセラレータ・ポリシ内の前記基準は、関数の少なくとも１つの属性に基づく条件を含む、請求項１に記載の装置。
【請求項３】
前記少なくとも１つの属性は、ファイルのサイズを含む、請求項２に記載の装置。
【請求項４】
前記アクセラレータ作業割り当てメカニズムは、前記関数の前記ハードウェア・アクセラレータへの割り当てを最適化するために、前記プロファイル・データの分析を実行する、請求項１に記載の装置。
【請求項５】
前記アクセラレータ作業割り当てメカニズムは、前記関数に関する前記ハードウェア・アクセラレータの実行の予測時間が、前記関数に関する前記プロセッサの実行の予測時間よりも小さい場合、前記関数を前記ハードウェア・アクセラレータに割り当てる、請求項１に記載の装置。
【請求項６】
ハードウェア・アクセラレータと、コンピュータ・プログラムを実行する少なくとも１つのプロセッサとを含むコンピュータ・システムにおいて、前記ハードウェア・アクセラレータに作業を割り当てるよう少なくとも１つのプロセッサによって実行される、コンピュータで実装される方法であって、
関数が前記ハードウェア・アクセラレータに割り当てられる場合を決定する基準を規定するアクセラレータ・ポリシを読み出すステップと、
前記コンピュータ・プログラムを分析するステップと、
前記分析して得られた、前記コンピュータ・プログラム内の前記関数に関するプロセッサの実行の予測時間と、前記関数に関するハードウェア・アクセラレータの実行の予測時間とに基づき、前記アクセラレータ・ポリシ内の前記基準が満たされる場合、前記関数を前記ハードウェア・アクセラレータに実行時に割り当てるステップと、
を含み、
前記コンピュータ・プログラムが実行されるとプロファイル・データを提供する複数の命令を、前記コンピュータ・プログラムに挿入するステップと、
前記関数に関する前記プロセッサの実行の予測時間と、前記関数に関する前記ハードウェア・アクセラレータの実行の予測時間とを、前記プロファイル・データから得るステップと、
をさらに含む、
方法。
【請求項７】
前記アクセラレータ・ポリシ内の前記基準は、前記関数の少なくとも１つの属性に基づく条件を含む、請求項６に記載の方法。
【請求項８】
前記少なくとも１つの属性は、ファイルのサイズを含む、請求項７に記載の方法。
【請求項９】
前記関数の前記ハードウェア・アクセラレータへの割り当てを最適化するために、前記プロファイル・データの分析を実行するステップをさらに含み、前記分析を実行して、前記関数に関する前記プロセッサの実行の予測時間と、前記関数に関する前記ハードウェア・アクセラレータの実行の予測時間とを得る、請求項６に記載の方法。
【請求項１０】
前記関数に関する前記ハードウェア・アクセラレータの実行の予測時間が、前記関数に関する前記プロセッサの実行の予測時間よりも小さい場合、前記関数を前記ハードウェア・アクセラレータに割り当てるステップをさらに含む、請求項６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、全般的に、コンピュータ・システムに関し、特に、コンピュータ・システムにおけるハードウェア・アクセラレータの使用に関する。
【背景技術】
【０００２】
様々な種類のハードウェア・アクセラレータが、コンピュータ・システムにおいて特定の関数の実行を高速化するよう開発されてきた。例えば、グラフィック・アクセラレータは、当技術分野で周知であり、グラフィック関数がプロセッサから専用ハードウェア・アクセラレータにオフロードされることを可能にし、専用ハードウェア・アクセラレータは、プロセッサにかかると考えられる時間よりもはるかに短い時間でグラフィック関数を実行できる。浮動小数点プロセッサは、もう１つの種類のハードウェア・アクセラレータであり、これは浮動小数点演算をプロセッサがオフロードできるようにする。より最近の開発では、拡張可能マークアップ言語（ＸＭＬ：ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）を処理するアクセラレータ、圧縮および解凍を実行するアクセラレータ、ならびに暗号化および復号を実行するアクセラレータを含む、他の種類のハードウェア・アクセラレータが作り出されてきた。本願明細書で使用される「ハードウェア・アクセラレータ」という用語は、実行する関数をプロセッサが割り当てることができる任意のハードウェアに適用される。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
従来技術では、プログラマは、ハードウェア・アクセラレータがシステムに存在するであろうことを認識し、続いて、コード内のどの関数をハードウェア・アクセラレータに割り当てるかを決める必要があった。図２を参照する。従来技術の方法２００は、当該の手法を示す。プログラマが、コンピュータ・プログラムを書く（ステップ２１０）。プログラマは、どの関数をハードウェア・アクセラレータに割り当てるか決める（ステップ２２０）。続いて、プログラマは、関数をハードウェア・アクセラレータに割り当てるコードを書く（ステップ２３０）。したがって、従来技術では、どの関数がハードウェア・アクセラレータによって実行されるかに関する判断はすべて、人間であるプログラマによって、プログラマがコードを書くときに行われる。結果として、柔軟性がなくハードウェア・アクセラレータを十分に活用することができないコードが生じる。ハードウェア・アクセラレータに割り当てる関数を実行時に動的に決定する方法がなくては、ハードウェア・アクセラレータを有するコンピュータ・システムのパフォーマンスは最適化されない。
【課題を解決するための手段】
【０００４】
アクセラレータ作業割り当てメカニズム（ａｃｃｅｌｅｒａｔｏｒ  ｗｏｒｋ  ａｌｌｏｃａｔｉｏｎ  ｍｅｃｈａｎｉｓｍ）は、どの関数をハードウェア・アクセラレータに割り当てるかを、定義済みのアクセラレータ・ポリシ（ａｃｃｅｌｅｒａｔｏｒ  ｐｏｌｉｃｙ）に基づき、かつ実行時に実行される分析に基づき、実行時に決定する。この分析には、アクセラレータ・ポリシを読み出すこと、および特定の関数がアクセラレータ・ポリシを満たすかどうかを決定することが含まれる。アクセラレータ・ポリシが満たされれば、その関数はハードウェア・アクセラレータに割り当てられる。満たされなければ、その関数はプロセッサに割り当てられる。
【０００５】
添付の図面に示されているとおりの、以下のより詳しい記載から、前述の特徴および利点ならびにその他の特徴および利点が明らかになる。
【図面の簡単な説明】
【０００６】
【図１】ハードウェア・アクセラレータと、コンピュータ・プログラム内のどの関数をハードウェア・アクセラレータに割り当てるかを実行時に決定するアクセラレータ作業割り当てメカニズムとを含む装置のブロック図である。
【図２】コンピュータ・プログラム内のどの関数がハードウェア・アクセラレータに割り当てられるかをプログラミング時に決定する従来技術の方法のフロー図である。
【図３】コンピュータ・プログラム内の関数を、実行時にハードウェア・アクセラレータに割り当てる方法のフロー図である。
【図４】第１の見本のアクセラレータ・ポリシの表である。
【図５】第２の見本のアクセラレータ・ポリシの表である。
【図６】予測される実行時間に基づいて関数をハードウェア・アクセラレータに割り当てる方法のフロー図である。
【図７】コンピュータ・プログラムが実行されているときにプロファイル・データを集める方法のフロー図である。
【図８】プロセッサ上での特定の関数の実行時間を示す表である。
【図９】ハードウェア・アクセラレータ上での特定の関数の実行時間を示す表である。
【図１０】特定の関数による作用を受けるデータのサイズに応じた、その関数のプロセッサ上での実行時間を示す表である。
【図１１】特定の関数による作用を受けるデータのサイズに応じた、その関数のハードウェア・アクセラレータ上での実行時間を示す表である。
【図１２】どの関数を実行時にハードウェア・アクセラレータに割り当てるかを決定するために使用され得るプロファイル・データの見本のログである。
【発明を実施するための形態】
【０００７】
本開示は、添付の図面と関連して記載され、図面では、同様の表示は、同様の構成要素を示す。
【０００８】
本願明細書の特許請求の範囲および開示は、コンピュータ・プログラム内のどの関数をハードウェア・アクセラレータに割り当てるかを実行時に決定するアクセラレータ作業割り当てメカニズムを提供する。分析には、アクセラレータ・ポリシを読み出すこと、および特定の関数がアクセラレータ・ポリシを満たすかどうかを決定することが含まれる。アクセラレータ・ポリシが満たされれば、その関数はハードウェア・アクセラレータに割り当てられる。満たされなければ、その関数はプロセッサに割り当てられる。
【０００９】
図１を参照する。コンピュータ・システム１００は、ハードウェア・アクセラレータおよびアクセラレータ作業割り当てメカニズムを含むコンピュータ・システムの適切な一実装である。コンピュータ・システム１００は、ＩＢＭ（ＩＢＭ社の登録商標）ｅＳｅｒｖｅｒ  Ｓｙｓｔｅｍ  ｉ（ＩＢＭ社の登録商標）コンピュータ・システムである。なお、当業者には当然のことながら、コンピュータ・システムが複雑なマルチ・ユーザ・コンピューティング装置であるか、単一ユーザ・ワークステーションであるか、または埋め込み制御システムであるかにかかわらず、本願明細書の開示は任意のコンピュータ・システムに等しく当てはまる。図１に示されているように、コンピュータ・システム１００は、１つ以上のプロセッサ１１０、ハードウェア・アクセラレータ１１２、メイン・メモリ１２０、大容量記憶インターフェース１３０、ディスプレイ・インターフェース１４０、およびネットワーク・インターフェース１５０を含む。これらのシステム・コンポーネントは、システム・バス１６０を利用して相互接続されている。大容量記憶インターフェース１３０は、直接アクセス記憶デバイス１５５などの大容量記憶デバイスをコンピュータ・システム１００に接続するために使用される。直接アクセス記憶デバイス１５５の具体的な種類の１つは、読み出し可能かつ書き込み可能なＣＤ−ＲＷドライブであり、これは、ＣＤ−ＲＷ１９５に対するデータの記憶およびデータの読み出しを行うとよい。
【００１０】
メイン・メモリ１２０は、データ１２１、オペレーティング・システム１２２、コンピュータ・プログラム１２３、およびアクセラレータ作業割り当てメカニズム１２４を含むことが好ましい。データ１２１は、コンピュータ・システム１００の任意のプログラムの入力または出力となる任意のデータを表す。オペレーティング・システム１２２は、マルチタスク・オペレーティング・システムである。コンピュータ・プログラム１２３は、ハードウェア・アクセラレータ１１２に割り当てられることができるであろう関数を有するとよい任意のコンピュータ・プログラムを代表する。アクセラレータ作業割り当てメカニズム１２４は、コンピュータ・プログラム１２３内のどの関数をハードウェア・アクセラレータ１１２に割り当てるかを実行時に決定する。アクセラレータ作業割り当てメカニズム１２４には、アクセラレータ・ポリシ１２５、コード・インストルメンテーション・メカニズム（ｃｏｄｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｍｅｃｈａｎｉｓｍ）１２６、および実行時分析メカニズム（ｒｕｎｔｉｍｅ  ａｎａｌｙｓｉｓ  ｍｅｃｈａｎｉｓｍ）１２７が含まれる。アクセラレータ・ポリシ１２５は、コンピュータ・プログラム１２３内の関数がハードウェア・アクセラレータ１１２に割り当てられる場合を決定する基準を規定する。コード・インストルメンテーション・メカニズム１２６は、実行時データを収集できるように、フックとして知られる命令をコンピュータ・プログラム１２３に挿入する。その結果、この実行時データが、アクセラレータ作業割り当てメカニズムによって、コンピュータ・プログラム１２３内の関数をハードウェア・アクセラレータ１１２に割り当てる場合の決定に使用され得る。実行時分析メカニズム１２７は、分析を実行時に実行し、これによって、アクセラレータ作業割り当てメカニズム１２４が、コンピュータ・プログラム１２３内の関数をハードウェア・アクセラレータ１１２に割り当てる場合を決定できるようになる。実行時分析メカニズム１２７は、属性分析メカニズム（ａｔｔｒｉｂｕｔｅ  ａｎａｌｙｓｉｓ  ｍｅｃｈａｎｉｓｍ）１２８を含み、これは、関数がハードウェア・アクセラレータ１１２に割り当てられるかどうかを決定する際に属性が考慮に入れられるよう、関数の属性を分析する。属性分析メカニズム１２８によって分析される属性には、例えば、関数が呼び出されるときに渡されるパラメータが含まれ得る。属性分析メカニズムが考慮に入れてもよい属性の適切な一例は、関数による作用を受けるデータのサイズである。
【００１１】
コンピュータ・システム１００は、周知の仮想アドレス指定メカニズムを利用し、このメカニズムは、コンピュータ・システム１００のプログラムが、メイン・メモリ１２０およびＤＡＳＤ（ｄｉｒｅｃｔ  ａｃｃｅｓｓ  ｓｔｏｒａｇｅ  ｄｅｖｉｃｅ：直接アクセス記憶デバイス）デバイス１５５などの複数のより小さな記憶エンティティへのアクセスの代わりに、単一の大きな記憶エンティティにのみアクセスできるかのように動くことを可能にする。したがって、データ１２１、オペレーティング・システム１２２、コンピュータ・プログラム１２３、およびアクセラレータ作業割り当てメカニズム１２４は、メイン・メモリ１２０に存在するよう示されているが、当業者には当然のことながら、これらの項目は、必ずしも同時に、すべて完全にメイン・メモリ１２０に含まれるとは限らない。なお、さらに、本願明細書において「メモリ」という用語は、コンピュータ・システム１００の仮想メモリ全体を包括的に指すように使用されており、コンピュータ・システム１００に結合された他のコンピュータ・システムの仮想メモリを含み得る。
【００１２】
プロセッサ１１０は、１つ以上のマイクロプロセッサもしくは集積回路またはその両方から構成されるとよい。プロセッサ１１０は、メイン・メモリ１２０に記憶されているプログラム命令を実行する。メイン・メモリ１２０は、プロセッサ１１０がアクセスしてよいプログラムおよびデータを記憶する。コンピュータ・システム１００が起動すると、プロセッサ１１０は最初に、オペレーティング・システム１２２を構成するプログラム命令を実行する。さらにプロセッサ１１０は、コンピュータ・プログラム１２３およびアクセラレータ作業割り当てメカニズム１２４を実行する。
【００１３】
コンピュータ・システム１００は、単一のプロセッサおよび単一のシステム・バスのみを含むよう示されているが、当業者には当然のことながら、アクセラレータ作業割り当てメカニズムは、複数のプロセッサもしくは複数のバスまたはその両方を有するコンピュータ・システムを使用して実践されてもよい。さらに、使用されるインターフェースはそれぞれ、別個の、完全にプログラムされたマイクロプロセッサを含むことが好ましく、これらが、プロセッサ１１０から計算集中型の処理をオフロードするために使用される。なお、当業者には当然のことながら、これらの機能は、Ｉ／Ｏアダプタを使用しても実行され得る。
【００１４】
ディスプレイ・インターフェース１４０は、１つ以上のディスプレイ１６５をコンピュータ・システム１００に直接接続するよう使用される。これらのディスプレイ１６５は、非インテリジェント（すなわちダム）ターミナルであっても、または完全にプログラム可能なワークステーションであってもよく、これらは、システム管理者およびユーザに、コンピュータ・システム１００と通信する能力を提供するために使用される。ただし、ディスプレイ・インターフェース１４０は、１つ以上のディスプレイ１６５との通信をサポートするよう提供されるが、ユーザおよび他のプロセスとの必要な対話がすべてネットワーク・インターフェース１５０を介して生じることもあり得るため、コンピュータ・システム１００は、ディスプレイ１６５を必ずしも必要としない。
【００１５】
ネットワーク・インターフェース１５０は、コンピュータ・システム１００を、ネットワーク１７０を介して他のコンピュータ・システムまたはワークステーション１７５に接続するために使用される。ネットワーク・インターフェース１５０は、ネットワーク１７０が現在のアナログもしくはデジタルまたはその両方の技術を含むか、または将来の何らかのネットワーキング・メカニズムを介するかにかかわらず、電子デバイスを相互接続する任意の適切な方法を広く表す。ネットワーク・インターフェース１５０は、ネットワーク１７０上での通信を可能にするハードウェアおよびソフトウェアの組み合わせを含むことが好ましい。ネットワーク・インターフェース１５０のソフトウェアは、適切なネットワーク・プロトコルを使用して、ネットワーク１７０を介した他のワークステーション１７５との通信を管理する、通信マネージャを含むことが好ましい。多数の異なるネットワーク・プロトコルが、ネットワークを実装するために使用されることが可能である。これらプロトコルは、コンピュータがネットワークで通信できるようにする専用コンピュータ・プログラムである。ＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ：伝送制御プロトコル／インターネット・プロトコル）が、ネットワーク・インターフェース１５０内で通信マネージャによって使用されてもよい適切なネットワーク・プロトコルの例である。
【００１６】
当業者であれば当然のことであるが、本発明の側面は、システム、方法またはコンピュータ・プログラム製品として具現化され得る。したがって、本発明の側面は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、または本願明細書においてすべて概して「回路」、「モジュール」もしくは「システム」と呼ばれ得る、ソフトウェアおよびハードウェアの側面を兼ね備えた実施形態の形をとってもよい。さらに、本発明の側面は、コンピュータ可読プログラム・コードが具現化された１つ以上のコンピュータ可読媒体（単数または複数）において具現化されたコンピュータ・プログラム製品の形をとることもできる。
【００１７】
１つ以上のコンピュータ可読媒体（単数または複数）の任意の組み合わせが利用され得る。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体とされ得る。コンピュータ可読記憶媒体は、例えば、限定はされないが、電子、磁気、光学、電磁気、赤外線、もしくは半導体システム、装置、もしくはデバイス、または前述のものの任意の適切な組み合わせとすることもできる。コンピュータ可読記憶媒体のより具体的な例（包括的でないリスト）には、１つ以上のワイヤを有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み出し専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）またはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光学式記憶デバイス、磁気記憶デバイスまたは前述のものの任意の適切な組み合わせが含まれるであろう。この文書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置もしくはデバイスによって、またはそれに関連して使用されるプログラムを含むこと、または記憶することができる任意の有形の媒体であればよい。
【００１８】
コンピュータ可読信号媒体は、例えば、ベースバンドに、または搬送波の一部として、伝播データ信号において具現化されたコンピュータ可読プログラム・コードを伴う伝播データ信号を含み得る。そのような伝播信号は、電磁気、光学、またはその任意の適切な組み合わせを含むがこれらに限定はされない、様々な形のいずれかをとり得る。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体でなく、命令実行システム、装置もしくはデバイスによって、またはそれに関連して使用されるプログラムを伝達すること、伝播させること、または搬送することができる、任意のコンピュータ可読媒体としてよい。
【００１９】
コンピュータ可読媒体上に具現化されたプログラム・コードは、無線、有線、光ファイバ・ケーブル、ＲＦなど、または前述のものの任意の適切な組み合わせを含むがこれらに限定はされない、任意の適切な媒体を使用して送られてもよい。
【００２０】
本発明の側面の動作を実行するコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋または同様のものなどのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語もしくは同様のプログラミング言語などの従来の手続きプログラミング言語を含む、１つ以上のプログラミング言語の任意の組み合わせで書かれていてよい。プログラム・コードは、スタンド・アロン・ソフトウェア・パッケージとして、完全にユーザのコンピュータ上で実行されること、部分的にユーザのコンピュータ上で実行されること、または部分的にユーザのコンピュータ上で、かつ部分的にリモート・コンピュータ上で実行されること、または完全にリモート・コンピュータもしくはサーバ上で実行されることもできる。後者のシナリオでは、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、もしくは広域ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）を含む任意の種類のネットワークを介してリモート・コンピュータがユーザのコンピュータに接続されてもよく、または、外部コンピュータに接続されてもよい（例えば、インターネット・サービス・プロバイダを使用しインターネットを介して）。
【００２１】
本発明の側面について、本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図またはその両方を参照して本願明細書に記載する。当然のことながら、フローチャート図もしくはブロック図またはその両方の各ブロック、およびフローチャート図もしくはブロック図またはその両方の複数ブロックの組み合わせは、コンピュータ・プログラム命令により実装可能である。マシンを作り出すよう、当該コンピュータ・プログラム命令が、汎用コンピュータ、専用コンピュータ、またはその他のプログラム可能データ処理装置のプロセッサに提供されて、この命令が、コンピュータまたはその他のプログラム可能データ処理装置のプロセッサを用いて実行されて、フローチャートもしくはブロック図またはその両方のブロックもしくは複数ブロックにおいて指定された関数／動作を実装する手段をもたらすようにすることもできる。
【００２２】
さらに、特定の形で機能するようコンピュータ、その他のプログラム可能データ処理装置、またはその他のデバイスに指示することができる当該コンピュータ・プログラム命令は、コンピュータ可読媒体に記憶されて、コンピュータ可読媒体に記憶されたこの命令が、フローチャートもしくはブロック図またはその両方のブロックもしくは複数ブロックにおいて指定された関数／動作を実装する命令を含む製品を作り出すようにすることもできる。
【００２３】
さらに、コンピュータ・プログラム命令は、コンピュータ、その他のプログラム可能データ処理装置、またはその他のデバイスにロードされて、コンピュータ、その他のプログラム可能装置、またはその他のデバイス上で一連の動作ステップが実行されるようにしてコンピュータで実装されるプロセスを作り出し、コンピュータまたはその他のプログラム可能装置上で実行される命令が、フローチャートもしくはブロック図またはその両方のブロックもしくは複数ブロックにおいて指定された関数／動作を実装するためのプロセスを提供するようにすることもできる。
【００２４】
上記の背景技術の欄で説明したように、図２の従来技術の方法２００は、コンピュータ・プログラムをプログラミングする間に、どの関数がハードウェア・アクセラレータに割り当てられるかに関して判断を行うことを、プログラマに要求する。これは、プログラマの相当な知識および経験を要する。さらに、実行時の条件に従った柔軟性がない。例えば、プログラマが、ＸＭＬハードウェア・アクセラレータがＸＭＬファイルの「ｌｏａｄ」動作を常に行うことができるようにすることを決めると仮定する。これは、大きなＸＭＬファイルがロードされる場合には時間を節約し得るが、ｌｏａｄ動作の大部分が、プロセッサが処理した方がより効率がよいであろう小さなＸＭＬファイルに関するものであれば、このプログラマによる選択は、実際のところ実行時のパフォーマンスを損なうことがあり得る。さらに、どの関数がハードウェア・アクセラレータに割り当てられるかをプログラム内で定義することは、実行時の条件に従って調整する柔軟性をまったく与えない。こうした問題が、本願明細書において詳細に説明されるように、関数をハードウェア・アクセラレータに実行時に割り当てることによって解決される。
【００２５】
図３を参照する。方法３００は、図１に示されているアクセラレータ作業割り当てメカニズム１２４によって実行されることが好ましい。方法３００は、アクセラレータ・ポリシを読み出すことによって開始する（ステップ３１０）。アクセラレータ・ポリシは、プログラマまたはユーザによって定義されることが好ましく、関数をハードウェア・アクセラレータに割り当てる場合をアクセラレータ作業割り当てメカニズム１２４が実行時に決められるようにする基準を規定する。コンピュータ・プログラムが分析される（ステップ３２０）。次に、関数が選択される（ステップ３３０）。関数がアクセラレータ・ポリシを満たすと（ステップ３４０＝はい）、関数はハードウェア・アクセラレータに割り当てられる（ステップ３５０）。選択された関数がアクセラレータ・ポリシを満たさなければ（ステップ３４０＝いいえ）、関数はプロセッサに割り当てられる（ステップ３６０）。最も好適な実装では、ステップ３６０において関数をプロセッサに割り当てるために、特定のアクションが生じる必要はない。すべての関数は、デフォルトでプロセッサによって実行されるようになっているため、関数がハードウェア・アクセラレータに割り当てられなければ、これはその関数がプロセッサによって実行されるということを意味し、つまり単に関数をハードウェア・アクセラレータに割り当てないことによって、関数がプロセッサに割り当てられるということである（ステップ３６０）。なお、ステップ３３０〜３６０は、ハードウェア・アクセラレータに割り当てられる可能性がある、コンピュータ・プログラム内の各関数に関して繰り返されることができるであろう。
【００２６】
図４を参照する。第１の見本のアクセラレータ・ポリシ４００は、どの関数をハードウェア・アクセラレータに割り当てるかを規定する。本願明細書の例では、ハードウェア・アクセラレータがＸＭＬアクセラレータであると仮定する。図４のアクセラレータ・ポリシ４００は、すべてのＸＭＬ  ｌｏａｄ関数をＸＭＬアクセラレータに割り当て、ＸＭＬ  ｐａｒｓｅおよびＸＭＬ  ｓｅｌｅｃｔＮｏｄｅｓ関数はＸＭＬアクセラレータに割り当てないよう規定する。アクセラレータ・ポリシの変更は、プログラム・コードを変更することなく行われ得るため、この単純な見本のアクセラレータ・ポリシ４００は、コードにおいてハードウェア・アクセラレータへの割り当てをハード・コーディングする従来技術の方法に勝る利点を提供する。これは、コンピュータ・プログラムのユーザが、コンピュータ・プログラムを変更および再コンパイルする必要なく、単にアクセラレータ・ポリシ４００を変更することによってコンピュータ・プログラムの機能を変更することを可能にする。
【００２７】
図５を参照する。第２の見本のアクセラレータ・ポリシ５００は、実行時にどの関数をハードウェア・アクセラレータに割り当てるかの決定において、より大きな柔軟性を可能にする動的な式を含む。したがって、ＸＭＬ  ｌｏａｄ関数については、この関数は、ロードされるＸＭＬファイルのサイズが１００，０００バイトよりも大きい場合、ＸＭＬアクセラレータに割り当てられる。ロードされるＸＭＬファイルのサイズが１００，０００バイト以下の場合、ｌｏａｄ関数は、プロセッサに割り当てられる。同様の方法で、ＸＭＬ  ｓｅｌｅｃｔＮｏｄｅｓ関数は、文書内のノードの数が２０を超える場合ＸＭＬアクセラレータに割り当てられ、選択されるノードの数が２０以下の場合プロセッサに割り当てられる。ＸＭＬ  ｐａｒｓｅ関数は、ハードウェア・アクセラレータに割り当てられない。図５に示されている論理式は、単純であるが、本願明細書の概念は、基準がどれほど単純または複雑となり得るかにかかわらず、アクセラレータ・ポリシにおいて規定され得るであろう任意の適切な基準に適用される。
【００２８】
図６を参照する。方法６００は、図３の方法３００の範囲内の、特定の一方法の、適切な１つの実装である。最初に、プロセッサが関数を実行する時間が決定される（ステップ６１０）。次に、ハードウェア・アクセラレータが同じ関数を実行する時間が決定される（ステップ６２０）。アクセラレータの時間がプロセッサの時間よりも短く（ステップ６３０＝はい）、より重要な関数を待つ必要がなければ（ステップ６３２＝いいえ）、この関数は、実行時にハードウェア・アクセラレータに割り当てられる（ステップ６４０）。アクセラレータの時間がプロセッサの時間よりも短くなければ（ステップ６３０＝いいえ）、この関数は、実行時にプロセッサに割り当てられる（ステップ６５０）。アクセラレータの時間がプロセッサの時間よりも短い（ステップ６３０＝はい）が、より重要な関数を待つ必要があれば（ステップ６３２＝はい）、この関数はプロセッサに割り当てられる（ステップ６５０）。「より重要な関数」の概念は、図１２を参照して下記に記載する。なお、ステップ６１０および６２０における時間予測は、任意の適切な方法で得られればよい。１つの方法は、プロセッサの数、プロセッサ速度、メモリ・サイズなどのシステム・リソースに基づき時間を予測することである。もう１つの方法は、下記でより詳しく説明するように、コードがインストルメントされているときの実際の実行時間に基づき、時間を予測することである。最も好ましい実装では、ハードウェア・アクセラレータがその関数を実行する時間の予測は、プロセッサがその作業をハードウェア・アクセラレータにオフロードするのにかかる追加の時間（オーバーヘッド）を含む。
【００２９】
図７を参照する。方法７００は、コンピュータ・プログラムをインストルメントすることによって開始する（ステップ７１０）。コンピュータ・プログラムをインストルメントするというのは、コンピュータ・プログラムが実行されているときにプロファイル・データを収集することを可能にするフックと呼ばれる命令を、コンピュータ・プログラムに挿入することを意味する。したがって、各ＸＭＬ  ｌｏａｄ命令を実行するのにかかる時間を決定できるように、すべてのＸＭＬ  ｌｏａｄ命令がインストルメントされることが可能であろう。コンピュータ・プログラムがインストルメントされると、コンピュータ・プログラムが実行される（ステップ７２０）。コンピュータ・プログラムの実行から生成されるプロファイル・データが、コンピュータ・プログラムが実行されているときに集められる（ステップ７３０）。プロファイル・データは、インストルメントされた各関数の実行にかかった時間、インストルメントされた各関数を実行する平均時間、インストルメントされた各関数を実行する時間の範囲、各関数の属性などを含む、任意の適切な情報を含むことができるであろう。続いて、関数の実行時間が、ステップ６１０および６２０において、プロファイル・データに基づき予測され得る。なお、プロファイリングは、全部の関数がプロセッサによって実行されるよう強制するコードを用いた１つの実行、および一部または全部の関数がハードウェア・アクセラレータに実行されるようにするコードを用いた第２の実行を含むことができるであろう。別の方法では、プロファイリングは、コンピュータ・プログラムがどのようにコードおよびインストルメントされているかに従って、一部の関数がプロセッサによって実行され、他の関数がハードウェア・アクセラレータによって実行される、単一の実行を含むことができるであろう。
【００３０】
実行時間の予測の例が、図８および９に示されている。図８を参照する。ＸＭＬ  ｌｏａｄ関数をプロセッサによって実行する時間は、１．０秒である。ＸＭＬ  ｐａｒｓｅ関数をプロセッサによって実行する時間は、０．３６秒である。ＸＭＬ  ｓｅｌｅｃｔＮｏｄｅｓ関数をプロセッサによって実行する時間は、０．７４秒である。これらの予測された実行時間は、インストルメントされたコンピュータ・プログラムが実行されているときに集められたプロファイル・データから得られることが好ましい。図９を参照する。ＸＭＬ  ｌｏａｄ関数をハードウェア・アクセラレータによって実行する時間は、０．５２秒である。ＸＭＬ  ｐａｒｓｅ関数をハードウェア・アクセラレータによって実行する時間は、０．２３秒である。ＸＭＬ  ｓｅｌｅｃｔＮｏｄｅｓ関数をハードウェア・アクセラレータによって実行する時間は、０．８０秒である。
【００３１】
以下、図８および９の時間予測を、図６の方法６００とともに使用する。ステップ６１０での予測は、図８の表８００に示されている。ステップ６２０での予測は、図９の表９００に示されている。ＸＭＬ  ｌｏａｄ関数については、０．５２秒というアクセラレータの時間は、１．０秒というプロセッサの時間よりも短い（ステップ６３０＝はい）ため、ＸＭＬ  ｌｏａｄ関数は、ハードウェア・アクセラレータに割り当てられる（ステップ６４０）。ＸＭＬ  ｐａｒｓｅ関数については、０．２３秒というアクセラレータの時間は、０．３６秒というプロセッサの時間よりも短い（ステップ６３０＝はい）ため、ＸＭＬ  ｐａｒｓｅ関数は、ハードウェア・アクセラレータに割り当てられる（ステップ６４０）。ＸＭＬ  ｓｅｌｅｃｔＮｏｄｅｓ関数については、０．８０秒というアクセラレータの時間は、０．７４秒というプロセッサの時間よりも長い（ステップ６３０＝いいえ）ため、ＸＭＬ  ｓｅｌｅｃｔＮｏｄｅｓ関数は、プロセッサに割り当てられる（ステップ６５０）。ｓｅｌｅｃｔＮｏｄｅｓ関数は、なぜプロセッサでの予測実行時間よりもハードウェア・アクセラレータでの予測実行時間が長くなるのか、疑問に思うかもしれない。関数をハードウェア・アクセラレータに割り当てるには、いくらかのシステム・オーバーヘットが必要であり、したがって、ほぼ同じ時間で実行できる関数に関しては、関数をハードウェア・アクセラレータに割り当ててデータをハードウェア・アクセラレータから受け取るオーバーヘッドが原因で、ハードウェア・アクセラレータの全般的な実行時間の方が長くなることがあり得るであろう。さらに、ハードウェア・アクセラレータは、一部の関数に関してはうまく実行しないこともある。結果として、時間予測は、ハードウェア・アクセラレータに作業を割り当てる場合と、ハードウェア・アクセラレータに作業を割り当てない場合との両方を決定することができるようにする。この単純な例では、図９の表９００にある予測実行時間は、関数をハードウェア・アクセラレータに割り当ててデータをハードウェア・アクセラレータから受け取るためのシステム・オーバーヘッドを含むと仮定する。
【００３２】
その他の属性が、関数をハードウェア・アクセラレータに割り当てるか否かの判断を行うときに考慮されることが可能であろう。例えば、ＸＭＬアクセラレータについては、処理されるＸＭＬファイルのサイズが、ＸＭＬ関数の実行に必要な時間に大きく影響することもある。図１０は、処理されるＸＭＬファイルのサイズの関数としてのプロセッサ上でのＸＭＬ  ｌｏａｄおよびｐａｒｓｅ関数の実行時間と、処理されるノードの数の関数としてのプロセッサ上でのＸＭＬ  ｓｅｌｅｃｔＮｏｄｅｓ関数の実行時間との予測を示す表１０００を示す。同様に、図１１は、処理されるＸＭＬファイルのサイズの関数としてのハードウェア・アクセラレータ上でのＸＭＬ  ｌｏａｄおよびｐａｒｓｅ関数の実行時間と、処理されるノードの数の関数としてのハードウェア・アクセラレータ上でのＸＭＬ  ｓｅｌｅｃｔＮｏｄｅｓ関数の実行時間との予測を示す。関数の属性に従い強化されたこれらの予測を用いると、アクセラレータ作業割り当てメカニズムは、関数をハードウェア・アクセラレータに実行時に割り当てる場合に関して、よりインテリジェントな判断を行うことができる。
【００３３】
図１２を参照する。表１２００は、実行時ログの形の見本のプロファイル・データを示す。表１２００は、関数と、関数が開始されたときのタイムスタンプと、関数の実行にかかった時間とのリストを含む。このデータは、ハードウェア・アクセラレータの利用をさらに最適化するために、アクセラレータ作業割り当てメカニズムによって使用されることが可能であろう。例えば、図１２に示されている見本のプロファイル・データから、ＸＭＬ  ｌｏａｄ命令の後にはＸＭＬ  ｐａｒｓｅ命令が続くことが多いということがわかる。アクセラレータ作業割り当てメカニズムは、表１２００の実行時ログのプロファイル・データを分析して、どの関数をハードウェア・アクセラレータに割り当てるかに関して判断を行うことができるであろう。例えば、図６の方法６００を使用すると、ｌｏａｄ関数は、常にハードウェア・アクセラレータに割り当てられるであろう。ただし、開始タイムスタンプは、ハードウェア・アクセラレータが先行するｌｏａｄ命令を終えることができる前にｐａｒｓｅ関数が生じるようになっている。アクセラレータ作業割り当てメカニズムは、実行時ログに基づき、ハードウェア・アクセラレータがｐａｒｓｅ関数の実行に、待ち時間なしで利用可能となるよう、プロセッサを用いてｌｏａｄ関数を処理する方がより有益と考えられると決定することができるであろう。この意味で、ｐａｒｓｅ関数は、ｌｏａｄ関数よりも、ハードウェア・アクセラレータに割り当てる、より重要な関数となるであろう。結果として、ｌｏａｄ関数はプロセッサに割り当てられることになり、その一方で、より重要なｐａｒｓｅ関数はハードウェア・アクセラレータに割り当てられる。別の例では、実行時ログは、多数の異なるスレッドからのコールの頻度を明らかにしてもよく、その結果、通常はハードウェア・アクセラレータに割り当てられると考えられる関数をより利益が大きい別の関数のためにスキップすることにおいて、はるかに大きな利益がもたらされる。したがって、アクセラレータ作業割り当てメカニズムは、コンピュータ・プログラムの関数をハードウェア・アクセラレータに割り当てる場合の判断に影響する、プロファイル・データにおける１つ以上のパターンを検出するとよい。本願明細書の本開示および特許請求の範囲は、コンピュータ・プログラムのパフォーマンスが最大化されるようハードウェア・アクセラレータの利用を最適化する最適な方法を決定するために、プロファイル・データを分析する任意の適切な方法に明示的に適用される。
【００３４】
本願明細書の特定の例は、ＸＭＬハードウェア・アクセラレータに関するが、本願明細書の原理は、数値計算アクセラレータ（ｍａｔｈ  ａｃｃｅｌｅｒａｔｏｒ）、グラフィック・アクセラレータ、圧縮／解凍アクセラレータ、および暗号化／復号アクセラレータを含むがこれらに限定されない、任意の適切なハードウェア・アクセラレータに等しく適用される。なお、さらに、図１には単一のハードウェア・アクセラレータ１１２が示されているが、本願明細書の本開示および特許請求の範囲は、複数のハードウェア・アクセラレータの使用にも同様に明示的に適用される。
【００３５】
本開示および特許請求の範囲は、どの関数をハードウェア・アクセラレータに割り当てるかを、定義済みのアクセラレータ・ポリシに基づき、かつ実行時に実行される分析に基づき、実行時に決定する、アクセラレータ作業割り当てメカニズムを対象とする。この分析には、アクセラレータ・ポリシを読み出すこと、および特定の関数がアクセラレータ・ポリシを満たすかどうかを決定することが含まれる。アクセラレータ・ポリシが満たされれば、その関数はハードウェア・アクセラレータに割り当てられる。満たされなければ、その関数はプロセッサに割り当てられる。
【００３６】
当業者には当然のことながら、特許請求の範囲に記載の範囲内で、多数の変形物が考えられる。したがって、本開示は、上記に詳しく示され記載されたが、当業者には当然のことながら、形態および細部におけるこれらの変更および他の変更は、特許請求の範囲に記載の範囲内で、特許請求の範囲の意図および範囲から逸脱することなく加えられ得る。
【符号の説明】
【００３７】
１００  コンピュータ・システム
１１０  プロセッサ
１１２  ハードウェア・アクセラレータ
１２０  メイン・メモリ
１２１  データ
１２２  オペレーティング・システム
１２３  コンピュータ・プログラム
１２４  アクセラレータ作業割り当てメカニズム
１２５  アクセラレータ・ポリシ
１２６  コード・インストルメンテーション・メカニズム
１２７  実行時分析メカニズム
１２８  属性分析メカニズム
１３０  大容量記憶インターフェース
１４０  ディスプレイ・インターフェース
１５０  ネットワーク・インターフェース
１５５  直接アクセス記憶デバイス
１６０  システム・バス
１６５  ディスプレイ
１７０  ネットワーク
１７５  ワークステーション
１９５  ＣＤ−ＲＷ
【図１】
0005911286.tif 000002
【図２】
0005911286.tif 000003
【図３】
0005911286.tif 000004
【図４】
0005911286.tif 000005
【図５】
0005911286.tif 000006
【図６】
0005911286.tif 000007
【図７】
0005911286.tif 000008
【図８】
0005911286.tif 000009
【図９】
0005911286.tif 000010
【図１０】
0005911286.tif 000011
【図１１】
0005911286.tif 000012
【図１２】
0005911286.tif 000013