コンピュータシステムの第1プロセッサー上で実行可能なプログラム命令を記憶したコンピュータ可読記憶媒体であって、前記プログラム命令は、第1組のバイトコードを受信するステップであって、前記第1組のバイトコードは、第1組のタスクを指定するステップと、前記第1組のタスクを前記コンピュータシステムの第2プロセッサーへオフロードするという判定に呼応して、前記第1組のタスクを実行するための一組の命令を生成させるステップとを実行し、前記一組の命令は、前記第1組のバイトコードのフォーマットとは異なるフォーマットであり、前記フォーマットは、前記第2プロセッサーによってサポートされており、更に、前記プログラム命令は、前記一組の命令を、その実行のために、前記第2プロセッサーへと供給させるステップも実行する、コンピュータ可読記憶媒体。前記プログラム命令は、前記第1プロセッサーの命令セットアーキテクチャーISA内で命令を生成するため、前記第1プロセッサー上の制御プログラムによって解釈可能であることを特徴とする請求項1に記載のコンピュータ可読記憶媒体。前記プログラム命令は、第2組のバイトコードを受信するステップであって、前記第2組のバイトコードは、第2組のタスクを指定するステップと、更に、前記第2組のタスクを前記第2プロセッサーにオフロードしないということが判定されたことに呼応して、前記第2組のバイトコードを解釈して、前記第1プロセッサーの前記ISA内で命令を生成することを前記制御プログラムに実行させるステップを実行するよう、前記制御プログラムにより更に解釈可能であり、前記第1プロセッサーは、前記第2組のバイトコードの解釈により生成される前記命令を実行することで、前記第2組のタスクを実行するよう構成されていることを特徴とする請求項2に記載のコンピュータ可読記憶媒体。前記プログラム命令は、前記第2組のタスクを前記第2プロセッサーへオフロードしないということが判定されたことに呼応して、前記第2組のタスク内の複数タスクのそれぞれについてスレッドを1つ含むスレッドプールを作成するために、前記制御プログラムによって解釈可能な対応する組のバイトコードを生成するステップと、更に、前記対応する組のバイトコードを解釈して、前記第1プロセッサーの前記ISA内で命令を生成することを、前記制御プログラムに対して実行させるステップとを実行するよう、前記制御プログラムにより更に解釈可能であり、前記第1プロセッサーは、前記対応する組のバイトコードから生成される前記命令を実行することで、前記第2組のタスクを実行するよう構成されていることを特徴とする請求項3に記載のコンピュータ可読記憶媒体。前記制御プログラムは、仮想マシンを実現するよう実行可能であることを特徴とする請求項2に記載のコンピュータ可読記憶媒体。前記一組の命令を前記異なるフォーマットで前記自動生成させるステップは、あるドメイン特化言語を有する一組のドメイン特化命令を生成するステップと、前記一組のドメイン特化命令を前記一組の命令を前記異なるフォーマットで生成するよう実行可能な前記第2プロセッサーのドライバーへと供給するステップとを含むことを特徴とする請求項1に記載のコンピュータ可読記憶媒体。前記ドメイン特化言語フォーマットを有する前記一組の命令を生成するステップは、前記第1組のバイトコードを実体化して、前記第1組のバイトコードの中間表記を生成するステップと、更に、前記第1組のバイトコードの前記中間表記を変換して、前記一組のドメイン特化命令を生成するステップとを含む請求項6に記載のコンピュータ可読記憶媒体。前記プログラム命令は、前記一組のドメイン特化命令を記憶するステップと、前記第1組のバイトコードを再受信するステップと、前記一組のドメイン特化命令が記憶されたという判定に呼応して、前記記憶された一組のドメイン特化命令を前記第2プロセッサーの前記ドライバーへ供給し、前記第1組のタスクを実行するために、前記一組の命令を生成させるステップとを実行するよう実行可能であることを特徴とする請求項6に記載のコンピュータ可読記憶媒体。前記判定ステップは、前記第1プロセッサー、及び、前記第2プロセッサーによる前記第1組のタスクの過去の実行の解析に基くことを特徴とする請求項1に記載のコンピュータ可読記憶媒体。前記第1プロセッサーは、スレッドプールを用いて、前記第1組のタスクの過去の実行の1つを実行することを特徴とする請求項9に記載のコンピュータ可読記憶媒体。前記プログラム命令は、更に、前記第2プロセッサーが前記一組の命令を実行する前に、前記第1組のタスクに関する一組の結果を記憶するための一組のメモリー位置を確保するステップと、前記第2プロセッサーが前記一組の結果を生成する間、ガーベッジコレクターによる前記一組のメモリー位置の再割り当てを禁止するステップと、更に、前記一組の結果を前記一組のメモリー位置に記憶するステップとを実行可能であることを特徴とする請求項1に記載のコンピュータ可読記憶媒体。前記第1組のバイトコードは、アプリケーションプログラミングインターフェースへの1つ以上の呼び出を含むことで、前記第1組のタスクを指定することを特徴とする請求項1に記載のコンピュータ可読記憶媒体。前記第2プロセッサーは、グラフィックスプロセッサーであることを特徴とする請求項1に記載のコンピュータ可読記憶媒体。コンパイル済ソースコードとしてコンパイル済コードに含めるため、コンパイラーによってコンパイル可能なソースプログラム命令を含むコンピュータ可読記憶媒体であって、前記ソースプログラム命令は、ライブラリールーチンへのアプリケーションプログラミングインターフェースAPI呼び出を含み、前記API呼び出は、一組のタスクを指定し、前記ライブラリールーチンは、コンパイル済ライブラリールーチンとして前記コンパイル済コードに含めるため、コンパイラーによってコンパイル可能であり、前記コンパイル済ソースコードは、前記一組のタスクを前記コンパイル済ライブラリールーチンへ送るため、コンピュータシステムの第1プロセッサーの仮想マシンによって解釈可能であり、更に、前記コンパイル済ライブラリールーチンは、前記一組のタスクを前記コンピュータシステムの第2プロセッサーへとオフロードするという判定に呼応して、一組のドメイン特化命令を前記第2プロセッサーのドメイン特化言語フォーマットで生成させるステップと、前記一組のドメイン特化命令を前記第2プロセッサーに供給させるステップとを実行するよう、前記仮想マシンにより解釈可能であることを特徴とするコンピュータ可読記憶媒体。前記第2プロセッサーは、グラフィックプロセッサーであり、更に、前記一組のドメイン特化命令の生成ステップは、前記コンパイル済ソースコードを実体化するステップを含むことを特徴とする請求項14に記載のコンピュータ可読記憶媒体。前記API呼び出は、前記ライブラリールーチンに関連する基底クラスの拡張クラスを指定することを特徴とする請求項14に記載のコンピュータ可読記憶媒体。コンピュータ可読記憶媒体において、コンパイル済ライブラリールーチンとしてコンパイル済コードに含めるため、コンパイラーによってコンパイル可能なライブラリールーチンのソースプログラム命令を含み、前記コンパイル済ライブラリールーチンは、第1組のバイトコードを受信するステップであって、前記第1組のバイトコードは、一組のタスクを指定するステップと、前記一組のタスクを前記コンピュータシステムの第2プロセッサーへオフロードするという判定に呼応して、前記一組のタスクを実行するための一組のドメイン特化命令を生成するステップと、更に、前記ドメイン特化命令を、その実行のために、前記第2プロセッサーへと供給させるステップとを、コンピュータシステムの第1プロセッサー上で実行可能とすることを特徴とするコンピュータ可読記憶媒体。前記コンパイル済ライブラリールーチンは、前記第1プロセッサー用の仮想マシンによって解釈可能であり、更に、前記仮想マシンは、コンパイル済命令を解釈して、前記第1プロセッサーの命令セットアーキテクチャーISA内で命令を生成するよう実行可能であることを特徴とする請求項17に記載のコンピュータ可読記憶媒体。第1組の命令を受信するステップであって、前記第1組の命令は、一組のタスクを指定し、命令の受信は、コンピュータシステムの第1プロセッサー上で実行されるライブラリールーチンにより実行されるステップと、前記ライブラリールーチンが、前記一組のタスクを前記コンピュータシステムの第2プロセッサーへとオフロードするかどうかを判定するステップと、前記一組のタスクを前記第2プロセッサーへオフロードするということが判定されたことに呼応して、前記第1組のタスクを実行するための第2組の命令を生成させるステップと、前記第2組の命令を、その実行のため、前記第2プロセッサーへと供給させるステップとを含み、前記第2組の命令は、第1組の命令のフォーマットとは異なるフォーマットであり、前記フォーマットは、前記第2プロセッサーによりサポートされていることを特徴とする方法。前記ルーチンは、前記第1プロセッサーの命令セットアーキテクチャーISA内で命令を生成するよう実行可能な仮想マシンにより解釈可能であり、更に、前記第2プロセッサーは、グラフィックスプロセッサーであることを特徴とする請求項19に記載の方法。コンピュータシステムが、一組のタスクを指定する第1組のバイトコードを受信するステップと、前記一組のタスクを前記コンピュータシステムの第1プロセッサーから前記コンピュータシステムの第2プロセッサーへとオフロードするという判定に呼応して、前記コンピュータシステムは、前記一組のタスクを実行するための一組のドメイン特化命令を生成するステップと、更に、前記コンピュータシステムは、前記ドメイン特化命令を、その実行のために、前記第2プロセッサーへと供給させるステップとを含む方法。前記生成ステップは、第1プロセッサー用の仮想マシンによって解釈可能なコンパイル済ライブラリールーチンによって実行され、更に、前記仮想マシンは、コンパイル済命令を解釈して、前記第1プロセッサーの命令セットアーキテクチャーISA内で命令を生成するよう実行可能であることを特徴とする請求項21に記載のコンピュータ可読記憶媒体。本明細書には、一実施形態、または、ある実施形態への言及が含まれる。語句一実施形態、または、ある実施形態の外観は、必ずしも同じ実施形態を言及するわけではない。特定の機能、構造、または、特徴は、本開示と整合可能な全ての適切な様式で組み合わせることができる。専門用語:以下の段落では、本開示添付の請求項も含むで見られる用語に関する定義、及び/または、文脈を提供している。含む:この用語には、制約が含まれない。添付の請求項で使用されるように、この用語は、追加の構造、または、ステップを含めることを排除しない。1つ以上のプロセッサーユニット..を含む装置を挙げる請求項の場合では、この請求項は、この装置が、追加の構成要素例えば、ネットワークインターフェースユニット、グラフィックス回路等を含めることを排除しない。するよう構成された:種々のユニット、回路、または、他の構成要素を、1つ以上のタスクを実行するよう構成されたものとして説明、または、特許請求することができる。この様な状況において、するよう構成されたは、ユニット/回路/構成要素の中に、動作中にこれら1つ以上のタスクを実行する構造例えば、回路が含まれていることを示すことで、構造を含蓄するのに使用される。従って、このユニット/回路/構成要素は、特定のユニット/回路/構成要素が、現在動作状態に無い例えば、作動していない場合であっても、タスクを実行するよう構成されていると言うことができる。するよう構成されたという言葉で使用されるユニット/回路/構成要素には、ハードウェア、例えば、回路、動作の実現に実行可能なプログラム命令を記憶するメモリーが含まれる。ユニット/回路/構成要素が、1つ以上のタスクを実行するよう構成されるという提唱は、このユニット/回路/構成要素について、合衆国法典第35巻112条第6項を行使することを明示的に意図していない。更に、するよう構成されたには、対象タスク複数可を実行可能とする様式で動作するよう、ソフトウェア、及び/または、ファームウェア例えば、FPGA、または、ソフトウェアを実行する汎用プロセッサーにより処理される汎用構造例えば、汎用回路を含めることができる。実行可能な:本明細書で使用されるように、この用語は、特定のプロセッサーに関連するフォーマット例えば、このプロセッサーの命令セットアーキテクチャーISAについて実行可能であるか、または、あるファイルから変換されるこの変換は、ファイルを別のプラットフォームへと書き込まずにあるプラットフォームから別のプラットフォームへと実行されるメモリーシーケンス内で実行可能なファイルフォーマットにおける命令のみならず、プロセッサーのISA用命令を生成するため、制御プログラム例えば、JAVA登録商標仮想マシンによって解釈可能な中間即ち、非ソースコードフォーマットでの命令についても言及している。このため、用語実行可能は、本明細書で使用される用語解釈可能を包含している。だが、プロセッサーが、プログラム、または、命令を実行、或いは、起動していると言及されている場合、この用語は、該当するあらゆる結果を生成するため、プロセッサーのISA内の一組の命令の動作を実際に実現させること例えば、一組の命令の発行、復号化、実行、及び、完了この用語は、例えば、プロセッサーのパイプラインの実行段には、限定されていないを意味するのに使用される。異種コンピューティングプラットフォーム:この用語は、従来技術において一般に受け入れられている意味を持ち、種々の種類のコンピュータユニット、例えば、汎用プロセッサーGPP、専用プロセッサー即ち、デジタル信号プロセッサーDSP、或いは、グラフィック処理ユニットGPU、コプロセッサー、若しくは、カスタム高速ロジック特定用途向け集積回路ASIC、フィールドプログラマブルゲートアレーFPGA等を有するシステムを含む。バイトコード:本明細書で使用される様に、この用語は、コンパイル済のソースコードの機械可読表記を幅広く言及している。ある場合では、バイトコードは、変更せずにプロセッサーによって実行可能である。別の場合では、プロセッサー用の実行命令を生成するため、制御プログラム、例えば、インタープリターJAVA登録商標仮想マシン、PYTHONインタープリター等によって、バイトコードを処理できる。本明細書で使用される様に、インタープリターとは、何らかのコードを基本プラットフォームへと実際には変換しないが、それぞれが、1つのバイトコード命令と一致する事前に記述された複数の関数の処理を調整するプログラムのことも言及している。仮想マシン:この用語は、従来技術において一般に受け入れられている意味を持ち、物理的なコンピュータシステムのソフトウェアによる実装形態を含み、仮想マシンは、物理的なコンピュータシステム用の命令を受信して、これを実行するよう実行可能である。ドメイン特化言語:この用語は、従来技術において一般に受け入れられている意味を持ち、特定用途向けに設計された専用プログラム言語を含む。一方、汎用プログラミング言語は、種々の用途で使用するよう設計されたプログラム言語である。ドメイン特化言語の例として、SQL、VERILOG、OPENCL等がある。汎用プログラミング言語は、例えば、C言語、JAVA登録商標、BASIC、PYTHON等である。アプリケーションプログラミングインターフェースAPI:この用語は、従来技術において一般に受け入れられている意味を持ち、あるソフトウェアが、別のソフトウェアと相互作用することを可能とするインターフェースを含む。プログラマーは、アプリケーション、ライブラリールーチン、オペレーティングシステム等の機能を使用するためのAPI呼び出を作成できる。本開示では、異種計算資源からなるコンピュータプラットフォームにおいて、ドメイン特化言語を使用する上での欠陥が幾つかあるということを認識している。この様な構成では、ソフトウェア開発者が、複数のプログラミング言語に熟練しているということが必要とされる。例えば、現行のJAVA登録商標技術と相互運用できるよう、開発者は、OPENCLカーネルまたは、メソッドをOPENCLで記述し、このカーネルとJVMの実行を調整するためのC/C言語のコードを記述し、更に、Java登録商標のJNIJava登録商標ネイティブインターフェースAPIを用いて、記述したC/C言語のコードと通信できるよう、Java登録商標コードを記述する必要が出てくるであろう。なお、C/C言語のコードのステップを回避可能とするオープンソースの純粋なJava登録商標バインディングがあるが、これは、Java登録商標言語、または、SDK/JDKの一部ではない。このことにより、これら言語とインターフェースに熟達していない開発者は、この類のソフトウェアの作成を面倒に感じることがある。種々のバージョンのソフトウェアを、ドメイン特化言語をサポートするシステム、及び、この様な言語をサポートしないシステム専用に開発する必要がある。このため、OPENCLに対応しないコンピュータシステムは、一部をOPENCLで記述したプログラムを起動できなくなるという恐れがある。更に、ソースコードが、異なる言語から構成されるような場合、コードのデバッグがより困難となる一般に、デバッグ用ソフトウェアは、特定のプログラム言語に合わせて設計されている。利用者は、ソースコードの一部をデバッグできるのに、デバッグソフトウェアは、ドメイン特化コードの箇所全体を飛ばしてしまうこともある。このため、本開示では、異種コンピューティングプラットフォームの計算資源の使用に通常求められるドメイン特化言語を、開発者が使わなくても良いように、この様な計算資源の利点を開発者が活用可能とする機構を提供している。以下の説明では、バイトコード管理下にあるランタイム環境、例えば、JAVA登録商標、FLASH、CLR等からをドメイン特化言語OPENCL、CUDA等へと変換し、この様なワークロードを異種コンピューティングプラットフォームへと自動展開する機構に関する実施形態を開示している。本明細書で使用される様に、用語自動的には、利用者からの入力を必要とせずに、タスクが実行されることを意味する。例えば、以下で説明するように、ある実施形態において、一組の命令を、ライブラリールーチンへと送り、この場合、ライブラリールーチンは、一組の命令を他のプロセッサーへとオフロードできるかどうかを自動で判定するよう実行可能である。ここで、用語自動的にとは、判定を実行すべきということを示す入力を利用者が供給せずに、ライブラリールーチンが要求時に判定を実行するのではなく、ライブラリールーチンは、そこへ符号化される1つ以上の基準に従って、判定を実行することを意味する。図1を参照すると、バイトコードをドメイン特化言語へ変換するよう構成された異種コンピューティングプラットフォーム10に関する一実施形態が、図示されている。図の通り、プラットフォーム10は、メモリー100、プロセッサー110、及び、プロセッサー120を含む。この実施形態では、メモリー100には、バイトコード102、タスクランナー112、制御プログラム113、命令114、ドライバー116、オペレーティングシステムOS117、及び、命令122が含まれる。一部の実施形態では、プロセッサー110は、構成要素112~117点線で図示を実行するよう構成され、一方、プロセッサー120は、命令122を実行するよう構成される。別の実施形態では、プラットフォーム10の構成を、変えても良い。メモリー100は、ある実施形態では、プラットフォーム10が利用できる情報を記憶するよう構成される。メモリー100は、1つの実体として示しているが、一部の実施形態では、図1で示されるような種々の要素を記憶するよう構成されたプラットフォーム10内の複数の構造に対応できる。一実施形態では、メモリー100は、一次記憶装置、例えば、フラッシュメモリー、ランダムアクセスメモリーRAM-SRAM、EDORAM、SDRAM、DDRSDRAM、RAMBUSRAM等、読み取り専用メモリーPROM、EEPROM等を含むことができる。ある実施形態では、メモリー100は、ハードディスクストレージ、フロッピー登録商標ディスクストレージ、リムーバブルディスクストレージ等の二次記憶装置を含めても良い。一実施形態において、メモリー100は、プロセッサー110、及び/または、120のキャッシュメモリーを含められる。実施形態によっては、メモリー100に、一次、二次、キャッシュメモリーの組み合わせを含むことも可能である。種々の実施形態では、メモリー100は、図1で示したものよりも多いまたは、少ない構成要素を含められる。プロセッサー110は、一実施形態では、汎用プロセッサーである。一実施形態において、プロセッサー110は、プラットフォーム10用の中央処理装置CPUである。プロセッサー110は、ある実施形態において、マルチスレッドスーパースカラープロセッサーである。一実施形態では、プロセッサー100は、互いに独立して動作するよう構成された複数のマルチスレッド実行コアを含む。実施形態によっては、プラットフォーム10は、プロセッサー110と類似の追加プロセッサーを含むことが可能である。端的には、プロセッサー110は、任意の適切なプロセッサーに相当する。プロセッサー120は、一実施形態において、プロセッサー110からオフロードされてきたワークロード即ち、命令、または、タスクの群を実行するよう構成されたコプロセッサーである。ある実施形態では、プロセッサー120は、専用プロセッサー、例えば、DSP、GPU等である。一実施形態において、プロセッサー120は、ASIC、FPGA等の高速ロジックである。プロセッサー120が、マルチスレッドスーパースカラープロセッサーである実施形態もある。実施形態によっては、プロセッサー120は、複数のマルチスレッド実行コアを含む。バイトコード102は、ある実施形態において、コンパイルされたソースコードである。一実施形態では、バイトコード102は、BASIC、C/C、FORTRAN、JAVA登録商標、PERL等の汎用プログラム言語のコンパイラーによって作成できる。ある実施形態では、バイトコード102は、プロセッサー110によって直接実行可能である。つまり、バイトコード102は、プロセッサー110用の命令セットアーキテクチャーISA内で定義された複数の命令を含むことができる。別の実施形態では、バイトコード102は、プロセッサー110によって実行可能な命令を生成または、命令の処理を調整するため、例えば、仮想マシンによって解釈できる。一実施形態において、バイトコード102は、全実行可能なプログラムに対応可能である。他の実施形態では、バイトコード102は、実行可能プログラムの一部に対応できる。種々の実施形態において、バイトコード102は、所与のプログラム用のJAVA登録商標コンパイラーのjava登録商標c命令によって作成された拡張子.class形式の複数のJAVA登録商標ファイルの1つに対応できる。ある実施形態では、バイトコード102は、並列化用に複数のタスク104A、104B即ち、ワークロードを指定する。以下で説明するように、種々の実施形態において、タスク104は、プロセッサー110、及び/または、プロセッサー120上で同時に実行可能である。一実施形態では、バイトコード102は、タスクランナー112に関連するアプリケーションプログラミングインターフェースAPIへの呼び出を作成することで、タスク104を指定する。このAPIによって、残りのソースコードの記述で使用されるのと同じフォーマット例えば、言語としてデータ並列問題即ち、同時に複数タスク104を実行することで起こりうる問題をプログラマーが表記することが可能となる。例えば、ある特定の実施形態において、開発者は、データ並列問題を符号化するために基底クラスを拡張することで、複数タスク104を指定するJAVA登録商標ソースコードを記述する。この基底クラスは、API内で定義され、バイトコード102は、拡張クラスを表している。そして、拡張クラスのインスタンスは、タスク104を実行するため、タスクランナー112へと供給される。実施形態によっては、バイトコード102は、並列化されるまたは、並列化が考慮される種々の組のタスク104を指定できる。タスクランナー112は、ある実施形態では、バイトコード102で指定されるタスク104をプロセッサー120へとオフロードするかどうかを判定するよう実行可能なモジュールである。一実施形態において、バイトコード102は、命令群タスクを指定するをタスクランナー112へと送る場合があり、それから、指定した命令群をプロセッサー120へと送るかどうかを判定できる。タスクランナー112は、種々の基準での判定に基くことが可能である。例えば、一実施形態において、ドライバー116が特定のドメイン特化言語をサポートしているかに少なくとも一部基き、タスクをオフロードするかどうかを、タスクランナー112によって判定できる。ある実施形態では、タスクランナー112がタスク104をプロセッサー120へオフロードするということを判定した場合、タスク104を表すドメイン特化言語として一組の命令を作成することにより、タスクランナー112は、プロセッサー120に対してタスク104を実行させる。本明細書で使用される様に、ドメイン特化命令は、ドメイン特化言語で記述された命令のことである。ある実施形態において、タスクランナー112は、バイトコード102に対応する拡張子.class形式のファイルに含まれるメタデータを用いて、バイトコード102をドメイン特化命令へと変換することで、一組の命令を作成する。別の実施形態では、元のソースコードが、利用可能なままであれば例えば、BASIC/JAVA登録商標/PERL等で見られる様に、タスクランナー112は、元のソースコードのドメイン特化命令へのテキスト変換を実行できる。図示の実施形態では、タスクランナー112は、これらの生成した命令をドライバー116へと供給してから、プロセッサー120による実行のための命令122を作成する。一実施形態において、タスクランナー112は、対応する組のタスク104の結果を、ドライバー116から受信可能であり、この結果は、ドメイン特化言語により使用されるフォーマットとして表記される。実施形態によっては、プロセッサー120は、一組のタスク104に関する結果を計算した後で、タスクランナー112は、ドメイン特化言語フォーマットからの結果を命令114によって利用可能なフォーマットへと変換するよう実行可能である。例えば、一実施形態において、タスクランナー112は、OPENCLデータ種別からの一組の結果を、JAVA登録商標データ種別へと変換できる。タスクランナー112は、種々のドメイン特化言語、例えば、OPENCL、CUDA、DIRECTCOMPUTE等の任意のものに対応できる。一実施形態において、タスクランナー112が、タスク104をオフロードしないということを判定した場合、プロセッサー110は、タスク104を実行する。種々の実施形態において、タスクランナー112は、タスク104を実行するよう実行可能なプロセッサー110用の命令114を生成または、生成を指示することで、タスク104の実行を命令できる。一部の実施形態では、タスクランナー112は、プロセッサー110上でのタスク104の並列実行のため、バイトコード102を最適化するよう実行できる。更に、レガシーコード上で、タスクランナー112を実行可能な実施形態もある。例えば、ある実施形態において、バイトコード102がレガシーコードである場合、タスクランナー112は、このレガシーコードによって実行されるタスクを、プロセッサー120へオフロードさせるか、または、プロセッサー110上で実行するため、レガシーコードを最適化することができる。種々の実施形態において、タスクランナー112は、タスク104をオフロードするかどうかの判定、一組のドメイン特化命令の作成、及び/または、実行時、つまり、バイトコード102を含むプログラムのプラットフォーム10による実行中におけるバイトコード102の最適化を行うよう実行可能である。他の実施形態では、タスクランナー112は、実行時間以前にタスク104をオフロードするかどうかを判定できる。例えば、一部の実施形態において、タスクランナー112は、バイトコード102を含むプログラムの次の実行のため、バイトコード102を前処理できる。ある実施形態では、タスクランナー112は、プロセッサー110により直接実行可能なプログラムである。つまり、メモリー100には、プロセッサー110用のISA内で定義されたタスクランナー112用の命令が含まれても良い。別の実施形態では、メモリー110は、プロセッサー110によって実行可能な命令を生成するため、制御プログラム113により解釈可能なタスクランナー112のバイトコードを含むことができる。タスクランナーについて、図2、及び、図4~6と併せて以下で説明する。制御プログラム113は、ある実施形態において、タスクランナー112、及び/または、バイトコード102の実行を管理するよう実行可能である。一部の実施形態では、制御プログラム113は、プラットフォーム10内の他の要素、例えば、ドライバー116、及び、OS117とのタスクランナー112の相互作用を管理できる。ある実施形態では、制御プログラム113は、バイトコード例えば、バイトコード102、及び/または、タスクランナー112のバイトコードからプロセッサー110によって実行可能な命令命令114等を生成するよう構成されたインタープリターである。例えば、ある実施形態において、タスクランナー112が、プロセッサー110上で一組のタスクを実行すると判定した場合、タスクランナー112は、バイトコード102の一部を制御プログラム113へと供給して、命令114を生成できる。制御プログラム113は、種々のインタープリター型言語、例えば、BASIC、JAVA登録商標、PERL、RUBY等の任意のものをサポートできる。一実施形態において、制御プログラム113は、物理的装置の1つ以上の属性を実装して、バイトコードを実行するよう構成された仮想マシンを実現するよう実行可能である。実施形態によっては、制御プログラム113には、二度と使用されることの無いメモリー位置を再要求するのに使用されるガーベッジコレクターを含む場合もある。制御プログラム113は、SUN社製のJAVA登録商標仮想マシン、ADOBE社製のAVM2、MICROSOFT社製のCLR等を含む種々の仮想マシンのうちの任意のものに対応できる。制御プログラム113を、プラットフォーム10中に含まなくても良い実施形態もある。命令114は、ある実施形態では、タスク104を実行するために、プロセッサー110により実行可能な命令に相当する。一実施形態において、命令114は、バイトコード102を解釈する制御プログラム113から生成される。上述の様に、ある実施形態において、制御プログラム113と連動して動作するタスクランナー112により、命令を生成できる。別の実施形態では、命令114が、バイトコード102の中に含まれる。種々の実施形態において、命令114は、実行用にプロセッサー120からオフロードされてきたタスク104から生成された結果に対して作用するよう実行可能な命令を含んでも良い。例えば、命令114には、タスク104における種々のタスクの結果に影響する命令を含められる。実施形態によっては、命令114は、特定タスク104に関連しないバイトコード102から生成された追加の命令を含むことができる。命令114の中に、タスクランナー112のバイトコードから生成された命令または、タスクランナー112からの命令を含められる実施形態もある。ドライバー116は、ある実施形態において、プラットフォーム10内のプロセッサー120、及び、他の構成要素間の相互作用を管理するよう実行可能である。ドライバー116は、種々の種類のドライバー、例えば、グラフィックスカードドライバー、サウンドカードドライバー、DSPカードドライバー、他の種類の周辺装置ドライバー等の任意のものに対応できる。一実施形態では、ドライバー116は、プロセッサー120のドメイン特化言語サポートを提供する。つまり、ドライバー116は、一組のドメイン特化命令を受信して、プロセッサー120が実行可能な対応する組の命令122を生成できる。例えば、ある実施形態では、ドライバー116は、所与の組のタスク104用のOPENCL命令を、プロセッサー120のISA命令へと変換して、変換済のISA命令をプロセッサーへと供給して、一組のタスク104を実行させることが可能である。当然のことながら、ドライバー116は、種々のドメイン特化言語のうちの任意のものをサポートできる。ドライバー116については、図3と併せて以下で説明する。OS117は、ある実施形態では、プラットフォーム10上のプログラムの実行を管理するよう実行可能である。OS117は、LINUX登録商標、WINDOWS登録商標、OSX、SOLARIS等の種々の公知のオペレーティングシステムのうちの任意のものに対応できる。ある実施形態では、OS117は、分散オペレーティングシステムの一部でも良い。種々の実施形態において、OSには、プラットフォーム10の1つ以上のハードウェア構成要素とプラットフォーム10上のソフトウェアとの相互作用を調整するための複数のドライバーを含められる。一実施形態では、ドライバー116は、OS117内で統合される。他の実施形態では、ドライバー116は、OS117の構成要素では無い。命令122は、ある実施形態では、タスク104を実行するために、プロセッサー120によって実行可能な命令を表している。前述の様に、ある実施形態において、命令122は、ドライバー116によって生成される。他の実施形態では、命令122は、例えば、タスクランナー112、制御プログラム113等によって個々に作成できる。一実施形態において、命令122は、プロセッサー120用のISA内で定義される。別の実施形態では、命令122は、プロセッサー120によって実行可能な対応する組の命令を生成するため、プロセッサー120が使用する命令で良い。種々の実施形態において、プラットフォーム10は、プラットフォーム10の複数の資源、例えば、プロセッサー110、120を使用するソフトウェアを、プログラマーが開発可能とする機構を提供する。ある場合では、OPENCLの様な特定のドメイン特化言語を理解していなくても、プログラマーは、1つの汎用言語例えば、JAVA登録商標を用いて、ソフトウェアを記述できる。ソフトウェアは、同じ言語で記述できるため、その言語をサポートするデバッガー例えば、統合開発環境ECLIPSEを介して、JAVA登録商標をデバッグするGNUデバッガーは、タスク104を実行するためAPI呼び出を行う部分を含むソフトウェアの部分全体をデバッグすることができる。タスクランナー112は、種々の実施形態において、実行時にタスクをオフロードするかどうかを判定するために実行可能で、しかも、この様なサポートは、所与のプラットフォーム10上に存在するかどうかを判定できることから、場合によっては、これらプラットフォームが特定のドメイン特化言語用のサポートを提供するかどうかに関係なく、1バージョンのソフトウェアを、複数のプラットフォーム用に記述できる。例えば、プラットフォーム10がタスク104をオフロードできない場合、タスクランナー112は、開発者のソフトウェアをより効率良く実行できるよう、これを最適化できる状態にある。実際、タスクランナー112は、一部の場合において、開発者が独自にソフトウェア最適化しようと試みた場合よりも、並列化のためのソフトウェアの最適化に優れている。図2を参照すると、タスクランナーソフトウェアモジュール112に関する一実施形態の表記が図示されている。上述の様に、タスクランナー112は、一組の命令例えば、プロセッサー110に割り当てられた命令を受信して、これらの命令を別のプロセッサー例えば、プロセッサー120へとオフロード即ち、再割り当てするかどうかを判定するよう実行可能なコードまたは、この様なコードを記憶するメモリーである。図示の通り、タスクランナー112は、判定ユニット210、最適化ユニット220、及び、変換ユニット230を含む。一実施形態において、制御プログラム113図2では図示せずは、タスクランナー112が実行する仮想マシンである。例えば、ある実施形態では、制御プログラム113は、JAVA登録商標仮想マシンに対応している。このタスクランナー112は、解釈されたJAVA登録商標バイトコードである。別の実施形態では、プロセッサー110は、制御プログラム113を使用せずに、タスクランナー112を実行可能である。判定ユニット210は、一実施形態において、タスク104をプロセッサー120へとオフロードするかどうかを判定するよう実行可能なプログラム命令を表している。図示された実施形態では、タスクランナー210は、バイトコード102または、バイトコード102の少なくとも一部の受信に呼応して、判定ユニット210の命令の実行を含む。一実施形態において、タスクランナー210は、バイトコード102を含む拡張子.class形式のJAVA登録商標ファイルの受信に呼応して、判定ユニット210の命令の実行を起動する。一実施形態において、判定ユニット210は、プラットフォーム10の特性に関連する1つ以上の初期基準からなる一組、及び/または、バイトコード102の初期解析に基いて、タスクをオフロードするかどうかを判定するよう実行可能な命令を含むことができる。種々の実施形態では、この様な判定は、自動的である。一実施形態において、判定ユニット210は、プラットフォーム10は、ドメイン特化言語複数可をサポートしているかどうかに少なくとも一部基き、一次判定を行うことを実行できる。サポートが存在していなければ、判定ユニット210は、種々の実施形態において、これ以上解析を実行しなくても良い。実施形態によっては、判定ユニット210は、バイトコード102が、ドメイン特化言語として表記不可能なデータ種別を参照するか、または、ドメイン特化言語として表記不可能なメソッドを呼び出すかどうかに少なくとも基いて、タスク104をオフロードするかどうかを判定する。例えば、特定のドメイン特化言語は、IEEE倍精度データ種別をサポートしていない場合がある。それ故、判定ユニット210は、倍精度浮動小数点数を含むJAVA登録商標ワークロードをオフロードしないということを判定できる。同様に、JAVA登録商標言語では、Stringデータ種別表記実際は、クラス形式をサポートしており、このデータ種別は、殆どのクラスとは異なり、JAVA登録商標仮想マシンによって認識可能であるが、OPENCLでは、この様な表記が無い。この結果、判定ユニット210は、ある実施形態において、この様なStringデータ種別を参照するJAVA登録商標ワークロードが、送られないということを判定できる。別の実施形態では、判定ユニット210は、更に、String文字列の使用が、他のOPENCLの表記可能形式へとマッピングできるかどうか、例えば、String参照を除去して、他のコード表記で交換できるかどうかを判定する解析を実行できる。ある実施形態において、一組の初期基準が満足されれば、タスクランナー112は、バイトコード102をドメイン特化命令に変換するための変換ユニット230内の命令実行を初期化可能である。ある実施形態では、判定ユニット210は、変換ユニット230が実行する間、新たな組の基準に基き、タスク104をオフロードするかどうかの判定を継続して行う。例えば、一実施形態において、判定ユニット210は、バイトコード102が無限ループを生じさせる実行パスを有すると判定されるかどうかに少なくとも一部基いて、タスク104をオフロードするかどうかを判定する。ある実施形態において、判定ユニット210は、バイトコード102が、不正な動作、例えば、再帰処理の使用を実行しようとしているかどうかに少なくとも一部基き、タスク104をオフロードするかどうかを判定する。更に、判定ユニット210は、一組のタスク104の1つ以上の過去の実行に少なくとも一部基いて、タスク104をオフロードするかどうかの判定を実行できる。例えば、一実施形態において、判定ユニット210は、一組のタスク104に関する過去の判定に関する情報、例えば、特定の組のタスク104をオフロードできたかどうかに関する証明データを記憶できる。実施形態によっては、判定ユニット210は、タスクランナー112が、一組のタスク104について、過去に生成されたドメイン特化命令からなる一組を記憶するかどうかに少なくとも一部基き、タスク104をオフロードするかどうかを判断する。種々の実施形態において、判定ユニット210は、バイトコード102の単一部分の過去の反復処理に関する情報、例えば、バイトコード102の一部が、同じ組のタスク104をループ処理として複数回指定しているかどうかを収集できる。或いは、判定ユニット210は、プログラムの種々の部分においてバイトコード102を複数回含むプログラムの実行から生成される過去の実行に関する情報を収集できる。一実施形態において、判定ユニット210は、タスク104の過去の実行効率に関する情報を収集できる。例えば、一部の実施形態では、タスクランナー112が、タスク104をプロセッサー110、及び、プロセッサー120により実行させることが可能である。判定ユニット210は、プロセッサー110がプロセッサー120よりも一組のタスクをより効率良く例えば、短時間で実行したということを判定した場合、判定ユニット210は、タスク104の次の実行をオフロードしないよう決定できる。或いは、判定ユニット210は、プロセッサー120が一組のタスクをより効率良く実行できるということを判定した場合、ユニット210は、例えば、一組のタスクの次の実行をオフロードするための指示データをキャシュすることができる。判定ユニット210については、図4と併せて、以下で詳細に述べる。最適化ユニット220は、一実施形態では、プロセッサー110上でのタスク104を実行するため、バイトコード102を最適化するよう実行可能なプログラム命令を表している。一実施形態では、タスクランナー112は、判定ユニット210により、タスク104をオフロードしないということが判定されたら、最適化ユニット220の実行を初期化できる。種々の実施形態において、最適化ユニット220は、バイトコード102を解析して、並列処理を向上させるよう変更可能なバイトコード102の一部を特定する。一実施形態では、この様な部分が特定されると、最適化ユニット220は、タスク104用にスレッドプールサポートを追加するよう、バイトコード120を変更できる。他の実施形態では、最適化ユニット220は、他の技術を用いて、タスク104の性能を高められる。バイトコード102の一部を変更したら、最適化ユニット220は、一部の実施形態において、変更済のバイトコード102を、命令114への解釈のため、制御プログラム113に供給する。バイトコード102の最適化について、図5と併せて以下で説明する。変換ユニット230は、一実施形態では、プロセッサー120上でタスク104を実行するため、一組のドメイン特化命令を生成するよう実行可能なプログラム命令を表している。ある実施形態では、タスクランナー112の実行には、一組の初期基準がタスク104のオフロードを満足したということが判定ユニット210により判定された時の変換ユニット230の実行初期化が含まれる。図示の実施形態において、変換ユニット230は、プロセッサー120に対してタスク104を実行させるため、一組のドメイン特化命令をドライバー116へと供給する。一実施形態において、変換ユニット230は、ドライバー116から、タスク104に関する対応する組の結果を受信でき、この結果は、ドメイン特化言語フォーマットで表示される。ある実施形態では、変換ユニット230は、ドメイン特化言語フォーマットからの結果を、命令114によって利用可能なフォーマットへ変換する。例えば、ある実施形態において、タスクランナー112は、ドライバー116から一組の計算された結果を受信したら、タスクランナー112は、OPENCLデータ種別からの一組の結果を、JAVA登録商標データ種別へと変換できる。一実施形態において、タスクランナー112例えば、変換ユニット230は、タスク104の次の実行用に生成された一組のドメイン特化命令を記憶するよう実行可能である。実施形態によっては、変換ユニット230は、バイトコード102を中間表記へと変換し、この中間表記から、一組のドメイン特化命令を生成することで、一組のドメイン特化命令を生成する。バイトコード102のドメイン特化言語への変換は、図6と併せて、以下でより詳細に説明する。注意すべき点として、ユニット210、220、及び、230は、例示的なものであり、タスクランナー112の種々の実施形態では、命令は、個別にグループ化できる。図3を参照すると、ドライバー116の一実施形態が図示されている。図示の通り、ドライバー116は、ドメイン特化言語ユニット310を含む。例示的な実施形態において、ドライバー116は、OS117内に組み込まれる。別の実施形態では、ドライバー116は、OS117から独立して実装可能である。ドメイン特化言語ユニット310は、一実施形態において、ドメイン特化言語複数可用のドライバーサポートを供給するよう実行可能である。一実施形態において、ユニット310は、変換ユニット230から一組のドメイン特化命令を受信し、対応する組の命令122を生成する。種々の実施形態では、ユニット310は、前述の様な種々のドメイン特化言語のうちの任意のものをサポートできる。ある実施形態において、ユニット310は、プロセッサー120用のISA内で定義された命令122を生成する。別の実施形態では、ユニット310は、プロセッサー120に対して、タスク104を実行させる非ISA命令を生成する。例えば、プロセッサー120は、命令122を用いて、プロセッサー120によって実行可能な対応する組の命令を生成できる。プロセッサー120が、一組のタスク104を実行すると、ドメイン特化言語ユニット310は、ある実施形態において、一組の結果を受信し、これらの結果をドメイン特化言語のデータ種別に変換する。例えば、ある実施形態において、ユニット310は、受信した結果をOPENCLデータ種別へと変換できる。図示の実施形態において、ユニット310は、変換済の結果を変換ユニット230へと供給したら、ドメイン特化言語のデータ種別からの結果を、命令114によりサポートされるデータ種別、例えば、JAVA登録商標データ種別へと変換できる。図4を参照すると、判定ユニット210の一実施形態が、図示されている。図示の実施形態では、判定ユニット210には、受信したバイトコード102に対する種々の試験を実施するための複数のユニット410~460が含まれる。別の実施形態では、判定ユニット210は、ここで示してあるものに追加したユニット、これよりも少ないユニット、或いは、別のユニットを含めても良い。実施形態によっては、判定ユニット210は、種々の示される試験を並列実行できる。一実施形態では、判定ユニット210は、バイトコード102からのドメイン特化命令の生成中の種々の段階において、基準の種々の1つを試験できる。サポート検知ユニット410は、一実施形態において、プラットフォーム10が、ドメイン特化言語複数可をサポートしているかどうかを判定するよう実行可能なプログラム命令に相当する。一実施形態において、ユニット410は、OS117、例えば、システムレジスターから受信した情報に基いて、サポートが存在していることを判定する。別の実施形態では、ユニット410は、ドライバー116から受信した情報に基き、サポートが存在するかどうかを判定する。別の実施形態では、ユニット410は、他のデータ源からの情報に基き、サポートが存在することを判定する。ある実施形態において、ユニット410は、サポートが存在しないということが判定された場合、タスク104がプロセッサー120へオフロードできないということが、判定ユニット210によって結論付けられる。データ種別判定ユニット420は、ターゲットドメイン特化言語、即ち、ドライバー116によってサポートされるドメイン特化言語として表記できないデータ種別全てを、バイトコード102が参照しているかどうかを判定するよう実行可能なプログラム命令に相当する。例えば、バイトコード102は、ある実施形態では、JAVA登録商標バイトコードであれば、データ種別、例えば、int型、float型、double型、byte型、または、この様な基本データ型からなる配列は、OPENCLに対応するデータ種別を持たせられる。ある実施形態において、ユニット420は、一組のタスク104について、ターゲットドメイン特化言語として表記できないデータ種別を、バイトコード102が参照していると判定した場合、判定ユニット210は、この一組のタスク104をオフロードしないということを判定できる。機能判定マッピングユニット430は、ある実施形態において、ターゲットドメイン特化言語によってサポートされていない全ての関数例えば、ルーチン/メソッドを、バイトコード102が呼び出しているかどうかを判定するよう実行可能なプログラム命令に相当する。例えば、バイトコード102が、JAVA登録商標バイトコードである場合、ユニット430は、OPENCLのものに相当しないJAVA登録商標専用の関数例えば、System.out.printlnコマンドを呼び出しているかどうかを判定できる。一実施形態において、ユニット430は、バイトコード102が、一組のタスク104について未サポートの関数を呼び出していると判定したら、判定ユニット210は、この一組のタスク104をオフロードすることを中断するよう決定できる。一方、バイトコード102が、ターゲットドメイン特化言語でサポートされるこれらの関数のみ例えば、OPENCLのsqrt関数と互換性のあるJAVA登録商標のMath.sqrt関数を呼び出す場合、判定ユニット210は、継続してオフロードすることを許可できる。コスト伝送判定ユニット440は、一実施形態において、一組のタスク104のグループサイズ即ち、並列タスク数が、所定の閾値を下回ること、つまり、オフロードのコストが、コスト効率的ではでないと示しているかどうかを判定するよう実行可能なプログラム命令を表している。一実施形態において、ユニット440は、グループサイズが、閾値を下回ると判定したら、判定ユニット210は、一組のタスク104のオフロードを中断するよう判定できる。ユニット440は、他の種々のチェックを実行して、オフロードの見込まれる利点、及び、見込みコストを比較する。不正機能検知ユニット450は、ある実施形態において、バイトコード102が、構文的には正しいが不正な機能を用いているかどうかを判定するよう実行可能なプログラム命令を表している。例えば、種々の実施形態において、ドライバー116は、メソッド/関数が再帰処理を使用することを禁止するあるバージョンのOPENCL例えば、このバージョンには、再帰処理で要求されるスタックフレームを表記する手法が備えられていないをサポートできる。一実施形態において、ユニット450は、JAVA登録商標コードが再帰処理を実行できると判定した場合、判定ユニット210は、想定外のランタイムエラーをもたらす恐れのあるこのJAVA登録商標コードを展開しないよう決定できる。一実施形態では、ユニット450が、一組のタスク104におけるこの様な利用を検知した場合、判定ユニット210は、オフロードを中断するよう決定できる。無限ループ検知ユニット460は、ある実施形態において、バイトコード102が、無限ループを起こす可能性のある、つまり、不定/無限ループをもたらす実行の全パスを有するかどうかを判定するよう実行可能なプログラム命令に相当する。一実施形態では、ユニット460は、一組のタスク104に関連するこの様な任意の経路を検知した場合、判定ユニット210は、この一組のタスク104のオフロードを中断するよう決定できる。前述の様に、判定ユニット210は、バイトコード102の変換プロセス中の種々の工程において、種々の基準を検証できる。任意の時点において、一組のタスクに関する試験の1つが失敗した場合、判定ユニット210は、種々の実施形態において、オフロードを中断するようすぐに決定できる。この方法で基準を検証することにより、判定ユニット210は、ある状況において、バイトコード102の変換時の膨大な計算資源を浪費する前に、オフロードの中断決定にすぐに到達できる。図5を参照すると、最適化ユニット220の一実施形態が図示されている。タスクランナー112は、一実施形態では、判定ユニット210による一組のタスク104のオフロードの中断決定に呼応して、最適化ユニット220の実行を初期化できる。別の実施形態において、タスクランナー112は、変換ユニット230と連携して、例えば、判定ユニット210は、オフロードを中断するかどうかを決定する前に、最適化ユニット220の実行を初期化できる。図示の実施形態では、最適化ユニット220は、最適化判定ユニット510、及び、スレッドプール変更ユニット520を含む。実施形態によっては、最適化ユニット220には、他の手法でバイトコード102を最適化するための追加のユニットも含まれる。最適化判定ユニット510は、ある実施形態では、プロセッサー110によるタスク104の実行を改善するよう変更可能なバイトコード102の一部を特定するために実行可能なプログラム命令に相当する。一実施形態において、ユニット510は、タスクランナー112に関連するAPIへの呼び出を含むバイトコード102の一部を特定できる。ある実施形態では、ユニット510は、並列化用のバイトコード102内の特定の構造要素例えば、ループを特定できる。ユニット510は、ある実施形態において、変換ユニット230により生成されたバイトコード102の中間表記を解析することで、部分を特定できる図6と併せて以下で述べる。一実施形態では、ユニット510は、一組のタスク104の性能が向上するよう、バイトコード102の一部を変更可能であると判定された場合、最適化ユニット210は、スレッドプール変更ユニット520の実行を初期化できる。ユニット510は、所定の機構により、バイトコード102の一部を改善できないと判定したら、ユニット510は、一実施形態において、変更を施さずに、改善できないバイトコードの一部を制御プログラム113へと供給することで、制御プログラム113に対して、対処用の命令114を生成させる。スレッドプール変更ユニット520は、ある実施形態において、タスク104を実行するため、プロセッサー110が使用するスレッドプールを作成するサポートを追加するよう実行可能なプログラム命令に相当する。例えば、種々の実施形態において、ユニット520は、オフロードが不可能であるということを仮定して、元のターゲットプラットフォーム例えば、プロセッサー110上のデータ並列ワークロードの実行の調製中に、バイトコード102を変更できる。従って、タスクランナー112を使用し、且つ、プログラマーによって拡張可能な基底クラスを供給することで、コードを並列化しようとしていること例えば、効率良いデータ並列化方式の実行を、プログラマーは宣言できる。JAVA登録商標環境の場合、このことは、コードを変換せずに、その実行を調整することで、タスクランナー112の規定JAVA登録商標実装が、スレッドプールを使用できるということを意味している。コードがオフロード可能であれば、コードがオフロードされるプラットフォームにより、並列実行が調整されるということが仮定される。本明細書で使用される様に、スレッドプールは、実行用の複数スレッドを含むキューのことである。スレッドは、ある実施形態において、所与の組のタスクの各タスク104について作成可能である。スレッドプールを使用する場合、プロセッサー例えば、プロセッサー110は、スレッド実行に計算資源を利用できるようになった時に、このプールからスレッドを移動させる。スレッドが実行を完了したら、スレッド実行の結果は、ある実施形態において、この結果を使用できるようになるまで、該当キューの中に入れられる。バイトコード102が、2000個のタスク104からなる一組を指定する状況では、ある実施形態において、ユニット520は、2000スレッドをタスク104ごとに1つ含むスレッドプールを作成することが実行できるよう、バイトコード102にサポートを追加できる。一実施形態において、プロセッサー110は、クアッドコアプロセッサーであり、各コアは、タスク104のうちの500個を実行できる。各コアが、1度に4スレッドを実行できれば、16スレッドを同時に実行できる。従って、プロセッサー110は、タスク104を逐次に実行する場合よりも短時間で一組のタスク104を実行できる。図6を参照すると、変換ユニット230の一実施形態が図示されている。前述の様に、一実施形態において、タスクランナー112は、一組のタスク104をオフロードするための一組の初期基準が満たされたということが、判定ユニット210により判定されたことに呼応して、変換ユニット230の実行を初期化できる。別の実施形態では、タスクランナー112は、最適化ユニット220と連動して、変換ユニット230の実行を初期化できる。図示の実施形態では、変換ユニット230は、実体化ユニット610、ドメイン特化言語生成ユニット620、及び、結果変換ユニット630を含む。別の実施形態では、変換ユニット230の構成は、異なっていても良い。実体化ユニット610は、一実施形態において、バイトコード102を実体化して、バイトコード102の中間表記を生成するよう実行可能なプログラム命令に相当する。本明細書で使用されるように、実体化とは、内部に含まれる情報を抽象化するため、バイトコード102を復号化するプロセスのことを言及する。一実施形態においては、ユニット610は、バイトコード102を解析して、実行中に使用される定数を特定することを開始する。ある実施形態では、ユニット610は、整数、ユニコード、文字列等の定数について、拡張子.class形式のJAVA登録商標ファイルのconstant_pool部を解析することで、バイトコード102における定数を特定する。実施形態によっては、ユニット610は、更に、拡張子.class形式のファイルの属性部を解析して、バイトコード102の中間表記を生成するのに利用可能な属性情報を再構成する。更に、一実施形態では、ユニット610は、バイトコード102を解析して、バイトコードが使用する全てのメソッドを特定する。実施形態によっては、ユニット610は、拡張子が.class形式のJAVA登録商標ファイルのメソッド部を解析することで、メソッドを特定する。一実施形態において、ユニット610は、定数、属性、及び/または、メソッドに関する情報を判定したら、ユニット610は、バイトコード102中の命令の復号化を開始できる。実施形態によっては、ユニット610は、復号化命令、及び、解析済の情報から式木を構築することで、中間表記を生成できる。一実施形態において、ユニット610が、情報の式木への追加を完了したら、ユニット610は、バイトコード102中の高レベルの構造、例えば、ループ文、入れ子状の判定文等を特定する。ある実施形態では、ユニット610は、バイトコード102によって読み取られることが分かっている特定の変数、或いは、アレーを特定できる。実体化に関する他の情報については、CristinaCifuentesによる逆コンパイル用の構造化アルゴリズム1993年で見ることができる。ドメイン特化言語生成ユニット620は、ある実施形態では、実体化ユニット610によって生成された中間表記からドメイン特化命令を生成するよう実行可能なプログラム命令に相当する。一実施形態において、ユニット620は、実体化ユニット610によりバイトコード102内で特定された対応する定数、属性、または、メソッドを含むドメイン特化命令を生成できる。実施形態によっては、ユニット620は、バイトコード102内のものと対応する高レベル構造を有するドメイン特化命令を生成できる。種々の実施形態では、ユニット620は、実体化ユニット610により収集された他の情報に基き、ドメイン特化命令を生成できる。実施形態によっては、実体化ユニット610は、バイトコード102に読み取られることが分かっている特定の変数、または、アレーを特定した場合、ユニット620は、コード最適化を可能とするため、アレー/値をREADONLY読み取り専用ストレージに入れるか、または、アレー/値をREADONLY読み取り専用としてマーキングするよう、ドメイン特化命令を生成できる。同様に、ユニット620は、WRITE_ONLY書き込み専用、または、READ_WRITE読み書き両対応として値をタグ付けするドメイン特化命令を作成できる。結果変換ユニット630は、一実施形態において、タスク104の結果をドメイン特化言語フォーマットからバイトコード102によりサポートされるフォーマットへと変換するよう実行可能なプログラム命令に相当する。例えば、ある実施形態では、ユニット630は、結果例えば、整数、ブーリアン、浮動小数点等を、OPENCLデータフォーマットからJAVA登録商標データフォーマットへと変換できる。実施形態によっては、ユニット630は、インタープリター例えば、制御プログラム113によって保持されるデータ構造表記へとデータを複製することで、結果を変換する。ユニット630が、ビッグエンディアン表記からリトルエンディアン表記へとデータを変換できる実施形態もある。一実施形態では、タスクランナー112は、一組のタスク104の実行から生成される一組の結果を記憶するための一組のメモリー位置を確保する。実施形態によっては、タスクランナー112は、一組のメモリー位置を確保してから、ドメイン特化言語生成ユニット620が、ドメイン特化命令をドライバー116へと供給する。ある実施形態では、ユニット630は、プロセッサー120が一組のタスク104に関する結果を生成する間、制御プログラム113のガーベッジコレクターがメモリー位置の再割り当てを抑止する。これによって、ユニット630は、ドライバー116からの受信時に、結果をメモリー位置に入れることができる。前述のユニットの機能を使用する種々の方法を、以下に紹介する。図7を参照すると、コンピューティングプラットフォームにおいてワークロードを自動展開する方法700の一実施形態が図示されている。一実施形態において、プラットフォーム10は、プログラム例えば、バイトコード102によって指定されるワークロード例えば、タスク104をコプロセッサー例えば、プロセッサー120へとオフロードする方法700を実行する。実施形態の一部において、プラットフォーム10は、バイトコード例えば、タスクランナー112のを解釈する制御プログラム制御プログラム113等によって生成されるプログラム命令例えば、プロセッサー110上を実行することで、方法700を実行する。図示の実施形態では、方法700は、ステップ710~750を含む。別の実施形態では、方法700のステップは、追加または、減少できる。ステップ710~750の種々のステップは、少なくとも一部が同時に実行できる。ステップ710において、プラットフォーム10は、汎用言語で開発され、データ並列問題を含むプログラム例えば、バイトコード102に対応するか、または、バイトコード102を含むを受信する。一部の実施形態では、API内で定義された基底クラスを拡張することで、開発者がデータ並列問題を表記可能とするAPIを用いて、プログラムをJAVA登録商標で開発している。別の実施形態では、他の言語、例えば、前述の1つを用いて、プログラムを開発できる。他の実施形態では、データ並列問題を、他の方法で表記できる。一実施形態において、プログラムは、例えば、制御プログラム113により解釈可能なインタープリター式バイトコードで良い。別の実施形態では、プログラムは、解釈可能でない実行可能バイトコードも可能である。ステップ720において、プラットフォーム10は、例えば、判定ユニット210を用いてプログラムを解析して、1つ以上のワークロードタスク104を、例えば、プロセッサー120の様なコプロセッサー用語コプロセッサーは、実行法800のものとは異なるプロセッサーを示すために使用されるへとオフロードするかどうかを判定する。ある実施形態では、プラットフォーム10は、プログラムの拡張子が.class形式のJAVA登録商標ファイルを解析して、オフロードを実行するかどうかを判定できる。プラットフォーム10による判定は、前述の基準の種々の組み合わせが可能である。一実施形態においては、プラットフォーム10は、一組の初期基準に基いて、一次判定を実行する。ある実施形態では、各初期基準が満足された場合、方法700は、ステップ730、740へと進むことができる。一実施形態において、プラットフォーム10は、ステップ730、740の実行中、種々の追加基準に基き、ワークロードをオフロードするかどうかを継続して判定できる。種々の実施形態では、プラットフォーム10による解析は、過去にオフロードされたワークロードに関するキャッシュ済み情報に基いて可能である。ステップ730では、プラットフォーム10は、例えば、変換ユニット230を用いて、プログラムを中間表記へと変換する。ある実施形態では、プラットフォーム10は、プログラムの拡張子が.class形式のJAVA登録商標ファイルを解析して、プログラムによって使用される定数、属性、及び/または、メソッドを特定することで、プログラムを変換する。実施形態によっては、プラットフォーム10は、プログラム中の高レベル構造、例えば、ループ文、入れ子状の判定文等を特定するため、プログラムの命令を復号化する。一部の実施形態では、プラットフォーム10は、プログラムの実体化により収集される情報を表現する式木を生成する。種々の実施形態において、プラットフォーム10は、前述の種々の方法のうちの任意のものを使用できる。実施形態の一部では、この中間表記を解析して、ワークロードをオフロードするかどうかを更に判定できる。ステップ740では、プラットフォーム10は、例えば、変換ユニット230を用いて、中間表記をドメイン特化言語へと変換する。ある実施形態では、プラットフォーム10は、ステップ730において収集された情報に基き、ドメイン特化命令例えば、OPENCLを生成する。ステップ730で構築された式木からドメイン特化命令を、プラットフォーム10によって生成する実施形態もある。ある実施形態では、プラットフォーム10は、ドメイン特化命令を、コプロセッサープロセッサー120のドライバー116等に供給し、コプロセッサーに対して、オフロードされたワークロードを実行させる。ステップ750では、プラットフォーム10は、例えば、変換ユニット230を用いて、オフロードされたワークロードの結果を、プログラムによってサポートされるデータ種別へと変換し戻す。一実施形態では、プラットフォーム10は、OPENCLデータ種別からの結果を、JAVA登録商標データ種別へと変換し戻す。結果が変換されたら、変換済の結果を使用するプログラム命令を実行できる。一実施形態において、プラットフォーム10は、結果を記憶するためのメモリー位置を割り当ててから、ドメイン特化命令をコプロセッサーのドライバーへと供給する。一部の実施形態では、コプロセッサーが結果を生成する間、プラットフォーム10は、割り当てられたメモリー位置が、制御プログラムのガーベッジコレクターにより再利用されることを抑止できる。注意すべき点として、方法700は、受信された種々のプログラムについて、複数回実行できる。更に、方法700は、同じプログラム例えば、一組の命令が、再度受信された時、反復できる。同じプログラムを、二度受信したら、ステップ710~750の何れかを、省くことができる。前述の様に、ある実施形態では、プラットフォーム10は、ステップ720~740中に生成された情報の様な過去にオフロードされたワークロードに関する情報を、キャシュできる。プログラムを、再度受信したら、プラットフォーム10は、一実施形態において、ステップ720における大まかな判定、例えば、ワークロードが過去に、オフロードに成功できているかどうかの判定を実行できる。一部の実施形態では、プラットフォーム10は、ステップ730~740を実行する代わりに、更に、過去にキャッシュされたドメイン特化の命令を使用できる。同じ組の命令を再受信するような実施形態では、ステップ750は、前述と類似の方法で実行可能である。更に、一組のワークロードが種々の入力を用いて複数回実行されていることが、プログラムによって指定されている場合、方法700の種々のステップを反復できる。この様な状況では、ステップ730~740を省くことが可能であり、過去にキャシュされたドメイン特化命令を、使用できる。種々の実施形態において、ステップ750を依然として実行できる。図8を参照すると、コンピューティングプラットフォームにおいてワークロードを自動で展開する方法の別の実施形態が、図示されている。一実施形態において、プラットフォーム10は、タスクランナー112を実行して、方法800を行う。一部の実施形態において、ランタイム時にタスクランナー112のバイトコードを解釈する際、プラットフォーム10は、制御プログラム113により生成される命令を実行することで、プロセッサー110上でタスクランナー112を実行する。図示の実施形態において、方法800は、ステップ810~840を含む。他の実施形態では、方法800のステップを、追加または、少なくできる。ステップ810~840の任意のステップを、同時に実行できる。ステップ810では、タスクランナー112は、一組のタスク例えば、タスク104を指定する一組のバイトコードバイトコード102等を受信する。前述の様に、ある実施形態では、バイトコード102は、タスク104を指定するタスクランナー112に関連するAPIの呼び出を含むことができる。例えば、ある特定の実施形態では、開発者は、API内で定義された基底クラスを拡張することで、複数のタスク104を指定するJAVA登録商標ソースコードを記述する。拡張されたクラスは、バイトコード102に相当する。そして、拡張されたクラスのインスタンスは、タスクランナー112へと供給されて、タスク104を実行する。一部の実施形態では、ステップ810は、前述のステップ710と類似の方法で実行可能である。ステップ820では、タスクランナー112は、一組のタスクをコプロセッサー例えば、プロセッサー120へとオフロードするかどうかを判定する。一実施形態では、タスクランナー112は、例えば、判定ユニット210を用いてプログラムの拡張子が.class形式のJAVA登録商標ファイルを解析して、タスク104をオフロードするかどうかを決定できる。ある実施形態において、タスクランナー112は、一組の初期基準に基き、一次判定を実行できる。一部の実施形態では、各初期基準が満たされた場合、方法800は、ステップ830へと進むことができる。一実施形態において、ステップ830が実行される間、プラットフォーム10は、ワークロードをオフロードするかどうかを、種々の追加の基準に基いて継続して判定することが可能である。種々の実施形態において、タスクランナー112による解析は、過去にオフロードされたタスク104に関するキャッシュ情報に少なくとも一部基いても良い。タスクランナー112による判定は、前述の種々の基準のうちの任意のものに基いても良い。ある実施形態では、ステップ820は、前述のステップ720と類似の方法で実行できる。ステップ830では、タスクランナー112は、一組のタスクを実行するため、一組の命令を生成させる。ある実施形態では、ドメイン特化言語フォーマットを有する一組のドメイン特化命令を生成して、一組のドメイン特化命令をドライバー116へと供給することにより、種々のフォーマットの一組の命令が得られるよう、一組の命令を生成させる。例えば、ある実施形態において、タスクランナー112は、一組のOPENCL命令を生成して、これらの命令をドライバー116へと供給できる。一実施形態では、ドライバー116は、更に、コプロセッサー用の一組の命令例えば、コプロセッサーのISA内の命令を生成できる。ある実施形態において、タスクランナー112は、一組のバイトコードを実体化して、一組のバイトコードの中間表記を生成し、更に、中間表記を変換して、一組のドメイン特化命令を生成することにより、一組のドメイン特化命令を生成できる。ステップ840では、タスクランナー112は、一組の命令をコプロセッサーに供給させることで、一組の命令をコプロセッサーに実行させる。ある実施形態において、タスクランナー112は、生成された一組のドメイン特化命令をドライバー116に供給することで、一組の命令をコプロセッサーへ供給する。コプロセッサーが、ドライバー116から供給される一組の命令を実行すると、コプロセッサーは、ある実施形態において、一組の命令の実行結果をドライバー116へと供給可能である。一実施形態において、タスクランナー112は、結果をバイトコード102によりサポートされるデータ種別へと変換し戻す。ある実施形態において、タスクランナー112は、OPENCLデータ種別からの結果を、JAVA登録商標データ種別へと変換し戻す。一部の実施形態では、タスクランナー112は、生成された結果の記憶に使用されるメモリー位置をガーベッジコレクターが再利用することを防止できる。結果が変換されたら、変換された結果を使用するプログラムの命令を実行できる。方法700と同様に、方法800は、受信された種々のプログラムのバイトコードについて、複数回実行できる。更に、同じプログラムが、再度受信されるか、または、同じバイトコードの複数のインスタンスを含めば、方法800を反復実行できる。同じバイトコードが、二度受信されると、ステップ810~840の何れかを省くことができる。前述の様に、ある実施形態では、タスクランナー112は、ステップ820~840中に生成された情報の様な過去にオフロードされたタスク104に関する情報をキャッシュできる。バイトコードを再度受信した場合、タスクランナー112は、ある実施形態において、ステップ820において、タスク104をオフロードするための概略的な判定を実行できる。そして、タスクランナー112は、ステップ830を実行する代わりに、過去にキャッシュされたドメイン特化命令を用いて、ステップ840を実行可能である。注意すべき点として、他の実施形態では、方法800を異なる様式で実行できる。ある実施形態では、タスクランナー112は、一組のタスクステップ810におけるを指定する一組のバイトコードを受信できる。そして、タスクランナー112は、一組のタスクをコプロセッサーへとオフロードする判定この判定は、タスクランナー112以外のソフトウェアによって実行可能であるに呼応して、一組のタスクステップ830においてを実行するための一組の命令を生成させる。更に、タスクランナー112は、一組の命令を、実行のためにコプロセッサーへと供給させるステップ840。このため、実施形態によっては、方法800の中に、ステップ820が含まれないことがある。図9を参照すると、プログラム命令の例示的なコンパイル900に関する一実施形態が、図示されている。図示の実施形態では、コンパイラー930は、ソースコード910、及び、ライブラリー920をコンパイルして、プログラム940を生成する。別の実施形態では、コンパイル900には、ソースコード、及び/または、ライブラリーソースコードの追加の部分のコンパイルも含まれる。ある実施形態では、コンパイル900は、使用するプログラム言語に応じて、個別に実施できる。ソースコード910は、ある実施形態では、データ並列問題を実行するため、開発者によって記述されたソースコードである。図示の実施形態では、ソースコード910には、並列化用の1つ以上の組のタスクを指定するためのライブラリー920への1つ以上のAPI呼び出912が含まれる。ある実施形態において、API呼び出912は、データ並列問題を表すため、ライブラリー920内で定義されたAPI基底クラス922の拡張クラス914を指定する。ソースコード910は、上記で述べた様な種々の言語の中の任意のもので記述可能である。ライブラリー920は、一実施形態において、API基底クラス922、及び、タスクランナーソースコード924を含むタスクランナー112用のAPIライブラリーである。注意:タスクランナーソースコード924は、本明細書においてライブラリールーチンと呼ばれる。ある実施形態では、API基底クラス922には、ソースコード910と共にコンパイルして、バイトコード942を生成するライブラリーソースコードが含まれる。種々の実施形態において、API基底クラス922は、ソースコード910によって利用可能な1つ以上の変数、及び/または、関数を定義できる。前述の様に、API基底クラス922は、一部の実施形態では、データ並列問題を表現する1つ以上の拡張クラス914を生成するため、開発者によって拡張可能なクラスである。ある実施形態では、タスクランナーソースコード924は、タスクランナーバイトコード944を生成するためにコンパイル可能なソースコードである。タスクランナーバイトコード944は、一部の実施形態では、所与の組のバイトコード942について一意であって良い。別の実施形態では、タスクランナーバイトコード944は、タスクランナーバイトコード944から独立してコンパイルされた種々の組のバイトコード942により使用可能であっても良い。前述の様に、コンパイラー930は、一実施形態において、ソースコード910、及び、ライブラリー920をコンパイルして、プログラム940を生成するよう実行可能である。ある実施形態において、コンパイラー930は、プロセッサー例えば、プロセッサー110によって実行されるプログラム命令を生成する。別の実施形態では、コンパイラーは、実行時に実行可能命令を生成するよう解釈されるプログラム命令を生成する。一実施形態では、ソースコード910は、ソースコード910でコンパイルされるライブラリー例えば、ライブラリー920を指定する。そして、コンパイラー930は、これらのライブラリーからライブラリーソースコードを検索して、これをソースコード910と共にコンパイルできる。コンパイラー930は、上記で述べた種々の言語の任意のものをサポートできる。プログラム940は、ある実施形態では、プログラム10によって実行可能なまたは、プラットフォーム10上で実行する制御プログラム112によって解釈可能なコンパイル済プログラムである。図示の実施形態において、プログラム940は、バイトコード942、及び、タスクランナーバイトコード944を含む。例えば、一実施形態では、プログラム940は、バイトコード942、及び、バイトコード944についてそれぞれ.拡張子が.class形式のファイルを含む拡張子が.jar形式のJAVA登録商標のファイルに対応可能である。別の実施形態では、バイトコード942、及び、バイトコード944は、異なるプログラム940に対応可能である。種々の実施形態において、バイトコード942は、上記のバイトコード102に対応する注意:バイトコード944は、本明細書においてコンパイル済ライブラリールーチンと呼ばれる。図11を参照して説明するように、コンピュータ可読記憶媒体上には、構成要素910~940のうちの任意のもの、または、構成要素910~940の1つの一部が含められる。プログラム940を生成するため、ライブラリー920を用いてコンパイラー930によりコンパイル可能な想定されるソースコードの一例を、以下に示す。この例では、浮動少数点型の配列values[]が、規定の乱数値で初期化される。次に、この配列は、その中の所与の要素について、この配列の中の所定窓で一致する他の要素数を判定するよう処理される例えば、/-2.0。そして、これらの判定結果は、対応する整数配列counts[]内のそれぞれの位置に記憶される。配列values[]の要素valuesの値を初期化するために、以下のコードを実行できる。intsize102416finalfloatwidth12ffinalfloatvaluesnewfloatsizefinalfloatcountsnewfloatsizecreaterandomdataforvaluesiMathrandom10f従来、上記問題は、以下のコードシーケンスで解くことができる。forintcount0forifcountcountsmyIdcount本開示に従って、上記問題は、一実施形態における以下のコードで解くことができる。TasktasknewTaskpublicvoidrunintmyIdgetGlobalIdintcount0forifcountcountsmyIdcountこのコードは、ルーチンrunをオーバライドする基底クラスTaskを拡張している。つまり、この基底クラスには、メソッド/関数runが含まれても良く、拡張後のクラスは、一組のタスク104について、ルーチンrunの推奨される実装を指定できる。タスクランナー112は、種々の実施形態において、自動変換と展開用に、拡張後のクラスのバイトコードが例えば、バイトコード102として供給される。種々の実施形態において、メソッドTask.runは変換、及び、展開されると即ち、オフロードされると、メソッドTask.runを実行できないが、変換済/展開済のバージョンのTask.runが、例えば、プロセッサー120によって実行される。また、メソッドTask.runが変換、及び、展開されなければ、メソッドTask.runは、プロセッサー110等によって実行可能である。ある実施形態では、以下のコードは、上記で指定するタスクを実行するタスクランナー112のインスタンスを作成するために実行される。注意:用語TaskRunnerは、タスクランナー112に対応する。TaskRunnertaskRunnernewTaskRunnertaskRunnerexecute第1行では、タスクランナー112のインスタンスを作成して、拡張した基底クラスtaskのインスタンスを入力として、タスクランナー112に供給している。一実施形態では、タスクランナー112が実行された時、タスクランナー112は、以下のOPENCL命令を生成できる。kernelvoidrunintmyIdgetglobalidintcount0forififcountcountsmyIdcountsmyId1return前述の様に、一部の実施形態では、このコードは、ドライバー116に供給されて、プロセッサー120用の一組の命令を生成できる。例示的なコンピュータシステム図10を参照すると、プラットフォーム10を実現可能とする例示的なコンピュータシステム1000の一実施形態が、図示されている。コンピュータシステム1000は、相互接続1060例えば、システムバスを介して、システムメモリー1020、及び、I/Oインターフェース複数可1040へと接続するプロセッサーサブシステム1080を含む。I/Oインターフェース複数可1040が、1つ以上のI/O装置1050へと接続する。コンピュータシステム1000は、限定されないが、サーバシステム、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ、または、ノート型コンピュータ、メインフレームコンピュータシステム、携帯型コンピュータ、ワークステーション、ネットワークコンピュータ、コンシューマ装置、例えば、携帯電話、ページャ、或いは、パーソナルデジタルアシスタントPDAを含む種々の種類のうちの任意のもので良い。更に、コンピュータシステム1000は、ストレージ装置、交換器、モデム、ルータといった任意の種類のネットワーク対応周辺機器も可能である。簡略化のため、1台のコンピュータシステム1000を図10に示しているが、更に、システム1000は、複数のコンピュータシステムが協調して動作するものとしても実装可能である。プロセッサーサブシステム1080は、1つ以上のプロセッサー、または、処理ユニットを含むことができる。例えば、プロセッサーサブシステム1080には、1つ以上の計算資源制御処理構成要素1020に接続された1つ以上の処理構成要素が含まれても良い。コンピュータシステム1000の種々の実施形態において、プロセッサーサブシステム1080の複数の実体を、相互接続1060に接続できる。種々の実施形態において、プロセッサーサブシステム1080または、プロセッサーサブシステム1080内の各プロセッサーユニットには、キャッシュ、または、これ以外の形態の機器搭載メモリーを含められる。一実施形態では、プロセッサーサブシステム1080は、前述のプロセッサー110、及び、プロセッサー120を含んでも良い。システムメモリー1020は、プロセッサーサブシステム1080によって利用可能である。システムメモリー1020は、種々の物理的なメモリーメディア、例えば、ハードディスクストレージ、フロッピー登録商標ディスクストレージ、リムーバブルディスクストレージ、フラッシュメモリー、ランダムアクセスメモリーRAM-SRAM、EDORAM、SDRAM、DDRSDRAM、RAMBUSRAM等、読み取り専用メモリーPROM、EEPROM等等を用いて実装可能である。コンピュータシステム1000のメモリーは、メモリー1020の様な一次メモリーに限定されない。更に、コンピュータシステム1000は、プロセッサーサブシステム1080のキャッシュメモリー、及び、I/O装置1050上の二次ストレージ例えば、ハードドライブ、ストレージアレー等の様な他の形態のストレージを含むことができる。実施形態によっては、これらの他の形態のストレージもまた、プロセッサーサブシステム1080で実行可能なプログラム命令を記憶できる。前述のメモリー100が、システムメモリー1020を含むまたは、システムメモリー1020内に含まれることが可能な実施形態もある。I/Oインターフェース1040は、種々の実施形態に従って、他の装置と接続して、通信するよう構成された様々な形態のインターフェースの中の任意のもので良い。一実施形態において、I/Oインターフェース1040は、フロントサイドから1つ以上のバックサイドバスまでのブリッジチップ例えば、サウスブリッジである。I/Oインターフェース1040は、1つ以上の対応バス、または、他のインターフェースを介して、1つ以上のI/O装置1050に接続できる。I/O装置の例として、ストレージ装置ハードドライブ、光学ドライブ、リムーバブルフラッシュドライブ、ストレージアレー、SAN、または、関連コントローラ、ネットワークインターフェース装置例えば、ローカル、または、広域ネットワーク向け、または、他の装置例えば、グラフィックス、ユーザインターフェース装置等がある。一実施形態において、コンピュータシステム1000は、ネットワークインターフェース装置を介して、ネットワークに接続する。例示的なコンピュータ可読記憶媒体図11を参照すると、例示的なコンピュータ可読記憶媒体1110~1140の実施形態が図示されている。コンピュータ可読記憶媒体1110~1140は、プラットフォーム10によって実行可能なまたは、プラットフォーム10上で実行する制御プログラム113によって解釈可能な命令を記憶する製品の実施形態である。図示の通り、コンピュータ可読記憶媒体1110は、タスクランナーバイトコード944を含む。コンピュータ可読記憶媒体1120は、プログラム940を有する。コンピュータ可読記憶媒体1130には、ソースコード910が含まれる。コンピュータ可読記憶媒体1140は、ライブラリー920を含む。図11は、プラットフォーム10に従って使用可能な想定されるコンピュータ可読記憶媒体の範囲を限定することを意図しておらず、この様なメディアの例示的内容を説明することを目的としている。概して、コンピュータ可読記憶媒体は、本明細書で述べている操作を実行するための種々のプログラム命令、及び/または、データのうちの任意のものを記憶可能である。コンピュータ可読記憶媒体1110~1140は、実行中に使用されるプログラム命令、及び/または、データを記憶する種々の有形の即ち、非一時的なメディアの任意のものを言及する。一実施形態において、コンピュータ可読記憶媒体1110~1140の1つには、メモリーサブシステム1710の種々の部分が含まれていても良い。別の実施形態では、コンピュータ可読記憶媒体1110~1140の1つには、磁気例えば、ディスク、或いは、光学媒体例えば、CD、DVD、関連技術等の様な周辺ストレージ装置1020のストレージメディア、または、メモリーメディアを含められる。コンピュータ可読記憶媒体1110~1140は、揮発性、または、不揮発性メモリーの何れかで良い。例えば、コンピュータ可読記憶媒体1110~1140の1つは、限定を避けて例えば、FB-DIMM、DDR/DDR2/DDR3/DDR4SDRAM、RDRAM登録商標、フラッシュメモリー、及び、種々の種類のROM等が可能である。注意:本明細書で使用される様に、コンピュータ可読記憶媒体は、搬送波の様な一時的媒体のみを含蓄するのに使用されるのではなく、むしろ、上記で列挙した様な一部の非一時的媒体を言及する。これまでに、特定の実施形態について述べてきたが、これらの実施形態は、ある特定の機能について実施形態を1つのみ説明した場合であっても、本開示の範囲を限定することを意図してはいない。本開示で提供された機能の例は、特に指示の無い限り、限定的では無く、説明を目的としている。上記説明は、本開示の恩恵を受ける当分野の技術者にとって明らかとなるこの様な機能の代替機能、変更機能、及び、均等機能に及ぶことを意図している。本開示の範囲には、本明細書において明示的、ないし、暗黙的の何れかにより開示されている全ての機能、或いは、複数機能の組み合わせ、または、これらの任意の汎化が、本明細書で扱っている問題の一部、若しくは、全てを軽減するか否かに依らず含められている。そして、本出願の出願中または、出願優先権主張に、この様な機能の全ての組み合わせに対する新たな特許請求の範囲が策定される場合もある。とりわけ、添付の請求項を参照することで、従属請求項からの特徴は、独立請求項からのものと組み合わせることが可能であり、更に、各独立請求項からの特徴は、添付の請求項で列挙された特定の組み合わせのみならず、適切な全ての方法で組み合わせることができる。