"少なくとも1つのプロセッサと、前記少なくとも1つのプロセッサに結合されたハードウェアアクセラレータと、前記少なくとも1つのプロセッサに結合されたメモリと、前記メモリ内に存在するコンピュータプログラムと、前記メモリ内に存在し、関数が前記ハードウェアアクセラレータに割り当てられる場合を決定する基準を規定するアクセラレータポリシと、前記メモリ内に存在し、前記少なくとも1つのプロセッサによって実行されるアクセラレータ作業割り当てメカニズムであって、前記コンピュータプログラム内の前記関数に関するプロセッサの実行の予測と、前記関数に関するハードウェアアクセラレータの実行の予測とに基づき、前記アクセラレータポリシ内の前記基準が満たされる場合、前記関数を前記ハードウェアアクセラレータに実行時に割り当てる、前記アクセラレータ作業割り当てメカニズムと、を含む装置。前記アクセラレータポリシ内の前記基準は、関数の少なくとも1つの属性を含む、請求項1に記載の装置。前記少なくとも1つの属性は、ファイルのサイズを含む、請求項2に記載の装置。前記アクセラレータ作業割り当てメカニズムは、前記コンピュータプログラムが実行されるとプロファイルデータを提供する複数の命令を前記コンピュータプログラムに挿入する、コードインストルメンテーションメカニズムを含み、前記関数に関する前記プロセッサの実行の予測と、前記関数に関する前記ハードウェアアクセラレータの実行の予測とは、前記プロファイルデータから得られる、請求項1に記載の装置。前記アクセラレータ作業割り当てメカニズムは、前記関数の前記ハードウェアアクセラレータへの割り当てを最適化するために、前記プロファイルデータの分析を実行する、請求項4に記載の装置。前記アクセラレータ作業割り当てメカニズムは、前記関数に関する前記ハードウェアアクセラレータの実行の予測が、前記関数に関する前記プロセッサの実行の予測よりも小さい場合、前記関数を前記ハードウェアアクセラレータに割り当てる、請求項1に記載の装置。前記アクセラレータ作業割り当てメカニズムは、後の関数を前記ハードウェアアクセラレータに割り当てる方が、前記装置の実行に、より大きな利益があるであろう場合であって、かつ前記関数を前記ハードウェアアクセラレータに割り当てると、前記後の関数を前記ハードウェアアクセラレータに割り当てることが妨げられるであろう場合、前記関数を前記ハードウェアアクセラレータに割り当てない、請求項1に記載の装置。ハードウェアアクセラレータと、コンピュータプログラムを実行する少なくとも1つのプロセッサとを含むコンピュータシステムにおいて、前記ハードウェアアクセラレータに作業を割り当てるよう少なくとも1つのプロセッサによって実行される、コンピュータで実装される方法であって、関数が前記ハードウェアアクセラレータに割り当てられる場合を決定する基準を規定するアクセラレータポリシを読み出すステップと、前記コンピュータプログラムを分析するステップと、前記コンピュータプログラム内の前記関数に関するプロセッサの実行の予測と、前記関数に関するハードウェアアクセラレータの実行の予測とに基づき、前記アクセラレータポリシ内の前記基準が満たされる場合、前記関数を前記ハードウェアアクセラレータに実行時に割り当てるステップと、を含む方法。前記アクセラレータポリシ内の前記基準は、前記関数の少なくとも1つの属性を含む、請求項8に記載の方法。前記少なくとも1つの属性は、ファイルのサイズを含む、請求項9に記載の方法。前記コンピュータプログラムが実行されるとプロファイルデータを提供する複数の命令を、前記コンピュータプログラムに挿入するステップと、前記関数に関する前記プロセッサの実行の予測と、前記関数に関する前記ハードウェアアクセラレータの実行の予測とを、前記プロファイルデータから得るステップと、をさらに含む、請求項8に記載の方法。前記関数の前記ハードウェアアクセラレータへの割り当てを最適化するために、前記プロファイルデータの分析を実行するステップをさらに含む、請求項11に記載の方法。前記関数に関する前記ハードウェアアクセラレータの実行の予測が、前記関数に関する前記プロセッサの実行の予測よりも小さい場合、前記関数を前記ハードウェアアクセラレータに割り当てるステップをさらに含む、請求項8に記載の方法。後の関数を前記ハードウェアアクセラレータに割り当てる方が、装置の実行に、より大きな利益があるであろう場合であって、かつ前記関数を前記ハードウェアアクセラレータに割り当てると、前記後の関数を前記ハードウェアアクセラレータに割り当てることが妨げられるであろう場合、前記関数を前記ハードウェアアクセラレータに割り当てないステップをさらに含む、請求項8に記載の方法。ハードウェアアクセラレータと、コンピュータプログラムを実行する少なくとも1つのプロセッサとを含むコンピュータシステムにおいて、前記ハードウェアアクセラレータに作業を割り当てるよう、少なくとも1つのプロセッサによって実行されるプログラムであって、関数が前記ハードウェアアクセラレータに割り当てられる場合を決定する基準を規定するアクセラレータポリシを読み出すステップであって、前記基準は、前記関数による作用を受けるファイルのサイズを含む、前記ステップと、前記コンピュータプログラムを分析するステップと、前記コンピュータプログラムが実行されるとプロファイルデータを提供する複数の命令を、前記コンピュータプログラムに挿入するステップと、前記関数に関するプロセッサの実行の予測と、前記関数に関するハードウェアアクセラレータの実行の予測とを、前記プロファイルデータから得るステップと、前記プロファイルデータ内の少なくとも1つのパターンを決定するために、前記プロファイルデータを分析するステップと、前記関数に関する前記ハードウェアアクセラレータの実行の予測が、前記関数に関する前記プロセッサの実行の予測よりも小さく、前記少なくとも1つのパターンが前記アクセラレータポリシを満たす場合、前記コンピュータプログラム内の前記関数を前記ハードウェアアクセラレータに実行時に割り当てるステップと、をコンピュータに実行させる。従来技術では、プログラマは、ハードウェアアクセラレータがシステムに存在するであろうことを認識し、続いて、コード内のどの関数をハードウェアアクセラレータに割り当てるかを決める必要があった。図2を参照する。従来技術の方法200は、当該の手法を示す。プログラマが、コンピュータプログラムを書くステップ210。プログラマは、どの関数をハードウェアアクセラレータに割り当てるか決めるステップ220。続いて、プログラマは、関数をハードウェアアクセラレータに割り当てるコードを書くステップ230。したがって、従来技術では、どの関数がハードウェアアクセラレータによって実行されるかに関する判断はすべて、人間であるプログラマによって、プログラマがコードを書くときに行われる。結果として、柔軟性がなくハードウェアアクセラレータを十分に活用することができないコードが生じる。ハードウェアアクセラレータに割り当てる関数を実行時に動的に決定する方法がなくては、ハードウェアアクセラレータを有するコンピュータシステムのパフォーマンスは最適化されない。アクセラレータ作業割り当てメカニズムacceleratorworkallocationmechanismは、どの関数をハードウェアアクセラレータに割り当てるかを、定義済みのアクセラレータポリシacceleratorpolicyに基づき、かつ実行時に実行される分析に基づき、実行時に決定する。この分析には、アクセラレータポリシを読み出すこと、および特定の関数がアクセラレータポリシを満たすかどうかを決定することが含まれる。アクセラレータポリシが満たされれば、その関数はハードウェアアクセラレータに割り当てられる。満たされなければ、その関数はプロセッサに割り当てられる。添付の図面に示されているとおりの、以下のより詳しい記載から、前述の特徴および利点ならびにその他の特徴および利点が明らかになる。本開示は、添付の図面と関連して記載され、図面では、同様の表示は、同様の構成要素を示す。本願明細書の特許請求の範囲および開示は、コンピュータプログラム内のどの関数をハードウェアアクセラレータに割り当てるかを実行時に決定するアクセラレータ作業割り当てメカニズムを提供する。分析には、アクセラレータポリシを読み出すこと、および特定の関数がアクセラレータポリシを満たすかどうかを決定することが含まれる。アクセラレータポリシが満たされれば、その関数はハードウェアアクセラレータに割り当てられる。満たされなければ、その関数はプロセッサに割り当てられる。図1を参照する。コンピュータシステム100は、ハードウェアアクセラレータおよびアクセラレータ作業割り当てメカニズムを含むコンピュータシステムの適切な一実装である。コンピュータシステム100は、IBMIBM社の登録商標eServerSystemiIBM社の登録商標コンピュータシステムである。なお、当業者には当然のことながら、コンピュータシステムが複雑なマルチユーザコンピューティング装置であるか、単一ユーザワークステーションであるか、または埋め込み制御システムであるかにかかわらず、本願明細書の開示は任意のコンピュータシステムに等しく当てはまる。図1に示されているように、コンピュータシステム100は、1つ以上のプロセッサ110、ハードウェアアクセラレータ112、メインメモリ120、大容量記憶インターフェース130、ディスプレイインターフェース140、およびネットワークインターフェース150を含む。これらのシステムコンポーネントは、システムバス160を利用して相互接続されている。大容量記憶インターフェース130は、直接アクセス記憶デバイス155などの大容量記憶デバイスをコンピュータシステム100に接続するために使用される。直接アクセス記憶デバイス155の具体的な種類の1つは、読み出し可能かつ書き込み可能なCD-RWドライブであり、これは、CD-RW195に対するデータの記憶およびデータの読み出しを行うとよい。メインメモリ120は、データ121、オペレーティングシステム122、コンピュータプログラム123、およびアクセラレータ作業割り当てメカニズム124を含むことが好ましい。データ121は、コンピュータシステム100の任意のプログラムの入力または出力となる任意のデータを表す。オペレーティングシステム122は、マルチタスクオペレーティングシステムである。コンピュータプログラム123は、ハードウェアアクセラレータ112に割り当てられることができるであろう関数を有するとよい任意のコンピュータプログラムを代表する。アクセラレータ作業割り当てメカニズム124は、コンピュータプログラム123内のどの関数をハードウェアアクセラレータ112に割り当てるかを実行時に決定する。アクセラレータ作業割り当てメカニズム124には、アクセラレータポリシ125、コードインストルメンテーションメカニズムcodeinstrumentationmechanism126、および実行時分析メカニズムruntimeanalysismechanism127が含まれる。アクセラレータポリシ125は、コンピュータプログラム123内の関数がハードウェアアクセラレータ112に割り当てられる場合を決定する基準を規定する。コードインストルメンテーションメカニズム126は、実行時データを収集できるように、フックとして知られる命令をコンピュータプログラム123に挿入する。その結果、この実行時データが、アクセラレータ作業割り当てメカニズムによって、コンピュータプログラム123内の関数をハードウェアアクセラレータ112に割り当てる場合の決定に使用され得る。実行時分析メカニズム127は、分析を実行時に実行し、これによって、アクセラレータ作業割り当てメカニズム124が、コンピュータプログラム123内の関数をハードウェアアクセラレータ112に割り当てる場合を決定できるようになる。実行時分析メカニズム127は、属性分析メカニズムattributeanalysismechanism128を含み、これは、関数がハードウェアアクセラレータ112に割り当てられるかどうかを決定する際に属性が考慮に入れられるよう、関数の属性を分析する。属性分析メカニズム128によって分析される属性には、例えば、関数が呼び出されるときに渡されるパラメータが含まれ得る。属性分析メカニズムが考慮に入れてもよい属性の適切な一例は、関数による作用を受けるデータのサイズである。コンピュータシステム100は、周知の仮想アドレス指定メカニズムを利用し、このメカニズムは、コンピュータシステム100のプログラムが、メインメモリ120およびDASDdirectaccessstoragedevice:直接アクセス記憶デバイスデバイス155などの複数のより小さな記憶エンティティへのアクセスの代わりに、単一の大きな記憶エンティティにのみアクセスできるかのように動くことを可能にする。したがって、データ121、オペレーティングシステム122、コンピュータプログラム123、およびアクセラレータ作業割り当てメカニズム124は、メインメモリ120に存在するよう示されているが、当業者には当然のことながら、これらの項目は、必ずしも同時に、すべて完全にメインメモリ120に含まれるとは限らない。なお、さらに、本願明細書においてメモリという用語は、コンピュータシステム100の仮想メモリ全体を包括的に指すように使用されており、コンピュータシステム100に結合された他のコンピュータシステムの仮想メモリを含み得る。プロセッサ110は、1つ以上のマイクロプロセッサもしくは集積回路またはその両方から構成されるとよい。プロセッサ110は、メインメモリ120に記憶されているプログラム命令を実行する。メインメモリ120は、プロセッサ110がアクセスしてよいプログラムおよびデータを記憶する。コンピュータシステム100が起動すると、プロセッサ110は最初に、オペレーティングシステム122を構成するプログラム命令を実行する。さらにプロセッサ110は、コンピュータプログラム123およびアクセラレータ作業割り当てメカニズム124を実行する。コンピュータシステム100は、単一のプロセッサおよび単一のシステムバスのみを含むよう示されているが、当業者には当然のことながら、アクセラレータ作業割り当てメカニズムは、複数のプロセッサもしくは複数のバスまたはその両方を有するコンピュータシステムを使用して実践されてもよい。さらに、使用されるインターフェースはそれぞれ、別個の、完全にプログラムされたマイクロプロセッサを含むことが好ましく、これらが、プロセッサ110から計算集中型の処理をオフロードするために使用される。なお、当業者には当然のことながら、これらの機能は、I/Oアダプタを使用しても実行され得る。ディスプレイインターフェース140は、1つ以上のディスプレイ165をコンピュータシステム100に直接接続するよう使用される。これらのディスプレイ165は、非インテリジェントすなわちダムターミナルであっても、または完全にプログラム可能なワークステーションであってもよく、これらは、システム管理者およびユーザに、コンピュータシステム100と通信する能力を提供するために使用される。ただし、ディスプレイインターフェース140は、1つ以上のディスプレイ165との通信をサポートするよう提供されるが、ユーザおよび他のプロセスとの必要な対話がすべてネットワークインターフェース150を介して生じることもあり得るため、コンピュータシステム100は、ディスプレイ165を必ずしも必要としない。ネットワークインターフェース150は、コンピュータシステム100を、ネットワーク170を介して他のコンピュータシステムまたはワークステーション175に接続するために使用される。ネットワークインターフェース150は、ネットワーク170が現在のアナログもしくはデジタルまたはその両方の技術を含むか、または将来の何らかのネットワーキングメカニズムを介するかにかかわらず、電子デバイスを相互接続する任意の適切な方法を広く表す。ネットワークインターフェース150は、ネットワーク170上での通信を可能にするハードウェアおよびソフトウェアの組み合わせを含むことが好ましい。ネットワークインターフェース150のソフトウェアは、適切なネットワークプロトコルを使用して、ネットワーク170を介した他のワークステーション175との通信を管理する、通信マネージャを含むことが好ましい。多数の異なるネットワークプロトコルが、ネットワークを実装するために使用されることが可能である。これらプロトコルは、コンピュータがネットワークで通信できるようにする専用コンピュータプログラムである。TCP/IPTransmissionControlProtocol/InternetProtocol:伝送制御プロトコル/インターネットプロトコルが、ネットワークインターフェース150内で通信マネージャによって使用されてもよい適切なネットワークプロトコルの例である。当業者であれば当然のことであるが、本発明の側面は、システム、方法またはコンピュータプログラム製品として具現化され得る。したがって、本発明の側面は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態ファームウェア、常駐ソフトウェア、マイクロコードなどを含む、または本願明細書においてすべて概して回路、モジュールもしくはシステムと呼ばれ得る、ソフトウェアおよびハードウェアの側面を兼ね備えた実施形態の形をとってもよい。さらに、本発明の側面は、コンピュータ可読プログラムコードが具現化された1つ以上のコンピュータ可読媒体単数または複数において具現化されたコンピュータプログラム製品の形をとることもできる。1つ以上のコンピュータ可読媒体単数または複数の任意の組み合わせが利用され得る。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体とされ得る。コンピュータ可読記憶媒体は、例えば、限定はされないが、電子、磁気、光学、電磁気、赤外線、もしくは半導体システム、装置、もしくはデバイス、または前述のものの任意の適切な組み合わせとすることもできる。コンピュータ可読記憶媒体のより具体的な例包括的でないリストには、1つ以上のワイヤを有する電気的接続、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM:randomaccessmemory、読み出し専用メモリROM:read-onlymemory、消去可能プログラム可能読み出し専用メモリEPROMerasableprogrammableread-onlymemoryまたはフラッシュメモリ、光ファイバ、ポータブルコンパクトディスク読み出し専用メモリCD-ROM:compactdiscread-onlymemory、光学式記憶デバイス、磁気記憶デバイスまたは前述のものの任意の適切な組み合わせが含まれるであろう。この文書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置もしくはデバイスによって、またはそれに関連して使用されるプログラムを含むこと、または記憶することができる任意の有形の媒体であればよい。コンピュータ可読信号媒体は、例えば、ベースバンドに、または搬送波の一部として、伝播データ信号において具現化されたコンピュータ可読プログラムコードを伴う伝播データ信号を含み得る。そのような伝播信号は、電磁気、光学、またはその任意の適切な組み合わせを含むがこれらに限定はされない、様々な形のいずれかをとり得る。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体でなく、命令実行システム、装置もしくはデバイスによって、またはそれに関連して使用されるプログラムを伝達すること、伝播させること、または搬送することができる、任意のコンピュータ可読媒体としてよい。コンピュータ可読媒体上に具現化されたプログラムコードは、無線、有線、光ファイバケーブル、RFなど、または前述のものの任意の適切な組み合わせを含むがこれらに限定はされない、任意の適切な媒体を使用して送られてもよい。本発明の側面の動作を実行するコンピュータプログラムコードは、JavaR、SmalltalkR、Cまたは同様のものなどのオブジェクト指向プログラミング言語、およびCプログラミング言語もしくは同様のプログラミング言語などの従来の手続きプログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで書かれていてよい。プログラムコードは、スタンドアロンソフトウェアパッケージとして、完全にユーザのコンピュータ上で実行されること、部分的にユーザのコンピュータ上で実行されること、または部分的にユーザのコンピュータ上で、かつ部分的にリモートコンピュータ上で実行されること、または完全にリモートコンピュータもしくはサーバ上で実行されることもできる。後者のシナリオでは、ローカルエリアネットワークLAN:localareanetwork、もしくは広域ネットワークWAN:wideareanetworkを含む任意の種類のネットワークを介してリモートコンピュータがユーザのコンピュータに接続されてもよく、または、外部コンピュータに接続されてもよい例えば、インターネットサービスプロバイダを使用しインターネットを介して。本発明の側面について、本発明の実施形態による方法、装置システムおよびコンピュータプログラム製品のフローチャート図もしくはブロック図またはその両方を参照して本願明細書に記載する。当然のことながら、フローチャート図もしくはブロック図またはその両方の各ブロック、およびフローチャート図もしくはブロック図またはその両方の複数ブロックの組み合わせは、コンピュータプログラム命令により実装可能である。マシンを作り出すよう、当該コンピュータプログラム命令が、汎用コンピュータ、専用コンピュータ、またはその他のプログラム可能データ処理装置のプロセッサに提供されて、この命令が、コンピュータまたはその他のプログラム可能データ処理装置のプロセッサを用いて実行されて、フローチャートもしくはブロック図またはその両方のブロックもしくは複数ブロックにおいて指定された関数/動作を実装する手段をもたらすようにすることもできる。さらに、特定の形で機能するようコンピュータ、その他のプログラム可能データ処理装置、またはその他のデバイスに指示することができる当該コンピュータプログラム命令は、コンピュータ可読媒体に記憶されて、コンピュータ可読媒体に記憶されたこの命令が、フローチャートもしくはブロック図またはその両方のブロックもしくは複数ブロックにおいて指定された関数/動作を実装する命令を含む製品を作り出すようにすることもできる。さらに、コンピュータプログラム命令は、コンピュータ、その他のプログラム可能データ処理装置、またはその他のデバイスにロードされて、コンピュータ、その他のプログラム可能装置、またはその他のデバイス上で一連の動作ステップが実行されるようにしてコンピュータで実装されるプロセスを作り出し、コンピュータまたはその他のプログラム可能装置上で実行される命令が、フローチャートもしくはブロック図またはその両方のブロックもしくは複数ブロックにおいて指定された関数/動作を実装するためのプロセスを提供するようにすることもできる。上記の背景技術の欄で説明したように、図2の従来技術の方法200は、コンピュータプログラムをプログラミングする間に、どの関数がハードウェアアクセラレータに割り当てられるかに関して判断を行うことを、プログラマに要求する。これは、プログラマの相当な知識および経験を要する。さらに、実行時の条件に従った柔軟性がない。例えば、プログラマが、XMLハードウェアアクセラレータがXMLファイルのload動作を常に行うことができるようにすることを決めると仮定する。これは、大きなXMLファイルがロードされる場合には時間を節約し得るが、load動作の大部分が、プロセッサが処理した方がより効率がよいであろう小さなXMLファイルに関するものであれば、このプログラマによる選択は、実際のところ実行時のパフォーマンスを損なうことがあり得る。さらに、どの関数がハードウェアアクセラレータに割り当てられるかをプログラム内で定義することは、実行時の条件に従って調整する柔軟性をまったく与えない。こうした問題が、本願明細書において詳細に説明されるように、関数をハードウェアアクセラレータに実行時に割り当てることによって解決される。図3を参照する。方法300は、図1に示されているアクセラレータ作業割り当てメカニズム124によって実行されることが好ましい。方法300は、アクセラレータポリシを読み出すことによって開始するステップ310。アクセラレータポリシは、プログラマまたはユーザによって定義されることが好ましく、関数をハードウェアアクセラレータに割り当てる場合をアクセラレータ作業割り当てメカニズム124が実行時に決められるようにする基準を規定する。コンピュータプログラムが分析されるステップ320。次に、関数が選択されるステップ330。関数がアクセラレータポリシを満たすとステップ340=はい、関数はハードウェアアクセラレータに割り当てられるステップ350。選択された関数がアクセラレータポリシを満たさなければステップ340=いいえ、関数はプロセッサに割り当てられるステップ360。最も好適な実装では、ステップ360において関数をプロセッサに割り当てるために、特定のアクションが生じる必要はない。すべての関数は、デフォルトでプロセッサによって実行されるようになっているため、関数がハードウェアアクセラレータに割り当てられなければ、これはその関数がプロセッサによって実行されるということを意味し、つまり単に関数をハードウェアアクセラレータに割り当てないことによって、関数がプロセッサに割り当てられるということであるステップ360。なお、ステップ330~360は、ハードウェアアクセラレータに割り当てられる可能性がある、コンピュータプログラム内の各関数に関して繰り返されることができるであろう。図4を参照する。第1の見本のアクセラレータポリシ400は、どの関数をハードウェアアクセラレータに割り当てるかを規定する。本願明細書の例では、ハードウェアアクセラレータがXMLアクセラレータであると仮定する。図4のアクセラレータポリシ400は、すべてのXMLload関数をXMLアクセラレータに割り当て、XMLparseおよびXMLselectNodes関数はXMLアクセラレータに割り当てないよう規定する。アクセラレータポリシの変更は、プログラムコードを変更することなく行われ得るため、この単純な見本のアクセラレータポリシ400は、コードにおいてハードウェアアクセラレータへの割り当てをハードコーディングする従来技術の方法に勝る利点を提供する。これは、コンピュータプログラムのユーザが、コンピュータプログラムを変更および再コンパイルする必要なく、単にアクセラレータポリシ400を変更することによってコンピュータプログラムの機能を変更することを可能にする。図5を参照する。第2の見本のアクセラレータポリシ500は、実行時にどの関数をハードウェアアクセラレータに割り当てるかの決定において、より大きな柔軟性を可能にする動的な式を含む。したがって、XMLload関数については、この関数は、ロードされるXMLファイルのサイズが100,000バイトよりも大きい場合、XMLアクセラレータに割り当てられる。ロードされるXMLファイルのサイズが100,000バイト以下の場合、load関数は、プロセッサに割り当てられる。同様の方法で、XMLselectNodes関数は、文書内のノードの数が20を超える場合XMLアクセラレータに割り当てられ、選択されるノードの数が20以下の場合プロセッサに割り当てられる。XMLparse関数は、ハードウェアアクセラレータに割り当てられない。図5に示されている論理式は、単純であるが、本願明細書の概念は、基準がどれほど単純または複雑となり得るかにかかわらず、アクセラレータポリシにおいて規定され得るであろう任意の適切な基準に適用される。図6を参照する。方法600は、図3の方法300の範囲内の、特定の一方法の、適切な1つの実装である。最初に、プロセッサが関数を実行する時間が決定されるステップ610。次に、ハードウェアアクセラレータが同じ関数を実行する時間が決定されるステップ620。アクセラレータの時間がプロセッサの時間よりも短くステップ630=はい、より重要な関数を待つ必要がなければステップ632=いいえ、この関数は、実行時にハードウェアアクセラレータに割り当てられるステップ640。アクセラレータの時間がプロセッサの時間よりも短くなければステップ630=いいえ、この関数は、実行時にプロセッサに割り当てられるステップ650。アクセラレータの時間がプロセッサの時間よりも短いステップ630=はいが、より重要な関数を待つ必要があればステップ632=はい、この関数はプロセッサに割り当てられるステップ650。より重要な関数の概念は、図12を参照して下記に記載する。なお、ステップ610および620における時間予測は、任意の適切な方法で得られればよい。1つの方法は、プロセッサの数、プロセッサ速度、メモリサイズなどのシステムリソースに基づき時間を予測することである。もう1つの方法は、下記でより詳しく説明するように、コードがインストルメントされているときの実際の実行時間に基づき、時間を予測することである。最も好ましい実装では、ハードウェアアクセラレータがその関数を実行する時間の予測は、プロセッサがその作業をハードウェアアクセラレータにオフロードするのにかかる追加の時間オーバーヘッドを含む。図7を参照する。方法700は、コンピュータプログラムをインストルメントすることによって開始するステップ710。コンピュータプログラムをインストルメントするというのは、コンピュータプログラムが実行されているときにプロファイルデータを収集することを可能にするフックと呼ばれる命令を、コンピュータプログラムに挿入することを意味する。したがって、各XMLload命令を実行するのにかかる時間を決定できるように、すべてのXMLload命令がインストルメントされることが可能であろう。コンピュータプログラムがインストルメントされると、コンピュータプログラムが実行されるステップ720。コンピュータプログラムの実行から生成されるプロファイルデータが、コンピュータプログラムが実行されているときに集められるステップ730。プロファイルデータは、インストルメントされた各関数の実行にかかった時間、インストルメントされた各関数を実行する平均時間、インストルメントされた各関数を実行する時間の範囲、各関数の属性などを含む、任意の適切な情報を含むことができるであろう。続いて、関数の実行時間が、ステップ610および620において、プロファイルデータに基づき予測され得る。なお、プロファイリングは、全部の関数がプロセッサによって実行されるよう強制するコードを用いた1つの実行、および一部または全部の関数がハードウェアアクセラレータに実行されるようにするコードを用いた第2の実行を含むことができるであろう。別の方法では、プロファイリングは、コンピュータプログラムがどのようにコードおよびインストルメントされているかに従って、一部の関数がプロセッサによって実行され、他の関数がハードウェアアクセラレータによって実行される、単一の実行を含むことができるであろう。実行時間の予測の例が、図8および9に示されている。図8を参照する。XMLload関数をプロセッサによって実行する時間は、1.0秒である。XMLparse関数をプロセッサによって実行する時間は、0.36秒である。XMLselectNodes関数をプロセッサによって実行する時間は、0.74秒である。これらの予測された実行時間は、インストルメントされたコンピュータプログラムが実行されているときに集められたプロファイルデータから得られることが好ましい。図9を参照する。XMLload関数をハードウェアアクセラレータによって実行する時間は、0.52秒である。XMLparse関数をハードウェアアクセラレータによって実行する時間は、0.23秒である。XMLselectNodes関数をハードウェアアクセラレータによって実行する時間は、0.80秒である。以下、図8および9の時間予測を、図6の方法600とともに使用する。ステップ610での予測は、図8の表800に示されている。ステップ620での予測は、図9の表900に示されている。XMLload関数については、0.52秒というアクセラレータの時間は、1.0秒というプロセッサの時間よりも短いステップ630=はいため、XMLload関数は、ハードウェアアクセラレータに割り当てられるステップ640。XMLparse関数については、0.23秒というアクセラレータの時間は、0.36秒というプロセッサの時間よりも短いステップ630=はいため、XMLparse関数は、ハードウェアアクセラレータに割り当てられるステップ640。XMLselectNodes関数については、0.80秒というアクセラレータの時間は、0.74秒というプロセッサの時間よりも長いステップ630=いいえため、XMLselectNodes関数は、プロセッサに割り当てられるステップ650。selectNodes関数は、なぜプロセッサでの予測実行時間よりもハードウェアアクセラレータでの予測実行時間が長くなるのか、疑問に思うかもしれない。関数をハードウェアアクセラレータに割り当てるには、いくらかのシステムオーバーヘットが必要であり、したがって、ほぼ同じ時間で実行できる関数に関しては、関数をハードウェアアクセラレータに割り当ててデータをハードウェアアクセラレータから受け取るオーバーヘッドが原因で、ハードウェアアクセラレータの全般的な実行時間の方が長くなることがあり得るであろう。さらに、ハードウェアアクセラレータは、一部の関数に関してはうまく実行しないこともある。結果として、時間予測は、ハードウェアアクセラレータに作業を割り当てる場合と、ハードウェアアクセラレータに作業を割り当てない場合との両方を決定することができるようにする。この単純な例では、図9の表900にある予測実行時間は、関数をハードウェアアクセラレータに割り当ててデータをハードウェアアクセラレータから受け取るためのシステムオーバーヘッドを含むと仮定する。その他の属性が、関数をハードウェアアクセラレータに割り当てるか否かの判断を行うときに考慮されることが可能であろう。例えば、XMLアクセラレータについては、処理されるXMLファイルのサイズが、XML関数の実行に必要な時間に大きく影響することもある。図10は、処理されるXMLファイルのサイズの関数としてのプロセッサ上でのXMLloadおよびparse関数の実行時間と、処理されるノードの数の関数としてのプロセッサ上でのXMLselectNodes関数の実行時間との予測を示す表1000を示す。同様に、図11は、処理されるXMLファイルのサイズの関数としてのハードウェアアクセラレータ上でのXMLloadおよびparse関数の実行時間と、処理されるノードの数の関数としてのハードウェアアクセラレータ上でのXMLselectNodes関数の実行時間との予測を示す。関数の属性に従い強化されたこれらの予測を用いると、アクセラレータ作業割り当てメカニズムは、関数をハードウェアアクセラレータに実行時に割り当てる場合に関して、よりインテリジェントな判断を行うことができる。図12を参照する。表1200は、実行時ログの形の見本のプロファイルデータを示す。表1200は、関数と、関数が開始されたときのタイムスタンプと、関数の実行にかかった時間とのリストを含む。このデータは、ハードウェアアクセラレータの利用をさらに最適化するために、アクセラレータ作業割り当てメカニズムによって使用されることが可能であろう。例えば、図12に示されている見本のプロファイルデータから、XMLload命令の後にはXMLparse命令が続くことが多いということがわかる。アクセラレータ作業割り当てメカニズムは、表1200の実行時ログのプロファイルデータを分析して、どの関数をハードウェアアクセラレータに割り当てるかに関して判断を行うことができるであろう。例えば、図6の方法600を使用すると、load関数は、常にハードウェアアクセラレータに割り当てられるであろう。ただし、開始タイムスタンプは、ハードウェアアクセラレータが先行するload命令を終えることができる前にparse関数が生じるようになっている。アクセラレータ作業割り当てメカニズムは、実行時ログに基づき、ハードウェアアクセラレータがparse関数の実行に、待ち時間なしで利用可能となるよう、プロセッサを用いてload関数を処理する方がより有益と考えられると決定することができるであろう。この意味で、parse関数は、load関数よりも、ハードウェアアクセラレータに割り当てる、より重要な関数となるであろう。結果として、load関数はプロセッサに割り当てられることになり、その一方で、より重要なparse関数はハードウェアアクセラレータに割り当てられる。別の例では、実行時ログは、多数の異なるスレッドからのコールの頻度を明らかにしてもよく、その結果、通常はハードウェアアクセラレータに割り当てられると考えられる関数をより利益が大きい別の関数のためにスキップすることにおいて、はるかに大きな利益がもたらされる。したがって、アクセラレータ作業割り当てメカニズムは、コンピュータプログラムの関数をハードウェアアクセラレータに割り当てる場合の判断に影響する、プロファイルデータにおける1つ以上のパターンを検出するとよい。本願明細書の本開示および特許請求の範囲は、コンピュータプログラムのパフォーマンスが最大化されるようハードウェアアクセラレータの利用を最適化する最適な方法を決定するために、プロファイルデータを分析する任意の適切な方法に明示的に適用される。本願明細書の特定の例は、XMLハードウェアアクセラレータに関するが、本願明細書の原理は、数値計算アクセラレータmathaccelerator、グラフィックアクセラレータ、圧縮/解凍アクセラレータ、および暗号化/復号アクセラレータを含むがこれらに限定されない、任意の適切なハードウェアアクセラレータに等しく適用される。なお、さらに、図1には単一のハードウェアアクセラレータ112が示されているが、本願明細書の本開示および特許請求の範囲は、複数のハードウェアアクセラレータの使用にも同様に明示的に適用される。本開示および特許請求の範囲は、どの関数をハードウェアアクセラレータに割り当てるかを、定義済みのアクセラレータポリシに基づき、かつ実行時に実行される分析に基づき、実行時に決定する、アクセラレータ作業割り当てメカニズムを対象とする。この分析には、アクセラレータポリシを読み出すこと、および特定の関数がアクセラレータポリシを満たすかどうかを決定することが含まれる。アクセラレータポリシが満たされれば、その関数はハードウェアアクセラレータに割り当てられる。満たされなければ、その関数はプロセッサに割り当てられる。当業者には当然のことながら、特許請求の範囲に記載の範囲内で、多数の変形物が考えられる。したがって、本開示は、上記に詳しく示され記載されたが、当業者には当然のことながら、形態および細部におけるこれらの変更および他の変更は、特許請求の範囲に記載の範囲内で、特許請求の範囲の意図および範囲から逸脱することなく加えられ得る。"