JP2013533533A - コンピューティング・プラットフォーム内のワークロードの分配及び並列化 - Google Patents
コンピューティング・プラットフォーム内のワークロードの分配及び並列化 Download PDFInfo
- Publication number
- JP2013533533A JP2013533533A JP2013512085A JP2013512085A JP2013533533A JP 2013533533 A JP2013533533 A JP 2013533533A JP 2013512085 A JP2013512085 A JP 2013512085A JP 2013512085 A JP2013512085 A JP 2013512085A JP 2013533533 A JP2013533533 A JP 2013533533A
- Authority
- JP
- Japan
- Prior art keywords
- processor
- instructions
- tasks
- computer
- readable storage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
複数プロセッサー間でのワークロードの分配に関する技術を開示している。一実施形態において、コンピュータ・システムは、第1、第2プロセッサーを含む。第1プロセッサーは、第1組のタスクを指定する第1組のバイト・コードを受信して、この第1組のタスクを第2プロセッサーへとオフロードするかどうかを判定するプログラム命令を実行する。第1組のタスクを第2プロセッサーへとオフロードすることが判定されたことに呼応して、このプログラム命令は、更に、第1組のタスクを実行するための一組の命令を生成させるよう実行可能である。一組の命令は、第1組のバイト・コードのものとは異なるフォーマットであり、このフォーマットは、第1プロセッサーによってサポートされる。更に、このプログラム命令は、一組の命令を第2プロセッサーへと供給させることで、この一組の命令を第2プロセッサーが実行するよう実行可能である。
【選択図】図1
【選択図】図1
Description
本発明は、コンピュータ・プロセッサーに関し、具体的には、複数プロセッサー間のワークロードの分配技術に関する。
コンピュータの性能を上げるため、最新型プロセッサーでは、様々な方法を実装して、複数タスクを同時に実行する。例えば、プロセッサーをパイプライン化、及び/または、マルチスレッド化する場合が多い。更に、プロセッサーの多くは、性能をより高めるために複数のコアを備える。また、複数のプロセッサーを、1つのコンピュータ・システムの中に含めることもできる。これらのプロセッサーの一部は、例えば、グラフィックス・プロセッサー、デジタル信号プロセッサー(DSP)等の様に、種々のタスクに特化している場合もある。
これら計算資源全ての間でのワークロードの分配は、とりわけ、計算資源が種々のインターフェースを備える場合において、問題となることがある(例えば、第1プロセッサーで使用される第1フォーマット形式のコードが、第1フォーマットとは異なる第2フォーマット形式のコードを必要とする第2プロセッサーとインターフェース接続するのに使用できない)。これにより、この様な異種コンピューティング・プラットフォームにおける複数の資源を使おうとする開発者は、各計算資源専用のサポートを含むソフトウェアを記述しなければならないことが多い。このため、プログラマーが、異種コンピューティング・プラットフォーム全体でタスクを効率良く分配可能とするソフトウェアを記述することを可能とする「ドメイン特化」言語が、複数開発されている。この様な言語としては、OPENCL、CUDA、DIRECT COMPUTE等がある。だが、これらの言語の使用は、面倒な場合がある。
複数のプロセッサー間でワークロードを自動分配するための種々の実施形態が、開示されている。一実施形態におけるコンピュータ可読記憶媒体は、コンピュータ・システムの第1プロセッサー上で、第1組のバイト・コードの受信を実行するよう実行可能なプログラム命令を記憶している。なお、第1組のバイト・コードは、第1組のタスクを指定している。このプログラム命令は、第1組のタスクをコンピュータ・システムの第2プロセッサーへとオフロードするということが判定されたことに呼応して、第1組のタスクを実行するための一組の命令を生成させることも実行可能である。この一組の命令は、第1組のバイト・コードのものとは異なるフォーマットであり、このフォーマットは、第2プロセッサーによりサポートされている。更に、このプログラム命令は、この一組の命令を、その実行のために、第2プロセッサーに供給させるよう実行可能である。
ある実施形態におけるコンピュータ可読記憶媒体は、コンパイル済ソース・コードとしてコンパイル済コードに含めるために、コンパイラーによってコンパイル可能なソース・プログラム命令を含む。ソース・プログラム命令は、ライブラリー・ルーチンへのアプリケーション・プログラミング・インターフェース(API)呼び出を含む。このAPI呼び出では、一組のタスクを指定する。ライブラリー・ルーチンは、コンパイル済のライブラリー・ルーチンとしてコンパイル済コードの中に含めるため、コンパイラーによりコンパイル可能である。コンパイル済ソース・コードは、一組のタスクをコンパイル済ライブラリー・ルーチンへと送るため、コンピュータ・システムの第1プロセッサーの仮想マシンによって解釈可能である。コンパイル済ライブラリー・ルーチンは、一組のタスクをコンピュータ・システムの第2プロセッサーにオフロードするということが判定されたことに呼応して、第2プロセッサーのドメイン特化言語フォーマットでの一組のドメイン特化命令を生成させ、更に、この一組のドメイン特化命令を第2プロセッサーへと供給させるよう、仮想マシンにより解釈可能である。
ある実施形態におけるコンピュータ可読記憶媒体は、コンパイル済ライブラリー・ルーチンとしてコンパイル済コードへ含めるため、コンパイラーによってコンパイル可能なライブリー・ルーチンのソース・プログラム命令を含む。コンパイル済ライブラリー・ルーチンは、コンピュータ・システムの第1プロセッサー上で、第1組のバイト・コードの受信を実行するよう実行可能である。この第1組のバイト・コードは、一組のタスクを指定している。更に、コンパイル済ライブラリー・ルーチンは、一組のタスクをコンピュータ・システムの第2プロセッサーへとオフロードするということが判定されたことに呼応して、一組のタスクを実行するための一組のドメイン特化命令を生成し、このドメイン特化命令を、その実行のために、第2プロセッサーへと供給するよう実行可能である。
一実施形態における方法は、第1組の命令を受信するステップを含む。第1組の命令では、一組のタスクを指定し、命令の受信は、コンピュータ・システムの第1プロセッサー上で実行するライブラリー・ルーチンにより実行される。この方法は、一組のタスクをコンピュータ・システムの第2プロセッサーへとオフロードするかどうかを、ライブラリー・ルーチンにより判定するステップも含む。また、この方法は、一組のタスクをコンピュータ・システムの第2プロセッサーへオフロードするということが判定されたことに呼応して、第1組のタスクを実行するための第2組の命令を生成させるステップも含む。第2組の命令は、第1組の命令のものと異なるフォーマットであり、このフォーマットは、第2プロセッサーによりサポートされる。更に、この方法は、第2組の命令を、その実行のために、第2プロセッサーへと供給させるステップも含む。
一実施形態における方法は、コンピュータ・システムが、一組のタスクを指定する第1組のバイト・コードを受信するステップを含む。この方法は、一組のタスクをコンピュータ・システムの第1プロセッサーからコンピュータ・システムの第2プロセッサーへとオフロードするということが判定されたことに呼応して、一組のタスクを実行するための一組のドメイン特化命令を、コンピュータ・システムが作成するステップも含む。更に、この方法は、コンピュータ・システムによって、ドメイン特化命令を、その実行のために、第2プロセッサーへと供給させるステップも含む。
本明細書には、「一実施形態」、または、「ある実施形態」への言及が含まれる。語句「一実施形態」、または、「ある実施形態」の外観は、必ずしも同じ実施形態を言及するわけではない。特定の機能、構造、または、特徴は、本開示と整合可能な全ての適切な様式で組み合わせることができる。
専門用語: 以下の段落では、本開示(添付の請求項も含む)で見られる用語に関する定義、及び/または、文脈を提供している。
「含む」: この用語には、制約が含まれない。添付の請求項で使用されるように、この用語は、追加の構造、または、ステップを含めることを排除しない。「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(登録商標)のJNI(Java(登録商標) ネイティブ・インターフェース)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、オペレーティング・システム(OS)117、及び、命令122が含まれる。一部の実施形態では、プロセッサー110は、構成要素112〜117(点線で図示)を実行するよう構成され、一方、プロセッサー120は、命令122を実行するよう構成される。別の実施形態では、プラットフォーム10の構成を、変えても良い。
メモリー100は、ある実施形態では、プラットフォーム10が利用できる情報を記憶するよう構成される。メモリー100は、1つの実体として示しているが、一部の実施形態では、図1で示されるような種々の要素を記憶するよう構成されたプラットフォーム10内の複数の構造に対応できる。一実施形態では、メモリー100は、一次記憶装置、例えば、フラッシュ・メモリー、ランダム・アクセス・メモリー(RAM−SRAM、EDO RAM、SDRAM、DDR SDRAM、RAMBUS RAM等)、読み取り専用メモリー(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、DIRECT COMPUTE等の任意のものに対応できる。一実施形態において、タスク・ランナー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によって読み取られることが分かっている特定の変数、或いは、アレーを特定できる。実体化に関する他の情報については、Cristina Cifuentesによる「逆コンパイル用の構造化アルゴリズム(1993年)」で見ることができる。
ドメイン特化言語生成ユニット620は、ある実施形態では、実体化ユニット610によって生成された中間表記からドメイン特化命令を生成するよう実行可能なプログラム命令に相当する。一実施形態において、ユニット620は、実体化ユニット610によりバイト・コード102内で特定された対応する定数、属性、または、メソッドを含むドメイン特化命令を生成できる。実施形態によっては、ユニット620は、バイト・コード102内のものと対応する高レベル構造を有するドメイン特化命令を生成できる。種々の実施形態では、ユニット620は、実体化ユニット610により収集された他の情報に基き、ドメイン特化命令を生成できる。実施形態によっては、実体化ユニット610は、バイト・コード102に読み取られることが分かっている特定の変数、または、アレーを特定した場合、ユニット620は、コード最適化を可能とするため、アレー/値を「READ ONLY(読み取り専用)」ストレージに入れるか、または、アレー/値をREAD ONLY(読み取り専用)としてマーキングするよう、ドメイン特化命令を生成できる。同様に、ユニット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の値を初期化するために、以下のコードを実行できる。
int size = 1024*16;
final float width = 1.2f;
final float[] values = new float[size];
final float[] counts = new float[size];
// create random data
for (int i = 0; i < size; i++) {
values[i] = (float) Math.random() * 10f;
}
int size = 1024*16;
final float width = 1.2f;
final float[] values = new float[size];
final float[] counts = new float[size];
// create random data
for (int i = 0; i < size; i++) {
values[i] = (float) Math.random() * 10f;
}
従来、上記問題は、以下のコード・シーケンスで解くことができる。
for (int myId = 0; myId < size; myId++) {
int count = 0;
for (int i = 0; i < size; i++) {
if (values[i] > values[myId] - width && values[i] < values[myId] + width) {
count++;
}
}
counts[myId] = (float) count;
}
for (int myId = 0; myId < size; myId++) {
int count = 0;
for (int i = 0; i < size; i++) {
if (values[i] > values[myId] - width && values[i] < values[myId] + width) {
count++;
}
}
counts[myId] = (float) count;
}
本開示に従って、上記問題は、一実施形態における以下のコードで解くことができる。
Task task = new Task(){
public void run() {
int myId = getGlobalId(0);
int count = 0;
for (int i = 0; i < size; i++) {
if (values[i] > values[myId] - width && values[i] <
values[myId] + width) {
count++;
}
}
counts[myId] = (float) count;
}
}
Task task = new Task(){
public void run() {
int myId = getGlobalId(0);
int count = 0;
for (int i = 0; i < size; i++) {
if (values[i] > values[myId] - width && values[i] <
values[myId] + width) {
count++;
}
}
counts[myId] = (float) count;
}
}
このコードは、ルーチンrun()をオーバライドする基底クラス「Task」を拡張している。つまり、この基底クラスには、メソッド/関数run()が含まれても良く、拡張後のクラスは、一組のタスク104について、ルーチンrun()の推奨される実装を指定できる。タスク・ランナー112は、種々の実施形態において、自動変換と展開用に、拡張後のクラスのバイト・コードが(例えば、バイト・コード102として)供給される。種々の実施形態において、メソッドTask.run()は変換、及び、展開されると(即ち、オフロードされると)、メソッドTask.run()を実行できないが、変換済/展開済のバージョンのTask.run()が、例えば、プロセッサー120によって実行される。また、メソッドTask.run()が変換、及び、展開されなければ、メソッドTask.run()は、プロセッサー110等によって実行可能である。
ある実施形態では、以下のコードは、上記で指定するタスクを実行するタスク・ランナー112のインスタンスを作成するために実行される。注意:用語「TaskRunner」は、タスク・ランナー112に対応する。
TaskRunner taskRunner = new TaskRunner(task);
taskRunner.execute(size, 16);
TaskRunner taskRunner = new TaskRunner(task);
taskRunner.execute(size, 16);
第1行では、タスク・ランナー112のインスタンスを作成して、拡張した基底クラス「task」のインスタンスを入力として、タスク・ランナー112に供給している。
一実施形態では、タスク・ランナー112が実行された時、タスク・ランナー112は、以下のOPENCL命令を生成できる。
__kernel void run(
__global float *values,
__global int *counts
){
int myId=get_global_id(0);
int count=0;
for(int i=0; i<16384; i++){
if(values[i]>values[myId]-1.2f){
if(values[i]<values[myId]+1.2f){
count++;
}
}
}
counts[myId] = counts[myId]+1;
return;
}
__kernel void run(
__global float *values,
__global int *counts
){
int myId=get_global_id(0);
int count=0;
for(int i=0; i<16384; i++){
if(values[i]>values[myId]-1.2f){
if(values[i]<values[myId]+1.2f){
count++;
}
}
}
counts[myId] = counts[myId]+1;
return;
}
前述の様に、一部の実施形態では、このコードは、ドライバー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は、複数のコンピュータ・システムが協調して動作するものとしても実装可能である。
図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、EDO RAM、SDRAM、DDR SDRAM、RAMBUS RAM等)、読み取り専用メモリー(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に従って使用可能な想定されるコンピュータ可読記憶媒体の範囲を限定することを意図しておらず、この様なメディアの例示的内容を説明することを目的としている。概して、コンピュータ可読記憶媒体は、本明細書で述べている操作を実行するための種々のプログラム命令、及び/または、データのうちの任意のものを記憶可能である。
図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/DDR4 SDRAM、RDRAM(登録商標)、フラッシュ・メモリー、及び、種々の種類のROM等が可能である。注意:本明細書で使用される様に、コンピュータ可読記憶媒体は、搬送波の様な一時的媒体のみを含蓄するのに使用されるのではなく、むしろ、上記で列挙した様な一部の非一時的媒体を言及する。
これまでに、特定の実施形態について述べてきたが、これらの実施形態は、ある特定の機能について実施形態を1つのみ説明した場合であっても、本開示の範囲を限定することを意図してはいない。本開示で提供された機能の例は、特に指示の無い限り、限定的では無く、説明を目的としている。上記説明は、本開示の恩恵を受ける当分野の技術者にとって明らかとなるこの様な機能の代替機能、変更機能、及び、均等機能に及ぶことを意図している。
本開示の範囲には、本明細書において(明示的、ないし、暗黙的の何れかにより)開示されている全ての機能、或いは、複数機能の組み合わせ、または、これらの任意の汎化が、本明細書で扱っている問題の一部、若しくは、全てを軽減するか否かに依らず含められている。そして、本出願の出願中(または、出願優先権主張)に、この様な機能の全ての組み合わせに対する新たな特許請求の範囲が策定される場合もある。とりわけ、添付の請求項を参照することで、従属請求項からの特徴は、独立請求項からのものと組み合わせることが可能であり、更に、各独立請求項からの特徴は、添付の請求項で列挙された特定の組み合わせのみならず、適切な全ての方法で組み合わせることができる。
Claims (22)
- コンピュータ・システムの第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に記載のコンピュータ可読記憶媒体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/785,052 US20110289519A1 (en) | 2010-05-21 | 2010-05-21 | Distributing workloads in a computing platform |
US12/785,052 | 2010-05-21 | ||
PCT/US2011/037029 WO2011146642A1 (en) | 2010-05-21 | 2011-05-18 | Distributing and parallelizing workloads in a computing platform |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2013533533A true JP2013533533A (ja) | 2013-08-22 |
Family
ID=44121324
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013512085A Withdrawn JP2013533533A (ja) | 2010-05-21 | 2011-05-18 | コンピューティング・プラットフォーム内のワークロードの分配及び並列化 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20110289519A1 (ja) |
EP (1) | EP2572275A1 (ja) |
JP (1) | JP2013533533A (ja) |
KR (1) | KR20130111220A (ja) |
CN (1) | CN102985908A (ja) |
WO (1) | WO2011146642A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016531366A (ja) * | 2013-08-19 | 2016-10-06 | クアルコム,インコーポレイテッド | 異種のプロセッサコア上でのコード区分および実行を可能にする効率的な有向非巡回グラフパターンマッチング |
Families Citing this family (49)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080270653A1 (en) * | 2007-04-26 | 2008-10-30 | Balle Susanne M | Intelligent resource management in multiprocessor computer systems |
US8566831B2 (en) | 2011-01-26 | 2013-10-22 | International Business Machines Corporation | Execution of work units in a heterogeneous computing environment |
US8533720B2 (en) * | 2011-02-25 | 2013-09-10 | International Business Machines Corporation | Offloading work from one type to another type of processor based on the count of each type of service call instructions in the work unit |
US9451012B1 (en) * | 2011-08-30 | 2016-09-20 | CSC Holdings, LLC | Heterogeneous cloud processing utilizing consumer devices |
US9430807B2 (en) | 2012-02-27 | 2016-08-30 | Qualcomm Incorporated | Execution model for heterogeneous computing |
US10387293B2 (en) | 2012-10-09 | 2019-08-20 | Securboration, Inc. | Systems and methods for automatically parallelizing sequential code |
US11157436B2 (en) | 2012-11-20 | 2021-10-26 | Samsung Electronics Company, Ltd. | Services associated with wearable electronic device |
US10423214B2 (en) * | 2012-11-20 | 2019-09-24 | Samsung Electronics Company, Ltd | Delegating processing from wearable electronic device |
US10551928B2 (en) | 2012-11-20 | 2020-02-04 | Samsung Electronics Company, Ltd. | GUI transitions on wearable electronic device |
US11372536B2 (en) | 2012-11-20 | 2022-06-28 | Samsung Electronics Company, Ltd. | Transition and interaction model for wearable electronic device |
US9477313B2 (en) | 2012-11-20 | 2016-10-25 | Samsung Electronics Co., Ltd. | User gesture input to wearable electronic device involving outward-facing sensor of device |
US11237719B2 (en) | 2012-11-20 | 2022-02-01 | Samsung Electronics Company, Ltd. | Controlling remote electronic device with wearable electronic device |
US10185416B2 (en) | 2012-11-20 | 2019-01-22 | Samsung Electronics Co., Ltd. | User gesture input to wearable electronic device involving movement of device |
US8994827B2 (en) | 2012-11-20 | 2015-03-31 | Samsung Electronics Co., Ltd | Wearable electronic device |
US9619229B2 (en) * | 2012-12-27 | 2017-04-11 | Intel Corporation | Collapsing of multiple nested loops, methods and instructions |
US20140354658A1 (en) * | 2013-05-31 | 2014-12-04 | Microsoft Corporation | Shader Function Linking Graph |
JP2015095132A (ja) * | 2013-11-13 | 2015-05-18 | 富士通株式会社 | 情報処理システム、情報処理システムの制御方法及び管理装置の制御プログラム |
US10721684B2 (en) | 2013-12-27 | 2020-07-21 | Intel Corporation | Electronic device having two processors to process data |
JP6200824B2 (ja) * | 2014-02-10 | 2017-09-20 | ルネサスエレクトロニクス株式会社 | 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス |
US10691332B2 (en) | 2014-02-28 | 2020-06-23 | Samsung Electronics Company, Ltd. | Text input on an interactive display |
US9400683B2 (en) * | 2014-10-16 | 2016-07-26 | Sap Se | Optimizing execution of processes |
CN105760239B (zh) * | 2016-02-03 | 2019-04-16 | 北京元心科技有限公司 | 在第二系统中访问用于第一系统的第三方库的方法及系统 |
US10007561B1 (en) * | 2016-08-08 | 2018-06-26 | Bitmicro Networks, Inc. | Multi-mode device for flexible acceleration and storage provisioning |
US10216596B1 (en) | 2016-12-31 | 2019-02-26 | Bitmicro Networks, Inc. | Fast consistent write in a distributed system |
US10332320B2 (en) * | 2017-04-17 | 2019-06-25 | Intel Corporation | Autonomous vehicle advanced sensing and response |
US10409614B2 (en) * | 2017-04-24 | 2019-09-10 | Intel Corporation | Instructions having support for floating point and integer data types in the same register |
US10726605B2 (en) * | 2017-09-15 | 2020-07-28 | Intel Corporation | Method and apparatus for efficient processing of derived uniform values in a graphics processor |
US11036477B2 (en) | 2019-06-27 | 2021-06-15 | Intel Corporation | Methods and apparatus to improve utilization of a heterogeneous system executing software |
US11269639B2 (en) | 2019-06-27 | 2022-03-08 | Intel Corporation | Methods and apparatus for intentional programming for heterogeneous systems |
US11392464B2 (en) | 2019-11-01 | 2022-07-19 | EMC IP Holding Company LLC | Methods and systems for mirroring and failover of nodes |
US11741056B2 (en) | 2019-11-01 | 2023-08-29 | EMC IP Holding Company LLC | Methods and systems for allocating free space in a sparse file system |
US11409696B2 (en) | 2019-11-01 | 2022-08-09 | EMC IP Holding Company LLC | Methods and systems for utilizing a unified namespace |
US11150845B2 (en) | 2019-11-01 | 2021-10-19 | EMC IP Holding Company LLC | Methods and systems for servicing data requests in a multi-node system |
US11288238B2 (en) | 2019-11-01 | 2022-03-29 | EMC IP Holding Company LLC | Methods and systems for logging data transactions and managing hash tables |
US11294725B2 (en) * | 2019-11-01 | 2022-04-05 | EMC IP Holding Company LLC | Method and system for identifying a preferred thread pool associated with a file system |
US11288211B2 (en) | 2019-11-01 | 2022-03-29 | EMC IP Holding Company LLC | Methods and systems for optimizing storage resources |
US11579976B2 (en) | 2021-04-29 | 2023-02-14 | EMC IP Holding Company LLC | Methods and systems parallel raid rebuild in a distributed storage system |
US11740822B2 (en) | 2021-04-29 | 2023-08-29 | EMC IP Holding Company LLC | Methods and systems for error detection and correction in a distributed storage system |
US11669259B2 (en) | 2021-04-29 | 2023-06-06 | EMC IP Holding Company LLC | Methods and systems for methods and systems for in-line deduplication in a distributed storage system |
US11892983B2 (en) | 2021-04-29 | 2024-02-06 | EMC IP Holding Company LLC | Methods and systems for seamless tiering in a distributed storage system |
US11604610B2 (en) * | 2021-04-29 | 2023-03-14 | EMC IP Holding Company LLC | Methods and systems for storing data in a distributed system using offload components |
US12093435B2 (en) | 2021-04-29 | 2024-09-17 | Dell Products, L.P. | Methods and systems for securing data in a distributed storage system |
US20220350545A1 (en) * | 2021-04-29 | 2022-11-03 | EMC IP Holding Company LLC | Method and systems for storing data in a storage pool using memory semantics with applications utilizing object semantics |
US11567704B2 (en) | 2021-04-29 | 2023-01-31 | EMC IP Holding Company LLC | Method and systems for storing data in a storage pool using memory semantics with applications interacting with emulated block devices |
US11677633B2 (en) | 2021-10-27 | 2023-06-13 | EMC IP Holding Company LLC | Methods and systems for distributing topology information to client nodes |
US11922071B2 (en) * | 2021-10-27 | 2024-03-05 | EMC IP Holding Company LLC | Methods and systems for storing data in a distributed system using offload components and a GPU module |
US11762682B2 (en) | 2021-10-27 | 2023-09-19 | EMC IP Holding Company LLC | Methods and systems for storing data in a distributed system using offload components with advanced data services |
US12131074B2 (en) | 2021-10-27 | 2024-10-29 | EMC IP Holding Company LLC | Methods and systems for storing data in a distributed system using GPUS |
US12007942B2 (en) | 2021-10-27 | 2024-06-11 | EMC IP Holding Company LLC | Methods and systems for seamlessly provisioning client application nodes in a distributed system |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6694506B1 (en) * | 1997-10-16 | 2004-02-17 | International Business Machines Corporation | Object oriented programming system with objects for dynamically connecting functioning programming objects with objects for general purpose operations |
US6289506B1 (en) * | 1998-06-30 | 2001-09-11 | Intel Corporation | Method for optimizing Java performance using precompiled code |
US6631515B1 (en) * | 1998-09-24 | 2003-10-07 | International Business Machines Corporation | Method and apparatus to reduce code size and runtime in a Java environment |
US20040139424A1 (en) * | 2003-01-13 | 2004-07-15 | Velare Technologies Inc. | Method for execution context reification and serialization in a bytecode based run-time environment |
US9417914B2 (en) * | 2008-06-02 | 2016-08-16 | Microsoft Technology Licensing, Llc | Regaining control of a processing resource that executes an external execution context |
-
2010
- 2010-05-21 US US12/785,052 patent/US20110289519A1/en not_active Abandoned
-
2011
- 2011-05-18 EP EP11722689A patent/EP2572275A1/en not_active Withdrawn
- 2011-05-18 WO PCT/US2011/037029 patent/WO2011146642A1/en active Application Filing
- 2011-05-18 CN CN2011800295040A patent/CN102985908A/zh active Pending
- 2011-05-18 KR KR1020127032420A patent/KR20130111220A/ko not_active Application Discontinuation
- 2011-05-18 JP JP2013512085A patent/JP2013533533A/ja not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016531366A (ja) * | 2013-08-19 | 2016-10-06 | クアルコム,インコーポレイテッド | 異種のプロセッサコア上でのコード区分および実行を可能にする効率的な有向非巡回グラフパターンマッチング |
Also Published As
Publication number | Publication date |
---|---|
KR20130111220A (ko) | 2013-10-10 |
CN102985908A (zh) | 2013-03-20 |
US20110289519A1 (en) | 2011-11-24 |
EP2572275A1 (en) | 2013-03-27 |
WO2011146642A1 (en) | 2011-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2013533533A (ja) | コンピューティング・プラットフォーム内のワークロードの分配及び並列化 | |
US9720708B2 (en) | Data layout transformation for workload distribution | |
JP6894377B2 (ja) | 専用プロセッサ用ハードウェア命令生成ユニット | |
US11216258B2 (en) | Direct function call substitution using preprocessor | |
US7987458B2 (en) | Method and system for firmware image size reduction | |
US8522223B2 (en) | Automatic function call in multithreaded application | |
EP2315118B1 (en) | Method and apparatus for enabling parallel processing during execution of a cobol source program using two-stage compilation | |
US20040268309A1 (en) | Software development infrastructure | |
US8843920B2 (en) | Systems and methods for deferring software implementation decisions until load time | |
JP2015084251A (ja) | ソフトウェア・アプリケーションの性能向上 | |
JP2004310776A (ja) | 拡張ランタイムホスティング | |
JP2013539130A (ja) | ユーザ定義型のコンパイル時境界検査 | |
US20160246622A1 (en) | Method and system for implementing invocation stubs for the application programming interfaces embedding with function overload resolution for dynamic computer programming languages | |
Mikushin et al. | KernelGen--The Design and Implementation of a Next Generation Compiler Platform for Accelerating Numerical Models on GPUs | |
US20090320007A1 (en) | Local metadata for external components | |
Noaje et al. | Source-to-source code translator: OpenMP C to CUDA | |
WO2022237590A1 (zh) | 智能合约升级方法及区块链系统 | |
Lin et al. | Enable OpenCL compiler with Open64 infrastructures | |
Monsalve et al. | Sequential codelet model of program execution-a super-codelet model based on the hierarchical turing machine | |
US8762974B1 (en) | Context-sensitive compiler directives | |
CN112631662B (zh) | 众核异构架构下的多类型目标代码的透明加载方法 | |
Acosta et al. | Paralldroid: Performance analysis of gpu executions | |
Fumero et al. | Using compiler snippets to exploit parallelism on heterogeneous hardware: a Java reduction case study | |
Shimomura et al. | Dynamically interchangeable framework for component behavior of embedded component systems | |
Dooley et al. | Detecting and using critical paths at runtime in message driven parallel programs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20140805 |