(57)【要約】  一実施例では、処理リソース割り当て方法を開示する。方法は、予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程を含み得る。方法は更に、予め選択されたデータ場所に基づいて第２のＰＵに第１の処理装置（ＰＵ）からの命令のコールを転送するか否かを判定する工程を含み得る。
2015526821.tif 000002
【特許請求の範囲】
【請求項１】
実行されると、コンピュータ・システムに、処理リソース割り当ての方法を行わせる命令の組を記憶するコンピュータ読み取り可能な媒体であって、前記方法は、
予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程と、
前記予め選択されたデータ場所に基づいて第１の処理装置（ＰＵ）から第２のＰＵに前記命令のコールを転送するか否かを判定する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項２】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第１のＰＵに関連付けられたキャッシュ・メモリ装置を選択する工程と、
前記命令を前記キャッシュ・メモリ装置にロードする工程と、
前記命令に関連付けられた境界において、前記キャッシュ・メモリ装置に、余分なコードの組をインジェクトする工程であって、前記命令がターゲット命令であり、前記余分なコードの組は、前記コールを特定のＰＵに転送するか否かを前記第１のＰＵが判定することを可能にするよう構成された工程と
を含むコンピュータ読み取り可能な媒体。
【請求項３】
請求項２記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
予め選択された１つ又は複数の実行可能なルーチンそれぞれに対応する１つ又は複数の実行可能なルーチン名を識別する工程と、
前記１つ又は複数の実行可能なルーチン名に基づいて、前記余分なコードの組を選択して、参照渡しコールから値渡しコールに前記コールを変換する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項４】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１のキャッシュ・メモリ装置及び第２のキャッシュ・メモリ装置を識別する工程と、
第１のデータの組及び第２のデータの組それぞれに関連付けられた第１のデータ場所及び第２のデータ場所を識別する工程であって、前記第１のデータ場所及び前記第２のデータ場所は前記第１のキャッシュ・メモリ装置内及び前記第２のキャッシュ・メモリ装置内それぞれに配置される工程と、
前記第１のデータ場所及び前記第２のデータ場所に基づいて前記第１のデータの組及び前記第２のデータの組それぞれに対する前記第１のキャッシュ・メモリ装置及び前記第２のキャッシュ・メモリ装置の割り当てを行う工程と
を含むコンピュータ読み取り可能な媒体。
【請求項５】
請求項４記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令にマッピングされたデータの組を識別する工程と、
前記第１のキャッシュ・メモリ装置でなく前記第２のキャッシュ・メモリ装置に前記データの組が現在記憶されていることを判定して、それにより、前記第１のＰＵから前記第２のＰＵに前記コールを転送することを決定する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項６】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１のキャッシュ・メモリ装置及び第２のキャッシュ・メモリ装置を識別する工程と、
前記第１のＰＵにより、前記コールにアクセスする工程であって、前記コールは、前記予め選択されたデータ場所に前記命令がマッピングされている旨を示す引数を含む工程と、
前記第１のＰＵによって前記引数を解析して、前記予め選択されたデータ場所が前記第１のキャッシュ・メモリ装置内に配置されていない旨の判定を行う工程と、
前記判定に基づいて潜在的なリダイレクト・コールとして前記コールを識別する工程とを含むコンピュータ読み取り可能な媒体。
【請求項７】
請求項６記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記予め選択されたデータ場所が前記第２のキャッシュ・メモリ装置に配置されていない旨を判定し、それにより、前記第１のＰＵにより、前記潜在的なリダイレクト・コールに関連付けられたターゲット・コードを実行することの決定を行う工程と、
前記決定に基づいて前記第１のＰＵにより、前記ターゲット・コードを実行する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項８】
請求項６記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記予め選択されたデータ場所が前記第２のキャッシュ・メモリ装置内に配置されていることを判定して、それにより、前記潜在的なリダイレクト・コールを実際のリダイレクト・コールとして識別する工程と、
前記第１のＰＵから前記第２のＰＵに前記実際のリダイレクト・コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項９】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられたコード又はデータ・メモリ場所を識別する工程と、
前記第２のＰＵに関連付けられた前記コード又はデータ・メモリ場所に基づいて前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項１０】
請求項９記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記コード又はデータ・メモリ場所が前記第２のＰＵ及び複数の他のＰＵに関連付けられていることを判定する工程と、
前記第２のＰＵに対応する現在利用可能な処理機能を反映する数値測定を定義する工程と、
複数の他の現在利用可能な処理機能それぞれを反映する複数の他の数値測定を定義する工程であって、前記複数の他の現在利用可能な処理機能は前記複数の他のＰＵそれぞれに対応する工程と、
前記数値測定が前記他の数値測定それぞれよりも大きいことに基づいて前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項１１】
請求項９記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
特定のリソースを選択する工程と、
前記第２のＰＵに割り当てられている前記特定のリソースの制御の度合いに基づき、前記特定のリソースへのアクセスを前記第１のＰＵが欠いていることに基づき、かつ、前記特定のリソースへのアクセスを１つ又は複数の他のＰＵが欠いていることに基づいて前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項１２】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令を記憶させた共有ランダム・メモリ（ＲＡＭ）装置を選択する工程と、
前記共有ＲＡＭ装置のセクタをリダイレクト・セクタとして識別する工程と、
前記命令が前記リダイレクト・セクタに記憶されているか否かを判定して、それにより、前記第１のＰＵから前記第２のＰＵに前記コールを転送するか否かを判定する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項１３】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
共有ＲＡＭ装置を選択する工程と、
前記共有ＲＡＭ装置の１つ又は複数のセクタを１つ又は複数のリダイレクト・セクタそれぞれとして識別する工程と、
前記命令を含むプログラムを識別する工程と、
前記プログラムに対応するスタティック・コードにアクセスする工程と、
前記スタティック・コードのサイズに基づいて前記１つ又は複数のリダイレクト・セクタの全体としてのサイズを定義することにより、前記共有ＲＡＭ装置をパーティショニングする工程と、
前記パーティショニング及びＰＵ仕様に基づいて前記１つ又は複数のリダイレクト・セクタのうちの１つ又は複数のリダイレクト・セクタに前記スタティック・コードの量をロードする工程と
を含むコンピュータ読み取り可能な媒体。
【請求項１４】
請求項１３記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記共有ＲＡＭ装置の１つ又は複数の別々のセクタを１つ又は複数の非リダイレクト・セクタそれぞれとして識別する工程と、
前記プログラムに対応する少なくとも１つの共有ライブラリの１つ又は複数の部分にアクセスする工程と、
前記少なくとも１つの共有ライブラリの１つ又は複数の部分及び前記スタティック・コードの全体としてのサイズに基づいて前記１つ又は複数のリダイレクト・セクタの前記全体としてのサイズを定義することにより、前記共有ＲＡＭ装置をプロポーショニングする工程と、
前記プロポーショニング及び前記ＰＵ仕様に基づいて前記１つ又は複数の非リダイレクト・セクタのうちの１つ又は複数の選択された非リダイレクト・セクタに、又は前記１つ又は複数のリダイレクト・セクタのうちの１つ又は複数の選択されたリダイレクト・セクタに前記スタティック・コードの１つ又は複数の部分をロードする工程、及び／又は、
前記プロポーショニング及び前記ＰＵ仕様に基づいて前記１つ又は複数の非リダイレクト・セクタのうちの１つ又は複数の選択された非リダイレクト・セクタに、又は１つ又は複数のリダイレクト・セクタのうちの１つ又は複数の選択されたリダイレクト・セクタに前記少なくとも１つの共有ライブラリの前記１つ又は複数の部分をロードする工程と
を含むコンピュータ読み取り可能な媒体。
【請求項１５】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第１のＰＵに関連付けられたキャッシュ・メモリ装置を選択する工程と、
前記命令に関連付けられたコード又はデータを前記キャッシュ・メモリ装置にフェッチする工程と、
前記第１のＰＵに関連付けられたＰＵデータ・パスを識別する工程と、
前記ＰＵデータ・パス内のシャドー・レジスタ値を、前記コード又はデータに関連付けられた少なくとも１つのＰＵを示すＰＵ識別子を前記シャドー・レジスタ値が反映するように規定する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項１６】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられたコードを識別する工程と、
少なくとも１つの共有メモリ・コヒーレンス・マシン命令を含む実行可能なルーチンを識別する工程と、
前記実行可能なルーチンが前記第２のＰＵに関連付けられていることに基づき、かつ、前記コードが、前記少なくとも１つの共有メモリ・コヒーレンス・マシン命令にマッピングされていることに基づき、前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項１７】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられた大域メモリ場所を識別する工程と、
第３のＰＵから前記第１のＰＵへ前記コールを自動的に、前記第３のＰＵが前記大域メモリ場所へのアクセスを欠いていること、及び前記第１のＰＵが前記大域メモリ場所へのアクセスを有していることの結果として転送する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項１８】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
特定のＰＵに関連付けられたキャッシュ・メモリ装置を識別する工程と、
前記予め選択されたデータ場所が前記キャッシュ・メモリ装置内に配置されていることに基づいて前記データに関連付けられた特定のデータ・タイプに対する前記キャッシュ・メモリ装置の割り当てを行う工程と、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程と、
前記プログラミング言語に対応するライブラリにアクセスする工程であって、前記ライブラリは、メモリ割り当てコールを含むコンストラクタを規定し、前記メモリ割り当てコールは前記特定のデータ・タイプを有する情報にマッピングされる工程と、
前記割り当てに基づいて、前記メモリ割り当てコールに対する修正を実現して、それにより、前記プログラムの修正バージョン及び修正メモリ割り当てコールを作成する工程と、前記修正の結果として前記情報が前記キャッシュ・メモリ装置にロードされるように、前記修正されたメモリ割り当てコールを行う工程と
を含むコンピュータ読み取り可能な媒体。
【請求項１９】
請求項１８記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記コールを行って、それにより、前記割り当ての結果として前記特定のＰＵにより、前記プログラムの前記修正バージョンを実行する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項２０】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
１つ又は複数のコード・ライブラリを識別する工程と、
前記１つ又は複数のコード・ライブラリに関連付けられた参照渡しソース・コードにアクセスする工程と、前記参照渡しソース・コードを値渡しサポート・コードに変換して、それにより、転送ライブラリを生成する工程と、前記転送ライブラリを利用して、前記データの参照渡しでなく、値渡しを行う工程と
を含むコンピュータ読み取り可能な媒体。
【請求項２１】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記コール内の１つ又は複数のポインタを識別する工程と、
前記１つ又は複数のポインタを変換して、それにより、前記データの参照渡しでなく値渡しを行うよう前記コールを構成する工程と、
前記第１のＰＵから前記第２のＰＵへの前記コールの転送を実行する工程と、
前記転送中に前記データの値渡しを行って、それにより、前記データの局所の複製を第１のキャッシュ・メモリ装置に記憶する工程であって、前記第２のＰＵが前記第１のキャッシュ・メモリ装置を含む工程と、
前記１つ又は複数のプリンタを前記局所の複製にリマッピングして、それにより、第２のキャッシュ・メモリ装置にアクセスすることなく、前記コールを実行することを可能にする工程であって、前記第１のＰＵが、前記第２のキャッシュ・メモリ装置を含む工程と
を含むコンピュータ読み取り可能な媒体。
【請求項２２】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
遠隔プロシージャ・コール（ＲＰＣ）を起動させて、それにより、前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程を含むコンピュータ読み取り可能な媒体。
【請求項２３】
請求項２２記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１の局所メモリ・マップ及び第２の局所メモリ・マップを識別する工程と、
前記第１の局所メモリ・マップと前記第２の局所メモリ・マップとの間の区別を識別する工程と、
前記区別に基づいてメモリ・アドレス変換を生成する工程と、
前記メモリ・アドレス変換を利用して前記ＲＰＣを構成する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項２４】
請求項２２記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１のキャッシュ・メモリ装置及び第２のキャッシュ・メモリ装置を識別する工程と、
前記第１のキャッシュ・メモリに記憶され、前記命令に関連付けられたデータ値を識別する工程と、
前記ＲＰＣの結果として前記第２のキャッシュ・メモリ装置に前記データ値を記憶する工程とを含むコンピュータ読み取り可能な媒体。
【請求項２５】
請求項２４記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第２のキャッシュ・メモリに前記データ値が記憶されるまで前記第２のＰＵによる前記コールの実行を遅延させる工程とを含むコンピュータ読み取り可能な媒体。
【請求項２６】
請求項２２記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
制御の第１のスレッドに関連付けられた実行可能なルーチン及び前記命令を含むプログラムにアクセスする工程と、
前記コール内の１つ又は複数のポインタを識別する工程と、
前記１つ又は複数のポインタを変換して、前記データの参照渡しでなく値渡しを行うよう前記コールを構成して、それにより、制御の第２のスレッドを作成する工程と、
前記第２のＰＵに関連付けられたキャッシュ・メモリ装置を識別する工程と、
前記ＲＰＣの結果として前記データの値渡しを行って、それにより、前記データの局所の複製を前記キャッシュ・メモリ装置に記憶し、前記第２のＰＵに前記制御の第２のスレッドを供給する工程と、
前記制御の第１のスレッドが前記制御の第２のスレッドと無関係であることの結果として、前記第２のＰＵが前記命令の実行を前記制御の第２のスレッドに基づいて行う一方で、前記制御の第１のスレッドに基づいて前記第１のＰＵにより、前記実行可能なルーチンを行う工程であって、前記実行可能なルーチンが、前記実行中に生成されたデータ値に対するリターン要求を欠いている工程と
を含むコンピュータ読み取り可能な媒体。
【請求項２７】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記データにマッピングされた第１の実行可能なルーチンを行う第１のプロセッシング・コアを識別する工程であって、前記第１の実行可能なルーチンは共有メモリ・コヒーレンス・マシン命令を含む工程と、
第２のプロセッシング・コアにおいて第２の実行可能なルーチンにアクセスする工程と、
プロシージャ・コールを起動して、それにより、前記第２の実行可能なルーチンが前記データにマッピングされていることに基づき、かつ、前記共有メモリ・コヒーレンス・マシン命令を含む前記第２の実行可能なルーチンに基づき、前記第２のプロセッシング・コアから前記第１のプロセッシング・コアに前記第２の実行可能なルーチンを転送する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項２８】
請求項２７記載のコンピュータ読み取り可能な媒体であって、別々のＰＵは、前記第１のプロセッシング・コア及び前記第２のプロセッシング・コアそれぞれを含み、前記プロシージャ・コールがＲＰＣであるコンピュータ読み取り可能な媒体。
【請求項２９】
請求項２７記載のコンピュータ読み取り可能な媒体であって、単一のＰＵは、前記第１のプロセッシング・コア及び前記第２のプロセッシング・コアを何れも含み、前記プロシージャ・コールがＲＰＣであるコンピュータ読み取り可能な媒体。
【請求項３０】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、１つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記ＶＦＴにマッピングされた１つ又は複数のＶＦＴポインタを含むように仮想関数テーブル（ＶＦＴ）を実現するよう前記プログラミング言語が構成される工程と、
前記プログラミング言語に関連付けられたコンストラクタを識別する工程であって、前記コンストラクタは前記１つ又は複数のＶＦＴポインタを規定するよう構成される工程と、
前記プログラムのロード中に前記コンストラクタ周りにラッパ・コールをインジェクトして、それにより、前記１つ又は複数の仮想関数に対する１つ又は複数のＲＰＣ決定ラッパを含む、ＶＦＴへのポインタで、前記１つ又は複数のＶＦＴポインタを置き換える工程と
を含むコンピュータ読み取り可能な媒体。
【請求項３１】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、１つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記ＶＦＴにマッピングされた１つ又は複数のＶＦＴポインタを含むようにＶＦＴを実現するよう前記プログラミング言語が構成される工程と、
ＲＰＣ決定コードがコールされることなく、前記１つ又は複数の仮想関数が１つ又は複数のＲＰＣそれぞれに自動的に誘導されるように複数のＲＰＣの実現の結果として前記ＶＦＴを修正する工程とを含むコンピュータ読み取り可能な媒体。
【請求項３２】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、１つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記ＶＦＴにマッピングされた１つ又は複数のＶＦＴポインタを含むようにＶＦＴを実現するよう前記プログラミング言語が構成される工程と、
ＲＰＣ決定コードがコールされることなく、前記１つ又は複数の仮想関数が前記プログラムに関連付けられた局所コードに自動的に誘導されるように１つ又は複数のＲＰＣの実現がないことの結果として前記ＶＦＴを修正する工程とを含むコンピュータ読み取り可能な媒体。
【請求項３３】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
複数の条件分岐にマッピングされたコードを含む前記命令の予め定義されたバージョンにアクセスする工程と、
前記命令の複数の修正バージョンを生成する工程であって、前記修正バージョンはそれぞれ、前記複数の条件分岐のうちの別の条件分岐をたどるよう修正されたコードを含む工程と、
前記複数の修正バージョンそれぞれに関連付けられた複数の挙動を予測する工程と、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
前記実行可能なルーチンに関連付けられたランタイム挙動を識別する工程と、
前記ランタイム挙動に対応する前記修正バージョンの予測された挙動に基づいて前記実行可能なルーチンの動作中の実行のために前記複数の修正バージョンのうちの修正バージョンを選択する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項３４】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
仮想関数の第１の実現形態及び第２の実現形態を識別する工程であって、前記仮想関数は前記第１の実現形態を指し示すＶＦＴエントリを含み、前記仮想関数は更に、複数のＶＦＴのうちの第１のＶＦＴにマッピングされたＶＦＴポインタを含む工程と、
前記第１の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
前記動作中の前記第１の実現形態によって表される分岐挙動を識別する工程と、
前記分岐挙動の動作解析を行って、それにより、前記第２の実現形態が前記分岐挙動に対応する度合いが、前記第１の実現形態が前記分岐挙動に対応する度合いよりも大きいことを判定する工程と、
前記動作解析に基づいて前記複数のＶＦＴのうちの第２のＶＦＴに前記ＶＦＴポインタをリマッピングする工程であって、前記第２のＶＦＴが、前記第２の実現形態にマッピングされたポインタを含む工程、又は、
前記動作解析に基づいて前記第２の実現形態を指し示すよう前記ＶＦＴエントリを更新する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項３５】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられたプログラムにアクセスする工程であって、前記プログラムは、予め定義されたコール・サイトにマッピングされた予め定義された関数を含む工程と、
前記予め定義されたコール・サイトにより、前記予め定義された関数のコールを行う工程と、
前記コールの結果として、前記予め定義された関数によって表される分岐挙動を識別する工程と、
前記分岐挙動に基づいて、前記予め定義されたコール・サイトを修正する工程と
を含むコンピュータ読み取り可能な媒体。
【請求項３６】
請求項１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
仮想関数の第１の実現形態及び第２の実現形態を識別する工程であって、前記仮想関数は前記第１の実現形態を指し示すＶＦＴエントリを含み、前記仮想関数は更に、複数のＶＦＴのうちの第１のＶＦＴにマッピングされたＶＦＴポインタを更に含む工程と、
前記第１の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
前記動作中の前記第１の実現形態によって表される分岐挙動を識別する工程と、
前記分岐挙動に基づいて前記仮想関数の考えられる将来の挙動を予測する工程と、
前記考えられる将来の挙動の動作解析を行って、それにより、前記第２の実現形態が前記考えられる将来の挙動に対応する度合いが、前記第１の実現形態が前記考えられる将来の挙動に対応する度合いよりも大きいことを判定する工程と、
前記動作解析に基づいて前記複数のＶＦＴのうちの第２のＶＦＴに前記ＶＦＴポインタをリマッピングする工程であって、前記第２のＶＦＴが、前記第２の実現形態にマッピングされたポインタを含む工程、又は、
前記動作解析に基づいて前記第２の実現形態を指し示すよう前記ＶＦＴエントリを更新する工程とを含むコンピュータ読み取り可能な媒体。
【請求項３７】
処理リソース割り当て方法であって、
予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程と、
前記予め選択されたデータ場所に基づいて第１の処理装置（ＰＵ）から第２のＰＵに前記命令のコールを転送するか否かを判定する工程と
を含む処理リソース割り当て方法。
【請求項３８】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記第１のＰＵに関連付けられたキャッシュ・メモリ装置を選択する工程と、
前記命令を前記キャッシュ・メモリ装置にロードする工程と、
前記命令に関連付けられた境界において、前記キャッシュ・メモリ装置に、余分なコードの組をインジェクトする工程であって、前記命令がターゲット命令であり、前記余分なコードの組は、前記コールを特定のＰＵに転送するか否かを前記第１のＰＵが判定することを可能にするよう構成された工程と
を含む処理リソース割り当て方法。
【請求項３９】
請求項３８記載の処理リソース割り当て方法であって、更に、
予め選択された１つ又は複数の実行可能なルーチンそれぞれに対応する１つ又は複数の実行可能なルーチン名を識別する工程と、
前記１つ又は複数の実行可能なルーチン名に基づいて、前記余分なコードの組を選択して、参照渡しコールから値渡しコールに前記コールを変換する工程と
を含む処理リソース割り当て方法。
【請求項４０】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１のキャッシュ・メモリ装置及び第２のキャッシュ・メモリ装置を識別する工程と、
第１のデータの組及び第２のデータの組それぞれに関連付けられた第１のデータ場所及び第２のデータ場所を識別する工程であって、前記第１のデータ場所及び前記第２のデータ場所は前記第１のキャッシュ・メモリ装置内及び前記第２のキャッシュ・メモリ装置内それぞれに配置される工程と、
前記第１のデータ場所及び前記第２のデータ場所に基づいて前記第１のデータの組及び前記第２のデータの組それぞれに対する前記第１のキャッシュ・メモリ装置及び前記第２のキャッシュ・メモリ装置の割り当てを行う工程と
を含む処理リソース割り当て方法。
【請求項４１】
請求項４０記載の処理リソース割り当て方法であって、更に、
前記命令にマッピングされたデータの組を識別する工程と、
前記第１のキャッシュ・メモリ装置でなく前記第２のキャッシュ・メモリ装置に前記データの組が現在記憶されていることを判定して、それにより、前記第１のＰＵから前記第２のＰＵに前記コールを転送することを決定する工程と
を含む処理リソース割り当て方法。
【請求項４２】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１のキャッシュ・メモリ装置及び第２のキャッシュ・メモリ装置を識別する工程と、
前記第１のＰＵにより、前記コールにアクセスする工程であって、前記コールは、前記予め選択されたデータ場所に前記命令がマッピングされている旨を示す引数を含む工程と、
前記第１のＰＵによって前記引数を解析して、前記予め選択されたデータ場所が前記第１のキャッシュ・メモリ装置内に配置されていない旨の判定を行う工程と、
前記判定に基づいて潜在的なリダイレクト・コールとして前記コールを識別する工程とを含む処理リソース割り当て方法。
【請求項４３】
請求項４２記載の処理リソース割り当て方法であって、更に、
前記予め選択されたデータ場所が前記第２のキャッシュ・メモリ装置に配置されていない旨を判定し、それにより、前記第１のＰＵにより、前記潜在的なリダイレクト・コールに関連付けられたターゲット・コードを実行することの決定を行う工程と、
前記決定に基づいて前記第１のＰＵにより、前記ターゲット・コードを実行する工程と
を含む処理リソース割り当て方法。
【請求項４４】
請求項４２記載の処理リソース割り当て方法であって、更に、
前記予め選択されたデータ場所が前記第２のキャッシュ・メモリ装置内に配置されていることを判定して、それにより、前記潜在的なリダイレクト・コールを実際のリダイレクト・コールとして識別する工程と、
前記第１のＰＵから前記第２のＰＵに前記実際のリダイレクト・コールを転送する工程と
を含む処理リソース割り当て方法。
【請求項４５】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられたコード又はデータ・メモリ場所を識別する工程と、
前記第２のＰＵに関連付けられた前記コード又はデータ・メモリ場所に基づいて前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含む処理リソース割り当て方法。
【請求項４６】
請求項４５記載の処理リソース割り当て方法であって、更に、
前記コード又はデータ・メモリ場所が前記第２のＰＵ及び複数の他のＰＵに関連付けられていることを判定する工程と、
前記第２のＰＵに対応する現在利用可能な処理機能を反映する数値測定を定義する工程と、
複数の他の現在利用可能な処理機能それぞれを反映する複数の他の数値測定を定義する工程であって、前記複数の他の現在利用可能な処理機能は前記複数の他のＰＵそれぞれに対応する工程と、
前記数値測定が前記他の数値測定それぞれよりも大きいことに基づいて前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含む処理リソース割り当て方法。
【請求項４７】
請求項４５記載の処理リソース割り当て方法であって、更に、
特定のリソースを選択する工程と、
前記第２のＰＵに割り当てられている前記特定のリソースの制御の度合いに基づき、前記特定のリソースへのアクセスを前記第１のＰＵが欠いていることに基づき、かつ、前記特定のリソースへのアクセスを１つ又は複数の他のＰＵが欠いていることに基づいて前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含む処理リソース割り当て方法。
【請求項４８】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記命令を記憶させた共有ランダム・メモリ（ＲＡＭ）装置を選択する工程と、
前記共有ＲＡＭ装置のセクタをリダイレクト・セクタとして識別する工程と、
前記命令が前記リダイレクト・セクタに記憶されているか否かを判定して、それにより、前記第１のＰＵから前記第２のＰＵに前記コールを転送するか否かを判定する工程と
を含む処理リソース割り当て方法。
【請求項４９】
請求項３７記載の処理リソース割り当て方法であって、更に、
共有ＲＡＭ装置を選択する工程と、
前記共有ＲＡＭ装置の１つ又は複数のセクタを１つ又は複数のリダイレクト・セクタそれぞれとして識別する工程と、
前記命令を含むプログラムを識別する工程と、
前記プログラムに対応するスタティック・コードにアクセスする工程と、
前記スタティック・コードのサイズに基づいて前記１つ又は複数のリダイレクト・セクタの全体としてのサイズを定義することにより、前記共有ＲＡＭ装置をパーティショニングする工程と、
前記パーティショニング及びＰＵ仕様に基づいて前記１つ又は複数のリダイレクト・セクタのうちの１つ又は複数のリダイレクト・セクタに前記スタティック・コードの量をロードする工程と
を含む処理リソース割り当て方法。
【請求項５０】
請求項４９記載の処理リソース割り当て方法であって、更に、
前記共有ＲＡＭ装置の１つ又は複数の別々のセクタを１つ又は複数の非リダイレクト・セクタそれぞれとして識別する工程と、
前記プログラムに対応する少なくとも１つの共有ライブラリの１つ又は複数の部分にアクセスする工程と、
前記少なくとも１つの共有ライブラリの１つ又は複数の部分及び前記スタティック・コードの全体としてのサイズに基づいて前記１つ又は複数のリダイレクト・セクタの前記全体としてのサイズを定義することにより、前記共有ＲＡＭ装置をプロポーショニングする工程と、
前記プロポーショニング及び前記ＰＵ仕様に基づいて前記１つ又は複数の非リダイレクト・セクタのうちの１つ又は複数の選択された非リダイレクト・セクタに、又は前記１つ又は複数のリダイレクト・セクタのうちの１つ又は複数の選択されたリダイレクト・セクタに前記スタティック・コードの１つ又は複数の部分をロードする工程、及び／又は、
前記プロポーショニング及び前記ＰＵ仕様に基づいて前記１つ又は複数の非リダイレクト・セクタのうちの１つ又は複数の選択された非リダイレクト・セクタに、又は１つ又は複数のリダイレクト・セクタのうちの１つ又は複数の選択されたリダイレクト・セクタに前記少なくとも１つの共有ライブラリの前記１つ又は複数の部分をロードする工程と
を含む処理リソース割り当て方法。
【請求項５１】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記第１のＰＵに関連付けられたキャッシュ・メモリ装置を選択する工程と、
前記命令に関連付けられたコード又はデータを前記キャッシュ・メモリ装置にフェッチする工程と、
前記第１のＰＵに関連付けられたＰＵデータ・パスを識別する工程と、
前記ＰＵデータ・パス内のシャドー・レジスタ値を、前記コード又はデータに関連付けられた少なくとも１つのＰＵを示すＰＵ識別子を前記シャドー・レジスタ値が反映するように規定する工程と
を含む処理リソース割り当て方法。
【請求項５２】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられたコードを識別する工程と、
少なくとも１つの共有メモリ・コヒーレンス・マシン命令を含む実行可能なルーチンを識別する工程と、
前記実行可能なルーチンが前記第２のＰＵに関連付けられていることに基づき、かつ、前記コードが、前記少なくとも１つの共有メモリ・コヒーレンス・マシン命令にマッピングされていることに基づき、前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含む処理リソース割り当て方法。
【請求項５３】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられた大域メモリ場所を識別する工程と、
第３のＰＵから前記第１のＰＵへ前記コールを自動的に、前記第３のＰＵが前記大域メモリ場所へのアクセスを欠いていること、及び前記第１のＰＵが前記大域メモリ場所へのアクセスを有していることの結果として転送する工程と
を含む処理リソース割り当て方法。
【請求項５４】
請求項３７記載の処理リソース割り当て方法であって、更に、
特定のＰＵに関連付けられたキャッシュ・メモリ装置を識別する工程と、
前記予め選択されたデータ場所が前記キャッシュ・メモリ装置内に配置されていることに基づいて前記データに関連付けられた特定のデータ・タイプに対する前記キャッシュ・メモリ装置の割り当てを行う工程と、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程と、
前記プログラミング言語に対応するライブラリにアクセスする工程であって、前記ライブラリは、メモリ割り当てコールを含むコンストラクタを規定し、前記メモリ割り当てコールは前記特定のデータ・タイプを有する情報にマッピングされる工程と、
前記割り当てに基づいて、前記メモリ割り当てコールに対する修正を実現して、それにより、前記プログラムの修正バージョン及び修正メモリ割り当てコールを作成する工程と、前記修正の結果として前記情報が前記キャッシュ・メモリ装置にロードされるように、前記修正されたメモリ割り当てコールを行う工程と
を含む処理リソース割り当て方法。
【請求項５５】
請求項５４記載の処理リソース割り当て方法であって、更に、
前記コールを行って、それにより、前記割り当ての結果として前記特定のＰＵにより、前記プログラムの前記修正バージョンを実行する工程と
を含む処理リソース割り当て方法。
【請求項５６】
請求項３７記載の処理リソース割り当て方法であって、更に、
１つ又は複数のコード・ライブラリを識別する工程と、
前記１つ又は複数のコード・ライブラリに関連付けられた参照渡しソース・コードにアクセスする工程と、前記参照渡しソース・コードを値渡しサポート・コードに変換して、それにより、転送ライブラリを生成する工程と、前記転送ライブラリを利用して、前記データの参照渡しでなく、値渡しを行う工程と
を含む処理リソース割り当て方法。
【請求項５７】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記コール内の１つ又は複数のポインタを識別する工程と、
前記１つ又は複数のポインタを変換して、それにより、前記データの参照渡しでなく値渡しを行うよう前記コールを構成する工程と、
前記第１のＰＵから前記第２のＰＵへの前記コールの転送を実行する工程と、
前記転送中に前記データの値渡しを行って、それにより、前記データの局所の複製を第１のキャッシュ・メモリ装置に記憶する工程であって、前記第２のＰＵが前記第１のキャッシュ・メモリ装置を含む工程と、
前記１つ又は複数のプリンタを前記局所の複製にリマッピングして、それにより、第２のキャッシュ・メモリ装置にアクセスすることなく、前記コールを実行することを可能にする工程であって、前記第１のＰＵが、前記第２のキャッシュ・メモリ装置を含む工程と
を含む処理リソース割り当て方法。
【請求項５８】
請求項３７記載の処理リソース割り当て方法であって、更に、
遠隔プロシージャ・コール（ＲＰＣ）を起動させて、それにより、前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程を含む処理リソース割り当て方法。
【請求項５９】
請求項３８記載の処理リソース割り当て方法であって、更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１の局所メモリ・マップ及び第２の局所メモリ・マップを識別する工程と、
前記第１の局所メモリ・マップと前記第２の局所メモリ・マップとの間の区別を識別する工程と、
前記区別に基づいてメモリ・アドレス変換を生成する工程と、
前記メモリ・アドレス変換を利用して前記ＲＰＣを構成する工程と
を含む処理リソース割り当て方法。
【請求項６０】
請求項５８記載の処理リソース割り当て方法であって、更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１のキャッシュ・メモリ装置及び第２のキャッシュ・メモリ装置を識別する工程と、
前記第１のキャッシュ・メモリに記憶され、前記命令に関連付けられたデータ値を識別する工程と、
前記ＲＰＣの結果として前記第２のキャッシュ・メモリ装置に前記データ値を記憶する工程とを含む処理リソース割り当て方法。
【請求項６１】
請求項６０記載の処理リソース割り当て方法であって、更に、
前記第２のキャッシュ・メモリに前記データ値が記憶されるまで前記第２のＰＵによる前記コールの実行を遅延させる工程とを含む処理リソース割り当て方法。
【請求項６２】
請求項５８記載の処理リソース割り当て方法であって、更に、
制御の第１のスレッドに関連付けられた実行可能なルーチン及び前記命令を含むプログラムにアクセスする工程と、
前記コール内の１つ又は複数のポインタを識別する工程と、
前記１つ又は複数のポインタを変換して、前記データの参照渡しでなく値渡しを行うよう前記コールを構成して、それにより、制御の第２のスレッドを作成する工程と、
前記第２のＰＵに関連付けられたキャッシュ・メモリ装置を識別する工程と、
前記ＲＰＣの結果として前記データの値渡しを行って、それにより、前記データの局所の複製を前記キャッシュ・メモリ装置に記憶し、前記第２のＰＵに前記制御の第２のスレッドを供給する工程と、
前記制御の第１のスレッドが前記制御の第２のスレッドと無関係であることの結果として、前記第２のＰＵが前記命令の実行を前記制御の第２のスレッドに基づいて行う一方で、前記制御の第１のスレッドに基づいて前記第１のＰＵにより、前記実行可能なルーチンを行う工程であって、前記実行可能なルーチンが、前記実行中に生成されたデータ値に対するリターン要求を欠いている工程と
を含む処理リソース割り当て方法。
【請求項６３】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記データにマッピングされた第１の実行可能なルーチンを行う第１のプロセッシング・コアを識別する工程であって、前記第１の実行可能なルーチンは共有メモリ・コヒーレンス・マシン命令を含む工程と、
第２のプロセッシング・コアにおいて第２の実行可能なルーチンにアクセスする工程と、
プロシージャ・コールを起動して、それにより、前記第２の実行可能なルーチンが前記データにマッピングされていることに基づき、かつ、前記共有メモリ・コヒーレンス・マシン命令を含む前記第２の実行可能なルーチンに基づき、前記第２のプロセッシング・コアから前記第１のプロセッシング・コアに前記第２の実行可能なルーチンを転送する工程と
を含む処理リソース割り当て方法。
【請求項６４】
請求項６３記載の処理リソース割り当て方法であって、別々のＰＵは、前記第１のプロセッシング・コア及び前記第２のプロセッシング・コアそれぞれを含み、前記プロシージャ・コールがＲＰＣである処理リソース割り当て方法。
【請求項６５】
請求項６３記載の処理リソース割り当て方法であって、単一のＰＵは、前記第１のプロセッシング・コア及び前記第２のプロセッシング・コアを何れも含み、前記プロシージャ・コールがＲＰＣである処理リソース割り当て方法。
【請求項６６】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、１つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記ＶＦＴにマッピングされた１つ又は複数のＶＦＴポインタを含むように仮想関数テーブル（ＶＦＴ）を実現するよう前記プログラミング言語が構成される工程と、
前記プログラミング言語に関連付けられたコンストラクタを識別する工程であって、前記コンストラクタは前記１つ又は複数のＶＦＴポインタを規定するよう構成される工程と、
前記プログラムのロード中に前記コンストラクタ周りにラッパ・コールをインジェクトして、それにより、前記１つ又は複数の仮想関数に対する１つ又は複数のＲＰＣ決定ラッパを含む、ＶＦＴへのポインタで、前記１つ又は複数のＶＦＴポインタを置き換える工程と
を含む処理リソース割り当て方法。
【請求項６７】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、１つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記ＶＦＴにマッピングされた１つ又は複数のＶＦＴポインタを含むようにＶＦＴを実現するよう前記プログラミング言語が構成される工程と、
ＲＰＣ決定コードがコールされることなく、前記１つ又は複数の仮想関数が１つ又は複数のＲＰＣそれぞれに自動的に誘導されるように複数のＲＰＣの実現の結果として前記ＶＦＴを修正する工程とを含む処理リソース割り当て方法。
【請求項６８】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、１つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記ＶＦＴにマッピングされた１つ又は複数のＶＦＴポインタを含むようにＶＦＴを実現するよう前記プログラミング言語が構成される工程と、
ＲＰＣ決定コードがコールされることなく、前記１つ又は複数の仮想関数が前記プログラムに関連付けられた局所コードに自動的に誘導されるように１つ又は複数のＲＰＣの実現がないことの結果として前記ＶＦＴを修正する工程とを含む処理リソース割り当て方法。
【請求項６９】
請求項３７記載の処理リソース割り当て方法であって、更に、
複数の条件分岐にマッピングされたコードを含む前記命令の予め定義されたバージョンにアクセスする工程と、
前記命令の複数の修正バージョンを生成する工程であって、前記修正バージョンはそれぞれ、前記複数の条件分岐のうちの別の条件分岐をたどるよう修正されたコードを含む工程と、
前記複数の修正バージョンそれぞれに関連付けられた複数の挙動を予測する工程と、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
前記実行可能なルーチンに関連付けられたランタイム挙動を識別する工程と、
前記ランタイム挙動に対応する前記修正バージョンの予測された挙動に基づいて前記実行可能なルーチンの動作中の実行のために前記複数の修正バージョンのうちの修正バージョンを選択する工程と
を含む処理リソース割り当て方法。
【請求項７０】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
仮想関数の第１の実現形態及び第２の実現形態を識別する工程であって、前記仮想関数は前記第１の実現形態を指し示すＶＦＴエントリを含み、前記仮想関数は更に、複数のＶＦＴのうちの第１のＶＦＴにマッピングされたＶＦＴポインタを含む工程と、
前記第１の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
前記動作中の前記第１の実現形態によって表される分岐挙動を識別する工程と、
前記分岐挙動の動作解析を行って、それにより、前記第２の実現形態が前記分岐挙動に対応する度合いが、前記第１の実現形態が前記分岐挙動に対応する度合いよりも大きいことを判定する工程と、
前記動作解析に基づいて前記複数のＶＦＴのうちの第２のＶＦＴに前記ＶＦＴポインタをリマッピングする工程であって、前記第２のＶＦＴが、前記第２の実現形態にマッピングされたポインタを含む工程、又は、
前記動作解析に基づいて前記第２の実現形態を指し示すよう前記ＶＦＴエントリを更新する工程と
を含む処理リソース割り当て方法。
【請求項７１】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられたプログラムにアクセスする工程であって、前記プログラムは、予め定義されたコール・サイトにマッピングされた予め定義された関数を含む工程と、
前記予め定義されたコール・サイトにより、前記予め定義された関数のコールを行う工程と、
前記コールの結果として、前記予め定義された関数によって表される分岐挙動を識別する工程と、
前記分岐挙動に基づいて、前記予め定義されたコール・サイトを修正する工程と
を含む処理リソース割り当て方法。
【請求項７２】
請求項３７記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
仮想関数の第１の実現形態及び第２の実現形態を識別する工程であって、前記仮想関数は前記第１の実現形態を指し示すＶＦＴエントリを含み、前記仮想関数は更に、複数のＶＦＴのうちの第１のＶＦＴにマッピングされたＶＦＴポインタを更に含む工程と、
前記第１の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
前記動作中の前記第１の実現形態によって表される分岐挙動を識別する工程と、
前記分岐挙動に基づいて前記仮想関数の考えられる将来の挙動を予測する工程と、
前記考えられる将来の挙動の動作解析を行って、それにより、前記第２の実現形態が前記考えられる将来の挙動に対応する度合いが、前記第１の実現形態が前記考えられる将来の挙動に対応する度合いよりも大きいことを判定する工程と、
前記動作解析に基づいて前記複数のＶＦＴのうちの第２のＶＦＴに前記ＶＦＴポインタをリマッピングする工程であって、前記第２のＶＦＴが、前記第２の実現形態にマッピングされたポインタを含む工程、又は、
前記動作解析に基づいて前記第２の実現形態を指し示すよう前記ＶＦＴエントリを更新する工程とを含む処理リソース割り当て方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、その全体を参照により、本明細書及び特許請求の範囲に援用する、西暦２０１２年８月２０日付け出願の米国特許仮出願第６１／６８４,８１３号の利益を主張する。
【０００２】
本出願は、処理リソース割り当ての分野に関する。
【背景技術】
【０００３】
例示的なシナリオに応じて、コンピュータ・システムは種々のデータ処理アプリケーションの実現のための有用なツールであり得る。しかし、コンピュータ・プログラム及びデータ記憶のパラダイムが一層高度になり続けるにつれ、コンピュータ・システムが、迅速勝つ効率的に、比較的複雑なプログラムを実行し、比較的大量のデータを処理する能力は経時的に一層重要になり得る。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
よって、例えばマルチプロセッサ・アーキテクチャなどの処理リソースを効率的に割り当てる能力は、現代のコンピュータ・システム及び将来のコンピュータ・システムにとって不可欠なツールとなり得る。
【課題を解決するための手段】
【０００５】
本概要は、詳細な説明において以下に更に説明された、単純化された形式での概念の選択肢を紹介するために提供する。本概要は、特許請求の範囲に記載の主題の主要な構成又は必須の構成を識別することを意図するものでなく、特許請求の範囲に記載の主題の範囲の判定を助けるものとして使用されることを意図するものでもない。
【０００６】
一実施例では、処理リソース割り当て方法を開示する。方法は、予め選択されたデータ場所（データの配置された場所(data  location)）を有するデータにマッピングされた命令を識別する工程を含み得る。方法は更に、予め選択されたデータ場所に基づいた第２のＰＵに第１の処理装置（ＰＵ）からの命令のコールを転送するか否かを判定する工程を含み得る。
【０００７】
更に、一実施例では、処理リソース割り当て方法が開示され、方法は、予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程を含み得る。方法は更に、予め選択されたデータ場所に基づいて第２のＰＵに第１の処理装置（ＰＵ）からの命令のコールを転送するか否かを処理リソース割り当て装置によって判定する工程も含み得る。
【０００８】
更に、一実施例では、コンピュータ読み取り可能な媒体が開示され、コンピュータ読み取り可能な媒体は、実行されると、処理リソース割り当ての方法をコンピュータ・システムに行わせる命令の組を記憶する。方法は、予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程を含み得る。方法は更に、予め選択されたデータ場所に基づいて第２のＰＵに第１のＰＵからの命令のコールを転送するか否かを判定する工程を更に含み得る。
【０００９】
本明細書に組み入れられ、本明細書の一部を構成する添付図面は、本願の手法の実施例を例証し、詳細な説明とともに以下に説明する原理を説明する役目を担う。
【図面の簡単な説明】
【００１０】
【図１】実施例による例示的な処理アーキテクチャを示すブロック図である。
【図２】実施例による例示的な分散処理アーキテクチャ（ＤＰＡ）を示すブロック図である。
【図３】実施例による例示的な進歩解析を示す図である。
【図４】実施例による例示的な処理リソース割り当て方法を示すフローチャートである。
【図５】実施例による例示的な処理リソース割り当てパラダイムを示すブロック図である。
【図６】実施例による第１の例示的なコール転送パラダイムを示すブロック図である。
【図７】実施例による例示的なメモリ割り当てパラダイムを示すブロック図である。
【図８】実施例による第２の例示的なコール転送パラダイムを示すブロック図である。
【図９】実施例による例示的なＰＵ識別パラダイムを示すブロック図である。
【図１０Ａ】実施例による例示的なリダイレクト・コール識別パラダイムを示すブロック図である。
【図１０Ｂ】実施例による例示的なターゲット・コード実行パラダイムを示すブロック図である。
【図１０Ｃ】実施例による第３の例示的なコール転送パラダイムを示すブロック図である。
【図１１】実施例による例示的なコール転送判定パラダイムを示すブロック図である。
【図１２】実施例による例示的なメモリ・・パーティショニング・パラダイムを示すブロック図である。
【図１３】実施例による例示的な処理リソース割り当てシステムを示すブロック図である。
【図１４】実施例による例示的なリダイレクト解析を示すフローチャートである。
【図１５】実施例による例示的なグローバル・コード・ライブラリ・パラダイムを示すブロック図である。
【図１６】実施例による第４の例示的なコール転送パラダイムを示すブロック図である。
【図１７】実施例による第５の例示的なコール転送パラダイムを示すブロック図である。
【図１８】実施例による第６の例示的なコール転送パラダイムを示すブロック図である。
【図１９】実施例による例示的なコード・インジェクション・パラダイムを示すブロック図である。
【図２０】実施例による例示的なコード選択パラダイムを示すブロック図である。
【図２１】実施例による例示的な仮想関数テーブル（ＶＦＴ）置換を示すブロック図である。
【図２２】実施例による例示的なＶＦＴ修正パラダイムを示すブロック図である。
【図２３】実施例による例示的な修正命令選択パラダイムを示すブロック図である。
【図２４】実施例による例示的な第１の仮想関数リマッピング・パラダイムを示すブロック図である。
【図２５】実施例による例示的なコール・サイト修正パラダイムを示すブロック図である。
【図２６】実施例による例示的な第２の仮想関数リマッピング・パラダイムを示すブロック図である。
【図２７】実施例による例示的な自動コール転送パラダイムを示すブロック図である。
【図２８】実施例による例示的なメモリ・ロード・パラダイムを示すブロック図である。
【図２９】実施例による例示的なデータ受け渡し（データ・パッシング(passing)）パラダイムを示すブロック図である。
【図３０】実施例による例示的なポインタ・リマッピング・パラダイムを示すブロック図である。
【図３１】実施例による例示的なリモート・プロシージャ・コール（ＲＰＣ）転送パラダイムを示すブロック図である。
【図３２】実施例による例示的なデータ記憶パラダイムを示すブロック図である。
【図３３】実施例による例示的なＲＰＣ構成パラダイムを示すブロック図である。
【図３４】実施例による例示的な実行可能なルーチン動作パラダイムを示すブロック図である。
【図３５】実施例による例示的な実行可能なルーチン転送パラダイムを示すブロック図である。
【図３６】実施例による例示的なコンピュータ・システムを示すブロック図である。
【図３７】実施例による例示的な命令実行システムを示すブロック図である。
【発明を実施するための形態】
【００１１】
明細書中で参照する図面は、別途明記しない限り、縮尺通りに描かれているものと解されるべきでなく、前述の図面は本質的に例示的なものである。
【００１２】
次に本願の手法の実施例を詳細に参照し、その例は添付図面に示す。本願の手法は種々の実施例に関して説明しているが、前述の実施例は本願の手法を制限することを意図するものでない。むしろ、本願の手法は、種々の代替、修正、及び均等物を包含するものとして解されるべきである。
【００１３】
更に、本願の手法の詳細な理解をもたらすために、本明細書及び特許請求の範囲において数多くの具体的な詳細を記載している。しかし、前述の具体的な詳細は本質的に例示的なものであり、前述の具体的な詳細なしで本願の手法を実施し得る、場合によっては、本明細書及び特許請求の範囲に記載した例示的な実施例の局面を不必要に分かりにくくすることのないように、周知の方法、プロシージャ、構成部分、回路、及びシステムを詳細に説明していない。
【００１４】
更に、特定の動作又は処理が行われることを示す語を使用する本願の詳細な説明を通じた記載は、コンピュータ・システム又は同様な電子コンピューティング装置の動作及び処理を表し得る。例えば、コンピュータ・システム又は同様な電子コンピューティング装置は、コンピュータ・システムのレジスタ及びメモリ内の物理的（例えば、電子的）数量として表されるデータを、操作し、コンピュータ・システム・メモリ内若しくはレジスタ内、又は、前述の他の情報記憶装置内、伝送装置内、若しくは表示装置内の物理的数量として同様に表される他のデータに変換する。本願の手法は更に、例えば光学式コンピュータ及び機械式コンピュータなどの他のタイプのコンピュータ・システムの使用によく適している。
【００１５】
よって、本願の手法は、コンピュータによって実行される、プログラム・モジュールなどのコンピュータ実行可能な命令の一般的なコンテキストで説明している場合がある。前述のプログラム・モジュールには例えば、特定のタスク、又は、特定の抽象データ・タイプを実現するルーチン、プログラム、オブジェクト、構成部分、データ構造等が含まれ得る。更に、本願の手法は更に、通信ネットワークを介してリンクされた遠隔処理装置により、タスクが行われる分散コンピューティング環境において実施し得る。分散コンピューティング環境では、プログラム・モジュールは、局所並びに遠隔のデータ記憶媒体及びコンピュータ・メモリ装置に配置し得る。
【００１６】
上記に係わらず、更に、特定の動作又は処理が行われることを示す語は手作業の動作又は処理を表し得る。実際に、本願の手法の種々の実施例は、コンピュータによって実現される１つ又は複数の動作若しくは処理と、手作業の１つ又は複数の動作若しくは処理との組み合わせを実現する。更に、コンピュータによって実現される動作又は処理の１つ若しくは複数は、例えば、（１）特定のユーザ入力、（２）適格因子若しくはパラメータ、又は（３）先行する動作若しくは処理の生起などに応じて自動的に行い得る。
【００１７】
更に、「結合された」との語は、必ずしも、直接の物理的関係を示す訳でない。例えば、２つの構成部分が、互いに「結合された」ものとして表される場合、２つの構成部分の間で結合されているか、接続しているか、一体化されている等の１つ又は複数の他の部品、材料等（例えば、接着剤又は信号伝送路）が存在し得る。そういうものとして、「結合された」との語には、別途明記しない限り、その考えられる最も広い意味が与えられるべきである。
【００１８】
更に、「通信するよう関連付けられた」は必ずしも物理的関係を示すものでない。例えば、２つの構成部分が、互いに「通信するよう関連付けられている」として説明されている場合、前述の構成部分は、例えば、無線及び／又は有線通信プロトコルを使用して互いに通信するよう構成し得る。そういうものとして、「通信するよう関連付けられた」との語には、別途明記しない限り、その考えられる最も広い意味が与えられるべきである。
【００１９】
更に、「パラダイム」との語は、参照された主題の先行して知られている理解を示すものとして解されるべきでない。むしろ、例えば、本願の手法の実施例に応じて提示された配置、構成、又はモデルを単に表すものとして解され得る。実際に、「パラダイム」との語には、別途明記しない限り、その考えられる意味が与えられるべきである。
【００２０】
更に、明りょう性の目的で、「プログラム」との語は、アルゴリズム若しくは一連の命令、又は、あるいは、特定のタスクの実行のためのコード化された命令を提供する動作を表し得る。前述の例示的な定義にかかわらず、「プログラム」との語には、別途明記しない限り、その考えられる意味が与えられるべきである。
【００２１】
更に、「処理」との語は例えば、プログラム（若しくはアルゴリズム）が実行される活動、又は、実行されているコンピュータ・プログラムの特定のインスタンスを表し得る。あるいは、「処理」との語は、単に、例えば、結果を実現するために講じられる一連の動作、又は、あるいは、結果を実現するために一連の処理を行う動作を表し得る。前述の例示的な定義にかかわらず、「処理」の語には、別途明記しない限り、その考えられる最も広い意味が与えられる。
【００２２】
最後に、「コンピュータ読み取り可能な媒体」との用語は、例えば、一時的な、又は一時的でないコンピュータ読み取り可能な媒体を表すものとして解し得る。しかし、「コンピュータ読み取り可能な媒体」との用語は、いつでも、本来、１つ又は複数の信号（例えば、１つ又は複数の一時的な伝搬信号）のみを含むものとして解されないものとする。更に、「コンピュータ読み取り可能な媒体」との用語が「一時的でないコンピュータ読み取り可能な媒体」として解される場合、「一時的でないコンピュータ読み取り可能な媒体」との、結果として生じる用語は、コンピュータ読み取り可能な媒体全てを包含し、唯一の例外は、１つ又は複数の信号（例えば、１つ又は複数の一時的な、伝搬信号）のみを備えるコンピュータ読み取り可能な媒体であると解されるべきである。
【００２３】
I  概要
例示的なシナリオによれば、処理アーキテクチャ内のプロセッサはメモリ（例えば、ランダム・アクセス・メモリ（ＲＡＭ）又はレベル２（Ｌ２）キャッシュ）を共有し、各プロセッサはメモリのそれ自身のビューを備えたそれ自身のキャッシュを有する。各プロセッサは単一のプロセッサとしてプログラムされ、よって、マルチプロセッサ・アーキテクチャは、実質的に単一プロセッサ・アプローチを利用する。更に、プロセッサ間で存在する実現された通信機構は共有メモリ経由である。前述のアプローチでは、いくつかの課題が生じ得る。例えば、プロセッサ間の通信をどのようにして行うかを優先順位付けすることは困難であり得、プロセッサ間での小量の情報の転送の試行は効率的でないことがあり得、キャッシュ・コヒーレンシ問題に直面し得る。
【００２４】
例示的な一シナリオに従えば、キャッシュ・コヒーレンシの課題は特に、やっかいであり得る。例えば、データが実際には別々の多くの場所に保存されている以外、各プロセッサがデータの同じビューをみていることが重要であり得る。特に、キャッシュ・アーキテクチャでは、プロセッサは、例えばレベル１（Ｌ１）キャッシュとして表し得るそれ自身のキャッシュに書き込み、その他のプロセッサは、何が書き込まれているかをみることができない。前述のＬ１キャッシュが共有メモリでないからである。したがって、データ変更が第２のレベルのキャッシュ（又はＬ２キャッシュ）に伝達され、次いで、その他のプロセッサの個別のＬ１キャッシュそれぞれに、その他のプロセッサがそれをみることが可能である状態になる前に供給される。よって、データ変更が実現される場合、前述の変更は実質的に、キャッシュ線を「ダーティー」にし、その場合、当面、そのデータを使用しない旨をプロセッサそれぞれに伝えるために信号が送出される。よって、別々のＬ１キャッシュに同じデータ値の複数の複製を記憶することにより、キャッシュ・コヒーレンシ問題が生じ得る。
【００２５】
前述のキャッシュ・コヒーレンシ問題に対する１つの例示的な解決策に従って、相互排他（ｍｕｔｅｘ）ロックを実現し得る。例えば、第１のプロセッサが、特定のデータ変数に書き込むことを意図する場合、データ変数は、ロックされた状態にある間、他のプロセッサが書き込むことができないようにロックされた状態になる。第１のプロセッサは次いで、ロックされたデータ変数に書き込み、次いで、新たなデータ値がＬ２キャッシュに送出され、次いで、残りのＬ１キャッシュそれぞれに供給されるようにアンロックすることができる。しかし、前述のタイプのシステムはスケーリングが好適でないことがあり得るという問題が前述の例示的な解決策に対して発生し得る。例えば、実現されたアーキテクチャが１００個のプロセッサを含む場合のｍｕｔｅｘロックの実現の試行には、かなりの量の追加ハードウェアが関係し得る。
【００２６】
上記に加えて、動作に注力した種々の手法の目的は、移動させる対象に応じて特定の対象を移動させるのに要する時間を最小にすることである。上記例示的なシナリオに従って、移動させられるのはデータである。実際に、コードは固定である（こと、及び充填し、後に再充填し得る命令コードが提供されること）から、コードを移動させることは必要でないことがあり得る。しかし、本願の手法の実施例によれば、データ自体は移動させず、これは、上記問題の解決を助ける。例えば、本願手法の実施例は、全体のデータ移動及びキャッシュ・コヒーレンシ要件を最小にすることにより、より好適な並列処理及び動作を可能にするハイブリッド・コンピュータ・アーキテクチャを提供する。更に、コンテキスト・スイッチをどのようにして誘導するかについての情報をソフトウェアに提供し、コード・リンクに対する新たな手法が、これを利用するように実現される。
【００２７】
一実施例に従えば、「ワンダリング・スレッド」を利用する手法が実現される。前述の実現形態の目標は、プロセッサを局所キャッシュ外で動作させ、キャッシュ・ミスを最小にすることである。前述の手法は、例えば、グループでメモリに密結合されたＣＰＵを使用したマルチコア／多コアの非均等メモリ・アクセス（ＮＵＭＡ）処理アーキテクチャ内で実現し得る。更に、処理アーキテクチャが統合大域アドレス空間を有する場合、修正なしで、より好適な動作を実現するための機構を、予め定義された単一スレッド・コードとともに使用することが可能である。よって、前述の手法は、既存のコードをサポートするように、かつ、「ダイ・スタッキング」を使用してメモリ及びプロセッサが構築され、コア数が比較的高い（キャッシュ・コヒーレントでない）ＮＵＭＡマシンを使用して実現し得る。
【実施例】
【００２８】
ＩＩ  例示的なアーキテクチャ、手法、及びパラダイム
本願の手法の種々の例示的な実施例について次に述べる。しかし、本願の手法は前述の例示的な実施例に制限されず、本願の手法は更に、本明細書及び特許請求の範囲記載の例示的な実施例及び実現形態の自明な変形を含む。更に、本明細書及び特許請求の範囲記載の種々の原理を不必要にわかりにくくすることのないように、種々の周知の構成部分を概して、添付図面に示していない一方、前述の周知の構成部分は、本願手法の種々の実施例を実施するために当業者によって実現し得る。
【００２９】
Ａ  例示的な処理アーキテクチャ
次に、いくつかの例示的な処理アーキテクチャについて掘り下げてみる。しかし、本願の手法は前述の例示的な処理アーキテクチャ手法に制限されず、他の処理アーキテクチャ手法を実現し得る。
【００３０】
例示的なシナリオでは、コンピュータ・システム・プロセッサ開発は、メモリの開発とも、種々のＩＣプロセスの使用とも無関係であり得る。よって、かなりの数のコンピュータ・アーキテクチャは、メモリ・チップとＰＵとの間のデータ及びコードの移動の管理に注力し得る。これは、移動中のデータの一時的な複製を保持する複数層のキャッシュをもたらし得る。シリコンＩＣプロセス・スケーリングの属性により、プロセッサ速度は、横這い、すなわち「頭打ち」になり得、単一コアの性能は、動作中にデータ及びコードを移動させる平均的な物理距離の関数であり得る。コア・サイズの増加は有益でないことがあり得るので、プロセッサは、ＰＵ／ＩＣパッケージ毎に複数コアで構築し得、前述の複数コアは、図１に示したような、含まれたメモリへのアクセスを共有する。
【００３１】
次に図１を参照すれば、実施例による例示的な処理アーキテクチャ１００を示す。例示的な処理アーキテクチャ１００は、例示的なＰＵ１１０、１２０などの１つ又は複数のプロセッシング・ユニット（ＰＵ）を含む。前述のＰＵはそれぞれ、例示的なプロセッシング・コア１１１、１２１などの少なくとも１つのプロセッシング・コアを含み、前述のプロセッシング・コアそれぞれは例えばＣＰＵとして表し得る。前述のＰＵの１つ又は複数は更に、更なるプロセッシング・コア１１２乃至１１４、１２２乃至１２４などの１つ又は複数の更なるプロセッシング・コアを任意的に含み得る。前述のプロセッシング・コアはそれぞれ、コンピュータ読み取り可能な命令が電子ディジタル信号の形式で前述のコアにルーティングされる場合などに、電子情報を処理するよう構成される。更に、一実施例では、実現されたプロセッシング・コアは、シーケンシャル・コードを実行することができる予め定義された、又は拡張されたプロセッサ（例えば、ｘ８６、ＡＲＭ又はＭＩＰＳプロセッサ）である。
【００３２】
更に、一実施例では、前述のＰＵの１つ又は複数はそれぞれ、例示的なキャッシュ・メモリ装置１１５、１２５などの少なくとも１つのキャッシュ・メモリ装置を含む。前述のキャッシュ・メモリ装置はそれぞれ、通信するよう、同じＰＵ内に含まれるプロセッシング・コアに結合され、又は関連付けられる。更に、前述のキャッシュ・メモリ装置それぞれは、コンピュータ読み取り可能な命令及びデータを表す電子ディジタル情報などの電子情報を記憶するよう構成される。例えば、一実施例では、別々のコンピュータ読み取り可能な命令が、外部ソースから例示的なＰＵ１１０、１２０それぞれに電子ディジタル情報の形式でルーティングされる。例示的なＰＵ１１０、１２０それぞれにおいて前述の命令が受信されると、又は例示的なＰＵ１１０における前述の命令の受信の後に、受信された命令は、例示的なキャッシュ・メモリ装置１１５、１２５それぞれに記憶される。その後、特定のキャッシュ・メモリ装置と同じＰＵ内のプロセッシング・コアは、前述のキャッシュ・メモリ装置内に記憶されたデータ及び命令にアクセスし、アクセスされたデータに基づいて前述の命令を実行し、いくつかの処理結果を、当該結果が記憶されるキャッシュ・メモリ装置に返す。
【００３３】
よって、種々の実施例により、複数のＰＵが実現される。実現された、ＰＵ、又は、いくつかのその構成している構成部分は、集積回路（ＩＣ）チップ内又はパッケージ内に含まれ得る。しかし、本願の手法は、ＩＣチップ又はパッケージの実現形態に制限されない。
【００３４】
なお図１を参照するに、ＰＵはそれぞれ、通信するよう、バス１３０（例えば、データ／アドレス・バス）に関連付けられ、又は結合される。実施例では、バス１３０（及び／又は、例示的な処理アーキテクチャの種々の構成部分をリンクするその他の物理伝送路の１つ又は複数）は、例えば、チップ外ＰＣＢトラックなどの印刷回路基板（ＰＣＥ）トラックを含む。バス１３０は、通信するよう、例示的なメモリ・コントローラ１４０、１５０などの１つ又は複数のメモリ・コントローラに関連付けられ、又は結合される。更に、前述のメモリ・コントローラはそれぞれ、通信するよう、例示的なメモリ装置１４１乃至１４４、１５１乃至１５４などの１つ又は複数のメモリ装置に接続又は結合される。前述のメモリ装置の１つ又は複数は例えば、ダイナミックＲＡＭ（ＤＲＡＭ）などのＲＡＭを含み得る。
【００３５】
例示的な実現形態では、例示的なメモリ装置１４１乃至１４４、１５１乃至１５４などの１つ又は複数のメモリ装置は、命令及び／又はデータを記憶するよう構成され、例示的なメモリ・コントローラ１４０、１５０などの１つ又は複数のメモリ・コントローラは、前述のメモリ装置との間で移動する情報のフローを管理するよう構成される。命令及び／又はデータが、前述のメモリ装置から上記ＰＵの１つ又は複数にルーティングされる場合、メモリ・コントローラは、前述のメモリ装置における当該情報にアクセスし、バス１３０に沿って適切なＰＵに情報をルーティングするよう構成される。
【００３６】
図１に示す例示的な処理アーキテクチャ１００をなお参照するに、例示的なシナリオでは、前述のアーキテクチャは、種々の通信チャネルの競合、及び任意の動作についての長い転送経路に見舞われる。そういうものとして、実施例では、コアとそのデータ及びコードとの間の距離を最小にし、コア間の競合を最小にし、コード及びデータの移動を最小にするやり方でコア及びメモリが再構成される。これは単一のＩＣプロセスでは困難であり得るが、ＩＣの「ダイ・スタッキング」を行うことができることにより、これを実現することが容易になり、それにより、共有メモリ・バスがボトルネックのないネットワークで置き換えられ、複数のメモリ装置からの各メモリに、直接関連付けられたプロセッサが有り、ＣＰＵが複数のプロセッシング・コアを有し得る、図２に示すものなどのアーキテクチャが提供される。
【００３７】
更に例証するに、かつ、次に図２を参照するに、実施例による、例示的な分散処理アーキテクチャ（ＤＰＡ）２００を示す。例示的なＤＰＡ２００は、例示的なＰＵ２１０、２２０、２３０などの複数のＰＵを含み、前述のＰＵは、任意的には、「ダイ・スタッキング」された構成で配置し得る。例えば、「ダイ・スタッキング」は例えば、単一の半導体パッケージ内の他の１つの上に複数の構成部分（例えば、半導体チップ）をスタッキングする処理として定義し得る。したがって、実施例では、実現されたＰＵの２つ以上が互いの上にスタッキングされ、前述のスタッキングされたＰＵは、例えば、ＰＣＢ上に搭載された単一の半導体パッケージ内に含まれる。
【００３８】
実施例では、実現されたＰＵは、通信するよう、ネットワーク２４０に結合され、又は関連付けられ、ネットワーク２４０は、前述のＰＵとの間の情報をルーティングするよう構成される。一実施例では、ネットワーク２４０は、局所及び／又は遠隔に配置されたコンピュータ及びサーバの分散ネットワークであり得る。しかし、本願の手法は、何れの特定のタイプのネットワークにも限定されない。
【００３９】
なお図２を参照するに、実現されたＰＵそれぞれは、例示的なＣＰＵ２１１、２２１、及び２３１などの少なくとも１つのＣＰＵを含み、各ＣＰＵは、コンピュータ読み取り可能な命令が電子ディジタル信号の形式でＣＰＵにルーティングされる場合などに電子情報を処理するよう構成される。一実施例では、実現されたＣＰＵは、シーケンシャル・コードを実行することができる、予め定義された、又は拡張されたプロセッサ（例えば、ｘ８６、ＡＲＭ又はＭＩＰＳプロセッサ）である。実現されたＰＵはそれぞれ、更に、例示的なＲＡＭ２１２、２２２、及び２３２などの少なくとも１つのＲＡＭ装置（例えば、ＤＲＡＭメモリ装置）を含み、含まれたＣＰＵは、その個別のＰＵ内に配置されたＲＡＭ装置に、通信するよう関連付けられ、又は結合される。実現されたＲＡＭ装置はそれぞれ、その個別のＣＰＵによって取り出し、又はアクセスし得る命令及び／又はデータを記憶するよう構成される。
【００４０】
更に、一実施例では、前述の大域マッピングされたＲＡＭ装置に記憶された情報を別々のＰＵに配置されたＣＰＵによってアクセスし得るように前述のＲＡＭ装置の１つ又は複数が大域マッピングされる。例証するに、ＲＡＭ２１２は、通信するようＣＰＵ２１１と結合され、又は関連付けられ、それらは両方、ＲＡＭ２１２に記憶された情報をＣＰＵが取り出し、又はアクセスすることができるように、同じＰＵ（ＰＵ２１０）内に配置される。更に、例示的な実現形態によれば、ＲＡＭ２１２に対して別々のＰＵに配置されたＣＰＵ２２１、２３１は更に、ＲＡＭ２１２に記憶された情報を取り出し、アクセスすることができるようにＲＡＭ２１２が大域マッピングされる。特定のＲＡＭの存在が、２つ以上のＰＵに知られている場合、前述のＲＡＭは「共有ＲＡＭ」として表し得る。しかし、個々のＰＵのＲＡＭは、個々のＰＵのＲＡＭの一部又は全てが前述のＰＵ専用であるようにパーティショニングし得る。更に、「共有ＲＡＭ装置」は例えば、それが実際に共有されているか否かに係わらず、特定のＰＵにおけるＲＡＭ全てを表し得る。
【００４１】
更に、かつ、なお図２を参照するに、各ＰＵは、例示的なキャッシュ・メモリ装置２１３、２２３、及び２３３などのキャッシュ・メモリ装置を含み、前述のキャッシュ・メモリ装置は、その個別のＰＵ内に配置されたＣＰＵ及びＲＡＭ装置と、通信するよう関連付けられ、又は結合され、前述のキャッシュ・メモリ装置は、例えば、メモリ管理及び／又はネットワーク処理に携わるよう構成し得る。実際に、一実施例では、特定のＰＵ内に配置されたＣＰＵ、ＲＡＭ装置、及びキャッシュ・メモリ装置は、例えば、スルーシリコンビア（ＴＳＶ）／ワイド入出力（Ｗｉｄｅ−ＩＯ）（オンチップ）通信アーキテクチャを介して互いに通信するよう構成される。しかし、本願の手法は前述の特定の通信アーキテクチャに制限されず、他の処理アーキテクチャを実現し得る。
【００４２】
更に、かつ、なお図２を参照するに、実施例では、ＰＵそれぞれがサーバであるサーバ・ファーム内のサーバのネットワークに同じ構造が含まれ、ネットワークはパケット交換（例えば、イーサネット（登録商標）パラダイム）型である。前述のシステムでは、メモリは、サーバ間でコヒーレントに管理されないことがあり得、メッセージパッシング・プログラミング・スタイルを、システム（例えば、メッセージ・パッシング・インタフェース（ＭＰＩ））をプログラミングするために使用し得る。いくつかの例示的な実現形態に従って、本明細書及び特許請求の範囲記載の手法は、前述の大規模分散システム及びより小規模の高集積並列システムをプログラミングするための統合手法を提供する。
【００４３】
システム性能に関しては、かつ、例示的な実現形態によれば、各プロセッサは、そのスタック・フレームを表す「コンテキスト」を有する。特に、実行されたプログラムが特定の時点において入っているルーチンを表す、その中で動作しているそのメモリ・スタックを有する。したがって、プロセッサが現在入っているルーチンは、例えば、そのコンテキストとして表し得る。更に、上記ルーチンのための情報が、前述の情報をすばやくアクセスし得るように局所ＣＰＵレジスタ内に記憶されている限り、前述のレジスタはプログラム・カウンタ（又は命令ポインタ）とともに、特定の処理のコンテキストを表すものとして解し得る。よって、「タスク・コンテキスト」は、例えば、特定のタスクであって、中断されたちょうどその時点における前述の同じタスクの首尾良く行われる継続が後続する特定のタスクの中断を可能にするために保存する対象の上記タスクによって利用される最小のデータの組として定義し得る。上記に鑑みて、一実現形態では、「コンテキスト」は、（例えば、メモリ・アドレスを有していないので）プログラマが視ることができないが、しかしながら、実行されているコードによって利用されるコール・スタック及びレジスタ内に記憶されたデータを含む。
【００４４】
プロセッサが、新たなルーチンをコールする場合、メモリからこの他のルーチンの新たな命令をフェッチし、次いで、実行する。これは、例えば、コールが実行された場合に、プロセッサが一フレームから別のフレームに移動する「コンテキスト・スイッチ」として表し得る。前述のコンテキスト・スイッチは、現在実行しているスレッドによって使用されるＣＰＵレジスタを局所に保存し、次いで、実行される対象の次のスレッドによって使用される対象のレジスタをロードすることによって行い得る。更に、前述のコンテキスト・スイッチは、複数の処理が単一のＣＰＵを共有することを可能にし得、したがって、マルチタスク・オペレーティング・システムの極めて重要な特徴であり得る。特に、前述のコンテキスト・スイッチは、複数の処理が同じプロセッサ上で同時に実行されているように見え得るように極めて高速に行われる。
【００４５】
図２に示す例示的なＤＰＡ２００をなお参照するに、実施例では、このアーキテクチャは、ネットワーク及びキャッシュの実現形態に応じて、キャッシュ・コヒーレントである（か、又はキャッシュ・コヒーレントでない）ことがあり得るＮＵＭＡアーキテクチャである。同様に、メモリは、一大域アドレス空間を形成し、実現された複数のプロセッサのうちの各プロセッサに利用可能であるように構成してよく、しなくてもよい。
【００４６】
上記に係わらず、例示的なシナリオでは、前述の分散アーキテクチャに問題が存在している。特に、有限量の局所メモリ及びキャッシュがなお存在しているので、メモリ内のタスクの動作は、例示的な処理アーキテクチャ１００によって実現し得るものよりも好適であり得るが、プロセッサは、要求されたデータ又はコードが特定のプロセッサについて局所に記憶されていない（（ｘ８６又はＡＲＭプロセッサのように）通常コード実行が行われた場合にキャッシュ及び／又はメモリ（例えば、ＤＲＡＭ）との間でのデータの「スワップ」イン及び「スワップ」アウトのための管理が関係する）場合、なおストールする。更に、第２の例示的なシナリオでは、ＳＭＰ処理アーキテクチャは好適にスケーリングしないことがあり得、併せて使用されるソフトウェア手法も同様であり得る。しかし、本願の手法の実施例では、例えば、コーディング・スタイルがＳＭＰでなくメッセージパッシングであり、各「スレッド」を特定のＣＰＵに結合し、又は割り当てることが可能な場合に前述の問題に直面することなく、ＤＰＡを効果的に使用し得る。「スレッド」は、プログラムの他のコードと無関係に実行することが可能なプログラム内の独立した命令シーケンスとして定義し得る。特に、各スレッドはコードにわたる別個の制御パスを表し、複数のスレッドが特定の処理において定義されている場合、前述のスレッドそれぞれは、実質的に互いに無関係になる。
【００４７】
上記に鑑みて、単純なＤＰＡに対する、提案されたいくつかの拡張／修正について本明細書において掘り下げてみる。前述の提案された拡張／修正は、いくつかの観察によってサポートされる。まず、かつ、次に図３を参照するに、実施例による例示的な進歩解析３００の図を示す。図では、垂直軸３１０は、プロットされた情報のサイズを測定するために使用され、水平軸３２０は、プロットされた情報に関連付けられた技術的進歩を測定するために使用され、技術的進歩は情報サイズの関数である。更に、データ及びコードについての観察が前述のデータ及びコードのサイズの増加とともに、プロット３３０及び３４０それぞれとしてプロットされる。図は、経時的にコード及びデータについての観察可能な結論を（例示的なシナリオに従って）もたらし、データが指数関数的に増加する一方で、コード・サイズは対数関数的に増加する。この理由は、データ容量は、（ＩＣ内のトランジスタの数が約２年毎に倍になると表す）ムーアの法則に従うようにみえる一方、コードは、経時的に再使用される傾向にあり、コール又は利用されることが多い場合がある関数を有するという点である。
【００４８】
更に、例示的なシナリオによれば、第２の観察では、特定のデータ・タイプについて、それに対して行われる固定数のオペレーションが存在している。これは、（以下、単に「Ｃ＋＋」及び「Ｃ」それぞれとして表される）Ｃプログラミング言語に基づいたＣ＋＋プログラミング言語などの「オブジェクト指向」プログラミング言語において公式化し得、データは「クラス」に属しているとして表され、クラスが例えば、データを実現することが可能な有限数の「メソッド」又はルーチンを含む。
【００４９】
前述の２つの観察に鑑みれば、特定のタイプの複数のデータの組それぞれが、ＤＰＡにおける特定のＰＵのメモリに割り当てられた場合、前述のデータを処理するよう利用されたコードはその特定のデータ・タイプの手法に注力され、実現されたコードの量は、（一実現形態によれば、）データ自体よりもずっと小さくなる。よって、特定のＰＵ内では、局所に記憶される対象のコードは、局所に保持されたデータのメソッド・コードになる。これは、本明細書で更に掘り下げるように、比較的高い度合いの処理効率を実現することが可能になる。
【００５０】
Ｂ  例示的な処理リソース割り当て
次に、いくつかの例示的な処理割り当て手法について掘り下げてみる。しかし、本願の手法は前述の例示的な処理リソース割り当て手法に制限されず、他の処理リソース割り当て手法を実現し得る。
【００５１】
上記に鑑みれば、かつ、次いで図４を参照するに、実施例による、処理リソース割り当て４００の例示的な方法を示す。処理リソース割り当て４００の例示的な手法は、予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程４１０と、予め選択されたデータ場所に基づいて第１のＰＵから第２のＰＵに命令のコールを転送するか否かを判定する工程４２０とを含む。例証すれば、第１のＰＵに割り当てられたキャッシュ・メモリ装置にデータが現在、記憶されていないが、第２のＰＵに割り当てられた別のキャッシュ・メモリ装置に現在記憶されていることがあり得る例を考えてみる。第２のＰＵが既に、この局所的に記憶されたデータへの相対的にすばやいアクセスを有するように、この別のキャッシュ・メモリ装置が実際に、このデータを現在、記憶している場合に、上記命令が関係する「制御のスレッド」を、（第２のＰＵがデータにアクセスすることができる相対的なケースが理由で、かつ、このデータの局所の複製を記憶して命令を実行する処理を第１のＰＵが開始することを阻止するために）第１のＰＵから第２のＰＵに転送し得る。このようにして、データ自体でなく、制御のスレッドを移動させ得る。
【００５２】
スレッドを移動させることは一方向のタスクであり得る一方、例示的な一シナリオに従えば、要求が送出され、次いで、データが戻されるという点で、データ／コード・フェッチが双方向である。高帯域幅低レーテンシ通信チャネル（例えば、光ファイバ・チャネル）の場合、純粋に、関係する距離の結果としてデータ／コードを要求するよりも、スレッド・コンテキストを移動させるほうが速いことがあり得る。特に、電子信号は光速近くで移動するが、これはなお、ナノ秒毎数センチメートルに過ぎない。対照的に、いくつかの例示的なプロセッサは、多くのオペレーションを単一のナノ秒以内に行うことが可能である。
【００５３】
更に例証すれば、例示的な一実現形態では、第１のＰＵは（このＰＵが特定の「制御のスレッド」を有しているように）スレッドを実行する。次に、この第１のＰＵの判定点は、例えばコード・ジャンプが関係し得るジャンプ又はルーチン・コールを第１のＰＵが行う場合に提示される。特に、第１のＰＵは、ジャンプする先のメモリ・アドレスを識別し、第１のＰＵは次いで、それ又は別のＰＵがジャンプ又はルーチン・コールを行うか否かを決定する。この決定を行うために、第１のＰＵは、（１）どのデータが関係しているか、（２）対応するデータがどこに配置されているか（例えば、ルーチンに特定のオブジェクトが関係する場合、そのオブジェクトの場所が判定される）、及び（３）どのＰＵが、この特定の場所に対応する局所メモリ（例えば、Ｌ１キャッシュ又はＲＡＭ全て）を有しているかを判定する。この場所情報及び対応するＰＵ識別情報に基づいて、第１のＰＵは、ジャンプ又はルーチン・コール自体を行うか、又は、さもなければ、制御のスレッドを別のＰＵ（例えば、第２のＰＵ、第３のＰＵ等）に転送（又はパス）するかを判定することができる。この制御のスレッドが実際に、別のＰＵにパスされる場合、この他のＰＵはコールを行い、第１のＰＵは次いで、別のスレッドを実行し始めることを自由にできる。
【００５４】
更なる例証の目的で、例示的な実現形態では、Ｃ＋＋において、第１のＰＵは、メソッドに対する実行可能なルーチン・コールを行い始め、前述のルーチンの実行のために取り出す対象の特定のオブジェクトにマッピングされたデータ・ポインタが存在している。このポインタは、実行側ＰＵが特定のレジスタから動作するようにコール内の特定の引数内に配置される。第１のＰＵはこのレジスタをみて、どのメモリ値がその中に記憶されているかを判定し、そのメモリ値が第１のＰＵに属さない場合、コールを別のＰＵに転送し、その場合、第１のＰＵは、そのルーチンに関連付けられた更なるコードの取り出し、解析、又は処理をわざわざ行うには及ばない。
【００５５】
上記に鑑みれば、実施例では、第１のＰＵは、ＤＰＡにおける制御の上記スレッドを受け取り、特定のタイプの複数のデータの組はそれぞれ、前述のＤＰＡ内の第２のＰＵのメモリに割り当てられ、第１のＰＵの転送決定の対象であるデータは、前述のデータの組の１つに対応する。よって、第１のＰＵが既に、このデータの複製を記憶している訳でない場合、第１のＰＵはこの制御のスレッドを第２のＰＵに転送し、第２のＰＵは、その局所に記憶されたデータに対するメソッド・コードを局所に記憶する。上述のように、これは、比較的高い度合いの処理効率を実現することを可能にする。このデータを処理するために利用されるコードは、その特定のデータ・タイプのメソッドに注力し、実現されるコードの量は、（一実現形態によれば、）デ―タ自体よりもずっと小さくなる。
【００５６】
更に例証するに、かつ、次に図５を参照するに、実施例による、例示的な処理リソース割り当てパラダイム５００を示す。特に、予め選択されたデータ場所５３０を有するデータ５２０にマッピングされた命令５１０が識別される（そうしたことは、第１のＰＵ５４０が命令５１０を受け取ると行われ得る）。予め選択されたデータ場所５３０は、例えば、特定のＰＵの局所メモリ内に配置し得る。更に、予め選択されたデータ場所５３０に基づいて第１のＰＵ５４０から第２のＰＵ５８０に命令５１０のコール５７０を転送するか否かを判定するために、処理リソース割り当て装置５６０などにより、処理リソース割り当て５５０が行われる。例えば、選択されたデータ場所５３０が第１のＰＵ５４０の局所メモリ内に配置されている場合、コール５７０は転送されず、この場合、第１のＰＵ５４０は制御のスレッドを維持し、コール５７０を行う。あるいは、選択されたデータ場所５３０が第１のＰＵ５４０の局所メモリ内に配置されていないが、第２のＰＵ５８０の局所メモリ内に配置されている場合、コール５７０は第２のＰＵ５８０に転送され、この場合、第２のＰＵ５８０は制御のスレッドを取得し、コール５７０を行う。
【００５７】
なお、図５を参照するに、処理リソース割り当て５５０は処理リソース割り当て装置５６０によって行い得る。実施例では、処理リソース割り当て装置５６０は、第１のＰＵ５４０などの、実現されたＰＵの１つ又は複数を含む。更に、一実施例では、処理リソース割り当て５５０は第１のＰＵ５４０によって行われる。しかし、処理リソース割り当て５５０は、第１のＰＵ５４０以外のＰＵによって行い得る。
【００５８】
上記に鑑みれば、例示的な実現形態には、特定のプロセッシング・コアとの間でデータを出し入れするのでなく、コンピューティング・コンテキストをその関連付けられたコード及びデータに移動させることが関係する。よって、特定のプロセッサが、（１）特定の処理時間スパン内のデータ・タイプの特定の部分集合のみを扱い、（２）命令のキャッシュをミスせず、（３）データのキャッシュをミスする可能性が低いように局所性を維持するやり方で大域共有メモリにわたってデータを分散させる。実際に、同じデータを使用したスレッドは同じプロセッサに誘導されるので、プロセッサ間キャッシュ・コヒーレンシが実現されるか否かにかかわらず、比較的高い度合いの処理効率が実現される。前述の手法は例えば、「ワンダリング・スレッド」として表し得る。単一の制御スレッドは、別々のメモリ領域にアクセスしている間にプロセッサ間でのワンダリングを行い得る。更に、一実施例では、実現されるプロセッサが多いほど、スレッドが同じプロセッサ上にあり、リソースに対する競合関係にある確率が低くなる。同様に、実現されたプロセッサの数が高いほど、外部ＤＲＡＭでなく、局所キャッシュに関連データが記憶されることになる。
【００５９】
上記にかかわらず、上述のような処理リソース割り当て４００の例示的な手法は補足し、かつ／又は修正し得る。実際に、例証の目的で、いくつかの例示的な実施例を次に掘り下げてみる。しかし、本願の手法は前述の例示的な実施例に制限されない。
【００６０】
図１に示す実施例と同様に、通信するよう、互いに関連付けられ、又は結合され、若しくは互いに接続された複数のＰＵを含む並列処理マシンによって実現し得るような処理マシン、システム、又はアーキテクチャを提供し、複数のＰＵはそれぞれ、局所メモリを有し、複数のＰＵは、命令に関連付けられたメモリにおけるデータ又はコードの場所に基づいて命令を実行し、又は命令の実行を別のＰＵに転送するよう構成される。例証するに、かつ、次に図６を参照するに、実施例による第１の例示的なコール転送パラダイム６００を示す。特に、命令５１０に関連付けられたコード又はデータ・メモリ場所６１０が識別され、第２のＰＵ５８０に関連付けられたコード又はデータ・メモリ場所６１０に基づいて第１のＰＵ５４０から第２のＰＵ５８０にコール５７０が転送される。
【００６１】
第１のキャッシュ・メモリ装置６２０及び第２のキャッシュ・メモリ装置６３０が第１のＰＵ５４０及び第２のＰＵ５８０それぞれと関連付けられる（例えば、第１のＰＵ５４０及び第２のＰＵ５８０それぞれに割り当てられ、又は、第１のＰＵ５４０内及び第２のＰＵ５８０内それぞれに含まれる）例を考えてみる。メモリ場所識別６４０は例えば、第１のＰＵ５４０などによって行われ、データ５２０が、コード又はデータ・メモリ場所６１０（図５に示す選択されたデータ場所５３０）に現在されていることが判定され、コード又はデータ・メモリ場所６１０が、第１のキャッシュ・メモリ装置６２０内でなく第２のキャッシュ・メモリ装置６３０内に配置される。データ５２０へのアクセスが、その全体で命令５１０を首尾良く実行するための条件であるようにデータ５２０にマッピングされるのでこのことは重要である。よって、コール５７０は第１のＰＵ５４０から第２のＰＵ５８０に転送される。第２のＰＵ５８０は既に、データ５２０に対する局所アクセスを有するからである。特に、第２のＰＵ５８０によるコール５７０の実行には、外部メモリへのデータ要求の送出に関連付けられた更なる時間及びエネルギが関係せず、次いで、返された値／データの組を待たない。
【００６２】
更に説明するに、プロセッサが、相対的に大きいか、又は複雑なプログラムを実行する例を考えてみる。このプログラムのサイズのサイズ又は複雑度が理由で、プロセッサは場合によっては、命令キャッシュをミスする。場合によっては、プログラム実行には、共有メモリから新たな命令の組をフェッチすることが関係する。更に、オブジェクト指向言語では、特定のタイプのデータが、コードが記述されたやり方での特定のオペレーションに関連付けられ得る。よって、実施例では、特定の処理時間スパン中にこのプロセッサが、その特定のタイプのデータと相互作用するコードのみを処理するように、特定のタイプ及び特定の空間のオブジェクトが、特定のプロセッサに割り当てられる。したがって、プロセッサがＬ１キャッシュ内に、又は、前述のＬ１キャッシュの予め選択された部分内にのみ、特定のタイプのデータを有している場合、プロセッサは、比較的少数の命令を特定の処理時間スパン中に実現するに過ぎず、これにより、プロセッサが命令キャッシュをミスする可能性が非常に低くなる。
【００６３】
よって、実施例では、局所的にコールを実行する代わりに、第１のプロセッサは代わりに、コンテキストをパスし、具体的には、第２のプロセッサが既にそれ自身のＬ１キャッシュに関連データを有している場合に、上記第２のプロセッサにコールを転送する。よって、移動するのはデータ自体よりもむしろ、コンテキストである。基本的に、第１のプロセッサは、特定のコンテキストを断念し、別のプロセッサにパスする。更に、一実施例では、第２のプロセッサは、このコンテキストを断念することになった場合、それを第３のプロセッサにパスする等である。その結果、制御のパスされたスレッドは例えば、「ワンダリング・スレッド」と表し得る。よって、制御のスレッドは、命令及びデータが局所メモリに配置された別のプロセッサにパス（又は「ワンダリング」）し得る。
【００６４】
特定の処理アーキテクチャを選択する目的で、ワンダリング・スレッドは例えば、本明細書及び特許請求の範囲記載のＤＰＡ上などで実現し得る。例えば、多くのスレッドはＤＰＡシステムにおいて同時に行い得、よって、互いに別のデータを利用している場合に前述のスレッドが衝突する可能性は低くなる。しかし、本願の手法はＤＰＡの実現形態に制限されない。むしろ、ワンダリング・スレッドは更に、ＤＰＡ以外のアーキテクチャ上で実現し得る。実際に、一例では、イーサネット（登録商標）通信を利用するサーバ・ファームは同様な構造を有し得る。
【００６５】
コール転送機構を参照するに、実施例では、メッセージ・パッシング・コードの実行には、ＰＵ間でデータを転送する機能のみならず、それが到着した際にそれを処理する機能も関係する。これは例えば、本明細書及び特許請求の範囲に更に記載するリモート・プロシージャ・コール（ＲＰＣ）として実現し得る。ＲＰＣは、例えば、プログラムを実行している第１のＰＵのコンピューティング・コンテキストを第２のＰＵに転送して、プログラムの実行を継続することを可能にするよう構成された機構であって、コンパイラが、別々のコール境界を有するようユーザのコードを改修し得る機構として定義し得る。例えば、単にＰＵ間でデータをパスするよりもむしろ、データ及びハンドラ・ルーチン・エントリ・ポイントが送出される。よって、単一スレッドのコードは、ＰＵ間で制御を転送するためにＲＰＣ機構を使用することにより、統合大域アドレス空間を有するＤＰＡ上で実行させ得る。したがって、命令及びデータを連続して読み込むことにより、単一のスレッド・コードを単一のコアに実行させるよりもむしろ、制御のスレッドは、どのデータが処理されているかに応じてＰＵ間でワンダリングする。メソッド・コードが、ＰＵ上にデータとともに存在している可能性が高い限り、生起する「キャッシュ・ミス」は比較的少なくなる。このようにして、キャッシュ・ミスのコストは、コール・コンテキストの転送のオーバヘッドと交換し得る。特定のルーチン・コール又はオペレーションについてアクセスされているメモリが別のＰＵに属していること、及び前述のＰＵに制御を転送することが有益であり得ることを識別するためにハードウェア・サポートがコアに追加された場合、種々のプロセッサについてコンパイルされた単一スレッドのコードに前述の手法を使用し得る。
【００６６】
Ｃ  例示的なメモリ割り当て
次に、いくつかの例示的なメモリ割り当て手法について掘り下げてみる。しかし、本願の手法は前述の例示的なメモリ割り当て手法に制限されず、他のメモリ割り当て手法を実現し得る。
【００６７】
実施例では、前述の別々のＰＵそれぞれが特定のスレッドを効率的に処理するよう構成されるように前述のＰＵによって、ワンダリング・スレッドが受信される前に、別々のＰＵのそれぞれの局所メモリが別々のデータの組に割り当てられる。このようにして、比較的、効率的であり、かつ特化された処理アーキテクチャを実現し得る。
【００６８】
例証するに、かつ、次に図７を参照するに、実施例による、例示的なメモリ割り当てパラダイム７００を示す。特に、第１のＰＵ５４０及び第２のＰＵ５８０それぞれに関連付けられた（例えば、それぞれに割り当てられ、又はそれぞれの中に含まれた）第１のキャッシュ・メモリ装置６２０及び第２のキャッシュ・メモリ装置６３０は、キャッシュ・メモリ識別７０１によって表されるように識別される。更に、第１のデータの組７３０及び第２のデータの組７４０それぞれに関連付けられた第１のデータ場所７１０及び第２のデータ場所７２０はそれぞれ、データ場所識別７０２によって表されるように識別され、第１のデータ場所７１０及び第２のデータ場所７２０は、第１のキャッシュ・メモリ装置６２０内及び第２のキャッシュ・メモリ装置６３０内それぞれに配置される。例えば、第１のデータ場所７１０及び第２のデータ場所７２０は、第１のデータ場所７１０及び第２のデータ場所７２０それぞれに記憶されている第１のデータの組７３０および第２のデータの組７４０に基づいて識別し得る。
【００６９】
更に、第１のデータの組７３０及び第２のデータの組７４０それぞれにキャッシュ・メモリ割り当て７０３によって表されるような第１のキャッシュ・メモリ装置６２０及び第２のキャッシュ・メモリ装置６３０の割り当ては第１のデータ場所７１０及び第２のデータ場所７２０に基づいて行われる。特に、第１のデータ場所７１０及び第２のデータ場所７２０が第１のキャッシュ・メモリ装置６２０内及び第２のキャッシュ・メモリ装置６３０内それぞれに配置されている限り、第１のキャッシュ・メモリ装置６２０及び第２のキャッシュ・メモリ装置６３０は第１のデータの組及び第２のデータの組７４０それぞれに割り当てられる。よって、前述のキャッシュ・メモリ装置は、例えば、別々のプロセス・スレッドを行うためにアクセスし得る全く別々のデータの組に割り当てられている。このようにして、特定のＰＵは、その局所メモリが既に割り当てられている特定のデータの組にマッピングされたスレッドを効率的に処理するよう構成し得る。
【００７０】
よって、かつ、なお図７を参照するに、第１のデータの組７３０に関する制御のスレッドが第２のＰＵ５８０によって受信された場合、第２のＰＵ５８０はこの制御のスレッドを第１のＰＵ５４０にパスし得る。第１のＰＵ５４０は既に、この特定のデータの組に割り当てられているからである。同様に、第２のデータの組７４０に関する別の制御のスレッドが第１のＰＵ５４０によって受信された場合、第１のＰＵ５４０はこの別の制御のスレッドを第２のＰＵ５８０にパスし得る。第２のＰＵ５８０は既に、この特定のデータの組に割り当てられているからである。
【００７１】
更に、第１のデータの組７３０及び第２のデータの組７４０が別々の２つのデータ・タイプそれぞれを有している場合、前述の２つのデータ・タイプのうちの１つを有する第３のデータ・タイプは、この同じデータ・タイプを有するデータを既に記憶しているキャッシュ・メモリ装置にルーティングし得る。このようにして、特定のデータ・タイプを共有する複数のデータの組は、特定のＰＵについて、同じ局所メモリ装置内で同じ場所に配置され、これは更に、その局所に記憶されたデータにマッピングされたスレッドを前述のＰＵが処理することができる相対的な効率を増加させる。
【００７２】
次に図８を参照すれば、実施例による例示的な第２のコール転送パラダイム８００を示す。特に、命令５１０にマッピングされたデータの組８１０は、データの組の識別８２０によって表されるように識別される。更に、第１のキャッシュ・メモリ装置６２０内ではなくむしろ（例えば、第２のデータ場所７２０における）第２のキャッシュ・メモリ装置６３０内に、データ場所判定８３０によって表されるように、データの組８１０が現在記憶されていることを判定して、それにより、第１のＰＵ５４０から第２のＰＵ５８０にコール５７０を転送する旨を決定する。
【００７３】
例えば、データ場所判定８３０が行われ、これにより、データの組８１０が第１のキャッシュ・メモリ装置６２０内に配置されていないことが判定される。よって、データ場所判定８３０には、（第１のＰＵ５４０などの）実現されたＰＵの１つに、通信するよう関連付けられ、又は結合し得る任意のメモリ管理装置（ＭＭＵ）８４０との通信などにより、利用可能なその他のＰＵの１つ又は複数がデータの組８１０を現在記憶しているかを判定することがその後、関係する。この問い合わせの結果、データの組８１０が、第２のキャッシュ・メモリ装置６３０に現在、記憶されていることが判定される。更に、コール転送判定８５０が行われ、それにより、（１）データの組８１０が、第１のキャッシュ・メモリ装置６２０に現在記憶されておらず、（２）データの組８１０が、第１のキャッシュ・メモリ装置６２０に現在、既に記憶されている結果として、第１のＰＵ５４０から第２のＰＵ５８０にコール５７０を転送する旨が決定される。
【００７４】
上記に鑑みて、実施例に従って、コールを転送するか否かは、データの特定のデータ・タイプでなくむしろ、データの場所（例えば、物理アドレス）に基づいて判定される。例えば、データ・タイプに基づいてコールを転送する旨を決定するよりもむしろ、特定のＰＵが、その局所メモリに記憶された、ほとんど同じタイプのデータを有するように同じタイプのデータが同じ場所に配置されることを確実にするために、データ・タイプ情報に、メモリ割り当て器によって事前にアクセスし得る。更に、コードの静的解析は、割り当ての局所性を誘導する別のメモリ割り当て器の生成を助けるために実現し得る。更に、大量に使用されるデータに対する要求を更に効果的に処理することが可能であるように、複数のＰＵは同じデータの複製を有し得る。そういうものとして、実施例では、データ・タイプは、データの場所よりも、コール転送決定におけるよりも重要度が低いが、データの場所は、適用可能なデータ・タイプのプロキシを表し得る。実際に、種々の例示的な実現形態では、ランタイム・システムは、コード・ストリーム内の（ポインタとしての）アドレスを識別することができるが、データ・タイプ情報を識別することはできない。
【００７５】
Ｄ  例示的な転送決定処理
次に、いくつかの例示的な転送決定手法について掘り下げてみる。しかし、本願の手法は前述の例示的な転送決定手法に制限されず、他の転送決定手法を実現し得る。
【００７６】
はじめに、ワンダリング・スレッドをサポートするために、種々の機構を（場合によっては同時に）実現し得る。前述の機構はハードウェア・サポート及びソフトウェア・サポートを含み得、前者は、プログラムの実行に対してトランスペアレントであり、後者には、ロード前後のコードの修正が関係する。
【００７７】
ｉ  ハードウェア・サポート
次に、いくつかの例示的なハードウェア・サポート手法について掘り下げてみる。しかし、本願の手法は前述の例示的なハードウェア・サポート手法に制限されず、他のハードウェア・サポート手法を実現し得る。
【００７８】
例示的な実施例によれば、別々の２つのレベルのハードウェア・サポートを提供し得る。第１のレベルには、メモリのリダイレクト・セクタにコードが記憶されているか否かを判定することが関係する。肯定の場合、アクセスされたコールが、潜在的なリダイレクト・コールであると識別される。否定の場合、コールは、別のＰＵに転送されるよりもむしろ、第１のＰＵによって行われる。しかし、ハードウェア・サポートの第１のレベルの結果として、コールが、潜在的なリダイレクト・コールとして識別された場合、第２のレベルには、コールを当該ＰＵに再誘導し得るように、関連したデータをどのＰＵが記憶しているかを識別することが関係する。
【００７９】
したがって、一実施例では、コール転送手法のためのハードウェア・サポートは、場合によっては転送することが可能なコール又はオペレーションを識別する工程、転送についてどの実際のコール又はオペレーションを考慮に入れるかを識別するためにルックアップ機構を実現する工程、及びＰＵ識別子変換にアドレスを供給する工程を含み得る。上記に鑑みて、次にいくつかの例示的な手法を掘り下げてみる。
【００８０】
ａ  シャドー・レジスタ
実施例では、「シャドー・レジスタ」は、制御の直接の転送（ｄｉｒｅｃｔ  ｔｒａｎｓｆｅｒ）、及び、転送についてのサポート・ソフトウェアの（例えば、ユーザ・レベルの）意思決定を行うために使用される。例証するに、かつ、例示的な実現形態に応じれば、ＰＵはデータ・パス又は「パイプライン」を有する。更に、ＰＵは、通信するよう、ＰＵによって要求されたメモリへのアクセスを管理するよう構成されたＭＭＵ（例えば、図８に示すＭＭＵ８４０を参照）と関連付けられ、又は結合される。特に、ＰＵは、コールを受信すると、ＭＭＵに、対応するメモリ・アドレスについての情報を要求する。アドレスがパイプライン上で充填されるので、ＭＭＵは、ＰＵ内の余分なレジスタ（例えば、シャドー・レジスタ）を充填して、それにより、それがどの種類のアドレス（例えば。局所、共有、リダイレクト可能）であるかを識別する。ＰＵが、前述のアドレスの１つにマッピングされたコードをコールすると、ＰＵは、コールを転送すべきか否かの判定を助けるためにそのシャドー・レジスタにアクセスすることが可能である。
【００８１】
例えば、一実施例は、コードのプリフェッチ、及びディープ・データパスをプロセッサに提供し、どのポインタ・レジスタが、関連付けられたＰＵを有しているかをマーク・アップ（ｍａｒｋ  ｕｐ）するために使用される。コール及び命令の扱いについての情報は、命令／データ・キャッシュにおいてタグとして保持される。例えば、命令又はデータが、メモリからキャッシュにフェッチされると、タグが、将来の使用のためにセットされる。ＤＰＡが、相対的に低いキャッシュミス・レートを有している限り、タグ評価のコストは、全体的な性能に影響を及ぼさず、メモリ・フェッチと並列に行うことが可能である。よって、タグ評価は、既にキャッシュされているサポート・コードによって行い得る。
【００８２】
次に図９を参照すれば、実施例による例示的なＰＵ識別パラダイム９００を示す。特に、第１のＰＵ５４０に関連付けられた（例えば、第１のＰＵ５４０に割り当てられているか、又は第１のＰＵ５４０内に記憶された）キャッシュ・メモリ装置９１０が選択され、命令５１０に関連付けられた（例えば、命令５１０にマッピングされた）コード又はデータ９２０がキャッシュ・メモリ装置９１０にフェッチされる。更に、第１のＰＵ５４０に関連付けられたＰＵデータ・パス９３１が識別され、ＰＵデータ・パス９３１内のシャドー・レジスタ値９３０は、少なくとも１つのＰＵ９５０が既にコード又はデータ９２０を局所に記憶している場合などの、コード又はデータ９２０に関連付けられた少なくとも１つのＰＵ９５０を示すＰＵ識別子９４０をシャドー・レジスタ値９３０が反映するように定義される。
【００８３】
第１のＰＵ５４０が、いくつかのシャドー・レジスタ９６０、及びキャッシュ・メモリ装置９１０を含み、通信するよう、第１のＰＵ５４０に関連付けられ、又は結合された、ＭＭＵ８４０などによるシャドー・レジスタ９６０にＰＵ識別子９４０が記憶された例を考えてみる。シャドー・レジスタ値９３０はＰＵデータ・パス９３１において定義され、シャドー・レジスタ値９３０はＰＵ識別子９４０を反映する。ＰＵ識別子（及び、同様に、定義されたシャドー・レジスタ値９３０）が、コード又はデータ９２０への局所アクセスを既に有する少なくとも１つのＰＵ９５０を示している限り、少なくとも１つのＰＵ９５０の識別は、単に、シャドー・レジスタ値９３０にアクセスすることによって確かめ得る。
【００８４】
例示的な実現形態に従って、プロセッサの「データ・パス」は例えば、プロセッサ・コアのデータを調整するステージのパイプラインとして定義し得る。各パイプライン段は、一バージョンのレジスタを有し得る。パイプラインはキャッシュ・ミスによってストールするが、ストールしたパイプラインをスキップすることが可能であるように、複合プロセッサは複数のパイプラインを並列に実行させ得る。シャドー・レジスタは、（例えば、ポインタ・アドレス（又はランダム・データ）で）レジスタを充填すると、通常のレジスタとともにパイプラインに沿って進み、次の（又は後続する）パイプライン段は、このアドレス（又はデータ）が属するＰＵはどれかについてのＭＭＵの推測をシャドー・レジスタに加え得る。多くのプロセッサの場合、メモリ内のコードと、データ自体との間で、ハードウェア・レベルに実際の区別は存在しないので、コードは、特別なタイプのデータとしてみることができる。更に、特定のプロセッサは実際に、前述の区別を行う。特に、前述のプロセッサは、「ハッキング」を阻止するためにコードの書込保護を行い、かつ／又は、データの実行をブロックするが、前述の保護は、後方互換性のための任意なものであり得る。
【００８５】
上記に係わらず、プロセッシング・コアは、そのデータ・パスの各段におけるシャドー・レジスタの状態を評価し、スレッドの制御を別のプロセッシング・コアに転送するか否かを決定することが可能である。転送が、ハードウェアによって自動的に実行されない場合、シャドー・レジスタ内の情報はなお、本明細書及び特許請求の範囲などに記載のソフトウェア方法論をサポートするためにコードに利用可能となる。
【００８６】
一実施例では、ＰＵ毎チューニングは、メモリからリードオンリ・モードにおいて動作している命令キャッシュを修正することによって実現し得る。よって、命令キャッシュ・リダイレクト・タグを評価する場合、キャッシュにロードされたコード（例えば、コール・アドレス等）を修正し得る。実行前のコードの修正を避け得るように、かつ、リダイレクトを実現しない場合にＰＵ動作に対する重大な影響が存在しないように、ＰＵ毎にルーチンの通常バージョンをリダイレクト・バージョンと交換するために前述の機構を実現し得る。
【００８７】
更に、実施例では、複数のＰＵは、同じデータの複製を有し得、各ＰＵは、シャドー・レジスタをＰＵ識別子で充填するＭＭＵ８４０がＰＵをうまく選ぶことが可能であるようにネットワークに対して、どの程度のビジー状態にあるかに関するメッセージを送出するよう構成される。更に、動作についてのＰＵメッセージからＤＰＡ内の「ホット・スポット」を識別し、メモリの特定の領域に、更なるＰＵを割り当てるために、システム監視プロセスを実現し得る。
【００８８】
ｂ  リダイレクト・コール
コンパイルされたコードの本体を前提として、別の実現形態を指し示すように、リンク又はロード中に、ルーチン・コールをリダイレクトすることが可能である。このルーチン・コールをリダイレクトすると判定された場合、前述のコールは例えば、「リダイレクト・コール」として表し得る。
【００８９】
次に図１０Ａを参照すれば、実施例による例示的なリダイレクト・コール識別パラダイム１０００を示す。特に、キャッシュ・メモリ識別７０１によって表されるように第１のキャッシュ・メモリ６２０及び第２のキャッシュ・メモリ６３０が識別され、第１のキャッシュ・メモリ装置６２０、６３０は、第１のＰＵ５４０及び第２のＰＵ５８０それぞれと関連付けられる（例えば、第１のＰＵ５４０及び第２のＰＵ５８０それぞれに割り当てられ、又は第１のＰＵ５４０内及び第２のＰＵ５８０内それぞれに含まれる）。更に、コール５７０は第１のＰＵ５４０によってアクセスされ、コール５７０は、予め選択されたデータ場所５３０に命令５１０がマッピングされたことを示す引数１０２０を含む。更に、データ場所判定８３０によって表されるように、予め選択されたデータ場所５３０が第１のキャッシュ・メモリ装置６２０内に配置されていないことについての判定を行うために引数１０２０が、第１のＰＵ５４０によって解析される。更に、コール５７０が、この判定に基づいて潜在的なリダイレクト・コール識別１０１０によって表されるものなどの潜在的なリダイレクト・コールとして識別される。
【００９０】
コール５７０が、潜在的なリダイレクト・コールとして識別された後、この潜在的なリダイレクト・コールを別のＰＵに転送するべきか否かが判定される。例示的な一実現形態に従って、「ターゲット」コードが局所で実行され、その場合、リダイレクト・コール機構は実行されない。例証するに、かつ、次に図１０Ｂを参照するに、実施例による例示的なターゲット・コード実行パラダイム１００１を示す。特に、コール５７０は、潜在的なリダイレクト・コール１０３０として表すように潜在的なリダイレクト・コールとして識別され、かつ、データ場所８３０によって表すように予め選択されたデータ場所５３０が第２のキャッシュ・メモリ装置６３０内に配置されていないことを判定して、それにより、ターゲット・コード実行判定１０４０によって表すような決定を行って、第１のＰＵ５４０との潜在的なリダイレクト・コール１０３０に関連付けられた（例えば、マッピングされた）ターゲット・コード１０５０を実行する。更に、ターゲット・コード１０５０は、この決定に基づいて第１のＰＵ５４０により、ターゲット・コード実行１０６０によって表すように実行される。
【００９１】
上記にかかわらず、予め選択されたデータ場所５３０が、第１のＰＵ５４０以外のＰＵに割り当てられたキャッシュ・メモリ装置内に配置された場合、一実施例では、コールは前述の他のＰＵに転送される。例えば、かつ、次に図１０Ｃを参照するに、実施例による第３の例示的なコール転送パラダイム１００２を示す。特に、データ場所８３０によって表すように予め選択されたデータ場所５３０が第２のキャッシュ・メモリ装置６３０内に配置されていることを判定して、それにより、実リダイレクト・コール識別１０８０によって表すように、実リダイレクト・コール１０７０として潜在的なリダイレクト・コールを識別する。よって、実リダイレクト・コール１０７０が第１のＰＵ５４０から第２のＰＵ５８０に転送される。
【００９２】
ｃ．  メモリ・パーティショニング
よって、実施例では、ＰＵは、コールを転送するか否かを、当該コールに関するデータが別のＰＵの局所メモリ（例えば、ＤＲＡＭ）に既に記憶されているか否かに基づいて判定するよう構成される。あるいは、又は上記に加えて、一実施例では、共有メモリの特定のセクタ（例えば大域アドレス範囲１０００乃至２０００）に命令が記憶されているか否かを判定することにより、コールを転送するかをＰＵが判定することができる。
【００９３】
特に、共有メモリの特定の予め定められた領域にコードが割り当てられるようにコード自体をロードし得る。例えば、コードの静的な解析は、コード・タイプを求めるよう実現し得、この情報はメモリ配置を駆動させるために使用し得る。更に、コードが、割り当てられたメモリにロードされた後、かつ、コードのアドレスが後に識別された後、このアドレス情報は、コードに関連付けられた性質（例えば、リダイレクト可能、又はそうでない）を示す。したがって、一実施例に従って、コールにマッピングされたコードがメモリの「リダイレクト・セクタ」に記憶されているか否かが判定される。リダイレクト・セクタの場合、リダイレクト・セクタの開始アドレス及び終了アドレスを識別して、それにより、リダイレクト・アドレス範囲を作成し得、アドレスがこの範囲内に入る場合、コールは潜在的なリダイレクト・コ―ルとして識別される。否定の場合、コールは、別のＰＵへの、考えられる転送のために更に精査されるよりもむしろ、局所で直ちに行われる。
【００９４】
例証するに、かつ、次に図１１を参照するに、実施例による、例示的なコール転送判定パラダイム１１００を示す。特に、命令５１０を記憶させた共有ＲＡＭ装置１１１０は、ＲＡＭ選択１１２０によって表されるように選択される。更に、共有ＲＡＭ装置１１１０のセクタが、リダイレクト・セクタ識別１１３０によって表すように、リダイレクト・セクタ１１１１として識別され、リダイレクト・セクタ１１１１は、共有ＲＡＭ装置１１１０の非リダイレクト・セクタ１１１２と区別可能である。更に、特に、命令場所判定１１４０によって表すように命令５１０がリダイレクト・セクタ１１１１に記憶されているか否かを判定して、それにより、コール転送判定１１５０によって表すように、第１のＰＵ５４０から第２のＰＵ５８０にコール５７０を転送するか否かを判定する。
【００９５】
更に例証するに、例示的な実現形態では、共有ＲＡＭ装置１１１０のリダイレクト・セクタ１１１に命令５１０が記憶されていることが判定された場合、コール５７０が潜在的なリダイレクト・コールとして識別され、その場合、コール５７０は後に、第１のＰＵ５４０から第２のＰＵ５８０に転送し得る。例えば、命令５１０がリダイレクト・セクタ１１１１に記憶されていることを判定すると自動的に転送し得、又は、コール５７０が（単純に潜在的なリダイレクト・コールであるというよりも、単に）実リダイレクト・コールであることを（本明細書で更に記載されているように）更なる解析によって判定された場合、コール５７０を転送し得る。コール５７０が最終的に、第１のＰＵ５４０から第２のＰＵ５８０に転送される場合、第２のＰＵ５８０は、コール５７０を行って、リダイレクト・セクタ１１１１からの命令５１０にアクセスする。このようにして、命令５１０を含む実行可能なルーチンに関連付けられた制御のスレッドは、首尾良く第２のＰＵ５８０に転送されており、第２のＰＵ５８０は命令５１０を実行する。
【００９６】
あるいは、共有ＲＡＭ装置１１１０のリダイレクト・セクタ１１１１に命令５１０が記憶されておらず、むしろ、非リダイレクト・セクタ１１１２に記憶されていると判定された場合、（更なる解析がコール５７０を実際のリダイレクト・コールとして首尾良く識別しない限り）第１のＰＵ５４０から第２のＰＵ５８０に転送されず、この場合、第１のＰＵ５４０は、コール５７０を実行し、非リダイレクト・セクタ１１１２からのアクセス命令５１０にアクセスする。このようにして、命令５１０を含む実行可能なルーチンに関連付けられた制御のスレッドが第１のＰＵ５４０によって維持され、第１のＰＵ５４０は命令５１０を実行する。
【００９７】
上記に加えて、実施例では、特定の場所においてメモリにコードをロードして、コール転送判定１１５０をサポートする。例えば、プログラムが起動すると、共有ライブラリを、特定の場所ではないが、メモリにマッピングし得る。しかし、一実施例に従えば、スタティック・コード及び共有ライブラリ、並びにそれらのサブセクションが、前述のリダイレクト・セクタ手法をサポートするためにＲＡＭセクタにマッピングされる。
【００９８】
例証するに、かつ、次に図１２を参照するに、実施例による、例示的なメモリ・パーティショニング・パラダイム１２００を示す。特に、共有ＲＡＭ装置１１１０が選択され、共有ＲＡＭ装置１１１０の１つ又は複数のセクタが、それぞれ１つ又は複数のリダイレクト・セクタ１２０１として識別される。実際に、共有ＲＡＭ装置は複数のリダイレクト・セクタを含み得、前述のリダイレクト・セクタはそれぞれ、別の挙動と関連付け得る。更に、命令５１０を含むプログラム１２１０が識別され、プログラム１２１０に対応するスタティック・コード１２２０にアクセスされる。更に、共有ＲＡＭ装置１１１０は、スタティック・コード１２２０のサイズに基づいて、１つ又は複数のリダイレクト・セクタ１２０１の全体としてのサイズを定義することにより、ＲＡＭパーティショニング１２４０によって表されるようにパーティショニングされる。更に、スタティック・コード１２２０（又はその量）が、パーティショニングに基づいて（、かつ、任意的に（特定のＰＵにスタティック・コード１２２０全てを提供しない旨をＰＵ仕様１２０３が示す場合など））、１つ又は複数のリダイレクト・セクタ１２０１のうちの１つ又は複数の選択されたリダイレクト・セクタにロードされる。このようにして、実施例では、コール転送決定プロセスに共有メモリを割り当てる比較的効率的な手法を提供する。
【００９９】
上記プロセスは、例えば、組み込みシステムにおいて生じ得るように、プログラム１２１０が全体的にスタティックである場合、有用であり得る。上記にかかわらず、実施例では、全部がスタティックである訳でないプログラムに上記プロセスが適合される。特に、かつ、図１２を更に参照するに、共有ＲＡＭ装置１１１０の別々の１つ又は複数のセクタ１１１０は、１つ又は複数の非リダイレクト・セクタ１２０２それぞれとして識別され、プログラム１２１０に対応する少なくとも１つの共有ライブラリ１２３０の１つ又は複数の部分にアクセスされる。更に、少なくとも１つの共有ライブラリ１２３０の１つ又は複数の部分及びスタティック・コード１２２０の全体としてのサイズに基づいて、１つ又は複数のリダイレクト・セクタ１２０１の全体としてのサイズを規定することにより、ＲＡＭパーティショニング１２４０中などに、共有ＲＡＭ装置１１１０はプロポーショニングされる（ｐｒｏｐｏｒｔｉｏｎｅｄ）。更に、スタティック・コード１２２０の１つ又は複数の部分が、プロポーショニング（及び、任意的には、ＰＵ仕様１２０３）に基づいて、（１）１つ又は複数のリダイレクト・セクタ１２０１のうちの１つ又は複数の選択されたリダイレクト・セクタ、又は、（２）１つ又は複数の非リダイレクト・セクタ１２０２のうちの１つ又は複数の選択された非リダイレクト・セクタにロードされる。あるいは、又は上記に加えて、少なくとも共有ライブラリ１２３０の１つ又は複数の部分が、プロポーショニング（及び、任意的には、ＰＵ仕様１２０３）に基づいて、（１）１つ又は複数のリダイレクト・セクタ１２０１のうちの１つ又は複数の選択されたリダイレクト・セクタ、又は、（２）１つ又は複数の非リダイレクト・セクタ１２０２のうちの１つ又は複数の選択された非リダイレクト・セクタにロードされる。
【０１００】
例示的な実現形態に従うに、多くのプロセッサは再配置可能なコードを利用する。したがって、ロード・フェーズ中に、前述のコードを移動することは比較的簡単である。更に、例証の目的で、一実施例では、前述のオペレーションの１つ又は複数が、ＰＵ１２５０（例えば、第１のＰＵ５４０又は、あるいは、全く別のＰＵであり得る）によって行われる。
【０１０１】
次に図１３を参照すれば、実施例による例示的な処理リソース割り当てシステム１３００を示す。図２を参照して上述したＤＰＡアーキテクチャと実質的に同様であり得る例示的な処理リソース割り当てシステム１３００は例示的なＰＵ２１０、２２０、２３０などの複数のＰＵを含み、前述のＰＵは、通信するよう、通信ファブリック１３１０に結合され、又は通信ファブリック１３１０と関連付けられ、前述のＰＵは、ダイ集積構成に全体として配置し得る。例えば（例えば、周辺装置相互接続エクスプレス（ＰＣＩ−Ｅ）アーキテクチャを実現することによる）メモリ・サブシステム及びフロント・サイド・バスを含み得る通信ファブリック１３１０は、前述のＰＵとの間で情報をルーティングするよう構成される。
【０１０２】
各ＰＵは、例示的なＣＰＵ２１１、２２１及び２３１などの少なくとも１つのＣＰＵと、例示的なＲＡＭ２１２、２２２及び２３２などの少なくとも１つのＲＡＭ装置（例えば、ＤＲＡＭメモリ装置）を含み、各ＰＵ内のＣＰＵ及びＲＡＭ装置は、通信するよう、互いに関連付けられ、又は結合される。更に、ＲＡＭの外部装置に記憶された情報を他のＰＵが得ることが可能であるように各ＲＡＭ装置が大域的にマッピングされる。これにより、データを記憶し得る実現された複数のメモリ装置のうちの何れかのメモリ装置に上記データを、前述のシステム内の複数のプロセッサのうちの何れかの特定のプロセッサが要求することが可能になる。
【０１０３】
更に、各ＰＵは、例示的なキャッシュ・メモリ装置２１３、２２３、及び２３３などのキャッシュ・メモリ装置を含み、前述のキャッシュ・メモリ装置は、通信するよう、そのそれぞれのＰＵ内に配置されたＣＰＵ及びＲＡＭ装置に関連付けられ、又は結合される。実際に、一実施例では、特定のＰＵ内に配置されたＣＰＵ、ＲＡＭ装置、及びキャッシュ・メモリは、例えば、スルーシリコンビア（ＴＳＶ）／ワイド入出力（Ｗｉｄｅ−ＩＯ）（又はオンチップ）通信アーキテクチャを介して互いに通信するよう構成される。
【０１０４】
なお図１３を参照するに、大域コード・ライブラリ１３２０が提供され、大域コード・ライブラリ１３２０はリダイレクト・セクタ１１１１を含む。実施例では、リダイレクト・セクタ１１１１は、第１のコードの組１３３０及び第２のコードの組１３４０などの１つ又は複数の別個のコードの組を含む。更に、別々のＰＵが、それぞれ、別々のデータ・タイプのオブジェクトに割り当てられる。例えば、例証された実施例では、ＰＵ２３０は第１のデータ・タイプに属するオブジェクトに割り当てられ、ＰＵ２１０は第２のデータ・タイプに属するオブジェクトに割り当てられる。ＰＵ２３０、２１０は既に、前述の第１のデータ・タイプ及び第２のデータ・タイプそれぞれに属するオブジェクトを局所で記憶しているからである。よって、第１のコードの組１３３０及び第２のコードの組１３４０が、前述の第１のデータ・タイプ及び第２のデータ・タイプそれぞれに属するオブジェクトを含む場合、第１のコードの組１３３０及び第２のコードの組１３４０はＰＵ２３０、２１０それぞれにルーティングされる。このようにして、ＰＵ２１０は第２のデータ・タイプを有するオブジェクトに関連付けられた方法を行うことができる一方、ＰＵ２３０は第１のデータ・タイプを有するオブジェクトに関連付けられた方法を行い、それにより、前述の方法の動作に関連付けられた効率の度合いを増加させることができる。前述の方法の動作中、前述のＰＵは既に、局所に記憶されたそのそれぞれのオペレーションについて関連したコード及びデータを有しているからである。
【０１０５】
なお図１３を参照するに、第１のコードの組１３３０及び第２のコードの組１３４０が、第１のデータ・タイプ及び第２のデータ・タイプそれぞれに関連付けられた例を考えてみる。第１のデータ・ポインタ１３３１、１３４１は第１のコードの組１３３０及び第２のコードの組１３４０それぞれに関係付けられ、第１のコードの組１３３０及び第２のコードの組１３４０が、上述した第１のデータ・タイプ及び第２のデータ・タイプそれぞれに関連付けられることを示す。更に、第１のデータ・タイプに関連付けられたコード又は関数が例えば、ＲＡＭ２３２の部分１３５０に記憶されている場合、第１の仮想関数ポインタ（ＶＦＰ）１３５１が生成され、第１のＶＦＰ１３５１は、ＲＡＭ２３２のこの部分１３５０を指し示し、又はＲＡＭ２３２のこの部分１３５０にマッピングされる。同様に、第２のデータ・タイプに関連付けられたコード又は関数が例えば、ＲＡＭ２１２の部分１３６０に記憶されている場合、第２の仮想関数ＶＦＰ１３５１が生成され、第２のＶＦＰ１３６１は、ＲＡＭ２１２のこの部分１３６０を指し示し、又はＲＡＭ２１２のこの部分１３６０にマッピングされる。よって、リダイレクト・セクタ１１１１がアクセスされているので、コールが潜在的なリダイレクト・コールとして識別されると、前述のＶＦＰは、リダイレクト・コード１１１１内の関連したコードの組に関連付けられたデータが、既に、利用可能なＰＵのうちの１つに局所に記憶されているかを判定するよう解析される。肯定の場合、潜在的なリダイレクト・コールが実際のリダイレクト・コールとして識別され、リダイレクト・コールはその特定のＰＵに転送（パス）される。
【０１０６】
更に例証するに、かつ、次に図１４を参照するに、実施例による、例示的なリダイレクト解析１４００を示す。特に、関数ｆ０（ｘ，．．．）のコールが第１のＰＵにより、１４１０でアクセスされ、「ｆ０」は関数ポインタであり、「ｘ」はデータ・ポインタである（記号「，．．．」によって示すように、２つ以上のデータ・ポインタを参照し得る）。「ｆ０」は関数ポインタであり、「ｘ」はデータ・ポインタである（記号「，  ．．．」によって示すように、２つ以上のデータ・ポインタを参照し得る）。１４２０では、関数ｆ（０）として表し得る、関数ｆ０（ｘ，．．．）のリダイレクト可能なバージョン（例えば、ワンダリング・スレッド・バージョン）が大域メモリのリダイレクト・セクタに現在記憶されているか否かが判定される。肯定の場合、関数ｆ（０）は１４３０で第２のＰＵによってコールされる。この第２のＰＵは既に、局所に記憶されたこの関数に関するコード及び／又はデータを有する。その後、１４４０では、第２のＰＵは関数ｆ（０）を行う。あるいは、関数ｆ（０）が大域メモリのリダイレクト・セクタに現在、記憶されていないことが１４２０で判定された場合、関数はリダイレクトされず、大域メモリの非リダイレクト・セクションに記憶し得るｆ０（ｘ，．．．）は、第１のＰＵにより、１４５０でコールされ、その後、第１のＰＵにより、１４６０で行われる。
【０１０７】
ｉｉ  ソフトウェア・サポート
上記に鑑みて、実施例では、ＰＵが、通信するようにＭＭＵと関連付けられ、又はＭＭＵと結合される（ＭＭＵを含む）。ＭＭＵは、どのＰＵがメモリを有しているか、及びデータがどこにあるかを追跡する。データがそれ自身の局所メモリにマッピングされているか、又は別のプロセッサの局所メモリにマッピングされているか否かを判定するために、特定のデータがメモリにマッピングされた場所をそのＭＭＵに尋ねる。よって、コールが潜在的なリダイレクト・コールとして識別されると、データが現在、リダイレクト可能な場所に現在記憶されているか否かが判定され、その時点で、潜在的なリダイレクト・コールが実際のリダイレクト・コールとして識別され、コールは転送される。これはハードウェア・レベルで行い得るが、ソフトウェアはこの手法をサポートするよう実現し得る。特に、ソフトウェア・サポートは、例えば、ランタイム・コードへの、又はランタイム・コード近くでのサポート・コードのインジェクションなどにより、より高度な決定をＰＵが行うことを助けるために追加し得る。実際に、ＰＵの処理速度は比較的高速であるが、それとの間の情報の移動は比較的遅いことがあり得る。したがって、賢明な決定を行うことにより、かなりの量の時間及びエネルギを節減することが可能である。そういうものとして、種々の実施例には、ＰＵ間の制御のトランスペアレントな転送をサポートするためのロード前後のソフトウェア修正が関係する。
【０１０８】
よって、次に、いくつかの例示的なソフトウェア・サポート手法について掘り下げてみる。しかし、本願の手法は前述の例示的なソフトウェア・サポート手法に制限されず、他のソフトウェア・サポート手法を実現し得る。
【０１０９】
ａ  リダイレクト・コード
ワンダリング・スレッドの場合、（本明細書において更に掘り下げるように、ＲＰＣを起動させることなどにより、）別のプロセッサ上で、又は局所で、コールを実行するかを判定するために、意図されたコールの引数を検査するコードにルーチンを再誘導し得る。例えば、例示的なＣ言語コールは、「ｆｐｒｉｎｔｆ」：
ｉｎｔ  ｆｐｒｉｎｔｆ（ＦＩＬＥ＊ｓｔｒｅａｍ，ｃｏｎｓｔ  ｃｈａｒ＊ｆｏｒｍａｔ，．．．）；
である。
リダイレクト・コードは、コ―ル「ｆｐｒｉｎｔｆ」がリダイレクトされていることを記し、局所メモリを指し示しているかを確認するためにポインタ・ストリームを検査する。否定の場合であり、かつ、そのメモリのＰＵを識別することが可能な場合、リダイレクト・コードは、そのＰＵへの転送を実行し、その完了を待ち、それにより、スレッドの局所サスペンションをもたらす。リダイレクト・コードが、ポインタが局所であることを判定するか、又は保持しているＰＵを識別することが可能でない場合、局所で実際の「ｆｐｒｉｎｔｆ」コールを行う。このことの利点は、「ｐｒｉｎｔｆ」を処理しているＰＵのみが、ストリーム・ポインタ及びその関連付けられたバッファを参照解除するということである。リダイレクト・コードは、処理を行っているＰＵが、発信側のＰＵのキャッシュ／メモリに戻らないように、特定のコールによって利用される関連するコンテキストをフォワードするようチューニングすることが可能である。実際に、一実施例では、ソフトウェア修正可能な命令キャッシュは、ロード後、コードのＰＵ毎チューニングについて実現される。ターゲット関数が引数として与えられた場合（例えば、第１の引数がポインタであり、そのメモリのＰＵに転送されている）場合、引数プロファイルを共有する複数のターゲット・ルーチンについて、同じリダイレクト・コードを使用することが可能である。例証の目的で、「ｆｐｒｉｎｔｆ」リダイレクト・コードがＣプログラミング言語で実現されていた場合、以下と同様なものであり得る。
【０１１０】
ｉｎｔ  ｒｅｄｉｒｅｃｔ＿ｆｎ＿ｐ＿ｖａｒ（ｉｎｔ（＊ｆｎ）（），ｖｏｉｄ＊ｐ１，．．．）｛
ｉｎｔ  ｐｕ；
ｉｆ（ｌｏｃａｌ＿ａｄｄｒｅｓｓ（ｐ１）｜｜！（ｐｕ＝ｐｕ＿ｆｏｒ＿ａｄｄｒｅｓｓ（ｐｉ）））｛
ｒｅｔｕｒｎ  ａｓｍ＿ｒｅｄｉｒｅｃｔ＿ｖａｒ（ｆｎ，ｐ１）；／／（Ｃｏｍｍｅｎｔ  １  ：Ｐｅｒｆｏｒｍ  ｃａｌｌ）
｝
ｒｅｔｕｒｎ  ｗｔ＿ｔｒａｎｓｆｅｒ＿ｗａｉｔ＿ｖａｒ（ｐｕ，ｆｎ，ｐ１）；／／（Ｃｏｍｍｅｎｔ  ２：Ｔｒａｎｓｆｅｒ  ａｎｄ  ｗａｉｔ）
｝
更に例証するに、かつ、次に、図１５を参照するに、実施例による例示的な大域コード・ライブラリ・パラダイム１５００を示す。特に、大域コード・ライブラリ・パラダイム１５００を示す。特に、大域コード・ライブラリ１３２０は、リダイレクト・セクタ１１１１及び非リダイレクト・セクタ１１１２を含み、関数ｆｐｒｉｎｔｆ１５１０が非リダイレクト・セクタ１１１２に記憶され、（関数ｆｐｒｉｎｔｆｗｔ１５２０として表される）この関数のワンダリング・スレッド・バージョンが、リダイレクト・セクタ１１１１に記憶される。メモリ・ポインタ１５３０が関数ｆｐｒｉｎｔｆｗｔ１５２０に関係付けられ、メモリ・ポインタ１５３０は、この関数に関するデータが現在記憶されているアドレスを識別する。よって、第１のＰＵ５４０が、関数ｆｐｒｉｎｔｆ１５１０のコール１５４０を受け取ると、この関数のワンダリング・スレッド・バージョンがリダイレクト・セクタ１１１１に現在、記憶されていることが判定される。よって、第１のＰＵ５４０はこの関数をリロケータブル・コールとして識別し、第１のＰＵ５４０に関連付けられたＭＭＵ８４０は、（ＰＵの１つによって制御された特定の入出力（Ｉ／Ｏ）バッファに関連付けられた）メモリ・ポインタ１５３０を解析して、識別されたアドレスが第１のＰＵ５４０の局所メモリ内に配置されているかを判定する。肯定の場合、第１のＰＵ５４０は、関数ｆｐｒｉｎｔｆ１５１０をコールし、局所に記憶されたデータにアクセスすることにより、この関数を行う。否定の場合、ＭＭＵ８４０は、このアドレスが配置された場所を求める（。更に、この場所に関連付けられたＰＵを識別する）。例示的な一実施例に従えば、前述の解析に関するコードは、以下に似る場合がある。
【０１１１】
ｆｐｒｉｎｔｆ（ｆｉｌｅ＊ｐ，．．．）｛
ｉｆ（ｍｙ＿ｍｅｍｏｒｙ（ｐ））｛
ｆｐｒｉｎｔｆ（ｐ，．．．）
｝
ｅｌｓｅ｛
ＰＵ２＝ｆｉｎｄ＿ＰＵ（ｐ）；
ｔｒａｎｓｆｅｒ＿ｃｏｎｔｅｘｔ（ＰＵ２）
｝
｝；
ここで、「ｐ」は精査されるメモリ・ポインタである。
【０１１２】
なお図１５を参照するに、この他のＰＵが識別されると、第１のＰＵはコール１５４０を（第２のＰＵ５８０として図１５に表される）この他のＰＵに転送する。コール１５４０のアクセスに応じて、この他のＰＵは次いで、（関数ｆｐｒｉｎｔｆｗｔ１５２０として表す）この関数のワンダリング・スレッド・バージョンにアクセスする。
【０１１３】
クラス毎の割り当てオペレーション及び仮想関数を行うことができる、Ｃ＋＋などの言語の場合、リダイレクト・コードは、クラス・メソッドに追加し、ワンダリング・スレッドをサポートするマシン上でコードが実行される場合にリンク／ロードにおいてプレーン・メソッドに優先して選ぶことが可能である。一実施例では、クラス・コンストラクタは、特定のＰＵ上にクラスのインスタンスを、当該クラスについての最善の性能を得るために入れる。ジャバ（Ｊａｖａ（登録商標））及びシステム・ベリログ（Ｓｙｓｔｅｍ  Ｖｅｒｉｌｏｇ（登録商標））は、Ｃ＋＋と同様であるが、「ガベージ・コレクション」をメモリ管理に使用する（例えば、メモリを割り当て直すことが可能であるように、参照されていないデータに対するバックグラウンド・スキャニングが存在している）という例外がある。本明細書記載の手法は、ガベージ・コレクションを使用することを排除するものでない。むしろ、本明細書記載の手法は、サーチの範囲を制限することにより、その性能を向上し得る。
【０１１４】
例示的な実現形態によれば、上記手法は、ユーザ・コードを、修正されていない状態にしておくよう構成される。更に、より高い細粒度の制御が、ユーザ・ソース・コードにおいて、ワンダリング・スレッド・サポート・ルーチンを直接、使用することにより、又は、インラインされた（ｉｎ−ｌｉｎｅｄ）リダイレクト・オペレーションにより、コンパイルされたコードを解析し、再生成することによって得ることができ、前述の後者の手法は、例えば、より下位レベルの仮想マシ・スタイル・コードによって実現し得る。上記に係わらず、一実施例では、（マシン特有コードでなく、）ランタイム・システムによって解釈される「バイトコード」が実現される。例えば、旧いｘ８６コードがロードされた場合、余分にインジェクトされたコードはｘ８６互換でないことがあり得る一方、しかしながら、ランタイム・システムによって理解される。
【０１１５】
ｂ  処理機能
種々の実施例が、プロセッサ装置の複製及び選択を駆動させるためのプロセッサ装置の動作の監視の実現形態に関係する。実際に、一実施例では、リダイレクト・コールは、特定のＰＵに、当該ＰＵの現在の処理機能に基づいて転送され、適用可能な処理機能解析は、例えば、実現された（例えば、インジェクトされた）サポート・コードによって行い得る。例えば、コールが、潜在的なリダイレクト・コールとして識別されると、このコールを処理するために２つ以上のＰＵが利用可能な場合（２つ以上のＰＵが現在、関連したデータを局所に記憶している場合などに生じ得る）、対象のルーチンをどのＰＵが最も効率的に処理することが可能であるかに関する十分な情報に基づいた決定を行うために前述の種々のＰＵの現在の処理機能を解析し得る。第２の例として、ルーチンは、（ターゲット・コード自体とともに）別のＰＵにそれぞれを関連付け得るいくつかの別々の引数を有し得、その場合、インジェクトされたコードは、どの因子が最も重要であるかを決定する。
【０１１６】
更に例証するに、かつ、次に図１６を参照するに、実施例による第４の例示的なコール転送パラダイム１６００を示す。特に、メモリ場所関連付け判定１６１０によって表されるように、命令５１０に関連付けられたコード又はデータ・メモリ場所６１０（例えば、図６参照）が、第２のＰＵ５８０、及び複数の他のＰＵ１６２０と関連付けられていることが判定される。例証の目的で、複数の他のＰＵ１６２０は、図１６において、第３、第４、及び第５のＰＵ１６２１、１６２２、１６２３を含む。更に、第２のＰＵ５８０に対応する現在利用可能な処理機能を反映する数値測定１６３０が定義される。例証するに、第２のＰＵ５８０の現在利用可能な処理機能は、例えば、現在の状況下で特定の期間内に第２のＰＵ５８０が行うことが可能な計算又は処理サイクルの数を求めることによって測定し得、数値測定１６３０は、この図を数値的に反映している。
【０１１７】
更に、複数の他の数値測定１６４０が定義され、複数の他の数値測定１６４０は、複数の他の現在利用可能な処理機能それぞれを反映し、複数の他の現在利用可能な処理機能は、複数の他のＰＵ１６２０それぞれに対応する。例証するに、第３のＰＵ１６２１、第４のＰＵ１６２２、及び第５のＰＵ１６２３の現在利用可能な処理機能は例えば、現在の状況下で特定の期間内に前述のＰＵそれぞれが行うことができる計算又は処理サイクルの数を求めることによって測定し得、複数の他の数値測定１６４０は、これらの図それぞれを数値的に反映している。数値測定１６３０が複数の他の数値測定１６４０それぞれよりも大きく、それにより、第２のＰＵ５８０が、その他の利用可能なＰＵよりも速い命令５１０を処理することができることを示す場合、コール５７０は、第１のＰＵ５４０から第２のＰＵ５８０に転送される。
【０１１８】
ｃ  リソース・アクセス
上記に係わらず、実施例では、特定のリソース（例えば、イーサネット（登録商標）又はシリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴ−Ａ））に対するアクセスを有するそのＰＵに基づいて特定のＰＵにリダイレクト・コールが転送される。特に、リダイレクトは、前述のリソースに対する隣接性及びアクセスを実現するために起動される。例えば、コールがリダイレクト・コールとして識別されると、２つ以上のＰＵが、このコールの処理に利用可能な場合（２つ以上のＰＵが現在、関連するデータを局所で記憶している場合などに生じ得る）、対象のルーチンの効率的な処理を助け得る特定のリソースが識別され、利用可能なＰＵのうちの１つが、この識別されたリソースに対するアクセスを有する前述のＰＵに基づいて選択される。このことは、例えば、同時性の問題を避けるために特定のＰＵがハードウェアの唯一のコントロールを有する場合に有用であり得る。
【０１１９】
例証するに、かつ、次に図１７を参照するに、実施例による第５の例示的なコール転送パラダイム１７００を示す。特に、リソース選択１７２０によって表されるように、特定のリソース１７１０が選択され、（１）第２のＰＵ５８０に割り当てられる特定のリソース１７１０の制御の度合い、（２）第１のＰＵ５４０が、特定のリソース１７１０へのアクセスを欠いていること、及び／又は、（３）１つ若しくは複数の他のＰＵ１７３０が、特定のリソース１７１０へのアクセスを欠いていることに基づいて、コール５７０が第１のＰＵ５４０から第２のＰＵ５８０に転送される。よって、１つ又は複数の他のＰＵ１７３０のうちのＰＵは、対象のルーチンに関するデータを局所で記憶し得るが、このＰＵは、コール・リダイレクトについて選択されない。前述のＰＵは、リダイレクト・コールの処理中に特定のリソース１７１０を利用することができないからである。Ｃ＋＋などの言語では、この手法は、例えば、適切なＰＵのメモリにおいて、ストリーム記述子（又はそのメタデータ）を割り当てることによって実現することが可能である。例えば、ＰＵ５８０は、例えば、ＳＡＴＡコントローラ又はハードドライブ自体に内蔵し得、直接取り付けられたディスクへのデータ転送を管理するよう構成し得る一方、対象のコールは、他のＰＵ上のデータを参照しながら、ＰＵ５４０によって起動される。ＰＵ５４０上で実行されるＲＰＣコードは、コールのフルフィルメントを加速化するために、データをＰＵ５８０に送出する旨の要求を他のＰＵに送出し得る。
【０１２０】
ｄ  共有メモリ・コヒーレンス・マシン命令
例示的な実現形態によれば、特定のマシン命令がマルチスレッドのＳＭＰマシンにおいて使用され、種々の実行可能なルーチンが前述の命令に基づいて構築される。特に、前述の実行可能なルーチンは、識別可能な共有メモリ・コヒーレンス・マシン命令を使用するものを含み、特定の例は、テストアンドセット（例えば、ｍｕｔｅｘ）コード及びセマフォを利用するルーチンを含む。ポータブル・オペレーティング・システム・インタフェース（ＰＯＳＩＸ）スレッド（又は「Ｐｔｈｒｅａｄｓ」）の場合、実施例では、Ｐｔｈｒｅａｄルーチン実現形態は、スレッド間通信を扱うための低位レベルのマシン機構の使用を示唆している。したがって、一実施例に従えば、共有メモリ・コヒーレンス・マシン命令は、この同じプロセッサが前述の特定のマシン命令を効率的に実行することができるようにどのルーチンを同じプロセッサに移動させるかの判定を助ける。前述の命令は、例えば、ロード中に識別し、次いで、実行可能なルーチンを含む、又は実行可能なルーチンにマッピングされたものが適切なリダイレクト・セクタに入れられるように指示し得る。別々のリダイレクト・セクタを、別々のコール・タイプを示すために使用し得る。Ｐｔｈｒｅａｄｓ  ｍｕｔｅｘコールは、関心のアドレスを第１の引数として有し、他のルーチンの場合、場合によっては、第２の引数又は第３の引数が、ＲＰＣの決定の最も適切なデータのアドレスである。セクタの選択は、コール・タイプを反映するためにシャドー・レジスタがどのようにして充填されるか、及び実現されたハードウェアＲＰＣ機構をどのようにして使用するかを指示し得る。
【０１２１】
例証するに、かつ、次に図１８を参照するに、実施例による第６の例示的なコール転送パラダイム１８００を示す。特に、コード１８１０が命令５１０にマッピングされているか、又は命令５１０を含む場合であり、かつ、このコード１８１０が第１のＰＵ５４０によってアクセスされる場合などに、命令５１０に関連付けられたコード１８１０が識別される。更に、少なくとも１つの共有メモリ・コヒーレンス・マシン命令１８３０を含む実行可能なルーチン１８２０が識別される。更に、コール５７０は、実行可能なルーチン１８２０が第２のＰＵ５８０に関連付けられていることに基づき、かつ、コード１８１０が、少なくとも１つの共有メモリ・コヒーレンス・マシン命令１８３０にマッピングされていることに基づき、第１のＰＵ５４０から第２のＰＵ５８０に転送される。
【０１２２】
更に例証するに、予め定義されたライブラリ・コ―ド（例えば、コヒーレンシ命令の使用を示唆しているＰｔｈｒｅａｄｓなどの）がない例を考えてみる。例えばテストアンドセット命令を利用するコードは、Ｐｔｈｒｅａｄコールと同様なやり方で識別し、マーキングすることが可能である。更に、複数のＰＵにまたがらない場合にテストアンドセット・オペレーションがずっと単純であり得る限り、実施例では、単一のＰＵ上での前述のコールの処理の直列化は、ハードウェア・コヒーレンシ・サポートの実現形態を避けることを可能にする。上記に係わらず、他の方法論も実現し得る。
【０１２３】
ｅ  コード・インジェクション
上述の通り、一実施例では、コード・インジェクション手法は、コールを転送するか否かの判定において重要な役割を果たし得る。例えば、かつ、次に図１９を参照するに、実施例による例示的なコール・インジェクション・パラダイム１９００を示す。特に、第１のＰＵ５４０に関連付けられた（例えば、第１のＰＵ５４０に割り当てられ、又は第１のＰＵ５４０内に含まれた）キャッシュ・メモリ装置９１０が、キャッシュ・メモリ選択９１０によって表すように選択され、命令５１０がキャッシュ・メモリ装置９１０にロードされる。更に、余分なコードの組１９２０が、キャッシュ・メモリ装置９１０に、命令５１０に関連付けられた境界（例えば、メモリ位置の隣接のセット又は近傍のアドレス・シーケンス）においてインジェクトされ、命令５１０はターゲット命令である。この境界の識別は、例えば、キャッシュ・メモリ選択１９１０中に行い得る。更に、余分なコードの組１９２０は、第２のＰＵ５８０などの特定のＰＵにコール５７０を転送するか否かを第１のＰＵ５４０が判定することを可能にするよう構成される。このようにして、更なるソフトウェアは、そのリダイレクト意思決定プロセスによるハードウェアのサポートを支援し、それにより、より高度な解析を（本明細書及び特許請求の範囲記載のやり方などで）行うことを可能にするために実現し得る。動的共有ライブラリを使用するシステムにおいてコードをインジェクトするための例示的な方法は、デフォールトで使用され、適切なエントリ・ポイントを含むものの前に、別の共有ライブラリをロードすることである。これは、例えば、「ＬＤ＿ＰＲＥＬＯＡＤ」などの環境変数の使用により、リナックス（Ｌｉｎｕｘ（登録商標））システム上で行うことが可能であり、ランタイム・システムは次いで、選好により、予めロードされたルーチンを使用し、今度は、元のターゲット又は他のコ―ドをコールすることが可能である。リナックス・コマンド「ｓｔｒａｃｅ」は前述の機構を使用し、Ｌｉｎｕｘは「オープン・ソース」オペレーティング・システムである。
【０１２４】
よって、実施例では、コード・ロード・フェーズ中に、コールを別のＰＵに移動させるか、又は、局所に維持するかについての決定を行うために、実行可能なルーチン境界において、余分なコードがインジェクトされる。前述の意思決定プロセスを助けるための情報を、インジェクトされたコードに供給するよう、種々のプロセッサ・アーキテクチャを補強することが可能である。更に、ソフトウェア・インジェクション手法はスタンドアロンで、既存の（例えば、予めコンパイルされた）ソフトウェアにより、既存のＳＭＰマシン上で使用することが可能である一方、（例えば回路シミュレーション、データベース、人工知能（ＡＩ）アプリケーションなどにおいて）ランダムに比較的大量の静的データを扱うソフトウェアの場合に最もうまく機能し得る。
【０１２５】
ｆ  ポインタ変換
例示的な実現形態によれば、特定のタイプのルーチン・コールは、効率の目的で、複製データよりもむしろ引数としてポインタを使用し、前述のポインタは、値渡しコールに変換し得る。例えば、その「ｍａｎ」ページに記述されたようなオペレーティング・システム・コール「ｓｔａｔ」について考えてみる。すなわち、
ｉｎｔ  ｓｔａｔ（ｃｏｎｓｔ  ｃｈａｒ＊ｐａｔｈ，ｓｔｒｕｃｔ  ｓｔａｔ＊ｂｕｆ）である。
このコールにおいて転送されるデータは、ファイルの場所「ｐａｔｈ」、及びそれについての情報を返す場所である。このためにＲＰＣを起動させ得る。コードを実行するＰＵがファイルを管理しないからである。前述のコールは、コピーイン／コピーアウト・コールにリマッピングすることが可能であり、それにより、データは、参照渡しされるよりも値渡しされる。例えば、
ｓｔｒｕｃｔ  ｓｔａｔ＿ｉ  ｒｐｃ＿ｓｔａｔ（ｃｏｎｓｔ  ｃｈａｒ  ｐａｔｈ［ＭＡＸ＿ＰＡＴＨ］）；
などである）。ここで、ｓｔａｔ＿ｉは、ｓｔａｔデータによる、通常のｓｔａｔコール・リターンを含む。
【０１２６】
一ＰＵから別のＰＵにコールを転送すると、受信側のＲＰＣは、「ｐａｔｈ」及び「ｂｕｆ」の一時局所記憶装置により、通常の「ｓｔａｔ」をコールする。メモリ・サブシステムにわたる、元のデータのアドレス指定のオーバヘッドを起動させることなく、「ｂｕｆ」データを呼び手（ｃａｌｌｅｒ）に返信する。前述などのオペレーティング・システム・コールのコードは、システム・ライブラリのソース・コードを処理し、値渡しバージョン（ＰＵ毎にランタイム・ローダに利用可能にされる）に変換することにより、事前に作成し得る。よって、ＲＰＣ分岐決定を行うためにインジェクトされたコードは、値渡し（又は部分的な値渡し）サポート・コードの存在を前提とし得る。例証するに、「ｓｔａｔ」に対するコールは、例えば、ロードされると、「ｓｔａｔ＄ｔｒａｎｓｆｅｒ」に対するコールに変換され（名称における記号「＄」はシステム・コールのために予約し得る）、次いで、インジェクトされた分岐コードは「ｓｔａｔ」をコールするか、又は、場合によっては「ｓｔａｔ＄ｒｐｃ」をコールし、ここで、ライブラリにおいて提供される「ｓｔａｔ＄ｒｐｃ」バージョンは値渡しに変換され、ＲＰＣを行う。これにより、これらが動作をどのようにしてコールするかについてインテリジェントに挙動することをローダが強いられることが避けられる。サポート・コードが提供されるルーチンを解析しないからである。以前にみられなかったコール（例えば、ユーザ・コードが関係するコール）の場合、前述の変換を行うことは可能でないことがあり得、ＲＰＣは、より高いオーバヘッドでメモリ・サブシステムによってサービスされる発信側のＰＵに戻るポインタを含み得る。（「ｃｏｎｓｔ」引数を有する「無効な」コールとして例えば、Ｃ／Ｃ＋＋に示し得る）戻り値の送出にルーチンが関係しない場合には、ＲＰＣ機構は、遠隔ＰＵがＲＰＣコールを完了することを待つことなく、直ちに局所に戻り得、この場合、ＲＰＣは、「分離された」又は独立したスレッドになる。
【０１２７】
よって、実施例では、実行可能なルーチン名は、ＲＰＣ決定のためにインジェクトされる対象のコードを選択するために利用される。例証するに、かつ、次に図２０を参照するに、実施例による例示的なコード選択パラダイム２０００を示す。特に、１つ又は複数の予め選択された実行可能ルーチン２０２０それぞれに対応する１つ又は複数の実行可能なルーチン名２０１０が識別される。更に、余分なコードの組１９２０を、１つ又は複数の実行可能なルーチン名２０１０に基づいて選択して、コール変換２０３０によって表すように、参照渡しコールから値渡しコールにコール５７０を変換する。
【０１２８】
更に、一実施例では、種々のハイブリッド（例えば、ハードウェア及びソフトウェア）方法論を実現し得る。例えば、コードを静的にプロファイリングして、ＰＵ仕様（例えば、６４ビット・サポートを実現するか否か、若しくは、３２ビットのサポートで十分であるか否か）、又は浮動小数点のサポートを実現するか否かを判定し得る。これは、最小のハードウェアを有するＰＵがコードを実行するために使用されるように、ライブラリにコードをタグ付けするために使用することが可能である。
【０１２９】
更に、例示的な一実現形態に従えば、実現されたＰＵは、数値演算コプロセッサとして表し得、浮動小数に対する演算を行うよう構成された浮動小数点装置（ＦＰＵ）を含む。よって、浮動小数サポートが関係する関数のコールをこのサポートなしの他のＰＵが試行する場合に、このＰＵに対するハードウェア・リダイレクトは自動的である。このことには、実際のデータ・メモリ・アクセスは関係しないことがあり得、これは、コード・タイプを前提とする。更に、コード及びデータがメモリ内に存在している限り、これは、コードの場所をキーとすることが可能であり、メモリにコードを入れるローダは、メモリの特定の領域に特定のタイプのコードが記憶されるように順序付け、それにより、ＰＵ割り当てを比較的単純にすることが可能である。更に、浮動小数点命令は、コヒーレンシ命令の認識と同様なやり方でコードにおいて認識し得る。
【０１３０】
ｇ  仮想関数テーブル
Ｃ＋＋などの言語などによる、ランタイムでのコードの修正に関し、（Ｃ言語におけるように）通常のコール・サイトにおけるコードのインジェクションに対する代替的なオプションが存在している。特に、例示的な実現形態では、サブクラスのカスタマイズのためにＣ＋＋が「仮想関数テーブル」（ＶＦＴ）を使用する限り、仮想関数を有するクラスに属するインスタンス化されたデータ項目はそれぞれ、１つ又は複数のＶＦＴポインタを有する。ＶＦＴポインタの設定又は初期化はＣ＋＋コンストラクタのジョブの一部であるので、「ラッパ」がコンストラクタの周りに追加された場合、対象のメソッドをコールする前にＲＰＣリダイレクション・コードを使用するＶＦＴの他のバージョンを指し示すようＶＦＴポインタを修正することが可能である。よって、コードがロードされると、特定のクラス・コンストラクタは、コンストラクタをコールする一方で、元のコーラにデータ・アドレスを返す前に、割り当てられたデータを修正する、他のコードに対するコールで置き換えられ、コンストラクタ・コールは、データ場所が正しいことの保証を助けるために（場合によっては、低位レベルであるが）既に修正されている。
【０１３１】
よって、実施例では、ラッパ・コールが、ＲＰＣ決定ラッパであるエントリを有する別のＶＦＴで、元のＶＦＴを置き換えるようにロード中にコンストラクタ（例えば、Ｃ＋＋コンストラクタ）周りにインジェクトされる。ＶＦＴの予め定義されたバージョンが、コンパイルされたコード内に存在している例を考えてみる。このＶＦＴが複製され、ＲＰＣ決定ラッパで前述のエントリが指し示すようにいくつかのそのエントリが変更される。更に、ＶＦＴの予め定義されたバージョンに対する先行するポインタが、ＶＦＴの新たなバージョンに対する新たなポインタで置き換えられる。
【０１３２】
例証するに、かつ、次に、図２１を参照するに、実施例による例示的なＶＦＴ置き換えパラダイム２１００を示す。特に、命令５１０を含むプログラム１２１０がアクセスされ、プログラム１２１０に対応するプログラミング言語２１１０が識別され、１つ又は複数の仮想関数２１５０を有するクラス２１４０に属するデータ項目２１３０が、ＶＦＴ２１２０にマッピングされた１つ又は複数のＶＦＴポインタ２１６０を含むようにＶＦＴ２１２０を実現するよう、プログラミング言語２１１０が構成される。更に、プログラミング言語２１１０に関連付けられたコンストラクタ２１７０が識別され、コンストラクタ２１７０は、１つ又は複数のＶＦＴポインタ２１６０を定義するよう構成される。更に、ラッパ・コール２１８０を、プログラム１２１０のロード中にコンストラクタ２１７０周りでインジェクトして、それにより、１つ又は複数の仮想関数２１５０の１つ又は複数のリモート・プロシージャ・コール（ＲＰＣ）決定ラッパ２１９０を含むＶＦＴ２１９２に対するポインタ２１９１で１つ又は複数のＶＦＴポインタ２１６０を置き換える。
【０１３３】
上記にかかわらず、実施例ではラッパ・コールをプログラムのロード中にコンストラクタ周りにインジェクトして、それにより、１つ又は複数のＲＰＣ決定ラッパで１つ又は複数のＶＦＴエントリを置き換える。更に、クラス・インスタンスＶＦＴポインタが、新たなＶＦＴを使用するよう更新される。別のＶＦＴは、クラス・インスタンスの破壊が自動的にそれを除外し、又は、それを別個に管理し得るようにクラス・インスタンスと同じメモリ・ブロックに割り当て得る。このことは、次に掘り下げてみることとするインスタンス毎コード修正に関する。
【０１３４】
一実施例では、クラス・インスタンス内のＶＦＴポインタがそのインスタンス特有でない限り、このポインタは、ランタイムにインスタンス単位で修正することが可能である。ＲＰＣコールがしばしば行われる場合（又はほとんど若しくは全く行われない場合）、ＲＰＣ決定コードがコールされないようにＶＦＴを修正することが可能であり、仮想関数は、局所でコードに直接進み、又はＲＰＣに進む。前述の分岐決定データは、ＲＰＣ決定ラッパを使用する場合、クラス・インスタンスが割り当てられるＶＦＴとともに記憶することが可能である。（一方、通常のＣ＋＋が、クラスの全部又は複数のインスタンスにわたってＶＦＴを共有する。）よって、ＶＦＴポインタの場所をそこから導き出すことが可能なそのクラス・インスタンスに対するポインタにより、仮想関数がコールされる。
【０１３５】
更に、実施例では、この手法には、データと同じ場所に配置されたＶＦＴポインタを含むメモリをロードするＰＵが関係し、「コール・サイト」手法には、ロードすることなくアドレスを解析することが関係する。しかし、オブジェクトに関連付けられたデータは全て、ロードしてもしなくてもよく、よって、この手法は、大きなオブジェクトが、遠隔なオブジェクトに対するオペレーションを管理する複数のＰＵのネクサスにある場合に有益であり得る。
【０１３６】
よって、実施例では、ＶＦＴ自体が、ＲＰＣ判定コードがコールされないように修正される。例証するに、かつ、次に図２２を参照するに、実施例による例示的なＶＦＴ修正パラダイム２２００を示す。特に、命令５１０を含むプログラム１２１０がアクセスされる。更に、プログラム１２１０に対応するプログラミング言語２１１０が識別され、１つ又は複数の仮想関数２１５０を有するクラス２１４０に属するデータ項目２１３０が、ＶＦＴ２１２０にマッピングされた１つ又は複数のＶＦＴポインタ２１６０を含むようにＶＦＴ２１２０を実現するよう構成される。
【０１３７】
上記に加えて、実施例では、ＶＦＴ２１２０は、ＲＰＣ決定コードがコールされることなく修正される。例えば、かつ、なお図２２を参照するに、ＲＰＣ決定コードがコールされることなく、１つ又は複数の仮想関数２１５０が１つ又は複数のＲＰＣ２２１０に自動的に誘導されるように複数のＲＰＣの実現の結果として修正すればよい。しかし、第２の例に従えば、ＲＰＣ決定コードがコールされることなく、１つ又は複数の仮想関数２１５０が、プログラム１２１０に関連付けられた局所コード２２２０に自動的に誘導されるように、１つ又は複数のＲＰＣ２２１０の実現がない結果として（、又は、ＲＰＣを使用する必要がないことの結果として）修正される。
【０１３８】
ｈ．  ランタイム／分岐挙動
実施例では、ランタイム・メトリックが、最適な挙動のためにＶＦＴを更にチューニングするために使用される。例えば、ランタイムにおけるコード実行の加速化の大部分は、プロセッサ・ハードウェアにおける分岐予測が首尾良く行われることに依存し得る。実際に、これに特化したハードウェアは、単なるプロセッサ自体よりも多くのものを含み得る。データ・サブクラス特有のメソッドを使用するＣ＋＋及び同様の言語は、サブクラスにおける特定のケースを呈することにより、意思決定を減らすことが可能である。よって、ランタイム分岐決定がコンパイル時間決定と交換され、オーバヘッドは、一定の仮想関数コール・リダイレクトになる。これは、予測可能でない分岐ミスと対照的である。仮想関数コールのランタイム挙動を観測することができることにより、ランタイム・システムは、１つの分岐挙動の組を別のものよりも呈する可能性が高いルーチンの実現形態間でランタイム・システムが選ぶことを可能にする。例えば、ルーチンが、２つの分岐を有する場合、コードの４つのバージョンを作成することが可能であり、前述の４つのバージョンは種々のケースを適切に扱う一方、それらのコードは、分岐についての別々の真偽の可能性を仮定して生成される。
【０１３９】
よって、一実施例に従えば、コードの複数のバージョンが、分岐最適化のために生成される。例証するに、かつ、次に図２３を参照するに、実施例による例示的な修正された命令選択パラダイム２３００を示す。特に、命令５１０の予め定義されたバージョン２３１０がアクセスされ、予め定義されたバージョン２３１０は、複数の条件分岐２３１２にマッピングされたコード２３１１を含む。更に、命令５１０の複数の修正バージョン２３２０が生成され、修正バージョン２３２０は、Ｎ個の修正バージョン（Ｎは２以上の整数である）を含む。例証の目的で、修正バージョン２３２０は、第１乃至第Ｎの修正バージョン２３２１乃至２３２３を含むものとして図２３に示す。更に、修正バージョン２３２０それぞれは、複数の条件分岐２３１２のうちの別の条件分岐をたどるよう修正されたコード２３１１を含む。例えば、図２３では、第１乃至第Ｎの修正バージョン２３２１乃至２３２３は、第１乃至第Ｎの修正コードの組２３２４乃至２３２６それぞれを含むものとして示し、第１乃至第Ｎの修正コードの組２３２４乃至２３２６は、第１乃至第Ｎの条件分岐２３２７乃至２３２９それぞれをたどるよう修正されている。
【０１４０】
コードのどのバージョンを使用するかを選択する例示的な方法には、（１）コード内の複数の決定／分岐のうちの決定／分岐それぞれにキー内のビットを割り当てる工程、及び（２）対応する決定／分岐が関係するイベントの特定の順序に基づいて決定／分岐毎にビットを設定する工程が関係する。このことは、例えば、ハードウェア・レベルで、コール／リターン・オペレーションにより、キーが自動的にリセットされて、（動作に対する影響が最小である）分岐オペレーションをシャドーイングする「シフトアンドオア」オペレーションによって実現し得る。対象のコード・シーケンスの末尾で、当該シーケンスがコールされる次回について、（複数の考えられるルーチン・バージョンのうちから）特定のルーチン・バージョンを選択するために「ハッシュ」ルックアップの一部としてキーを使用することが可能であり、複数の考えられるルーチン・バージョンのうちのその他のルーチン・バージョンと比較して、当該シーケンスの実行に対して比較的効果的かつ効率的なバージョンであるので、この特定のルーチン・バージョンが選択される。更に、コール・サイト更新は、アトミックであり、（例えば、ハードウェア・サポートにより、ルックアップ及びリライト・オペレーションは、制御の主スレッドが他の所に進み／ワンダリングするので別個に動作するようフォーク・オフ（ｆｏｒｋ  ｏｆｆ）することが可能である。これにより、オンザフライ（ｏｎ−ｔｈｅ−ｆｌｙ）チューニングを行うために、マルチコアＰＵアーキテクチャ内の予備のコアを使用することにより、「単一スレッド」のコードが自己最適化されることが可能になる。
【０１４１】
例示的な修正された命令選択パラダイム２３００をなお参照するに、複数の修正バージョン２３２０それぞれに関連付けられた複数の挙動２３３０が予測される。更に、命令５１０に関連付けられた実行可能なルーチン１８２０にアクセスされ、実行可能なルーチン１８２０に関連付けられたランタイム挙動２３４０が識別される。更に、ランタイム挙動２３４０に対応する前述の修正バージョンの予測された挙動に基づいて、実行可能なルーチン１８２０の動作中の実行のための修正バージョン２３２０のうちの選択されたバージョン２３５０によって表すように、修正されたバージョンが選択される。
【０１４２】
更に、実施例では、リダイレクト／ＲＰＣバージョンと同様に、使用されている仮想関数の分岐挙動を監視することが可能であり、最適以下の場合、ＶＦＴエントリを、挙動により一致するものと交換することが可能である。一例には、電圧及び電流を算出するために使用される式のどれかを選ぶ、モデル・コードが多くの因子を有するスパイス（Ｓｐｉｃｅ）シミュレータにおけるモデル・コードの使用がある。しかし、前述の因子のほとんどは、シミュレータ開始後、変わらないライタイム定数である。初期バージョンとしてモデル・コードの汎用の自己監視バージョンを使用して、モデル・インスタンス上の最初のいくつかのコールを観測することが可能であり、最適分岐デフォールトを有している（、又は分岐なしの）非監視バージョンへの切り替えを行い得る。コンパイラ・システムは監視コードを付加し、ユーザはこのことを知らない。更に、分岐コードを既存のコンパイルされたコードにおいて識別することが可能であり、種々の形式で、コンパイルされたコードを再生成するための方法を実現し得る。
【０１４３】
例示的な実現形態では、ＶＦＴテーブル使用を最適化する場合、クラス・インスタンス内のＶＦＴポインタを、（例えば、ＶＦＴの別々のバージョンを指し示すよう）変更し得、又はＶＦＴエントリ自体を変更し得る。その選択は、実現されたクラス・メソッド及びクラス・インスタンスの数に基づく。同じクラスの比較的多数のインスタンスが実現される場合、ＶＦＴの共通セットを実現して、（かなり少数の別個のオペレーション・モードが利用される、数千のインスタンスが実現される場合などに）利用されるメモリの量を低減させる。同様に、種々のメソッド間のそれぞれの挙動間に相関が存在している場合、クラス・インスタンスにおける状態の変更には、最適な性能を実現することができるメソッドの数を変更する工程が関係し得、ＶＦＴポインタの更新は、ＶＦＴ内のメソッド・ポインタ全ての変更よりも速い。しかし、インスタンスの数が比較的少なく、実現されたメソッドのそれぞれの挙動間の相関が小さい場合、ＶＦＴ内の個々のエントリを更新する処理が実現され、この処理は例えば、コール・サイト・リライティングと表し得る。
【０１４４】
更に例証するに、かつ、次に図２４を参照するに、実施例による第１の例示的な仮想関数リマッピング・パラダイム２４００を示す。特に、命令５１０に関連付けられた（例えば、命令５１０を含み、又は命令５１０にマッピングされた）実行可能なルーチン１８２０がアクセスされ、仮想関数２４１０の第１の実現形態２４１１及び第２の実現形態２４１２が識別され、仮想関数２４１０は第１の実現形態２４１１を指し示すＶＦＴエントリ２４１３を含み、仮想関数２４１０は更に、複数のＶＦＴ２４３０のうちの第１のＶＦＴ２４３１にマッピングされたＶＦＴポインタ２４１４を含む。例証の目的で、複数のＶＦＴ２４３０は、第１乃至第ＮのＶＦＴ２４３１乃至２４３３を含むものとして図２４に示す。更に、実行可能なルーチン１８２０の一部分の動作は、実行可能ルーチン動作２４４０によって表す第１の実現形態２４１１で開始され、この動作中に第１の実現形態２４１１によって表される分岐挙動２４５０が識別される。
【０１４５】
分岐挙動２４５０が識別された後、この分岐挙動２４５０に基づいて、ＶＦＴポインタ１４１４をリマッピングし得、又は、ＶＦＴエントリ２４１３を更新し得る。特に、かつ、なお図２４を参照するに、分岐挙動２５４０の動作解析２４６０を行って、それにより、第２の実現形態２４１２が分岐挙動２４５０に対応する度合いが、第１の実現形態２４１１が分岐挙動２４５０に対応する度合いよりも大きいことを判定する。更に、動作解析２４６０に基づいて（例えば、ＶＦＴポインタ２４１４がもう、第１のＶＦＴ２４３１にマッピングされないように）第２のＶＦＴ２４３２にマッピングし直され、第２のＶＦＴ２４３２は、第２の実現形態２４１２にマッピングされたポインタ２４３４を含む。あるいは、ＶＦＴエントリ２４１３は、動作解析２４６０に基づいて（例えば、第１の実現形態２４１１よりも）第２の実現形態２４１２を（例えば、直接）差し示すよう更新し得る。
【０１４６】
明瞭性の目的のために、仮想関数２４１０の第１の実現形態２４１１及び第２の実現形態２４１２は、仮想関数２４１０の別々の２つのバージョンである（か、又は、別々の２つのバージョンのそれぞれの実現形態に対応し得る）。このようにして、単一の仮想関数の別々のバージョンの利用は、別々の仮想関数の利用と区別可能であり得る。例えば、Ｃ＋＋クラスでは、別個の複数の仮想関数が存在し得、それらにはそれぞれ、ＶＦＴにおける別のスロット／エントリを与え得る。対照的に、実施例では、単一の仮想関数の別々のバージョンがコンパイルされ（又は予めコンパイルされ）、前述の仮想関数バージョンのうちの一バージョンが、特定のメソッドの比較的効果的かつ効率的な実現形態を前述のバージョンが実施し、又は表すことに基づいて（例えば、ランタイムで）選択される。例証するに、クラスは「メソッドＡ」及び「メソッドＢ」を「仮想関数Ａ」及び「仮想関数Ｂ」として実現させ得る例を考えてみる。その場合、ＶＦＴの「エントリ０」及び「エントリ１」は、「Ａ」及び「Ｂ」それぞれを指し示す。「Ｂ」の新たなバージョン（例えば、「Ｂ１」）は、別々のパラメータで「Ｂ」をコンパイルすることによって作成し得、「Ｂ１」は、「Ｂ」でなく「Ｂ１」を指し示すよう「エントリ１」を変更することによって利用し得る。この方法論の他の例示的なアプリケーションは、ルーチンの最適化バージョンとデバッグ・バージョンとの間の交換を含み得る。更に、デバッグ環境では、ユーザがルーチン内でブレークポイントを設定する場合、コード・バージョンは、完全に最適化されたバージョンを、デバッグ及びブレークポイントをサポートするものと交換し得、これは、プログラム全体のコンパイルされたバージョン間の交換に対して動作上の利点を有し得る。
【０１４７】
実施例では、プログラムは更に、特定の挙動を表し得、それにより、特定の決定を行った後、別の挙動は、対象のコールを介して次回に生起する可能性がより高くなる。特定の関数の実現形態はしたがって、次回はキャッシュをミスする可能性が低くなるように、それ自身の「コール・サイト」（例えば、コールされた関数のＶＦＴエントリ）をリライトし得る。この例には、状態間でモデルが切り替え、各状態が違ったふうに応答するロジック・オペレーションのシミュレーション・モデルが関係する。前述のモデルのコードは、クラス・インスタンスの一部として問い合わせられる「状態変数」を有し得る。よって、コード・エントリ・ポイントをリライトすることができることは、状態変数の実現を不要にする。行われているコール内に状態が暗黙的に存在しているからである。コンパイラ・システムが、コール・サイト・リライティングの使用を知っている場合、前述の状態変数を、生成されたコードから除外し、それにより、メモリを節減することが可能である。
【０１４８】
次に図２５を参照するに、実施例による例示的なコール・サイト修正パラダイム２５００を示す。特に、命令５１０に関連付けられたプログラム１２１０（例えば、命令５１０を含むプログラム１２１０、又は命令５１０にマッピングされたプログラム１２１０）がアクセスされ、プログラム１２１０は、予め定義されたコール・サイト２５２０にマッピングされた予め定義された関数２５１０を含む。更に、予め定義された関数２５１０のコール５７０が、ＶＦＴポインタ・エントリを利用することなどにより、予め定義されたコール・サイト２５２０によって行われ、予め定義された関数２５１０によって表される分岐挙動２４５０がコール５７０の結果として識別される。更に、分岐挙動２４５０に基づいたコール・サイト修正２５３０によって表すように、予め定義されたコール・サイト２５２０が修正される。例えば、分岐挙動２４５０に基づいて、実現されたＶＦＴポインタを別のＶＦＴエントリにリマッピングし得る。
【０１４９】
例示的な実現形態では、ハードウェアによってサポートされたバージョンが提供され、コールサイト・アドレスがシャドー・レジスタに記憶される。特に、方法論には、シャドー・レジスタ情報を利用するために、実行可能なルーチンを、生成されたコード（例えば、「ｓｅｔ＄ｃａｌｌ（＜ｖｅｒｓｉｏｎ＞）」）に追加することが関係し、ハードウェア／ソフトウェアが前述のコードをサポートすることができない場合、前述のルーチンは最終的に行われる訳でない。更に、分岐が実際に進んだ所までそのコード・フェッチ・ハードウェアが追いつくまでプロセッサが待つ間に分岐ミスは、パイプライン・ストールをもたらし得る。しかし、第２の例示的な実現形態に従えば、完全に実現されたシステムが提供され、分岐予測ハードウェアが除外される。ソフトウェア自体が、それ自身の挙動を予測するために、よりうまく装備される。これは時間及び電力を節減し、キャッシュ・メモリ及び／又は他の機能に、より多くの装置表面積を利用可能にさせる。
【０１５０】
よって、実施例では、コール・サイト・リライティングが行われる。しかし、例示的なシナリオに従えば、ＧＮＵ  Ｃ言語コンパイラであるＧＮＵコンパイラ・コレクション（ＧＣＣ）は、分岐の選択肢にマーキングすることを可能にするが、ＧＣＣはコードの複数のバージョンを生成しない。以下にかかわらず、一実施例では、コンパイラ・システムは、上記をサポートするために分岐挙動がランタイム一定である旨をユーザが示すことを可能にし、必要な分岐条件をなくすコードのバージョンを生成し得る。よって、リダイレクト及びＲＰＣコードの作成に加えて、ターゲット・コードの別々のバージョンがランタイム・システムによる使用のために生成され、余分なバージョンは、プログラムの実行可能ファイル及び／又はその共有ライブラリに含まれ得る。Ｃ＋＋ライブラリは更に、関数オーバロードをサポートするために、同じ名前のルーチンの複数のバージョンが存在し得るように、「名前修飾」を使用し得る。
【０１５１】
上述のように、プログラムは特定の挙動を表し得、それにより、特定の決定を行った後、別の挙動が将来起こる可能性が高い。一実施例では、よって、仮想関数をリマッピングし得る。例証するに、かつ、次に図２６を参照するに、実施例による第２の例示的な仮想関数リマッピング・パラダイム２６００を示す。特に、命令５１０に関連付けられた（例えば、命令５１０を含み、又は命令５１０にマッピングされた）実行可能なルーチン１８２０がアクセスされ、仮想関数２４１０の第１の実現形態２４１１及び第２の実現形態２４１２が識別され、仮想関数２４１０が、第１の実現形態を指し示すＶＦＴエントリ２４１３を含み、仮想関数２４１０は更に、複数のＶＦＴ２４３０のうちから第１のＶＦＴ２４３１にマッピングされたＶＦＴポインタ２４１４を更に含む。例証の目的で、複数のＶＦＴ２４３０が、第１乃至第ＮのＶＦＴ２４３１乃至２４３３として図２６に示す。更に、実行可能なルーチン１８２０の一部分の動作が、実行可能ルーチン動作２４４０によって表すように、第１の実現形態２４１１によって開始され、この動作中に第１の実現形態２４１１によって表される分岐挙動２４５０が識別され、仮想関数２４１０の考えられる将来の挙動２６１０が、分岐挙動２４５０に基づいて予測される。
【０１５２】
考えられる将来の挙動２６１０が予測された後、この考えられる将来の挙動２６１０に基づいて、ＶＦＴポインタ２４１４をリマッピングし得、又は、ＶＦＴエントリ２４１３を更新し得る。特に、かつ、なお図２６を参照するに、考えられる将来の挙動２６１０の動作解析２４６０を行って、それにより、第２の実現形態２４１２が、考えられる将来の挙動２６１０に対応する度合いが、第１の実現形態２４１１が、考えられる将来の挙動２６１０に対応する度合いよりも大きいことを判定する。更に、動作解析２４６０に基づいて（例えば、ＶＦＴポインタ２４１４がもう、第１のＶＦＴ２４３１にマッピングされないように）複数のＶＦＴ２４３０のうちの第２のＶＦＴ２４３２にリマッピングされ、第２のＶＦＴ２４３２は、第２の実現形態２４１２にマッピングされたポインタ２４３４を含む。あるいは、ＶＦＴエントリ２４１３は、性能解析２４６０に基づいて（例えば、第１の実現形態２４１１よりも）第２の実現形態２４１２を（例えば、直接）指し示すよう更新し得る。
【０１５３】
Ｅ  例示的なコール転送
次に、いくつかの例示的なコール転送手法について掘り下げてみる。しかし、本願の手法は前述の例示的なコール転送手法に制限されず、他のコール転送手法を実現し得る。
【０１５４】
ｉ  自動転送
上記に鑑みて、実施例では、コールにアクセスするＰＵ（例えば、第１のＰＵ５４０）は、そのコールをＲＰＣなどにより、別のＰＵにリダイレクトすべきか否かを判定する。上述の通り、この決定は、ハードウェア及び／又はソフトウェア・サポート機構によって行い得る。しかし、一実施例では、制御のスレッドはまず、（他の当該ＰＵはシステムのメモリ全てに対するアクセスを有している訳でないので、後続のＲＰＣ決定プロセスが行われる前に、制御のスレッドが別のＰＵから第１のＰＵ５４０に自動的に転送されるように、前述の高位レベルの決定が行われる前に自動的に転送し得る。
【０１５５】
自動コール転送のこの概念を例証するために、かつ、次に図２７を参照するために、実施例による、例示的な自動コール転送判定パラダイム２７００を示す。特に、命令５１０に関連付けられた大域メモリ場所２７１０が識別される。更に、第３のＰＵ１６２１に、大域メモリ場所２７１０へのアクセスがなく、第１のＰＵ５４０が大域メモリ場所２７１０へのアクセスを有することの結果として第３のＰＵ１６２１から第１のＰＵ５４０にコール５７０が自動的に転送される。
【０１５６】
更に例証するに、大域メモリ・マップは実現し得るが、一例示的な実現形態では、全てのプロセッサがメモリ全てに対するアクセスを有している訳でなく、局所でアクセスし／キャッシュすることが可能でないメモリが関係するコールは、アクセスを有するＰＵに自動的に転送し得る。これは、ハッキングに対し、メモリのセクションをセキュアにし得る。例えば、一ＰＵは、暗号化鍵を扱うタスクを有し、前述のＰＵは、関連付けられたデータに対するアクセスを有する複数の実現されたＰＵのうちからの唯一のＰＵである。他のＰＵからのそのデータ空間をアドレス指定しようとすることにより、セグメンテーション障害（ＳＥＧＶ）がもたらされ、セキュアにされる対象の情報が、よりセキュアでないユーザ・コードによって使用される共有ライブラリ内にある既存コードをハードニングする方法である、転送することが可能な認可された（又は、「ブレスド（ｂｌｅｓｓｅｄ）」）ルーチンによってのみアクセスが実現される。
【０１５７】
同様に、実施例では、命令メモリは、セキュアなＰＵ上で、前述のＰＵが他のコードを自由に実行することがないようにロックダウン（ｌｏｃｋ  ｄｏｗｎ）し得る。例示的な実現形態に従えば、これは、メモリ保護をカスタム化することにより、非分散アーキテクチャにおいて実現し得るが、なお、一定の度合いの保護が与えられる対象のメモリへのユーザ・コードからの物理パスになる。しかし、例示的な一実現形態によれば、保護される対象の他のパスが存在しないように、ＲＰＣ機構がＤＰＡにおいて利用可能である。
【０１５８】
ｉｉ  データ・タイプ毎のメモリ割り当て
一実施例に従えば、メモリ割り当てがデータ・タイプ毎に行われる。特に、例示的な実現形態では、前述のメモリ割り当てが、Ｃ言語で実現することが多少困難である一方、Ｃ＋＋及び他のオブジェクト指向の言語は、余分なコードをインジェクトすることができるタイプ特有のコンストラクタを使用する。例えば、Ｃ＋＋ライブラリをロードすると、メモリ割り当てコールが、コンストラクタ内で識別され、次いで、データが特定のＰＵに存在するようにメモリの特定の領域を使用するよう修正される。
【０１５９】
例証するために、かつ、次に図２８を参照するに、実施例による、例示的なメモリ・ロード・パラダイム２８００を示す。特に、特定のＰＵ（例えば、第２のＰＵ５８０）に関連付けられた（例えば、特定のＰＵに割り当てられ、又は、特定のＰＵ内に含まれた）キャッシュ・メモリ装置９１０が識別され、キャッシュ・メモリ装置９１０内に配置された予め選択されたデータ場所５３０に基づいて、キャッシュ・メモリ割り当て２８２０によって表すように、データ５２０に関連付けられた特定のデータ・タイプ２８１０へのキャッシュ・メモリ装置９１０の割り当てが行われる。更に、命令５１０を含むプログラム１２１０がアクセスされ、プログラム１２１０に対応するプログラミング言語２１１０が識別される。
【０１６０】
コンストラクタがネストされている場合、内側コンストラクタは、関連するデータが同じ場所に配置されるように、外側コンストラクタと同じＰＵにメモリを割り当てるよう指示され得る。このことは、例えば、回路モデルが階層的に構築されるシミュレーションなどのタスクにおいて当てはまり得る。
【０１６１】
更に、プログラミング言語２１１０に対応するライブラリ２８４０がアクセスされ、ライブラリ２８４０は、メモリ割り当てコール２８５０を含むコンストラクタ２１７０を定義し、メモリ割り当てコール２８５０は、特定のデータ・タイプ２８１０を有する情報２８６０にマッピングされる。更に、メモリ割り当てコール２８５０に対する修正２８７０を、（キャッシュ・メモリ割り当て２８２０中に行われる）割り当てに基づいて実現して、それにより、プログラム１２１０の修正バージョン２８９０、及び修正メモリ割り当てコール２８８０を作成し、修正２８７０の結果としてキャッシュ・メモリ装置９１０に情報２８６０がロードされるように、修正メモリ割り当てコール２８８０が行われる。
【０１６２】
なお図２８を参照するに、一実施例に従って、コール５７０を行って、それにより、（キャッシュ・メモリ割り当て２８２０中に行われる）割り当ての結果として、特定のＰＵにより、プログラム１２１０の修正バージョン２８９０を実行する。コール５７０が、第１のＰＵ５４０から第２のＰＵ５８０に転送され、第２のＰＵ５８０が第１のＰＵ５４０から、プログラム１２１０の修正バージョン２８９０を受け取る。第２のＰＵ５８０は、プログラム１２１０の修正バージョン２８９０が実行されるようにコール５７０を行い、プログラム１２１０のこの特定のバージョンの実行は、上記メモリ割り当ての結果として第２のＰＵ５８０によって実行される。
【０１６３】
更に、実施例では、上記メモリ・ロード手法のコード・インジェクション方法は、（１）プログラムがメモリにロードされと、コード・インジェクションがＰＵ単位で行われ、（２）別々のＰＵは、ロードされるにつれ、どのようにして修正されるかに応じてメモリ内のプログラムの別々のバージョンを有し得、（３）コードの場所がＲＰＣモードを示唆しているという点で、ＲＰＣ意思決定プロセスのコード・インジェクションとほぼ同じである。物理共有メモリが存在しない種々のプラットフォーム及び分散コンピューティング環境に関し、この手法には、「ソフトウェアのみ」の機構が関係し得る一方、ハードウェア・サポートは、当該プロセスをより高速にし、より効率的にする役目を担い得る。
【０１６４】
ｉｉｉ  コード・プリプロセッシング
上述のように、例示的な実現形態では、特定のタイプのルーチン・コールは、効率の目的で、複製データよりもむしろ引数としてポインタを使用し、前述のポインタは、値渡しコールに変換し得る。上記にかかわらず、一実施例では、転送ライブラリは、実現されたＰＵ間でデータを転送するよう実現され、オペレーティング・システム・コードは、この転送ライブラリを生成するために前述の転送に先立って予め処理され、この予めの処理には、値渡しサポート・コードに、参照渡しソース・コードを変換することが関係する。
【０１６５】
例証するために、かつ、次に図２９を参照するに、実施例による、例示的なデータ・パッシング・パラダイム２９００を示す。特に、１つ又は複数のコード・ライブラリ２９１０が識別され、１つ又は複数のコード・ライブラリ２９１０に関連付けられた参照渡しソース・コード２９２０にアクセスされる。更に、参照渡しソース・コード２９２０を値渡しサポート・コード２９３０に変換して、それにより、転送ライブラリ２９４０を生成する。更に、データ５２０の参照渡しでなく、値渡しを行うよう転送ライブラリ２９４０が利用される。
【０１６６】
更に、一実施例では、元のターゲット・コード／ルーチンが、ＲＰＣ機構によって転送された局所の複製にリマッピングされたポインタでコールされる。例証するに、かつ、次に図３０を参照するに、実施例による例示的なポインタ・リマッピング・パラダイム３０００を示す。特に、第１のＰＵ５４０及び第２のＰＵ５８０は第１のキャッシュ・メモリ装置６２０及び第２のキャッシュ・メモリ装置６３０それぞれを含み、データ５２０が第１のキャッシュ・メモリ装置６２０に記憶される。更に、コール５７０内の１つ又は複数のポインタ３０１０が識別され、ポインタ変換３０２０によって表すように１つ又は複数のポインタ３０１０を変換して、それにより、参照渡しでなく値渡しでデータ５２０を渡すようコール５７０を構成する。更に、第１のＰＵ５４０から第２のＰＵ５８０へのコール５７０の転送が行われ、この転送中に、データ５２０の値渡しを行って、それにより、データ５２０の局所複製３０３０を第２のキャッシュ・メモリ装置６３０に記憶する。更に、ポインタ・リマッピング３０４０によって表すように、１つ又は複数のポインタ３０１０を局所複製３０３０にリマッピングして、それにより、第１のキャッシュ・メモリ装置６２０にアクセスすることなく、コール５７０を実行することを可能にする。
【０１６７】
ｉｖ  ＲＰＣ転送
上述したように、実施例では、ＲＰＣ機構をコール転送プロセスについて使用し得る。例えば、かつ、次に図３１を参照するに、実施例による例示的なＲＰＣ転送パラダイム３１００を示す。特に、ＲＰＣ３１１０を起動させて、それにより、第１のＰＵ５４０から第２のＰＵ５８０にコール５７０を転送する。この点で、例示的な実現形態に従えば、ＲＰＣ３１１０は、コンピュータ・プログラムが、（コール５７０にマッピングされたものなどの）サブルーチン又はプロシージャに、種々のリソース（例えば、複数のＰＵ）の共有ネットワーク内の（例えば、別のＰＵ内の）別のアドレス空間において実行させることを可能にするプロセス間通信である。実際に、ＲＰＣ３１１０は更に、このコール転送プロセス中に第１のプロセッサ５４０のコンテキストを第２のプロセッサ５８０に転送するよう構成し得る。コール先のプロシージャが、コール側のプロシージャと同じアドレス空間にあってもなくてもよいという点以外は、ＲＰＣ３１１０は局所プロシージャ・コールと同様である。むしろ、別々の２つのプロセスが、同じコンピュータ・システム上で実行していることがあり得、又は、別々のコンピュータ・システムが互いに通信し合うことをネットワークが可能にして前述のシステム上それぞれで実行していることがあり得る。そういうものとして、ＲＰＣ３１１０は、比較的効率的であり、かつ真に分散化されたアプリケーションを実現するよう実施し得る。
【０１６８】
更に、一実施例では、「クライアント／サーバ」モードが利用されないようにＲＰＣ３１１０が実現される。例えば、発信側のＰＵによって実行されるクライアント・プログラムが、ターゲットＰＵによって実行されるサーバ・プログラムからの結果を待つＲＰＣモードと対照的に、実施例では、スレッドは元のＰＵに戻っても戻らなくてもよく、したがって、前述のスレッドは、当該スレッドが完全に実行されるような時点（さもなければ、理論上は、スレッドは、最終的に実行されない場合、無期限にワンダリングし得る）などまで、（ＰＵ間で）メモリにわたって蛇行又はワンダリングし得る。これは特に、直ちにリターンが期待されることなく、高度なクエリを発信し得るデータベース・サーチの場合に適切である。
【０１６９】
例えば、ＲＰＣ３１１０は第１のＰＵ５４０によって起動され、第１のＰＵ５４０は、特定されたプロシージャがコール５７０にマッピングされる場合など、供給されたパラメータによって、上記プロシージャを実行する旨の要求メッセージを第２のＰＵ５８０に送出する。特に、第１のＰＵ５４０は、局所でプロキシ関数をコールし、遠隔コードの引数を渡し、前述の引数はアドレスとしてパスし得る。プロキシは次いで、（１）外部データ表現（ＸＤＲ）と呼ばれる予め定義された転送形式に変換することなどにより、遠隔プロシージャの引数をコード化し、直列化し、又は「整列化（ｍａｒｓｈａｌｌ）」し、（２）システム・コールを行って、それにより、（ユーザ・データ・プロトコル（ＵＤＰ）パケット又は局所メッセージ・キューなどにより、）第２のＰＵ５８０に、コード化されたパケットを局所オペレーティング・システムに送出させる。クライアント／サーバ・モードが実現されない限り、第１のＰＵ５４０は、一旦、このパケットを第２のＰＵ５８０に発信すると、結果を待たない。よって、第１のＰＵ５４０は、別のスレッドを自由に処理する。
【０１７０】
第２のＰＵ５８０が、コード化されたパケットを受け取ると、又は第２のＰＵ５８０が、コード化されたパケットを受け取った後、第２のＰＵ５８０は、（１）（予め定義された外部データ表現（ＸＤＲ）フィルタなどにより、）遠隔プロシージャの引数をデコードし、再作成し、又は「整列化解除（ｕｎｍａｒｓｈａｌｌ）」し、（２）遠隔プロシージャをコールし、行うディスパッチ・ルーチンにこのパケットを渡す。クライアント／サーバ・モードが実現されない限り、第２のＰＵ５８０は、新たなパケットに結果をコード化し、直列化し、又は整列化し、次いで、このパケットを第１のＰＵ５４０に返信するプロセスを開始しない。むしろ、第２のＰＵ５８０は、この同じスレッドの処理を自由に続け、又は、さもなければ、このスレッドが次いで、別のＰＵにワンダリングする場合、別のスレッドの処理を継続し始める。そういうものとして、この手法は、クライアント／サーバ・モードＲＰＣと比較して、より高いシステム処理効率をもたらす。
【０１７１】
実際に、システム性能全体に関し、例示的な実施例では、Ｐｔｈｒｅａｄ  ｍｕｔｅｘロック・コールは、
ｉｎｔ  ｐｔｈｒｅａｄ＿ｍｕｔｅｘ＿ｌｏｃｋ（ｐｔｈｒｅａｄ＿ｍｕｔｅｘ＿ｔ  ＊ｍｕｔｅｘ）
の通り、定義し得る。
ＲＰＣ手法の場合に転送されるデータには、（１）ｍｕｔｅｘアドレス、（２）コール・アドレス、（３）リターンのための識別子（例えば、アドレス）、及び（４）ヘッダ（例えば、最小４ワードに集約し得る）がある。Ｍｕｔｅｘを直接読み出そうとすることには、少なくとも４ワードになり、場合によっては、８ワード以上になる少なくとも１つのキャッシュ・ラインの更新／フラッシングが関係する。しかし、キャッシュ・ラインが複数のプロセッサ間で共有される一方、ＲＰＣコールは、例えば、ポイントツーポイントのマルチプロセッサ相互接続プロトコル（例えば、インテル社クイックパス（ＱｕｉｃｋＰａｔｈ（登録商標））又はＡＭＤ社ハイパートランスポート・テクノロジ（ＨｙｐｅｒＴｒａｎｓｐｏｒｔ  Ｔｅｃｈｎｏｌｏｇｙ（登録商標））を実現することなどにより、）関係しているＰＵに対して排他的であり、メモリ・システムと別個であり得る。よって、コールを比較的効率的な態様で転送することが可能であるようにＲＰＣ機構を実現し得る。
【０１７２】
上記に鑑みて、複数のスレッドの実現には、例えば、共通データが修正されている過程にある間に共通データが読み出され、又は修正されることを阻止するために、セマフォを使用して実現し得るｍｕｔｅｘオペレーションの利用が関係し得る。更に、特定のｍｕｔｅｘオペレーションのｍｕｔｅｘコールは、アクセスの重なりの可能性が存在せず（、かつ、よって、レース状態又はキャッシュ・コヒーレンシの問題が存在しない）ようにアトミックな態様で単一のプロセッサ上で直列に処理し得る。更に、より多くのＰＵ、及びメモリのより高細粒度のセグメンテーションにより、共有データの特定の部分がそれ自身のＰＵを有し、ＲＰＣコールの処理が速くなる。よって、この手法は、比較的大量のＰＵを、既存のコードがサポートされている間に実現し得るようにうまくスケーリングする。
【０１７３】
上記にかかわらず、一実施例では、遠隔プロシージャ・コールを実行するために使用される実際の機構は使用されているコアの種類に依存する。大半のプロセッサの場合、コール／コードのコンテキストはレジスタに保持され、よって、別のＰＵへの制御の転送には、レジスタ・セットの転送が関係する。局所でキャッシュに保持された他のデータ転送する機能も有益であり得るが、自動的にこれを全体的に行うことは困難であり得る。したがって、例示的な実現形態は、ＲＰＣターゲットであるＰＵに向けて、局所でキャッシュされたデータを「プッシュ」する旨のユーザ・レベル・コールを提供し、前述のデータは、リダイレクト・コードにおいて使用される。よって、キャッシュ間で直接、データを複製するためにユーザ・レベル制御を提供し得る。
【０１７４】
例えば、ＲＰＣが実現されており、遠隔コードが発信側のＰＵのメモリからのデータにマッピングされた場合、ＲＰＣ機構は、コールに先立って、又はコールとともにデータをプッシュすることが可能である。例証するに、かつ、次に図３２を参照するに、実施例による例示的な標的データ記憶パラダイム３２００を示す。特に、キャッシュ・メモリ識別３２１０によって表すように、第１のＰＵ５４０及び第２のＰＵ５８０それぞれに関連付けられた第１のキャッシュ・メモリ装置６２０及び第２のキャッシュ・メモリ装置６２０、６３０が識別される。更に、第１のキャッシュ・メモリ装置６２０に記憶され、命令５１０に関連付けられたデータ値３２２０が、データ値識別３２３０によって表すように識別される。更に、データ値３２２０が、（第１のＰＵ５４０から第２のＰＵ５８０にコール５７０を転送する際にＲＰＣ３１１０がデータ値３２２０を第２のキャッシュ・メモリ装置６３０に「プッシュ」した場合などに）ＲＰＣ３１１０の結果として第２のキャッシュ・メモリ装置６３０に記憶される。
【０１７５】
更に例証するに、かつ、ｆｐｒｉｎｔｆ関数が関係する上記例を参照するに、例示的な実現形態は、リダイレクト・コード内のコールに引数をプッシュするオプションを提供する。プッシュ関数に対するオプションは、局所キャッシュをフラッシュするか否かを制御する。よって、コールは、
ｖｏｉｄ  ｐｕｓｈ  （ｌｏｃａｌ  ａｄｄｒｅｓｓ，  ｄａｔａ＿ｓｉｚｅ，  ｔａｒｇｅｔ＿ｐｕ，  ｏｐｔｉｏｎ＿ｆｌａｇｓ）
のようになり得る。データが実際に局所キャッシュ又は他の局所メモリにない場合、データを取り出し、又は移動するための動作は行われず、その場合、命令は事実上、プロセッサが単に、次のシーケンシャル命令に移動するように、比較的小量のメモリ空間を利用するがオペレーションを規定しないコンピュータ命令として規定し得る「ｎｏ−ｏｐ」である。更に、ターゲットのＰＵのキャッシング・ポリシーも、オペレーションをスキップし得るように考慮に入れることができる。ユーザは更に、局所キャッシュ内にデータを保持するか否かについて「プッシュ」により、余分な情報を供給し得る。
【０１７６】
上記に加え、一実施例では、遠隔ＰＵは、データが到着するまで、転送されたコールの実行を保留し、又は遅延させるための機能を有し得る。例証するに、かつ、なお図３２を参照するに、実施例では、データ値３２２０が第２のキャッシュ・メモリ６３０に記憶されるまで、実行遅延３２４０によって示すように、コール５７０の実行を第２のＰＵ５８０によって遅延させる。前述のデータが到着するまで、転送されたコールの実行を遅延させることは、遠隔ＰＵの主処理パイプラインのストールを避けることを助け得る。
【０１７７】
上記に鑑み、かつ、実施例によれば、メモリ／データを「プッシュする」という概念を実現し得る。例示的な実現形態に従えば、前述のデータを「プッシュする」手法は、（１）局所キャッシュをいつ無効にするかを知ること、及び（２）データを要求する際に、遠端上で生じるレーテンシに関する２つの課題を解決する。よって、インジェクトされたＲＰＣコードは、局所キャッシュからの余分なデータをプルし、ＲＰＣによって送出し、よって、その過程で局所キャッシュを無効化し／リリースし、又は、コールが遠隔で実行される場合、実現されたデータが既に、遠隔ＰＵ上のキャッシュに配置されているように直接メモリ・アクセス（ＤＭＡ）転送（例えば、局所キャッシュの外部）をセットする。
【０１７８】
例示的な実現形態によれば、プッシュ、リマップ、及びワンダリングの機構を併用することは、データベース・クエリなどのタスクが、クエリ自体を取り出すために、共有メモリ機構にアクセスすることなく、複数のＰＵにわたって効率的に進むことが可能であり、（他のメモリ内でなく）局所メモリ及びキャッシュに存在し得る。同様に、ビデオ・フレーム／シーケンスなどのオブジェクトを、ビデオの圧縮又は伸張のためにＰＵのチェインを介してパスすることが可能である。しかし、プログラマのレベルでは、ランタイム・システムのアーキテクチャについて分かることは必要でない。むしろ、潜在的なＲＰＣ境界を識別することが可能であるようにコードがパーティショニングされる。例えば、ビデオ処理用の汎用グラフィカル処理装置（ＧＰ−ＧＰＵ）システムでは、特定の「ワープ（ｗａｒｐ）」（ワープは、同じコードを実行するプロセッサ・バンクである）は、（コード・セクタ・マッピングを使用して）特定のルーチンと関連付けられ、タイプに依存する割り当て及びリマッピングは、ユーザ・レベルのタスクがＧＰＵパイプラインにわたって「ワンダリング」するようにバンク間メモリを利用することが可能である。ＧＰＵをプログラミングするための既存の手法には、特定の処理アーキテクチャを対象とし、新たなコーディング・スタイルを学習することが関係するＣＵＤＡ及びオープンＣＬ（ＯｐｅｎＣＬ）を含み、「ワンダリング・スレッド」手法は、なじみのあるプラットフォーム独立（ＳＭＰ）スタイルをプログラマが使用することを可能にし、コードが実際に実行され、データが記憶される場所というアーキテクチャ上の課題は、独立して扱い、よって、コードがよりポータブルになり、永続し得る。
【０１７９】
一実施例では、特定のシステム内又はネットワーク内のメモリが別個に割り当てら得る大域メモリ・マップは、個々のＰＵのそれぞれのメモリ・マップと異なり得、アドレスはＲＰＣ処理中に変換し得る。例証するに、かつ、次に図３３を参照するに、実施例による例示的なＲＰＣ構成パラダイム３３００を示す。特に、第１のＰＵ５４０及び第２のＰＵ５８０それぞれに関連付けられた第１の局所メモリ・マップ３３１０及び第２の局所メモリ・マップ３３２０が（例えば、第１のＰＵ５４０によって）識別される。更に、第１の局所メモリ・マップ３３１０と第２の局所メモリ・マップ３３２０との間の区別３３３０が識別され、メモリ・アドレス変換３３４０が区別３３３０に基づいて生成される。更に、メモリ・アドレス変換３３４０が、ＲＰＣ３１１０を構成するために利用される。このようにして、ＲＰＣが、クライアントＰＵ及びサーバＰＵの局所メモリ・マップに基づいて生成される。
【０１８０】
実際に、一実施例では、大半の局所メモリがより低い数のアドレス・ビットでアクセス可能であるように、より低いアドレス空間にマッピングし得る。（システム内のプロセッサ毎にも該当し得る、）６４ビットのアドレス空間でなくむしろ１６又は３２ビットのアドレス空間を扱うよう企図されたプロセッサを実現する例を考えてみる。これは、「仮想メモリ」と同様であるが、複数のマシンに及び、より高い細粒度を有し得るように、アプリケーション層において実現し得る。よって、複数のマシンにまたがる比較的大規模のプログラムが実現され、局所メモリ・マッピング・プロセスにわたって制御が維持されない場合、システム全体をマッピングすることは実現可能でないことがあり得る。よって、ランタイム・コードは、局所マシンを大域マップ内の別個の空間にマッピングし、大域マップの部分は、（例えば、ハードウェアというよりはソフトウェアによって）局所でキャッシュし得、非局所データに対するコ―ルは必要に応じて自動的に転送される。尚、これは、（ｍｕｔｅｘコールなどの）単一アドレス引数コールの場合には機能する一方、（ソース・コード・レベルのアウェアネスが関係し得るソフトウェア・キャッシングなしで）別々のマシン上のメモリに対するポインタである引数を有する実行可能なルーチンに対するコールの場合には機能しないことがあり得る。
【０１８１】
上述したように、ルーチンに、（「無効」コールとしてＣ／Ｃ＋＋において示すなどの）リターンが関係しない場合、実施例では、ＲＰＣ機構は、遠隔ＰＵを待つことなく、局所で直ちにリターンし得る。例証するに、かつ、次に図３４を参照するに、実施例による例示的な実行可能なルーチン性能パラダイム３４００を示す。特に、命令５１０、及び制御の第１のスレッド３４２０に関連付けられた実行可能なルーチン３４１０、及び命令５１０を含むプログラム１２１０がアクセスされる。更に、コール５７０における１つ又は複数のポインタ３０１０が識別され、ポインタ変換３０２０によって表すように１つ又は複数のポインタ３０１０を変換して、デ―タ５２０の参照渡しでなく値渡しを行うようコール５７０を構成して、それにより、制御の第２のスレッド３４３０を作成する。更に、第２のＰＵ５８０に関連付けられ（、例えば、第２のＰＵ５８０内に含まれ、第２のＰＵ５８０に割り当てられた）キャッシュ・メモリ装置９１０が、キャッシュ・メモリ識別３２１０によって表すように識別され、ＲＰＣ３１１０の結果としてデータ５２０の値渡しを行って、それにより、データ５２０の局所の複製３０３０をキャッシュ・メモリ装置９１０に記憶し、第２の制御のスレッド３４３０を第２のＰＵ３８０に提供する。更に、実行可能なルーチン３４１０が第１のＰＵ５４０により、制御の第１のスレッド３４２０に基づいて行われる一方、第２のＰＵ５８０は、（実行可能なルーチン３４１０が当該実行中に生成されたデータ値３３２０に対するリターン要求を欠く）制御の第２のスレッド３４３０と無関係である制御の第１のスレッド３４２０の結果として、制御の第２のスレッド３４３０に基づいて命令５１０の実行を行う。
【０１８２】
上記に鑑みて、実施例に従って、第１のＰＵ５４０は、ＲＰＣからのリターンを待つことなく、続けることができ、この場合、第２のＰＵ５８０がコールを完了するものとする。例えば、参照渡しプリント・コールが値渡しコールに変換された場合に、かつ、第１のＰＵ５４０に、（当該実行が実際に首尾良く行われている場合に、）転送されたコールの実行が首尾良く行われているとの確認を提供しない場合、転送されたコールはよって、別個のスレッド（例えば、ワンダリング・スレッド）となる。
【０１８３】
上記に係わらず、一実施例では、コール転送プロシージャは、共有メモリ・コヒーレンス・マシン命令の実現形態に基づいて実行される。例証するに、かつ、次に図３５を参照するに、実施例による例示的な実行可能なルーチン転送パラダイム３４００を示す。特に、第１のプロセッシング・コア３５２０が識別され、第１のプロセッシング・コア３５２０は、データ５２０にマッピングされた第１の実行可能なルーチン３５３０を行い、第１の実行可能なルーチン３５２０は、共有メモリ・コヒーレンス・マシン命令３５４０を含む。更に、第２の実行可能なルーチン３５５０が、第２のプロセッシング・コア３５６０においてアクセスされる。よって、別々の２つのプロセッシング・コアが実現される。更に、プロシージャ・コール３５８０（例えば、ＲＰＣ）を起動させて、それにより、第２の実行可能なルーチン３５５０を第２のプロセッシング・コア３５６０から第１のプロセッシング・コア３５２０に、第２の実行可能なルーチン３５５０がデータ５２０にマッピングされていることに基づき、かつ、第２の実行可能なルーチン３５５０が、共有メモリ・コヒーレンス・マシン命令３５４０を含んでいることに基づいて転送する。実際に、共有メモリ・コヒーレンス・マシン命令３５４０を含む第１の実行可能なルーチン３５３０を第１のプロセッシング・コア３５２０が既に処理している限り、第１のプロセッシング・コア３５２０は、第２の実行可能なルーチン３５５０の実行中に前述の同じ共有メモリ・コヒーレンス・マシン命令３５４０を効率的に実行することができる。
【０１８４】
なお図３５を参照するに、実施例では、別々のＰＵは、第１のプロセッシング・コア３５２０及び第２のプロセッシング・コア３５６０それぞれを含む。第１のＰＵ５４０及び第２のＰＵ５８０が、第２のプロセッシング・コア３５６０及び第１のプロセッシング・コア３５２０それぞれを含む例を考えてみる。コールを転送することにした結果、コールは第１のＰＵ５４０内の第２のプロセッシング・コア３５６０から第２のＰＵ５８０内の第１のプロセッシング・コア３５２０に、制御のスレッドが第１のＰＵ５４０から第２のＰＵ５８０に転送されるように、かつ、第１のＰＵ５４０がよって、別の別個のスレッドに自由にアクセスするように転送される。
【０１８５】
しかし、一実施例に従えば、単一のＰＵ（例えば、第１のＰＵ５４０）は、マルチコア・プロセッサ内のコア間でＲＰＣがルーティングされるように第１のプロセッシング・コア３５２０及び第２のプロセッシング・コア３５６０の両方を含む。例えば、特定のＰＵが複数のコアを有する場合、ＲＰＣ機構は、局所で使用し得るので、１つのプロセッサのみが共有データに対するコールを扱う（例えば、同じプロセッシング・コアがｍｕｔｅｘコール全てに割り当てられる）。この場合、コールは、コヒーレントでないメモリの独立部分をアドレス指定するコア間でルーティングされるＲＰＣコールと対照的に、コヒーレント・メモリ・システム（例えば、Ｌ２キャッシュ）を共有するコア間で交差する。
【０１８６】
ＩＩＩ  例示的なコンピュータ・システム環境
本願手法の種々の構成は、本明細書及び特許請求の範囲記載の種々の動作及びオペレーションを行うために配線し、又は構成し得る。しかし、一実施例に従えば、本願の手法の種々のオペレーションを行うためにコンピュータ・システムを実現し得る。よって、次に、例示的なコンピュータ・システム及び構成を深く掘り下げてみる。しかし、本願の手法は前述の例示的なシステム及び構成に制限されない。実際に、他のシステム及び構成を実現し得る。
【０１８７】
次に図３６を参照すれば、実施例による例示的なコンピュータ・システム３６００を示す。コンピュータ・システム３６００は、何れかのタイプのコンピューティング装置（例えば、プログラム又はアルゴリズムに関連付けられた計算、処理、演算、及び関数を行うよう利用されるコンピューティング・デバイス）であり得る。本明細書及び特許請求の範囲の記載において、コンピュータ読み取り可能なメモリ装置内に存在し、コンピュータ・システム３６００の１つ又は複数のプロセッサによって実行される、ソフトウェア・プログラムなどの一連の命令として一実施例に従って実現される特定のプロセス及び工程を説明する。実行されると、命令はコンピュータ・システム３６００に、本明細書及び特許請求の範囲記載の種々の実施例において表す特定の動作を行わせ、特別の挙動を表させる。
【０１８８】
なお図３６を参照するに、コンピュータ・システム３６００は、ソースとデスティネーションとの間で情報を通信するよう構成されたアドレス／データ・バス３６１０を含む。更に、プロセッサ３６２０などの１つ又は複数のデータ・プロセッサは、アドレス／データ・バス３６１０と結合され、プロセッサ３６２０は情報及び命令を処理するよう構成される。実施例では、プロセッサ３６２０はマイクロプロセッサ又はマイクロコントローラである一方、他のタイプのデータ・プロセッサも実現し得る。
【０１８９】
コンピュータ・システム３６００は更に、例えば揮発性メモリ装置３６３０などのいくつかのデータ記憶構成部分を含む。揮発性メモリ装置３６３０は、通信するよう、アドレス／データ・バス３６１０に関連付けられ、又は結合される。更に、揮発性メモリ装置３６３０は、プロセッサ３６２０用の命令及び情報を記憶するよう構成される。更に、揮発性メモリ装置３６３０は例えば、ランダム・アクセス・メモリ（ＲＡＭ）（スタティックＲＡＭ及び／又はダイナミックＲＡＭなど）を含み得る。コンピュータ・システム３６００は更に、通信するよう、アドレス／データ・バス３６１０に関連付けられ、又は結合され、プロセッサ３６２０用に命令及び静的情報を記憶するよう構成された不揮発性メモリ装置３６４０を含む。実施例では、不揮発性メモリ装置３６４０は、リードオンリ・メモリ（ＲＯＭ）（プログラマブルＲＯＭ、フラッシュ・メモリ、消去可能なプログラマブルＲＯＭ（ＥＰＲＯＭ）、及び／又は電気的に消去可能なプログラマブルＲＯＭ（ＥＥＰＲＯＭ）など）を含む。上記にかかわらず、本願の手法は本明細書及び特許請求の範囲記載の例示的な記憶装置の使用に制限されず、他のタイプのメモリを実現し得る。
【０１９０】
なお図３６を参照するに、コンピュータ・システム３６００は更に、通信するよう、アドレス／データ・バス３６１０に関連付けられ、又は結合され、他の電子装置及びコンピュータ・システムとコンピュータ・システム３６００がインタフェースすることを可能にするよう構成された信号生成／受信装置３６５０などの１つ又は複数の信号生成及び受信装置も含む。１つ又は複数の信号生成及び受信装置によって実現される通信インタフェースは、有線（例えば、シリアル・ケーブル、光ファイバ・ケーブル、モデム、及びネットワーク・アダプタ）並びに／又は無線（例えば、無線モデム及び無線ネットワーク・アダプタ）通信手法を利用し得る。
【０１９１】
実施例では、コンピュータ・システム３６００は任意的には、通信するよう、アドレス／データ・バス３６１０に関連付けられ、又は結合された英数字入力装置３６６０を含み、英数字入力装置３６６０は、プロセッサ３６２０に情報及びコマンド選択を通信するために英数字及びファンクション・キーを含む。更に、一実施例に従えば、カーソル制御装置３６７０が、通信するよう、アドレス／データ・バス３６１０に関連付けられ、又は結合され、任意のカーソル制御装置３６７０は、ユーザ入力情報及びコマンドの選択をプロセッサ３６２０に通信するよう構成される。例えば、カーソル制御装置３６７０は、マウス、トラックボール、トラックパッド、光学式トラッキング装置、又はタッチ画面を使用して実現し得る。第２の例では、特殊なキー又はキー・シーケンス・コマンドが実行された場合などの、英数字入力装置３６６０からの入力に応じて、カーソルが誘導され、かつ／又は起動される。しかし、カーソルは例えば音声コマンドなどの他の手段によって誘導し得る。
【０１９２】
なお図３６を参照するに、コンピュータ・システム３６００は、一実施例に従えば、任意的には、通信するよう、アドレス・データ・バス６１０に関連付けられ、又は結合されたデータ記憶装置３６８０を含み、データ記憶装置３６８０は、情報及び／又はコンピュータ実行可能な命令を記憶するよう構成される。例証するに、一例では、データ記憶装置３６８０は、ハード・ディスク・ドライブ（ＨＤＤ）、フロッピー（登録商標）・ディスク・ドライブ、コンパクト・ディスクＲＯＭ（ＣＤ−ＲＯＭ）ドライブ、ディジタル多用途ディスク（ＤＶＤ）ドライブ、又はブルーレイ（登録商標）（ＢＤ）ドライブなどの磁気ディスク・ドライブ又は光学式ディスク・ドライブである。
【０１９３】
更に、実施例では、ディスプレイ装置３６９０は、通信するよう、アドレス／データ・バス３６１０に関連付けられ、又は結合され、ビデオ及び／又はグラフィックスを表示するよう構成される。ディスプレイ装置３６９０は例えば、陰極線管（ＣＲＴ）ディスプレイ、電界放出ディスプレイ（ＦＥＤ）、プラズマ・ディスプレイ、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ）ディスプレイ、又は、ユーザによって認識されることができる英数字並びにグラフィック及び／又はビデオ画像の表示に適した何れかの他のディスプレイ装置であり得る。
【０１９４】
コンピュータ・システム３６００は、実施例による例示的なコンピューティング環境として提示している。しかし、コンピュータ・システム３６００は、コンピュータ・システムであることに厳密に制限される訳でない。例えば、一実施例では、コンピュータ・システム３６００は、本明細書及び特許請求の範囲記載の種々の実施例に応じて使用し得る一種のデータ処理解析を表す。更に、他のコンピューティング・システムを実現し得る。実際に、本願の手法は、何れかの特定のデータ処理環境に制限されない。
【０１９５】
上記に加え、本願の手法の種々の方法は、命令の組を実行するよう構成されたコンピュータ・システムによって行い得る。前述の命令は、実行されると、命令がコンピュータ・システムに、本願手法の方法を行わせるように、コンピュータ読み取り可能な媒体上又はコンピュータ読み取り可能な媒体内に（例えば、一時的でないコンピュータ読み取り可能な媒体上若しくは一時的でないコンピュータ読み取り可能な媒体内、又は、１つ若しくは複数の一時的な伝搬信号以外のものを含む一時的なコンピュータ読み取り可能な媒体上又は１つ若しくは複数の一時的な伝搬信号以外のものを含む一時的なコンピュータ読み取り可能な媒体内に）記憶し得る。よって、次に、コンピュータ読み取り可能な媒体の例示的なシステム及び構成を深く掘り下げてみる。しかし、本願の手法は前述の例示的なシステム及び構成に制限されない。実際に、他のシステム及び構成を実現し得る。
【０１９６】
次に図３７を参照すれば、実施例による例示的な命令実行システム３７００を示す。例示的な命令実行システム３７００は、実行すると、例示的な方法３７４０などの本願手法の方法を、例示的なコンピュータ・システム３７３０などのコンピュータ・システムに行わせる命令３７２０の組を記憶するよう構成されたコンピュータ読み取り可能な媒体３７１０を含む。例えば、一実施例では、命令３７２０の組が、コンピュータ読み取り可能な媒体３７１０からコンピュータ・システム３７３０によって獲得され、次いで、コンピュータ・システム３７３０は、命令３７２０の組を実行し、よって、例示的な方法３７４０を行う。
【０１９７】
上記に係わらず、本明細書及び特許請求の範囲記載の電子及びソフトウェア・ベースのシステムは、本願の手法のコンピューティング環境がどの程度適しているかの例にすぎず、前述の例が、本願の手法の使用又は機能の範囲について何れかの限定を示唆することを意図するものでない。前述の例示的なシステムは、本出願で記載された例において例証された構成部分の何れか１つ又は組み合わせに関する如何なる依存性又は要件を有しているとして解されるべきでない。
【０１９８】
ＩＶ．例示的な実現形態
上記に鑑みて、本願の手法の種々の実施例には以下の少なくとも１つが関係する。
【０１９９】
構成１：データ局所性を利用して、特定のデータ・タイプを特定の処理装置に割り当てることなどによって命令コード・キャッシュ・ミスを避ける構成。
【０２００】
構成２：データをメモリに割り当て、それにより、データ局所性を実現して構成１をサポートする構成。
【０２０１】
構成３：「ワンダリング・スレッド」を実現して構成１及び２を利用する構成。
【０２０２】
構成４：実行のため、及び、構成１乃至３をサポートするためのコード・インジェクション及びランタイム修正。
【０２０３】
更に、種々の実施例には、単一スレッド・コードを加速化するためのサポートを伴う並列処理のためのメモリ内プロセッサ・アーキテクチャ及びソフトウェア方法の実現が関係する。更に、一実施例では、ワンダリング・スレッドをサポートするプラットフォームは、ＲＰＣ機構を起動するためにＣ及び／又はアセンブラ・レベルの命令からコール可能なアプリケーション・プログラミング・インタフェースを提供するよう構成される。
【０２０４】
例示的な実現形態によれば、本願の手法の種々の実施例の値は、ベリログ及びＶＨＤＬなどのハードウェア記述言語に基づいて回路シミュレーションの挙動を観測することによって理解し得る。前述の記述は極めて並列である一方、種々の定義されたＳＭＰアーキテクチャに伴って、線形的（例えば、Ｎ個のプロセッサの場合、Ｎ倍速くなり、ここで、Ｎは１よりも大きな整数値である）に加速化するものでない。動作がないことは、ほとんど、実現された複数のプロセッサのうちの各プロセッサによって利用される共有メモリ・システムにおけるボトルネックが理由である。更に、キャッシュ・コヒーレンシ問題が理由でコードは確認することが困難であり得、バグは複製することが困難であり得る。更に、キャッシュ・コヒーレンシ問題は、ハードウェア及び電力の点でもコストとなり得る。しかし、本願の手法の種々の実施例によれば、前述の同じシミュレータ・プログラムを使用することが可能であるが、回路を表すシミュレーション・データがどのようにして割り当てられるかを管理することにより、実際の物理的な回路がモデリングされている場合のように、近傍のシミュレーション間の通信を局所化することを確実にし得る。
【０２０５】
大規模集積回路がシリコン基板上に配置されており、各タイルが、それ自身の処理を行い、そのエッジに沿ってのみ、その近傍と通信する。タイルと同様にシミュレーションにおいてＰＵにメモリを割り当てることにより、境界通信が同様に局所化され、シミュレーションの非近傍部分が干渉しない。信号値変更を通信するためにＰＵ上に作成されたスレッドは、他のＰＵに「ワンダリングする」ように（例えば、インジェクトされたコードによって）フォークされ、デタッチされ、完了すると消され、それにより、ソースＰＵが他の作業を自由に行う状態にしておく。
【０２０６】
更に、例示的な一実現形態に従えば、コンパイル済コードのシミュレータ（例えば、ＶＣＳ（登録商標）は、構成部分について各種用途を有する大規模回路が一般に、比較的大規模のプログラムを生成し、ランダムにアクセスされる大規模のプログラム・コードが、より多く、命令フェッチ時にキャッシュをミスしがちであるように回路に特有である。個々のＰＵ上の種々のデータが、割り当てられたデータ・タイプの許容可能な範囲によって規定される限り、対応するコード自体は最小になり、ミス・レートは低くなる。
【０２０７】
更に、ハードウェア・シミュレーション及びデータベース・サーチが関係するアプリケーションの場合の特定の問題は、例えば、システム内のデータがプログラムの寿命の間にあまり変化しない場合に「データ・スタティック」問題と表し得るが、種々のオペレーションは、予測可能でないパターンでデータに対する処理（修正など）を行い、キャッシュ性能を劣悪にし、メモリ・アクセスに対する競合をもたらし得る。本願手法の実施例によるＰＵアーキテクチャは、前述の「データ・スタティク」問題を避けるよう構成される。ＰＵ間通信は共有バス経由でなく、ＰＵは、キャッシュの使用を、処理するデータ（作業データはＰＵに対して局所にある）を扱うために利用するコードに自動的に制限する。そういうものとして、信頼できるデータ配布システムが確立されると、比較的効率的なやり方で行うよう暗黙的に構成される。
【０２０８】
例示的な実現形態では、ＤＰＡ上のコード実行に対するワンダリング・スレッド手法は、構造化された、又は構造化されていないデータベース内をアプリケーションがサーチする場合などに大量のスタティック・データに関する作業に特に適している。スレッドがデータベース内の情報を識別し、又はルックアップするよう構成される例を考えてみる。このスレッドは、インデクス・コードを介して、更に、データ自体を介して進むにつれ、複数のＰＵを介してワンダリングし、データ内のターゲットに当たるにつれ、発信側のＰＵにコードが書き戻される。複数の要求を同時に、干渉があまりない状態で扱うことが可能であり、処理するとボトルネック（例えば、インデクス内で生じ得るものなど）がある場合、潜在的なターゲットから、任意のＰＵ、又は充填がより少ないＰＵを選ぶためにＲＰＣ選択手法を使用して、同じアドレス空間を処理するようトランスペアレントに割り当てることが可能である。
【０２０９】
本明細書及び特許請求の範囲記載の種々の実施例には、結果を実現するための一連の特定の工程、動作、又はオペレーションが関係するが、前述の構成、動作、又はオペレーションは、いくつかの例示的な実現形態に応じて行い得る種々の工程、動作、又はオペレーションの例である。実際に、本明細書及び特許請求の範囲記載の実施例は、記載された工程、動作、又はオペレーションの変形などの種々の他の工程、動作、又はオペレーションが行われるように構成し得る。更に、本明細書及び特許請求の範囲記載の工程は、提示された順序と異なる順序で行い得、工程の全てが必ずしも、特定の実施例において行われる訳でない。
【０２１０】
例示的な概要概念
上記記載は、少なくとも以下の概念を提示している。
【０２１１】
概念０  通信するよう、互いに関連付けられ、若しくは結合され、又は互いに接続された複数の処理装置（ＰＵ）を含む並列処理マシンであって、複数のＰＵはそれぞれ、局所メモリを有し、複数のＰＵは、命令に関連付けられたメモリ内のデータ又はコードの場所に基づいて別のＰＵに命令の実行を渡すか、又は、命令を実行するよう構成される並列処理マシン。
【０２１２】
概念１  実行されると、コンピュータ・システムに、処理リソース割り当ての方法を行わせる命令の組を記憶するコンピュータ読み取り可能な媒体であって、前記方法は、
予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程と、
前記予め選択されたデータ場所に基づいて第１の処理装置（ＰＵ）から第２のＰＵに前記命令のコールを転送するか否かを判定する工程と
を含むコンピュータ読み取り可能な媒体。
【０２１３】
概念２  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第１のＰＵに関連付けられたキャッシュ・メモリ装置を選択する工程と、
前記命令を前記キャッシュ・メモリ装置にロードする工程と、
前記命令に関連付けられた境界において、前記キャッシュ・メモリ装置に、余分なコードの組をインジェクトする工程であって、前記命令がターゲット命令であり、前記余分なコードの組は、前記コールを特定のＰＵに転送するか否かを前記第１のＰＵが判定することを可能にするよう構成された工程と
を含むコンピュータ読み取り可能な媒体。
【０２１４】
概念３  概念２記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
予め選択された１つ又は複数の実行可能なルーチンそれぞれに対応する１つ又は複数の実行可能なルーチン名を識別する工程と、
前記１つ又は複数の実行可能なルーチン名に基づいて、前記余分なコードの組を選択して、参照渡しコールから値渡しコールに前記コールを変換する工程と
を含むコンピュータ読み取り可能な媒体。
【０２１５】
概念４  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１のキャッシュ・メモリ装置及び第２のキャッシュ・メモリ装置を識別する工程と、
第１のデータの組及び第２のデータの組それぞれに関連付けられた第１のデータ場所及び第２のデータ場所を識別する工程であって、前記第１のデータ場所及び前記第２のデータ場所は前記第１のキャッシュ・メモリ装置内及び前記第２のキャッシュ・メモリ装置内それぞれに配置される工程と、
前記第１のデータ場所及び前記第２のデータ場所に基づいて前記第１のデータの組及び前記第２のデータの組それぞれに対する前記第１のキャッシュ・メモリ装置及び前記第２のキャッシュ・メモリ装置の割り当てを行う工程と
を含むコンピュータ読み取り可能な媒体。
【０２１６】
概念５  概念４記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令にマッピングされたデータの組を識別する工程と、
前記第１のキャッシュ・メモリ装置でなく前記第２のキャッシュ・メモリ装置に前記データの組が現在記憶されていることを判定して、それにより、前記第１のＰＵから前記第２のＰＵに前記コールを転送することを決定する工程と
を含むコンピュータ読み取り可能な媒体。
【０２１７】
概念６  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１のキャッシュ・メモリ装置及び第２のキャッシュ・メモリ装置を識別する工程と、
前記第１のＰＵにより、前記コールにアクセスする工程であって、前記コールは、前記予め選択されたデータ場所に前記命令がマッピングされている旨を示す引数を含む工程と、
前記第１のＰＵによって前記引数を解析して、前記予め選択されたデータ場所が前記第１のキャッシュ・メモリ装置内に配置されていない旨の判定を行う工程と、
前記判定に基づいて潜在的なリダイレクト・コールとして前記コールを識別する工程とを含むコンピュータ読み取り可能な媒体。
【０２１８】
概念７  概念６記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記予め選択されたデータ場所が前記第２のキャッシュ・メモリ装置に配置されていない旨を判定し、それにより、前記第１のＰＵにより、前記潜在的なリダイレクト・コールに関連付けられたターゲット・コードを実行することの決定を行う工程と、
前記決定に基づいて前記第１のＰＵにより、前記ターゲット・コードを実行する工程と
を含むコンピュータ読み取り可能な媒体。
【０２１９】
概念８  概念６記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記予め選択されたデータ場所が前記第２のキャッシュ・メモリ装置内に配置されていることを判定して、それにより、前記潜在的なリダイレクト・コールを実際のリダイレクト・コールとして識別する工程と、
前記第１のＰＵから前記第２のＰＵに前記実際のリダイレクト・コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
【０２２０】
概念９  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられたコード又はデータ・メモリ場所を識別する工程と、
前記第２のＰＵに関連付けられた前記コード又はデータ・メモリ場所に基づいて前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
【０２２１】
概念１０  概念９記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記コード又はデータ・メモリ場所が前記第２のＰＵ及び複数の他のＰＵに関連付けられていることを判定する工程と、
前記第２のＰＵに対応する現在利用可能な処理機能を反映する数値測定を定義する工程と、
複数の他の現在利用可能な処理機能それぞれを反映する複数の他の数値測定を定義する工程であって、前記複数の他の現在利用可能な処理機能は前記複数の他のＰＵそれぞれに対応する工程と、
前記数値測定が前記他の数値測定それぞれよりも大きいことに基づいて前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
【０２２２】
概念１１  概念９記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
特定のリソースを選択する工程と、
前記第２のＰＵに割り当てられている前記特定のリソースの制御の度合いに基づき、前記特定のリソースへのアクセスを前記第１のＰＵが欠いていることに基づき、かつ、前記特定のリソースへのアクセスを１つ又は複数の他のＰＵが欠いていることに基づいて前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
【０２２３】
概念１２  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令を記憶させた共有ランダム・メモリ（ＲＡＭ）装置を選択する工程と、
前記共有ＲＡＭ装置のセクタをリダイレクト・セクタとして識別する工程と、
前記命令が前記リダイレクト・セクタに記憶されているか否かを判定して、それにより、前記第１のＰＵから前記第２のＰＵに前記コールを転送するか否かを判定する工程と
を含むコンピュータ読み取り可能な媒体。
【０２２４】
概念１３  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
共有ＲＡＭ装置を選択する工程と、
前記共有ＲＡＭ装置の１つ又は複数のセクタを１つ又は複数のリダイレクト・セクタそれぞれとして識別する工程と、
前記命令を含むプログラムを識別する工程と、
前記プログラムに対応するスタティック・コードにアクセスする工程と、
前記スタティック・コードのサイズに基づいて前記１つ又は複数のリダイレクト・セクタの全体としてのサイズを定義することにより、前記共有ＲＡＭ装置をパーティショニングする工程と、
前記パーティショニング及びＰＵ仕様に基づいて前記１つ又は複数のリダイレクト・セクタのうちの１つ又は複数のリダイレクト・セクタに前記スタティック・コードの量をロードする工程と
を含むコンピュータ読み取り可能な媒体。
【０２２５】
概念１４  概念１３記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記共有ＲＡＭ装置の１つ又は複数の別々のセクタを１つ又は複数の非リダイレクト・セクタそれぞれとして識別する工程と、
前記プログラムに対応する少なくとも１つの共有ライブラリの１つ又は複数の部分にアクセスする工程と、
前記少なくとも１つの共有ライブラリの１つ又は複数の部分及び前記スタティック・コードの全体としてのサイズに基づいて前記１つ又は複数のリダイレクト・セクタの前記全体としてのサイズを定義することにより、前記共有ＲＡＭ装置をプロポーショニングする工程と、
前記プロポーショニング及び前記ＰＵ仕様に基づいて前記１つ又は複数の非リダイレクト・セクタのうちの１つ又は複数の選択された非リダイレクト・セクタに、又は前記１つ又は複数のリダイレクト・セクタのうちの１つ又は複数の選択されたリダイレクト・セクタに前記スタティック・コードの１つ又は複数の部分をロードする工程、及び／又は、
前記プロポーショニング及び前記ＰＵ仕様に基づいて前記１つ又は複数の非リダイレクト・セクタのうちの１つ又は複数の選択された非リダイレクト・セクタに、又は１つ又は複数のリダイレクト・セクタのうちの１つ又は複数の選択されたリダイレクト・セクタに前記少なくとも１つの共有ライブラリの前記１つ又は複数の部分をロードする工程と
を含むコンピュータ読み取り可能な媒体。
【０２２６】
概念１５  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第１のＰＵに関連付けられたキャッシュ・メモリ装置を選択する工程と、
前記命令に関連付けられたコード又はデータを前記キャッシュ・メモリ装置にフェッチする工程と、
前記第１のＰＵに関連付けられたＰＵデータ・パスを識別する工程と、
前記ＰＵデータ・パス内のシャドー・レジスタ値を、前記コード又はデータに関連付けられた少なくとも１つのＰＵを示すＰＵ識別子を前記シャドー・レジスタ値が反映するように規定する工程と
を含むコンピュータ読み取り可能な媒体。
【０２２７】
概念１６  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられたコードを識別する工程と、
少なくとも１つの共有メモリ・コヒーレンス・マシン命令を含む実行可能なルーチンを識別する工程と、
前記実行可能なルーチンが前記第２のＰＵに関連付けられていることに基づき、かつ、前記コードが、前記少なくとも１つの共有メモリ・コヒーレンス・マシン命令にマッピングされていることに基づき、前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
【０２２８】
概念１７  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられた大域メモリ場所を識別する工程と、
第３のＰＵから前記第１のＰＵへ前記コールを自動的に、前記第３のＰＵが前記大域メモリ場所へのアクセスを欠いていること、及び前記第１のＰＵが前記大域メモリ場所へのアクセスを有していることの結果として転送する工程と
を含むコンピュータ読み取り可能な媒体。
【０２２９】
概念１８  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
特定のＰＵに関連付けられたキャッシュ・メモリ装置を識別する工程と、
前記予め選択されたデータ場所が前記キャッシュ・メモリ装置内に配置されていることに基づいて前記データに関連付けられた特定のデータ・タイプに対する前記キャッシュ・メモリ装置の割り当てを行う工程と、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程と、
前記プログラミング言語に対応するライブラリにアクセスする工程であって、前記ライブラリは、メモリ割り当てコールを含むコンストラクタを規定し、前記メモリ割り当てコールは前記特定のデータ・タイプを有する情報にマッピングされる工程と、
前記割り当てに基づいて、前記メモリ割り当てコールに対する修正を実現して、それにより、前記プログラムの修正バージョン及び修正メモリ割り当てコールを作成する工程と、前記修正の結果として前記情報が前記キャッシュ・メモリ装置にロードされるように、前記修正されたメモリ割り当てコールを行う工程と
を含むコンピュータ読み取り可能な媒体。
【０２３０】
概念１９  概念１８記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記コールを行って、それにより、前記割り当ての結果として前記特定のＰＵにより、前記プログラムの前記修正バージョンを実行する工程と
を含むコンピュータ読み取り可能な媒体。
【０２３１】
概念２０  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
１つ又は複数のコード・ライブラリを識別する工程と、
前記１つ又は複数のコード・ライブラリに関連付けられた参照渡しソース・コードにアクセスする工程と、前記参照渡しソース・コードを値渡しサポート・コードに変換して、それにより、転送ライブラリを生成する工程と、前記転送ライブラリを利用して、前記データの参照渡しでなく、値渡しを行う工程と
を含むコンピュータ読み取り可能な媒体。
【０２３２】
概念２１  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記コール内の１つ又は複数のポインタを識別する工程と、
前記１つ又は複数のポインタを変換して、それにより、前記データの参照渡しでなく値渡しを行うよう前記コールを構成する工程と、
前記第１のＰＵから前記第２のＰＵへの前記コールの転送を実行する工程と、
前記転送中に前記データの値渡しを行って、それにより、前記データの局所の複製を第１のキャッシュ・メモリ装置に記憶する工程であって、前記第２のＰＵが前記第１のキャッシュ・メモリ装置を含む工程と、
前記１つ又は複数のプリンタを前記局所の複製にリマッピングして、それにより、第２のキャッシュ・メモリ装置にアクセスすることなく、前記コールを実行することを可能にする工程であって、前記第１のＰＵが、前記第２のキャッシュ・メモリ装置を含む工程と
を含むコンピュータ読み取り可能な媒体。
【０２３３】
概念２２  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
遠隔プロシージャ・コール（ＲＰＣ）を起動させて、それにより、前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程を含むコンピュータ読み取り可能な媒体。
【０２３４】
概念２３  概念２２記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１の局所メモリ・マップ及び第２の局所メモリ・マップを識別する工程と、
前記第１の局所メモリ・マップと前記第２の局所メモリ・マップとの間の区別を識別する工程と、
前記区別に基づいてメモリ・アドレス変換を生成する工程と、
前記メモリ・アドレス変換を利用して前記ＲＰＣを構成する工程と
を含むコンピュータ読み取り可能な媒体。
【０２３５】
概念２４  概念２２記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１のキャッシュ・メモリ装置及び第２のキャッシュ・メモリ装置を識別する工程と、
前記第１のキャッシュ・メモリに記憶され、前記命令に関連付けられたデータ値を識別する工程と、
前記ＲＰＣの結果として前記第２のキャッシュ・メモリ装置に前記データ値を記憶する工程とを含むコンピュータ読み取り可能な媒体。
【０２３６】
概念２５  概念２４記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第２のキャッシュ・メモリに前記データ値が記憶されるまで前記第２のＰＵによる前記コールの実行を遅延させる工程とを含むコンピュータ読み取り可能な媒体。
【０２３７】
概念２６  概念２２記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
制御の第１のスレッドに関連付けられた実行可能なルーチン及び前記命令を含むプログラムにアクセスする工程と、
前記コール内の１つ又は複数のポインタを識別する工程と、
前記１つ又は複数のポインタを変換して、前記データの参照渡しでなく値渡しを行うよう前記コールを構成して、それにより、制御の第２のスレッドを作成する工程と、
前記第２のＰＵに関連付けられたキャッシュ・メモリ装置を識別する工程と、
前記ＲＰＣの結果として前記データの値渡しを行って、それにより、前記データの局所の複製を前記キャッシュ・メモリ装置に記憶し、前記第２のＰＵに前記制御の第２のスレッドを供給する工程と、
前記制御の第１のスレッドが前記制御の第２のスレッドと無関係であることの結果として、前記第２のＰＵが前記命令の実行を前記制御の第２のスレッドに基づいて行う一方で、前記制御の第１のスレッドに基づいて前記第１のＰＵにより、前記実行可能なルーチンを行う工程であって、前記実行可能なルーチンが、前記実行中に生成されたデータ値に対するリターン要求を欠いている工程と
を含むコンピュータ読み取り可能な媒体。
【０２３８】
概念２７  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記データにマッピングされた第１の実行可能なルーチンを行う第１のプロセッシング・コアを識別する工程であって、前記第１の実行可能なルーチンは共有メモリ・コヒーレンス・マシン命令を含む工程と、
第２のプロセッシング・コアにおいて第２の実行可能なルーチンにアクセスする工程と、
プロシージャ・コールを起動して、それにより、前記第２の実行可能なルーチンが前記データにマッピングされていることに基づき、かつ、前記共有メモリ・コヒーレンス・マシン命令を含む前記第２の実行可能なルーチンに基づき、前記第２のプロセッシング・コアから前記第１のプロセッシング・コアに前記第２の実行可能なルーチンを転送する工程と
を含むコンピュータ読み取り可能な媒体。
【０２３９】
概念２８  概念２７記載のコンピュータ読み取り可能な媒体であって、別々のＰＵは、前記第１のプロセッシング・コア及び前記第２のプロセッシング・コアそれぞれを含み、前記プロシージャ・コールがＲＰＣであるコンピュータ読み取り可能な媒体。
【０２４０】
概念２９  概念２７記載のコンピュータ読み取り可能な媒体であって、単一のＰＵは、前記第１のプロセッシング・コア及び前記第２のプロセッシング・コアを何れも含み、前記プロシージャ・コールがＲＰＣであるコンピュータ読み取り可能な媒体。
【０２４１】
概念３０  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、１つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記ＶＦＴにマッピングされた１つ又は複数のＶＦＴポインタを含むように仮想関数テーブル（ＶＦＴ）を実現するよう前記プログラミング言語が構成される工程と、
前記プログラミング言語に関連付けられたコンストラクタを識別する工程であって、前記コンストラクタは前記１つ又は複数のＶＦＴポインタを規定するよう構成される工程と、
前記プログラムのロード中に前記コンストラクタ周りにラッパ・コールをインジェクトして、それにより、前記１つ又は複数の仮想関数に対する１つ又は複数のＲＰＣ決定ラッパを含む、ＶＦＴへのポインタで、前記１つ又は複数のＶＦＴポインタを置き換える工程と
を含むコンピュータ読み取り可能な媒体。
【０２４２】
概念３１  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、１つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記ＶＦＴにマッピングされた１つ又は複数のＶＦＴポインタを含むようにＶＦＴを実現するよう前記プログラミング言語が構成される工程と、
ＲＰＣ決定コードがコールされることなく、前記１つ又は複数の仮想関数が１つ又は複数のＲＰＣそれぞれに自動的に誘導されるように複数のＲＰＣの実現の結果として前記ＶＦＴを修正する工程とを含むコンピュータ読み取り可能な媒体。
【０２４３】
概念３２  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、１つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記ＶＦＴにマッピングされた１つ又は複数のＶＦＴポインタを含むようにＶＦＴを実現するよう前記プログラミング言語が構成される工程と、
ＲＰＣ決定コードがコールされることなく、前記１つ又は複数の仮想関数が前記プログラムに関連付けられた局所コードに自動的に誘導されるように１つ又は複数のＲＰＣの実現がないことの結果として前記ＶＦＴを修正する工程とを含むコンピュータ読み取り可能な媒体。
【０２４４】
概念３３  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
複数の条件分岐にマッピングされたコードを含む前記命令の予め定義されたバージョンにアクセスする工程と、
前記命令の複数の修正バージョンを生成する工程であって、前記修正バージョンはそれぞれ、前記複数の条件分岐のうちの別の条件分岐をたどるよう修正されたコードを含む工程と、
前記複数の修正バージョンそれぞれに関連付けられた複数の挙動を予測する工程と、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
前記実行可能なルーチンに関連付けられたランタイム挙動を識別する工程と、
前記ランタイム挙動に対応する前記修正バージョンの予測された挙動に基づいて前記実行可能なルーチンの動作中の実行のために前記複数の修正バージョンのうちの修正バージョンを選択する工程と
を含むコンピュータ読み取り可能な媒体。
【０２４５】
概念３４  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
仮想関数の第１の実現形態及び第２の実現形態を識別する工程であって、前記仮想関数は前記第１の実現形態を指し示すＶＦＴエントリを含み、前記仮想関数は更に、複数のＶＦＴのうちの第１のＶＦＴにマッピングされたＶＦＴポインタを含む工程と、
前記第１の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
前記動作中の前記第１の実現形態によって表される分岐挙動を識別する工程と、
前記分岐挙動の動作解析を行って、それにより、前記第２の実現形態が前記分岐挙動に対応する度合いが、前記第１の実現形態が前記分岐挙動に対応する度合いよりも大きいことを判定する工程と、
前記動作解析に基づいて前記複数のＶＦＴのうちの第２のＶＦＴに前記ＶＦＴポインタをリマッピングする工程であって、前記第２のＶＦＴが、前記第２の実現形態にマッピングされたポインタを含む工程、又は、
前記動作解析に基づいて前記第２の実現形態を指し示すよう前記ＶＦＴエントリを更新する工程と
を含むコンピュータ読み取り可能な媒体。
【０２４６】
概念３５  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられたプログラムにアクセスする工程であって、前記プログラムは、予め定義されたコール・サイトにマッピングされた予め定義された関数を含む工程と、
前記予め定義されたコール・サイトにより、前記予め定義された関数のコールを行う工程と、
前記コールの結果として、前記予め定義された関数によって表される分岐挙動を識別する工程と、
前記分岐挙動に基づいて、前記予め定義されたコール・サイトを修正する工程と
を含むコンピュータ読み取り可能な媒体。
【０２４７】
概念３６  概念１記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
仮想関数の第１の実現形態及び第２の実現形態を識別する工程であって、前記仮想関数は前記第１の実現形態を指し示すＶＦＴエントリを含み、前記仮想関数は更に、複数のＶＦＴのうちの第１のＶＦＴにマッピングされたＶＦＴポインタを更に含む工程と、
前記第１の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
前記動作中の前記第１の実現形態によって表される分岐挙動を識別する工程と、
前記分岐挙動に基づいて前記仮想関数の考えられる将来の挙動を予測する工程と、
前記考えられる将来の挙動の動作解析を行って、それにより、前記第２の実現形態が前記考えられる将来の挙動に対応する度合いが、前記第１の実現形態が前記考えられる将来の挙動に対応する度合いよりも大きいことを判定する工程と、
前記動作解析に基づいて前記複数のＶＦＴのうちの第２のＶＦＴに前記ＶＦＴポインタをリマッピングする工程であって、前記第２のＶＦＴが、前記第２の実現形態にマッピングされたポインタを含む工程、又は、
前記動作解析に基づいて前記第２の実現形態を指し示すよう前記ＶＦＴエントリを更新する工程とを含むコンピュータ読み取り可能な媒体。
【０２４８】
概念３７  処理リソース割り当て方法であって、
予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程と、
前記予め選択されたデータ場所に基づいて第１の処理装置（ＰＵ）から第２のＰＵに前記命令のコールを転送するか否かを判定する工程と
を含む処理リソース割り当て方法。
【０２４９】
概念３８  概念３７記載の処理リソース割り当て方法であって、更に、
前記第１のＰＵに関連付けられたキャッシュ・メモリ装置を選択する工程と、
前記命令を前記キャッシュ・メモリ装置にロードする工程と、
前記命令に関連付けられた境界において、前記キャッシュ・メモリ装置に、余分なコードの組をインジェクトする工程であって、前記命令がターゲット命令であり、前記余分なコードの組は、前記コールを特定のＰＵに転送するか否かを前記第１のＰＵが判定することを可能にするよう構成された工程と
を含む処理リソース割り当て方法。
【０２５０】
概念３９  概念３８記載の処理リソース割り当て方法であって、更に、
予め選択された１つ又は複数の実行可能なルーチンそれぞれに対応する１つ又は複数の実行可能なルーチン名を識別する工程と、
前記１つ又は複数の実行可能なルーチン名に基づいて、前記余分なコードの組を選択して、参照渡しコールから値渡しコールに前記コールを変換する工程と
を含む処理リソース割り当て方法。
【０２５１】
概念４０  概念３７記載の処理リソース割り当て方法であって、更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１のキャッシュ・メモリ装置及び第２のキャッシュ・メモリ装置を識別する工程と、
第１のデータの組及び第２のデータの組それぞれに関連付けられた第１のデータ場所及び第２のデータ場所を識別する工程であって、前記第１のデータ場所及び前記第２のデータ場所は前記第１のキャッシュ・メモリ装置内及び前記第２のキャッシュ・メモリ装置内それぞれに配置される工程と、
前記第１のデータ場所及び前記第２のデータ場所に基づいて前記第１のデータの組及び前記第２のデータの組それぞれに対する前記第１のキャッシュ・メモリ装置及び前記第２のキャッシュ・メモリ装置の割り当てを行う工程と
を含む処理リソース割り当て方法。
【０２５２】
概念４１  概念４０記載の処理リソース割り当て方法であって、更に、
前記命令にマッピングされたデータの組を識別する工程と、
前記第１のキャッシュ・メモリ装置でなく前記第２のキャッシュ・メモリ装置に前記データの組が現在記憶されていることを判定して、それにより、前記第１のＰＵから前記第２のＰＵに前記コールを転送することを決定する工程と
を含む処理リソース割り当て方法。
【０２５３】
概念４２  概念３７記載の処理リソース割り当て方法であって、更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１のキャッシュ・メモリ装置及び第２のキャッシュ・メモリ装置を識別する工程と、
前記第１のＰＵにより、前記コールにアクセスする工程であって、前記コールは、前記予め選択されたデータ場所に前記命令がマッピングされている旨を示す引数を含む工程と、
前記第１のＰＵによって前記引数を解析して、前記予め選択されたデータ場所が前記第１のキャッシュ・メモリ装置内に配置されていない旨の判定を行う工程と、
前記判定に基づいて潜在的なリダイレクト・コールとして前記コールを識別する工程とを含む処理リソース割り当て方法。
【０２５４】
概念４３  概念４２記載の処理リソース割り当て方法であって、更に、
前記予め選択されたデータ場所が前記第２のキャッシュ・メモリ装置に配置されていない旨を判定し、それにより、前記第１のＰＵにより、前記潜在的なリダイレクト・コールに関連付けられたターゲット・コードを実行することの決定を行う工程と、
前記決定に基づいて前記第１のＰＵにより、前記ターゲット・コードを実行する工程と
を含む処理リソース割り当て方法。
【０２５５】
概念４４  概念４２記載の処理リソース割り当て方法であって、更に、
前記予め選択されたデータ場所が前記第２のキャッシュ・メモリ装置内に配置されていることを判定して、それにより、前記潜在的なリダイレクト・コールを実際のリダイレクト・コールとして識別する工程と、
前記第１のＰＵから前記第２のＰＵに前記実際のリダイレクト・コールを転送する工程と
を含む処理リソース割り当て方法。
【０２５６】
概念４５  概念３７記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられたコード又はデータ・メモリ場所を識別する工程と、
前記第２のＰＵに関連付けられた前記コード又はデータ・メモリ場所に基づいて前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含む処理リソース割り当て方法。
【０２５７】
概念４６  概念４５記載の処理リソース割り当て方法であって、更に、
前記コード又はデータ・メモリ場所が前記第２のＰＵ及び複数の他のＰＵに関連付けられていることを判定する工程と、
前記第２のＰＵに対応する現在利用可能な処理機能を反映する数値測定を定義する工程と、
複数の他の現在利用可能な処理機能それぞれを反映する複数の他の数値測定を定義する工程であって、前記複数の他の現在利用可能な処理機能は前記複数の他のＰＵそれぞれに対応する工程と、
前記数値測定が前記他の数値測定それぞれよりも大きいことに基づいて前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含む処理リソース割り当て方法。
【０２５８】
概念４７  概念４５記載の処理リソース割り当て方法であって、更に、
特定のリソースを選択する工程と、
前記第２のＰＵに割り当てられている前記特定のリソースの制御の度合いに基づき、前記特定のリソースへのアクセスを前記第１のＰＵが欠いていることに基づき、かつ、前記特定のリソースへのアクセスを１つ又は複数の他のＰＵが欠いていることに基づいて前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含む処理リソース割り当て方法。
【０２５９】
概念４８  概念３７記載の処理リソース割り当て方法であって、更に、
前記命令を記憶させた共有ランダム・メモリ（ＲＡＭ）装置を選択する工程と、
前記共有ＲＡＭ装置のセクタをリダイレクト・セクタとして識別する工程と、
前記命令が前記リダイレクト・セクタに記憶されているか否かを判定して、それにより、前記第１のＰＵから前記第２のＰＵに前記コールを転送するか否かを判定する工程と
を含む処理リソース割り当て方法。
【０２６０】
概念４９  概念３７記載の処理リソース割り当て方法であって、更に、
共有ＲＡＭ装置を選択する工程と、
前記共有ＲＡＭ装置の１つ又は複数のセクタを１つ又は複数のリダイレクト・セクタそれぞれとして識別する工程と、
前記命令を含むプログラムを識別する工程と、
前記プログラムに対応するスタティック・コードにアクセスする工程と、
前記スタティック・コードのサイズに基づいて前記１つ又は複数のリダイレクト・セクタの全体としてのサイズを定義することにより、前記共有ＲＡＭ装置をパーティショニングする工程と、
前記パーティショニング及びＰＵ仕様に基づいて前記１つ又は複数のリダイレクト・セクタのうちの１つ又は複数のリダイレクト・セクタに前記スタティック・コードの量をロードする工程と
を含む処理リソース割り当て方法。
【０２６１】
概念５０  概念４９記載の処理リソース割り当て方法であって、更に、
前記共有ＲＡＭ装置の１つ又は複数の別々のセクタを１つ又は複数の非リダイレクト・セクタそれぞれとして識別する工程と、
前記プログラムに対応する少なくとも１つの共有ライブラリの１つ又は複数の部分にアクセスする工程と、
前記少なくとも１つの共有ライブラリの１つ又は複数の部分及び前記スタティック・コードの全体としてのサイズに基づいて前記１つ又は複数のリダイレクト・セクタの前記全体としてのサイズを定義することにより、前記共有ＲＡＭ装置をプロポーショニングする工程と、
前記プロポーショニング及び前記ＰＵ仕様に基づいて前記１つ又は複数の非リダイレクト・セクタのうちの１つ又は複数の選択された非リダイレクト・セクタに、又は前記１つ又は複数のリダイレクト・セクタのうちの１つ又は複数の選択されたリダイレクト・セクタに前記スタティック・コードの１つ又は複数の部分をロードする工程、及び／又は、
前記プロポーショニング及び前記ＰＵ仕様に基づいて前記１つ又は複数の非リダイレクト・セクタのうちの１つ又は複数の選択された非リダイレクト・セクタに、又は１つ又は複数のリダイレクト・セクタのうちの１つ又は複数の選択されたリダイレクト・セクタに前記少なくとも１つの共有ライブラリの前記１つ又は複数の部分をロードする工程と
を含む処理リソース割り当て方法。
【０２６２】
概念５１  概念３７記載の処理リソース割り当て方法であって、更に、
前記第１のＰＵに関連付けられたキャッシュ・メモリ装置を選択する工程と、
前記命令に関連付けられたコード又はデータを前記キャッシュ・メモリ装置にフェッチする工程と、
前記第１のＰＵに関連付けられたＰＵデータ・パスを識別する工程と、
前記ＰＵデータ・パス内のシャドー・レジスタ値を、前記コード又はデータに関連付けられた少なくとも１つのＰＵを示すＰＵ識別子を前記シャドー・レジスタ値が反映するように規定する工程と
を含む処理リソース割り当て方法。
【０２６３】
概念５２  概念３７記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられたコードを識別する工程と、
少なくとも１つの共有メモリ・コヒーレンス・マシン命令を含む実行可能なルーチンを識別する工程と、
前記実行可能なルーチンが前記第２のＰＵに関連付けられていることに基づき、かつ、前記コードが、前記少なくとも１つの共有メモリ・コヒーレンス・マシン命令にマッピングされていることに基づき、前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程と
を含む処理リソース割り当て方法。
【０２６４】
概念５３  概念３７記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられた大域メモリ場所を識別する工程と、
第３のＰＵから前記第１のＰＵへ前記コールを自動的に、前記第３のＰＵが前記大域メモリ場所へのアクセスを欠いていること、及び前記第１のＰＵが前記大域メモリ場所へのアクセスを有していることの結果として転送する工程と
を含む処理リソース割り当て方法。
【０２６５】
概念５４  概念３７記載の処理リソース割り当て方法であって、更に、
特定のＰＵに関連付けられたキャッシュ・メモリ装置を識別する工程と、
前記予め選択されたデータ場所が前記キャッシュ・メモリ装置内に配置されていることに基づいて前記データに関連付けられた特定のデータ・タイプに対する前記キャッシュ・メモリ装置の割り当てを行う工程と、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程と、
前記プログラミング言語に対応するライブラリにアクセスする工程であって、前記ライブラリは、メモリ割り当てコールを含むコンストラクタを規定し、前記メモリ割り当てコールは前記特定のデータ・タイプを有する情報にマッピングされる工程と、
前記割り当てに基づいて、前記メモリ割り当てコールに対する修正を実現して、それにより、前記プログラムの修正バージョン及び修正メモリ割り当てコールを作成する工程と、前記修正の結果として前記情報が前記キャッシュ・メモリ装置にロードされるように、前記修正されたメモリ割り当てコールを行う工程と
を含む処理リソース割り当て方法。
【０２６６】
概念５５  概念５４記載の処理リソース割り当て方法であって、更に、
前記コールを行って、それにより、前記割り当ての結果として前記特定のＰＵにより、前記プログラムの前記修正バージョンを実行する工程と
を含む処理リソース割り当て方法。
【０２６７】
概念５６  概念３７記載の処理リソース割り当て方法であって、更に、
１つ又は複数のコード・ライブラリを識別する工程と、
前記１つ又は複数のコード・ライブラリに関連付けられた参照渡しソース・コードにアクセスする工程と、前記参照渡しソース・コードを値渡しサポート・コードに変換して、それにより、転送ライブラリを生成する工程と、前記転送ライブラリを利用して、前記データの参照渡しでなく、値渡しを行う工程と
を含む処理リソース割り当て方法。
【０２６８】
概念５７  概念３７記載の処理リソース割り当て方法であって、更に、
前記コール内の１つ又は複数のポインタを識別する工程と、
前記１つ又は複数のポインタを変換して、それにより、前記データの参照渡しでなく値渡しを行うよう前記コールを構成する工程と、
前記第１のＰＵから前記第２のＰＵへの前記コールの転送を実行する工程と、
前記転送中に前記データの値渡しを行って、それにより、前記データの局所の複製を第１のキャッシュ・メモリ装置に記憶する工程であって、前記第２のＰＵが前記第１のキャッシュ・メモリ装置を含む工程と、
前記１つ又は複数のプリンタを前記局所の複製にリマッピングして、それにより、第２のキャッシュ・メモリ装置にアクセスすることなく、前記コールを実行することを可能にする工程であって、前記第１のＰＵが、前記第２のキャッシュ・メモリ装置を含む工程と
を含む処理リソース割り当て方法。
【０２６９】
概念５８  概念３７記載の処理リソース割り当て方法であって、更に、
遠隔プロシージャ・コール（ＲＰＣ）を起動させて、それにより、前記第１のＰＵから前記第２のＰＵに前記コールを転送する工程を含む処理リソース割り当て方法。
【０２７０】
概念５９  概念３８記載の処理リソース割り当て方法であって、更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１の局所メモリ・マップ及び第２の局所メモリ・マップを識別する工程と、
前記第１の局所メモリ・マップと前記第２の局所メモリ・マップとの間の区別を識別する工程と、
前記区別に基づいてメモリ・アドレス変換を生成する工程と、
前記メモリ・アドレス変換を利用して前記ＲＰＣを構成する工程と
を含む処理リソース割り当て方法。
【０２７１】
概念６０  概念５８記載の処理リソース割り当て方法であって、更に、
前記第１のＰＵ及び前記第２のＰＵそれぞれに関連付けられた第１のキャッシュ・メモリ装置及び第２のキャッシュ・メモリ装置を識別する工程と、
前記第１のキャッシュ・メモリに記憶され、前記命令に関連付けられたデータ値を識別する工程と、
前記ＲＰＣの結果として前記第２のキャッシュ・メモリ装置に前記データ値を記憶する工程とを含む処理リソース割り当て方法。
【０２７２】
概念６１  概念６０記載の処理リソース割り当て方法であって、更に、
前記第２のキャッシュ・メモリに前記データ値が記憶されるまで前記第２のＰＵによる前記コールの実行を遅延させる工程とを含む処理リソース割り当て方法。
【０２７３】
概念６２  概念５８記載の処理リソース割り当て方法であって、更に、
制御の第１のスレッドに関連付けられた実行可能なルーチン及び前記命令を含むプログラムにアクセスする工程と、
前記コール内の１つ又は複数のポインタを識別する工程と、
前記１つ又は複数のポインタを変換して、前記データの参照渡しでなく値渡しを行うよう前記コールを構成して、それにより、制御の第２のスレッドを作成する工程と、
前記第２のＰＵに関連付けられたキャッシュ・メモリ装置を識別する工程と、
前記ＲＰＣの結果として前記データの値渡しを行って、それにより、前記データの局所の複製を前記キャッシュ・メモリ装置に記憶し、前記第２のＰＵに前記制御の第２のスレッドを供給する工程と、
前記制御の第１のスレッドが前記制御の第２のスレッドと無関係であることの結果として、前記第２のＰＵが前記命令の実行を前記制御の第２のスレッドに基づいて行う一方で、前記制御の第１のスレッドに基づいて前記第１のＰＵにより、前記実行可能なルーチンを行う工程であって、前記実行可能なルーチンが、前記実行中に生成されたデータ値に対するリターン要求を欠いている工程と
を含む処理リソース割り当て方法。
【０２７４】
概念６３  概念３７記載の処理リソース割り当て方法であって、更に、
前記データにマッピングされた第１の実行可能なルーチンを行う第１のプロセッシング・コアを識別する工程であって、前記第１の実行可能なルーチンは共有メモリ・コヒーレンス・マシン命令を含む工程と、
第２のプロセッシング・コアにおいて第２の実行可能なルーチンにアクセスする工程と、
プロシージャ・コールを起動して、それにより、前記第２の実行可能なルーチンが前記データにマッピングされていることに基づき、かつ、前記共有メモリ・コヒーレンス・マシン命令を含む前記第２の実行可能なルーチンに基づき、前記第２のプロセッシング・コアから前記第１のプロセッシング・コアに前記第２の実行可能なルーチンを転送する工程と
を含む処理リソース割り当て方法。
【０２７５】
概念６４  概念６３記載の処理リソース割り当て方法であって、別々のＰＵは、前記第１のプロセッシング・コア及び前記第２のプロセッシング・コアそれぞれを含み、前記プロシージャ・コールがＲＰＣである処理リソース割り当て方法。
【０２７６】
概念６５  概念６３記載の処理リソース割り当て方法であって、単一のＰＵは、前記第１のプロセッシング・コア及び前記第２のプロセッシング・コアを何れも含み、前記プロシージャ・コールがＲＰＣである処理リソース割り当て方法。
【０２７７】
概念６６  概念３７記載の処理リソース割り当て方法であって、更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、１つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記ＶＦＴにマッピングされた１つ又は複数のＶＦＴポインタを含むように仮想関数テーブル（ＶＦＴ）を実現するよう前記プログラミング言語が構成される工程と、
前記プログラミング言語に関連付けられたコンストラクタを識別する工程であって、前記コンストラクタは前記１つ又は複数のＶＦＴポインタを規定するよう構成される工程と、
前記プログラムのロード中に前記コンストラクタ周りにラッパ・コールをインジェクトして、それにより、前記１つ又は複数の仮想関数に対する１つ又は複数のＲＰＣ決定ラッパを含む、ＶＦＴへのポインタで、前記１つ又は複数のＶＦＴポインタを置き換える工程と
を含む処理リソース割り当て方法。
【０２７８】
概念６７  概念３７記載の処理リソース割り当て方法であって、更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、１つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記ＶＦＴにマッピングされた１つ又は複数のＶＦＴポインタを含むようにＶＦＴを実現するよう前記プログラミング言語が構成される工程と、
ＲＰＣ決定コードがコールされることなく、前記１つ又は複数の仮想関数が１つ又は複数のＲＰＣそれぞれに自動的に誘導されるように複数のＲＰＣの実現の結果として前記ＶＦＴを修正する工程とを含む処理リソース割り当て方法。
【０２７９】
概念６８  概念３７記載の処理リソース割り当て方法であって、更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、１つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記ＶＦＴにマッピングされた１つ又は複数のＶＦＴポインタを含むようにＶＦＴを実現するよう前記プログラミング言語が構成される工程と、
ＲＰＣ決定コードがコールされることなく、前記１つ又は複数の仮想関数が前記プログラムに関連付けられた局所コードに自動的に誘導されるように１つ又は複数のＲＰＣの実現がないことの結果として前記ＶＦＴを修正する工程とを含む処理リソース割り当て方法。
【０２８０】
概念６９  概念３７記載の処理リソース割り当て方法であって、更に、
複数の条件分岐にマッピングされたコードを含む前記命令の予め定義されたバージョンにアクセスする工程と、
前記命令の複数の修正バージョンを生成する工程であって、前記修正バージョンはそれぞれ、前記複数の条件分岐のうちの別の条件分岐をたどるよう修正されたコードを含む工程と、
前記複数の修正バージョンそれぞれに関連付けられた複数の挙動を予測する工程と、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
前記実行可能なルーチンに関連付けられたランタイム挙動を識別する工程と、
前記ランタイム挙動に対応する前記修正バージョンの予測された挙動に基づいて前記実行可能なルーチンの動作中の実行のために前記複数の修正バージョンのうちの修正バージョンを選択する工程と
を含む処理リソース割り当て方法。
【０２８１】
概念７０  概念３７記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
仮想関数の第１の実現形態及び第２の実現形態を識別する工程であって、前記仮想関数は前記第１の実現形態を指し示すＶＦＴエントリを含み、前記仮想関数は更に、複数のＶＦＴのうちの第１のＶＦＴにマッピングされたＶＦＴポインタを含む工程と、
前記第１の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
前記動作中の前記第１の実現形態によって表される分岐挙動を識別する工程と、
前記分岐挙動の動作解析を行って、それにより、前記第２の実現形態が前記分岐挙動に対応する度合いが、前記第１の実現形態が前記分岐挙動に対応する度合いよりも大きいことを判定する工程と、
前記動作解析に基づいて前記複数のＶＦＴのうちの第２のＶＦＴに前記ＶＦＴポインタをリマッピングする工程であって、前記第２のＶＦＴが、前記第２の実現形態にマッピングされたポインタを含む工程、又は、
前記動作解析に基づいて前記第２の実現形態を指し示すよう前記ＶＦＴエントリを更新する工程と
を含む処理リソース割り当て方法。
【０２８２】
概念７１  概念３７記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられたプログラムにアクセスする工程であって、前記プログラムは、予め定義されたコール・サイトにマッピングされた予め定義された関数を含む工程と、
前記予め定義されたコール・サイトにより、前記予め定義された関数のコールを行う工程と、
前記コールの結果として、前記予め定義された関数によって表される分岐挙動を識別する工程と、
前記分岐挙動に基づいて、前記予め定義されたコール・サイトを修正する工程と
を含む処理リソース割り当て方法。
【０２８３】
概念７２  概念３７記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
仮想関数の第１の実現形態及び第２の実現形態を識別する工程であって、前記仮想関数は前記第１の実現形態を指し示すＶＦＴエントリを含み、前記仮想関数は更に、複数のＶＦＴのうちの第１のＶＦＴにマッピングされたＶＦＴポインタを更に含む工程と、
前記第１の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
前記動作中の前記第１の実現形態によって表される分岐挙動を識別する工程と、
前記分岐挙動に基づいて前記仮想関数の考えられる将来の挙動を予測する工程と、
前記考えられる将来の挙動の動作解析を行って、それにより、前記第２の実現形態が前記考えられる将来の挙動に対応する度合いが、前記第１の実現形態が前記考えられる将来の挙動に対応する度合いよりも大きいことを判定する工程と、
前記動作解析に基づいて前記複数のＶＦＴのうちの第２のＶＦＴに前記ＶＦＴポインタをリマッピングする工程であって、前記第２のＶＦＴが、前記第２の実現形態にマッピングされたポインタを含む工程、又は、
前記動作解析に基づいて前記第２の実現形態を指し示すよう前記ＶＦＴエントリを更新する工程とを含む処理リソース割り当て方法。
【０２８４】
本明細書にわたる、構成、効果、又は同様な文言への言及は、構成及び効果の全てが何れかの単一の実施例にあるべきであり、又はあるということを示唆するものでない。むしろ、構成及び効果に言及する文言は、特定の構成、効果、又は実施例に関して記載された構成が本願の手法の少なくとも１つの実施例に含まれているということを意味するものと理解されたい。よって、構成及び効果の記載、並びに同様な文言は本明細書にわたり、同じ実施例を表し得るが、必ずしも同じ実施例を表すものでない。
【０２８５】
上述した本願の開示の種々の実施例は、異なる順序の工程及び／又は動作によって実施し、かつ／又は、開示されたものと異なる構成におけるハードウェア・エレメントによって実施し得る。よって、本願手法は、上記例示的な実施例に基づいて記載しているが、本願の手法の範囲から逸脱していない限り、特定の修正、変形、及び代替的な構成を実現し得る。
【０２８６】
本願の手法の種々の例示的な実施例は、構造上の構成及び／又は方法動作に特有の文言で本願明細書及び特許請求の範囲に記載しているが、特許請求の範囲記載の主題は必ずしも、上記特定の構成又は動作に制限されるものでない。
【図１】
2015526821.tif 000003
【図２】
2015526821.tif 000004
【図３】
2015526821.tif 000005
【図４】
2015526821.tif 000006
【図５】
2015526821.tif 000007
【図６】
2015526821.tif 000008
【図７】
2015526821.tif 000009
【図８】
2015526821.tif 000010
【図９】
2015526821.tif 000011
【図１０Ａ】
2015526821.tif 000012
【図１０Ｂ】
2015526821.tif 000013
【図１０Ｃ】
2015526821.tif 000014
【図１１】
2015526821.tif 000015
【図１２】
2015526821.tif 000016
【図１３】
2015526821.tif 000017
【図１４】
2015526821.tif 000018
【図１５】
2015526821.tif 000019
【図１６】
2015526821.tif 000020
【図１７】
2015526821.tif 000021
【図１８】
2015526821.tif 000022
【図１９】
2015526821.tif 000023
【図２０】
2015526821.tif 000024
【図２１】
2015526821.tif 000025
【図２２】
2015526821.tif 000026
【図２３】
2015526821.tif 000027
【図２４】
2015526821.tif 000028
【図２５】
2015526821.tif 000029
【図２６】
2015526821.tif 000030
【図２７】
2015526821.tif 000031
【図２８】
2015526821.tif 000032
【図２９】
2015526821.tif 000033
【図３０】
2015526821.tif 000034
【図３１】
2015526821.tif 000035
【図３２】
2015526821.tif 000036
【図３３】
2015526821.tif 000037
【図３４】
2015526821.tif 000038
【図３５】
2015526821.tif 000039
【図３６】
2015526821.tif 000040
【図３７】
2015526821.tif 000041
【国際調査報告】
2015526821.tif 000042
2015526821.tif 000043