(57)【特許請求の範囲】
【請求項１】
プロセッサで、交互に配置された直列領域および並列領域を有するシングル命令ストリームを実行するための方法であって、
前記シングル命令ストリームの各々のアーキテクチャ化されたスレッドに対して、スレッド・レジスタの１つのセット、および、Ｎ個のレーンにわたるレーン・レジスタのＮ個のセットを有する、プロセッサ・アーキテクチャを作成するステップと、
前記シングル命令ストリームの前記直列領域内の命令を、スレッド・モードで前記スレッド・レジスタに対して実行するステップと、
前記シングル命令ストリームの前記並列領域内の命令を、レーン・モードで前記レーン・レジスタに対して実行するステップと、
前記シングル命令ストリームの実行を、前記スレッド・モードから前記レーン・モードに、または、前記レーン・モードから前記スレッド・モードに遷移させるステップと
を含む、方法。
【請求項２】
スレッド・レジスタの前記１つのセットは、レーン・レジスタの前記Ｎ個のセットの少なくとも１つと同じ、構成要素レジスタの組合せを含む、請求項１に記載の方法。
【請求項３】
スレッド・レジスタの前記１つのセットは、レーン・レジスタの前記Ｎ個のセットの１つまたは複数と異なる、構成要素レジスタの組合せを含む、請求項１に記載の方法。
【請求項４】
前記シングル命令ストリームの前記直列領域内の前記命令を、前記スレッド・モードで実行する前記ステップは、
前記シングル命令ストリームの前記直列領域内の前記命令を１回、前記スレッド・レジスタを使用して実行されるようにディスパッチするステップ
を含む、請求項１に記載の方法。
【請求項５】
前記シングル命令ストリームの前記並列領域内の前記命令を、前記レーン・モードで実行する前記ステップは、
前記シングル命令ストリームの前記並列領域内の前記命令を、前記Ｎ個のレーンの各々に対して１回ずつ、合計Ｎ回ディスパッチするステップ
を含む、請求項１に記載の方法。
【請求項６】
前記シングル命令ストリームの前記並列領域内の前記命令を、前記レーン・モードで前記レーン・レジスタに対して実行する前記ステップは、ロックステップで、前記Ｎ個のレーンのすべてにわたって生じる、請求項１に記載の方法。
【請求項７】
前記シングル命令ストリームの前記並列領域内の前記命令を、前記レーン・モードで前記レーン・レジスタに対して実行する前記ステップは、前記Ｎ個のレーンにわたって非同期的に進行する、請求項１に記載の方法。
【請求項８】
前記シングル命令ストリームの前記並列領域内の前記命令を、前記レーン・モードで前記レーン・レジスタに対して実行する前記ステップは、前記Ｎ個のレーンの各々のステートに左右される、請求項１に記載の方法。
【請求項９】
前記Ｎ個のレーンの各々の前記ステートは、有効または無効のいずれかである、請求項８に記載の方法。
【請求項１０】
前記シングル命令ストリームの実行を、前記スレッド・モードから前記レーン・モードに、または、前記レーン・モードから前記スレッド・モードに遷移させる前記ステップは、
前記スレッド・レジスタが有する情報を前記レーン・レジスタに、または、前記レーン・レジスタが有する情報を前記スレッド・レジスタにコピーするステップ
を含む、請求項１に記載の方法。
【請求項１１】
前記シングル命令ストリームの前記直列領域内の前記命令が、前記スレッド・モードで前記スレッド・レジスタに対して実行され、さらに、前記シングル命令ストリームの実行が、前記スレッド・モードから前記レーン・モードに遷移させられる場合において、
前記プロセッサのステートを、スレッド・リソースからレーン・リソースに転送するステップと、
前記Ｎ個のレーンのすべてをアクティブとマーキングするステップと、
特殊命令を呼び出して、前記プロセッサのモードを前記スレッド・モードから前記レーン・モードに変化させるステップと
を実行する、請求項１に記載の方法。
【請求項１２】
前記プロセッサの前記ステートを、前記スレッド・リソースから前記レーン・リソースに転送する前記ステップは、
コンテンツを前記スレッド・レジスタから前記レーン・レジスタに転送するステップ
を含む、請求項１１に記載の方法。
【請求項１３】
前記プロセッサの前記ステートを、前記スレッド・リソースから前記レーン・リソースに転送する前記ステップは、
前記レーン・レジスタの１つまたは複数を初期化するステップ
を含む、請求項１１に記載の方法。
【請求項１４】
前記プロセッサの前記ステートを、前記スレッド・リソースから前記レーン・リソースに転送する前記ステップは、
メモリ・スタックを前記Ｎ個のレーンの各々に割り振るステップ
を含む、請求項１１に記載の方法。
【請求項１５】
前記シングル命令ストリームの前記並列領域内の前記命令が、前記レーン・モードで前記レーン・レジスタに対して実行され、さらに、前記シングル命令ストリームの実行が、前記レーン・モードから前記スレッド・モードに遷移させられる場合において、
前記プロセッサのステートを、レーン・リソースからスレッド・リソースに転送するステップと、
特殊命令を呼び出して、前記プロセッサのモードを前記レーン・モードから前記スレッド・モードに変化させるステップと、
前記Ｎ個のレーンにより使用されるステートを解放するステップと
を実行する、請求項１に記載の方法。
【請求項１６】
前記プロセッサの前記ステートを、前記レーン・リソースから前記スレッド・リソースに転送する前記ステップは、
前記レーン・レジスタが有する情報をメモリに退避させるステップと、
コンテンツを前記レーン・レジスタから前記スレッド・レジスタ内に移動させるステップと
を含む、請求項１５に記載の方法。
【請求項１７】
前記シングル命令ストリームの前記並列領域内の前記命令は、前記レーン・モードで前記レーン・レジスタに対して実行され、さらに、命令の実行により例外が引き起こされる場合において、
前記レーン・モードを再開するために必要なステートを退避させるステップと、
特殊命令を呼び出して、前記プロセッサのモードを前記レーン・モードから前記スレッド・モードに変化させるステップと、
前記例外を解決するステップと、
レーン・モード・ステートを復元するステップと
を実行する、請求項１に記載の方法。
【請求項１８】
請求項１ないし１７のいずれかに記載の方法のすべてのステップを実行するように適合された手段を備えるシステム。
【請求項１９】
コンピュータ・プログラムであって、前記コンピュータ・プログラムがコンピュータ・
システム上で実行される時、請求項１ないし１７のいずれかに記載の方法のすべてのステップを実行するための命令を含む、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デュアル実行モード・プロセッサに関し、より詳細には、実行の２つの（スレッドおよびレーン）モードの間でスイッチするための技法に関する。
【背景技術】
【０００２】
典型的な並列プログラムは、交互に配置された直列／並列領域からなる。並列プログラムを走らせる既存の手法は、命令ストリームの「不連続性」に依拠する。例えば実行は、従来のＣＰＵでは、シングル・スレッドからマルチ・スレッドに、ＣＰＵ＋ＧＰＵでは、メインＣＰＵから、別個のアクセラレータに移行する。不連続性のオーバヘッド、領域の大きな粒度、および、領域の間の「通信」（共有メモリを用いることさえある）の必要性などの、この手法に対する注目すべき制限がある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
したがって、並列プログラムを実行するための、および、直列領域と並列領域との間でスイッチするための、改善された技法が望ましいことになる。
【課題を解決するための手段】
【０００４】
本発明は、デュアル実行モード・プロセッサでの、実行の２つの（スレッドおよびレーン）モードの間でスイッチするための技法を提供する。より詳細には本発明は、請求項１で請求されるような方法、ならびに、請求されるような対応するシステムおよびコンピュータ・プログラムを提供する。
【０００５】
本発明、ならびに、本発明のさらなる特徴および利点の、より完全な理解が、以下の詳細な説明および図面を参照することにより得られることになる。
【図面の簡単な説明】
【０００６】
【図１】本発明の実施形態による、直列領域および並列領域の両方を有する例示的な命令ストリームを示す概略図である。
【図２】本発明の実施形態による、同じプロセッサでのシングル命令ストリームの（スレッド・モードおよびレーン・モードでの）デュアル実行のための例示的な方法論を示す図である。
【図３】本発明の実施形態による、スレッド・レジスタのセットであって、それに対して、命令ストリームの直列領域内の命令がスレッド・モードで実行され得る、スレッド・レジスタのセットの例を示す図である。
【図４】本発明の実施形態による、レーン・レジスタのセットであって、それに対して、命令ストリームの並列領域内の命令がレーン・モードで実行され得る、レーン・レジスタのセットの例を示す図である。
【図５】本発明の実施形態による、同じプロセッサで、交互に配置された直列領域および並列領域を有するシングル命令ストリームを実行するための例示的な方法論を示す図である。
【図６】本発明の実施形態による、スレッド・モードからレーン・モードに、および、レーン・モードからスレッド・モードに遷移させるための例示的な方法論を示す図である。
【図７】本発明の実施形態による、スレッド・モードからレーン・モードにスイッチするための例示的な方法論を示す図である。
【図８】本発明の実施形態による、プロセッサ・コアをレーン・モードからスレッド・モードに自発的にスイッチする（遷移させる）ための例示的な方法論を示す図である。
【図９】本発明の実施形態による、プロセッサ・コアをレーン・モードからスレッド・モードに非自発的にスイッチする（遷移させる）ための例示的な方法論を示す図である。
【図１０】本発明の実施形態による、本明細書で提示される方法論の１つまたは複数を実行するための例示的な装置を示す図である。
【発明を実施するための形態】
【０００７】
本明細書で提供されるのは、シングル命令ストリームを実行する同じプロセッサでの、デュアル実行（スレッドおよびレーン）モードを（直列領域と並列領域との間で交互になり得る、ユニファイド・プロセッサ命令セット・アーキテクチャ命令ストリームを使用して）実装するための技法である。したがって、それに応じて本明細書では、１つのプロセッサは、１つの命令ストリームを実行するが、２つのモードで動作し、何を命令が行うかはモードに依存する。具体的には、本技法は、同じ命令を複数の（アーキテクチャ化された（architected））レーンにわたって複製することによる、空間でのベクトル化を達成するものであり、それらのレーンは、レーンごとにレジスタの異なるセットを備えている。任意の所与の時間に、レーンは、２つのステートの１つ、すなわち有効（enabled）または無効（disabled）であり得る。有効レーンは動作を行う。無効レーンは動作を行わない。用語「有効」および「無効」は、本明細書では、アーキテクチャ化されたレーンに関して使用される。実行の２つのモードの間でスイッチするための技法が、次いで本明細書で提供される。
【０００８】
直列領域と並列領域との間で交互になり得る、ユニファイド・プロセッサ命令ストリームの使用によって、非常に労力の少ない、領域の間の遷移、および領域間データ交換が結果として生じ、したがって領域は、シングル命令と同じほど小さくなり得る。本技法の使用は、プログラムの並列領域の効率的な実行につながる。特に、古いモデル（多重ＣＰＵ、ＣＰＵ＋ＧＰＵ）上で良好に走るプログラムが、ここでも良好に走る。さらに、より古いモードでは効率的に走らないが、本技法によって良好に走る、他のプログラムがある。
【０００９】
以下で詳細に説明するように、本技法は、交互に配置された直列領域および並列領域からなる命令ストリームを実行することを含む。単に例として、図１は、直列領域および並列領域の両方を有する例示的な命令ストリーム１００を概略的に図示する。例えば、命令ストリーム１００は、シングル・スレッド（ＳＴ）からなる直列領域で始まる。フォーク命令が、複数のレーン（マルチ・レーン）からなる並列領域へのスレッドのフォーキングを起こす。ジョイン命令が、マルチ・レーンを、シングル・スレッドに戻るように、命令ストリーム１００の第２の直列領域でジョイン／リジョインし、以下同様である。図１で示されるように、これらの直列領域および並列領域は、命令ストリーム１００の内部で交互に現れる。
【００１０】
本技法によれば、命令ストリーム１００の直列領域内の命令は、本明細書で「スレッド・モード」と称するもので実行され、命令ストリーム１００の並列領域内の命令は、本明細書で「レーン・モード」と称するもので実行される。具体的には、本明細書で提供されるのは、命令の各々のアーキテクチャ化されたスレッドに対して、スレッド・レジスタの１つのセット（以下、「スレッド・レジスタ・セット」という）、および、レーン・レジスタのＮ個のセット（以下、「レーン・レジスタ・セット」という）を含む、類のないプロセッサ・アーキテクチャである。それに応じて、命令ストリーム１００の直列領域内の命令は、スレッド・モードで、スレッド・レジスタに対して実行される。命令ストリーム１００の並列領域内の命令は、レーン・モードで、レーン・レジスタに対して実行される。スレッド・レジスタおよびレーン・レジスタを、以下で詳細に説明する。
【００１１】
図２の方法論２００は、シングル命令ストリームを実行する同じプロセッサでの、デュアル実行（スレッドおよびレーン）モードのための本技法の概観を提供する。上述のように、命令ストリームは、交互に配置された直列領域および並列領域からなり（したがって、本技法によれば、命令ストリームは、２つのモードの１つ、スレッド・モードまたはレーン・モードであり得る）、プロセッサは、命令の各々のアーキテクチャ化されたスレッドに対して、１つのスレッド・レジスタ・セット、および、Ｎ個のレーン・レジスタ・セットを含む。
【００１２】
プロセッサは、シングル命令ストリームを実行する。図２のステップ２０２で示されるように、分岐命令は、ストリーム展開を制御する。以下で詳細に説明するように、デフォルトにより命令は、連続的なメモリ・アドレス・ロケーションから実行されることになる。分岐命令のみが、そのフローを変化させ得る。１つの例示的な実施形態によれば、分岐は常に、スレッド・レジスタに対して実行される。
【００１３】
命令ストリーム１００の直列領域は、ステップ２０４に従って、スレッド・モードで、スレッド・レジスタを使用して処理され、一方で、命令ストリーム１００の並列領域は、ステップ２０６に従って、レーン・モードで、レーン・レジスタを使用して処理される。図２で示されるように、本技法は一般的には、スカラ（例えば、固定小数点、浮動小数点、論理、その他）演算およびベクトル（固定小数点、浮動小数点、置換、論理、その他）演算の両方を、スレッド・レジスタおよびレーン・レジスタでサポートする。レジスタでのデータのスカラおよびベクトル処理は、一般的に当業者に知られており、したがって、本明細書ではその詳細を省略する。
【００１４】
ステップ２０８で、操作されたデータがメモリ（ストレージ）に記憶され、プロセスは、ステップ２０２で、次の分岐命令によって新たに繰り返される。図２で示されるように、データは、レジスタとストレージとの間を両方向に移動する。例えばデータは、ストレージからフェッチされ、（スレッドまたはレーンあるいはその両方の）レジスタ内にロードされ、それらのレジスタでそのデータは、命令ストリームにより操作される。操作されたデータは、次いで、メモリに書き戻すことができる。
【００１５】
次に、スレッド・レジスタおよびレーン・レジスタのより詳細な説明を行う。上述のように、プロセッサでの各々のアーキテクチャ化されたスレッドは、１つのスレッド・レジスタ・セットを有する。例示的な実施形態によれば、スレッド・レジスタ・セットは、以下の構成要素レジスタ、すなわち、汎用レジスタ（ＧＰＲ）、浮動小数点レジスタ（ＦＰＲ）、ベクトル・レジスタ（ＶＲ）、ステータス・レジスタ（ＳＲ）、条件レジスタ（ＣＲ）、および補助レジスタ（ＡＲ）の少なくとも１つを含む。上述のように、本技法は、シングル命令ストリームを実行するシングル・プロセッサを含み、プロセッサは、スレッド・モードまたはレーン・モードで動作し得る。スレッド・モードで動作する時、命令ストリームは、プロセッサにより、このスレッド・レジスタ・セットに対して実行されることになる。
【００１６】
図３は、本技法によって実装され得るスレッド・レジスタ・セット３００の例を示す。当然ながら、実装されるスレッド（およびレーン）・レジスタは、用途に応じて変えることができる。したがって、図３のスレッド・レジスタ・セットは、本技法の単なる例示に過ぎない。ここで重要なことは、（下記のＮ個のレーン・レジスタ・セットと比較して）命令のアーキテクチャ化されたスレッドごとに、１つのスレッド・レジスタ・セットがあるということである。したがって、何を命令のアーキテクチャ化されたスレッドが行うかは、それが、スレッド・レジスタに対してスレッド・モードで実行されているか、それとも、レーン・レジスタに対してレーン・モードで実行されているかに依存する。
【００１７】
図３に示すように、この非限定的な例では、スレッド・レジスタは、少なくとも１つのカウント・レジスタ（ＣＴＲ）、少なくとも１つのリンク・レジスタ（ＬＲ）、少なくとも１つの条件レジスタ（ＣＲ）、複数の汎用レジスタ（ＧＰＲ、例えばＧＰＲ［０］〜［３１］）、少なくとも１つのＸＥＲレジスタ、少なくとも１つの浮動小数点ステータスおよび制御レジスタ（ＦＰＳＣＲ）、少なくとも１つのベクトル・ステータスおよび制御レジスタ（ＶＳＣＲ）、少なくとも１つのベクトル退避／復元レジスタ（ＶＲＳＡＶＥ）、ならびに、複数のベクトル・スカラ・レジスタ（ＶＳＲ、例えばＶＳＲ［０］〜［６３］）を含む。スレッド・モードでは、命令ストリーム内の命令は、１回ディスパッチされ、オペレーションは、１度に１つの命令で（直列に）実行される。
【００１８】
対照的に、プロセッサの各々のアーキテクチャ化されたスレッドは、Ｎ個のレーン・レジスタ・セットを有する。例示的な実施形態によれば、各々のレーン・レジスタ・セットは、以下の構成要素レジスタ、すなわち、汎用レジスタ（ＧＰＲ）、浮動小数点レジスタ（ＦＰＲ）、ベクトル・レジスタ（ＶＲ）、ステータス・レジスタ（ＳＲ）、条件レジスタ（ＣＲ）、および補助レジスタ（ＡＲ）の少なくとも１つを含む。上述のように、本技法は、シングル命令ストリームを実行するシングル・プロセッサを含み、プロセッサは、スレッド・モードまたはレーン・モードで動作し得る。レーン・モードで動作する時、命令ストリームは、プロセッサにより、各々のレーン・レジスタ・セットに対して実行されることになる。
【００１９】
１つの例示的な実施形態では、スレッド・レジスタは、少なくとも１つのレーン・レジスタ・セットと同じ、構成要素レジスタの組合せを含む。あるいは別の例示的な実施形態によれば、スレッド・レジスタは、レーン・レジスタ・セットと異なる、構成要素レジスタの組合せを含む。スレッド・レジスタ・セットの構成要素が、１つのレーン・レジスタ・セットの構成要素と同じである時、スレッド・レジスタとレーン・レジスタとの間に１対１の対応関係がある。この事例では、レーン・モードでの命令のセマンティクスは、スレッド・モードでの命令のセマンティクスから、対応するレーン・レジスタを対応するスレッド・レジスタの代わりに用いることにより得ることができる。スレッド・レジスタ・セットの構成要素が、１つのレーン・レジスタ・セットの構成要素と異なる時、それらの間の対応関係は、正確に１対１ではない。そのことは、スレッド・モードおよびレーン・モードでの命令のセマンティクスに対する異なる定義を要する。
【００２０】
図４は、本技法によって実装され得るＮ個のレーン・レジスタ・セット４００の例を示す。やはり、スレッド（およびレーン）・レジスタは、用途に応じて変えることができる。したがって、図４のレーン・レジスタ・セットは、本技法の単なる例示に過ぎない。ここで重要なことは、（スレッド・レジスタ・セットと比較して）命令のアーキテクチャ化されたスレッドごとに、Ｎ個のレーン・レジスタ・セットがあるということである。したがって、何を命令のアーキテクチャ化されたスレッドが行うかは、それが、スレッド・レジスタに対してスレッド・モードで実行されているか、それとも、レーン・レジスタに対してレーン・モードで実行されているかに依存する。
【００２１】
図４に示すように、この非限定的な例では、各レーン・レジスタ・セットは、少なくとも１つのレーン条件レジスタ（ＬＣＲ）、複数のレーン汎用レジスタ（ＬＧＲ、例えばＬＧＲ［０］〜［３１］）、および、少なくとも１つのレーンＸＥＲレジスタ（ＬＸＥＲ）を含む。上記のスレッド・レジスタ例と同じく、これらのレジスタ・タイプのすべてが必要であるわけではない。Ｎ個のレーン・レジスタ・セットは、図４では（０）〜（Ｎ−１）で示されている。
【００２２】
１つの例示的な実施形態では、レーン・レジスタの同じ組合せが、各々のセットに存在する。その場合、プロセッサの各々のアーキテクチャ化されたスレッドは、Ｎ個の同じレーン・レジスタ・セットを有する。しかしながら、シングル・インスタンス補助レジスタもまた、アーキテクチャ化されたステートの一部であり得る。例えば図４に示すように、シングル・インスタンス補助レーン移動レジスタ（ＬＭＲ）およびレーン拡張制御レジスタ（ＬＥＣＲ）が存在する。
【００２３】
スレッド・モードからレーン・モードへの遷移は、同じオペレーションを、プロセッサの（アーキテクチャ化された）レーンごとに１回ずつ繰り返して実行することを伴う。レーン・モードでの命令の実行に対して、プロセッサは、命令の同時的な実行をサポートするために、複数の物理レーン、例えば複数のハードウェア・リソースによって設計され得る。したがって、スレッド・モードからレーン・モードへの遷移では、プロセッサは、上述のように、１度に１つのレジスタ・セットに対して命令ごとに（直列に）１つのオペレーションを実行することから、複数の（アーキテクチャ化された）レーン上で複数のレジスタ・セットに対して（並列に）命令ごとに複数回同じオペレーションを実行することに移行する。したがってレーン・モードでは、オペレーションは複数のレーンにわたって実行される。ここでは、プロセッサにおける物理レーンと、アーキテクチャ化されたレーンとを区別する。実例として、当技術分野で知られているように、マルチ・レーン・ベクトル・プロセッサは、並列データ処理を可能にする複数の物理レーンを有する。他方で、アーキテクチャ化されたレーンは、プロセッサの物理レーン上で走るように構築される仮想レーンである。物理レーンの数は、面積、電力消費、その他のようなハードウェア制約に基づいて決められる。各々の物理レーンは、命令により定義されるオペレーションを実行する能力のあるハードウェア・ユニットである。プロセッサが複数の物理レーンを有する時、それらのレーンは、並列に実行することができ、それにより複数のオペレーションが同時に実行される。アーキテクチャ化されたレーンは、仮想化を提供するための構築物である。アーキテクチャ化されたレーンは、既存の物理レーンの上で多重化され得る。この仮想化はハードウェア・レベルで実装され、各々の命令は複数のオペレーションを生成する。プロセッサが、Ｎ個のアーキテクチャ化されたレーン、および、Ｌ個の物理レーンを有するとする。物理レーンへのアーキテクチャ化されたレーンの１対１のマッピング（Ｌ＝Ｎ）の事例では、プロセッサは、以下のように動作する。
１  命令をＰＣでフェッチする
２  命令をＮ個すべてのレーンにディスパッチする
３  各々の物理レーンｉは、論理アイデンティティｉをセットし、命令を、レジスタ・セットＲ＿ｉ（レーンｉのレジスタ・セット）を使用して実行する
４  ＰＣ＝次のＰＣ
５  ｇｏ  ｔｏ  １
各々の物理レーンにマッピングされる複数のアーキテクチャ化されたレーンによって、プロセッサは、異なる動きをする。最初に、Ｎ＝Ｋ＊Ｌ個のアーキテクチャ化されたレーンがあり、ここで、Ｌは物理レーンの数であり、Ｋは乗数である。ここでプロセッサは、命令を次のように実行する。
１  命令をＰＣでフェッチする
２  ｆｏｒ  ｒｏｕｎｄ＝０；  ｒｏｕｎｄ＜ｃｅｉｌ（Ｋ）；  ＋＋ｒｏｕｎｄ
３    命令をＬ個すべてのレーンにディスパッチする
４    各々の物理レーンｉは、論理アイデンティティｉ＊ｒｏｕｎｄをセットし、命令を、レジスタ・セットＲ＿（ｉ＊ｒｏｕｎｄ）（アーキテクチャ化されたレーンｉ＊ｒｏｕｎｄのレジスタ・セット）を使用して実行する（ｉ＊ｒｏｕｎｄ＜Ｎであるとき）  
５  ｅｎｄｆｏｒ
６  ＰＣ＝次のＰＣ
７  ｇｏ  ｔｏ  １
用語「論理アイデンティティｘをセット」は、物理レーンが、アーキテクチャ化されたレーン「ｘ」として挙動することになるということを意味し、このアイデンティティはしばしば、レーン・モードで実行される命令の内側で使用される。したがって、アーキテクチャ化されたレーンを作成することは、アイデンティティ・レジスタを適正にセットした後に命令を複数回物理レーンにディスパッチし、かつ、正しいレジスタ・セットへのルーティングをサポートするために、何らかの追加的な論理をプロセッサ上で追加することである。プロセッサの挙動に関する上記の説明は、命令実行を重複させることの可能性に制限を与えるものではない。例えば、２つの物理レーン（Ｐ１、Ｐ２）、および、３つのアーキテクチャ化されたレーン（Ａ１、Ａ２、Ａ３）を有するプロセッサでは、２つの命令の実行を３つのアーキテクチャ化されたレーン上で重複させることが可能である。すなわち、それらの命令は、３つの反復（iteration）で実行され、反復１は、命令１を、アーキテクチャ化されたレーンＡ１、Ａ２で実行し、反復２は、命令１を、アーキテクチャ化されたレーンＡ３で、命令２を、アーキテクチャ化されたレーンＡ１で実行し、反復３は、命令２を、アーキテクチャ化されたレーンＡ２、Ａ３で実行する。
【００２４】
したがって本技法によれば、例えばレーン・モードで、８つのレーン・レジスタ・セット（Ｎ＝８）、したがって８つのアーキテクチャ化されたレーンがあるとき、命令ストリームをレーン・モードで、４つの物理レーンを有するプロセッサによって処理するためには、プロセスを複数回繰り返す必要がある。簡単な例で説明すると、４つの物理レーンを有するプロセッサについて、命令ストリームをレーン・モードで、８つのアーキテクチャ化されたレーンにわたって処理するためには、プロセスを少なくとも２回反復する必要がある。４つすべての（物理）レーンが使用されているのであれば、必要な反復は２回である。これに対して、プロセッサの一部分のみが本計算に充てられ、したがって、より多くの反復を要するということが実情であることがある。例えば、プロセッサの２つの（物理）レーンが計算に充てられるとき、４回の反復が、命令ストリームをレーン・モードで、８つのアーキテクチャ化されたレーンにわたって処理するために必要とされる。
【００２５】
分岐命令は、命令ストリームの展開を制御する。すなわち、デフォルト条件は、命令を、次の順次的なメモリ・アドレスで実行することである。分岐命令のみが、そのフローを変化させ得る。本技法によれば、モードがスレッドかレーンかには関係なく、分岐は常に、同じセマンティクスを有する。条件分岐は常に、スレッド条件レジスタを検査する。１つの例示的な実施形態では、レジスタに含まれるアドレスへの分岐は、常にスレッド・レジスタを使用する。以下で詳細に説明するように、実行は好ましくは、スレッド・モードで始まり、明示的な命令が、スレッド・モードからレーン・モードに遷移させるために使用される。
【００２６】
上で一般的に説明したように、データは、レジスタとストレージとの間を両方向に移動する。例えばデータは、ストレージからフェッチされ、（スレッドまたはレーンあるいはその両方の）レジスタ内にロードされ、それらのレジスタでそのデータは、命令ストリームにより操作される。操作されたデータは、次いで、メモリに書き戻される。上記の図２の説明を確認されたい。当技術分野で知られているように、例えばロードおよびストアを行うための、命令ストリーム内のストレージ・アクセス命令が、この点に関して、メモリからデータをアクセスし、結果をメモリに書き戻すために、使用される。
【００２７】
本技法の例示的な実施形態によれば、これらのストレージ・アクセス命令は、（スレッドまたはレーン）モード依存である。例えば、命令のストリームがスレッド・モードで実行されている時、ロードおよびストアは常に、スレッド・レジスタに適用される。スレッド・レジスタはしたがって、データ・ソース、データ・ターゲット、およびアドレス・ソースとして使用される。上述のように、スレッド・モードでは、オペレーションは、１度に１つずつ（直列に）実行される。したがって各々のロード／ストアは、無条件にスレッド・モードで実行され、それにより１つのメモリ・オペレーションが生じる。
【００２８】
対照的に、命令がレーン・モードで実行されている時、ロードおよびストアは常に、レーン・レジスタに適用される。したがって、レーン・レジスタは、データ・ソース、データ・ターゲット、およびアドレス・ソースとして使用される。レーン・モードでは、オペレーションは、Ｎ個の（アーキテクチャ化された）レーン上で（並列に）実行される。したがって、各々のロード／ストアは、レーンごとに１回実行され、最大でＮ個のメモリ・オペレーション／命令が実行される。しかしながら、上述のように、レーン・モードでのオペレーションは、各々の（アーキテクチャ化された）レーンのステート（有効／無効）次第である。例えば、ロード／ストアをレーン・モードで、複数のレーンにわたって実行する時、有効であるレーンのみが使用され得る。したがって、レーン・モードでのロード／ストアの実行は、所与のレーンが有効であるか否かに左右される。
【００２９】
同様に、本技法の例示的な実施形態によれば、算術命令および論理命令もまた、（スレッドまたはレーン）モード依存である。例えば、命令ストリームが、スレッド・モードで実行されている時、算術命令および論理命令は常に、スレッド・レジスタに適用される。スレッド・レジスタは、したがって、データ・ソースおよびデータ・ターゲットとして使用される。上述のように、スレッド・モードでは、オペレーションは、１度に１つずつ（直列に）実行される。したがって各々の算術／論理命令は、無条件にスレッド・モードで実行され、それにより１つのオペレーションが行われる。
【００３０】
対照的に、命令がレーン・モードで実行されている時、算術命令および論理命令は常に、レーン・レジスタに適用される。したがって、レーン・レジスタは、データ・ソースおよびデータ・ターゲットとして使用される。レーン・モードでは、オペレーションは、Ｎ個の（アーキテクチャ化された）レーン上で（並列に）実行される。したがって各々の算術／論理命令は、レーンごとに１回実行され、最大でＮ個のオペレーション／命令が実行される。しかしながら、上述のように、レーン・モードでのオペレーションは、各々のレーンのステート（有効／無効）次第である。例えば、算術／論理命令をレーン・モードで、複数のレーンにわたって実行する時、有効であるレーンのみが使用され得る。したがって、レーン・モードでの算術／論理命令の実行は、所与のレーンが有効であるか否かに左右される。
【００３１】
レーン・モードで動作する時、本技法の１つの例示的な実施形態によれば、命令は、ロックステップで、レーンのすべてにわたって実行されるということは注目すべきである。すなわち、レーンの各々にディスパッチされる（同じ）命令は、同時に、レーンの各々で並列に実行される。あるいは、本技法の別の例示的な実施形態によれば、レーン・モードでディスパッチされる命令は、非同期的に（すなわち、同時ではなく）、レーンにわたって実行される。例えば、１つまたは複数のレーンでの命令の実行は、１つまたは複数の他のレーンでのオペレーションの完了に左右され得る。
【００３２】
命令実行は、その実行方法には関係なく、グローバル・プログラム順序またはローカル・プログラム順序に従い得る。グローバル・プログラム順序の場合、各々のレーンで実行中の命令は、すべてのレーンに対する、すべての以前の依存命令の影響を知ることができる。ローカル・プログラム順序の場合は、各々のレーンで分かるのは、同じレーンへの、以前の依存命令の影響のみである。
【００３３】
スレッド・モード実行とレーン・モード実行との間で遷移させることを、以下で詳細に説明する。一般的には、命令ストリームの内部に挿入されるブリッジ命令が、ストリームの実行モードを明示的に制御するために使用され得る。すなわち、ブリッジ命令は、命令ストリームの直列領域または並列領域が、いつ存在し、したがってそれぞれ、スレッド・モードまたはレーン・モードで実行されるべきであるかを符号化し得るものである。例示的な実施形態によれば、命令ストリーム内のブリッジ命令は、いずれの（スレッドまたはレーン）モードでも実行可能であり、モードに関係なく同じセマンティクスを有する。スレッド・モードからレーン・モードに、およびその逆に遷移させることは、スレッド・レジスタをレーン・レジスタに、およびその逆にコピーすることを含み得る。
【００３４】
図５は、同じプロセッサで、交互に配置された直列領域および並列領域を有するシングル命令ストリームを実行するための例示的な方法論５００を示す図である。ステップ５０２で、命令ストリームの各々のアーキテクチャ化されたスレッドに対して、１つのスレッド・レジスタ・セット、および、Ｎ個のレーン・レジスタ・セットを有する、プロセッサ・アーキテクチャが作成される。例示的なスレッド・モード構成要素レジスタおよびレーン・モード構成要素レジスタの詳細は、上記したとおりである。図３に示す例示的なスレッド・レジスタ・セット３００、および、図４に示す例示的なＮ個のレーン・レジスタ・セット４００も参照されたい。
【００３５】
ステップ５０４で、命令ストリームの直列領域内の命令が、スレッド・モードでスレッド・レジスタに対して実行される。スレッド・モード実行は、スレッド・モード命令を１回、スレッド・レジスタにディスパッチすることを含み得る。上述のように、スレッド・モードでは、命令は好ましくは常に、スレッド・レジスタに対して適用され、各々の命令は、無条件に実行され、それにより１つのオペレーションが行われる。
【００３６】
ステップ５０６で、命令ストリームの並列領域内の命令が、レーン・モードでレーン・レジスタに対して実行される。レーン・モード実行は、同じ命令を複数回ディスパッチすること、すなわち、レーン・モード命令を、Ｎ個のレーンの各々に対して１回ずつ、合計Ｎ回ディスパッチすることを含み得る。上述のように、レーン・モードでは、命令は好ましくは常に、レーン・レジスタに対して適用され、各々の命令は、レーンごとに１回実行され、最大でＮ個のオペレーション／命令が実行される。しかしながら、レーン・モード命令の実行は、レーンのステート（有効／無効）に左右される。したがって図５に示すように、レーン・モードでの実行において、アーキテクチャ化されたレーンの数Ｎが、物理レーンの数を上回る時、複数回の反復が、レーン・モード・オペレーションを実行するために必要とされる。
【００３７】
上述のように、命令ストリームの実行を、スレッド・モードからレーン・モードに、またはその逆に遷移させることは、スレッド・レジスタをレーン・レジスタに、またはその逆にコピーすることを含み得る。これは、ステップ５０８で、ストリームの直列領域から並列領域への、またはその逆の遷移を知らせる、命令ストリーム内で符号化されたブリッジ命令に応答して実行され得る。
【００３８】
命令ストリームに対するデュアル（スレッドおよびレーン）実行モードの上記の説明を考慮に入れて、プロセッサ・コアをスレッド・モードからレーン・モードに（およびその逆に）遷移させるための、および、２つのモードの間のデータ転送を可能にするための技法を次に説明する。上述のように、スレッド・モードでは、１つのレジスタ・セットがあり、レーン・モードでは、複数のレジスタ・セット（レーンごとに１つのセット）がある。これに対して、命令セットは１つだけである。したがって、どのようにして、１つのレジスタ・セットを有することから、レーンごとに１つのレジスタ・セットを有することに遷移させるかが課題になる。以下、スレッドからレーンへの／レーンからスレッドへのモード遷移に従って、命令が異なる意味を有するということをプロセッサに伝えるための技法を説明する。
【００３９】
一般的には、スレッドからレーンへ／レーンからスレッドへモードを遷移させる技法は、以下のアクション、すなわち、必要なステートを準備し、スレッド・リソースからレーン・リソースに転送すること、プロセッサをレーン・モードに変化させること、マルチ・レーン計算を実行すること、必要なステートを準備し、レーン・リソースからスレッド・リソースに転送すること、および、プロセッサをスレッド・モードに変化させることを含む。次に、スレッドからレーンへ／レーンからスレッドへモードを遷移させる技法の詳細を、図６の方法論６００を参照して説明する。
【００４０】
例示的な実施形態によれば、命令ストリームの実行は、スレッド・モードで開始する。ステップ６０２を参照されたい。スレッド・モード実行は、ステップ６０４に従って、レーン・モード実行に遷移させるための要求（すなわち、レーン・モード要求）が行われるか、計算が完了するかのいずれかまで継続する。計算が完了すると、プロセスは終了する。
【００４１】
他方で、レーン・モード要求があると、ステップ６０６で、スレッド・モードからレーン・モードへの遷移が行われる。上述のように、命令ストリーム内で符号化されたブリッジ命令は、命令ストリームの直列領域または並列領域が、いつ存在し、したがって、スレッド・モードまたはレーン・モードで実行されるべきであるかを知らせ得るものである。したがって、スレッド・モードからレーン・モードへの、またはその逆の遷移は、命令ストリーム内で符号化されたブリッジ命令に応答して実行することができる。
【００４２】
本技法によれば、スレッド・モードからレーン・モードへの遷移の起動は、かなり簡単なプロセスである。すなわち、スレッド・モードからレーン・モードへの遷移は、レーン・モード要求などの明示的な命令に遭遇することに基づいて（自発的に）発生する。以下で詳細に説明するように、これに対して、レーン・モードからスレッド・モードへの遷移は、自発的に（すなわち、スレッド・モード要求などの明示的な命令に遭遇することに応答して）発生するか、または、レーン・モードでの命令実行中に例外が生じた時に非自発的に発生する（下記参照）。
【００４３】
次に、プロセッサ・コアをスレッド・モードからレーン・モードに（ステップ６０６に従って）スイッチすることのプロセスの詳細を、図７を参照して説明し、プロセッサ・コアをレーン・モードからスレッド・モードに（ステップ６１０に従って）スイッチすることのプロセスの詳細を、図８（明示的なスイッチング命令の場合）および図９（例外の場合）を参照して説明する。
【００４４】
コアをスレッド・モードからレーン・モードに遷移させる場合は、特殊命令を呼び出して、例えば、すべての後続命令をレーン・モードで実行させるように、プロセッサ・コア内の特殊フラグ／レジスタをセットするようにしてもよい。例えば、後で説明する図７のステップ７０６を参照されたい。それに応じて、ステップ６０８に従って、プロセッサ・コアは、レーン・モード計算を、ｉ）スレッド・モードに遷移させるための明示的な命令（スレッド・モード要求など）に、命令ストリームで遭遇するか、ｉｉ）例外が発生するかのいずれかまで、レーン・モードで実行する。あとで説明する図８および図９も参照されたい。レーンからスレッドへの遷移を行う明示的な命令、または例外のいずれかが発生すると、ステップ６１０に従って、プロセッサ・コアは、実行をスレッド・モードにスイッチする。図６に示すように、プロセスは、計算が完了するまで繰り返される。
【００４５】
図７は、プロセッサ・コアをスレッド・モードからレーン・モードにスイッチする（遷移させる）ための例示的な方法論７００を示す図である。図７に示すように、方法論７００は、ステップの例示的な系列を表し、それらのステップは、レーン・モード要求などの明示的な命令に遭遇する時に、レーン・モードにスイッチするために、（図６の）方法論６００のステップ６０６によって実行され得るものである。
【００４６】
ステップ７０２で、プロセッサ・コアのステートが、スレッド・モードからレーン・モードに転送される。例示的な実施形態によれば、ステップ７０２は、ｉ）コンテンツをスレッド・レジスタからレーン・レジスタに転送すること（上記参照）、ｉｉ）レーン・レジスタの１つもしくは複数を初期化すること、ｉｉｉ）メモリ・スタックを各々のレーンに割り振り、それに対応してレーン・スタック・レジスタをセットすること、および、ｉｖ）各々のレーンのテーブル・オブ・コンテンツ（ＴＯＣ：table of contents）ポインタをスレッドＴＯＣにセットすること（そのことによって、プロセスは、スレッド・モード実行が終了したところで、レーン・モードでの実行を継続し得る）、の少なくとも１つを含むが、それらに限定されない。
【００４７】
ステップ７０４で、（アーキテクチャ化された）レーンのすべてが、有効とマーキングされる。レーンは後で、特殊命令を使用して有効または無効にすることができる。有効／無効レーンについては既に説明した。レーンは、制御フロー発散（control flow divergence）を実装するために、有効／無効にされる。制御フロー発散は、命令ストリームが、レーンの一部では実行されるべきでない命令を含む時に生じる。それらのレーンは、無効にされなければならない。実行での後の時点で、制御フローは再収束（reconverge）し（すなわち、命令は、無効にされたレーンで再び実行されるべきである）、無効レーンは、再び有効にされる。
【００４８】
最後にステップ７０６で、特殊命令が、プロセッサ・モードをレーン・モードに変化させるために呼び出される。例示的な実施形態によれば、特殊命令は、プロセッサ・コアの内部の特殊フラグ／レジスタをセットし、それによって、すべての後続命令が、レーン・モードで実行される。
【００４９】
本技法によれば、メモリはスレッド計算とレーン計算との間で共有される。レーン・モードでの命令は、スレッド・モードでの命令と同じメモリ・アドレス空間にアクセスし、その逆も同様である。
【００５０】
上述のように、レーン・モードからスレッド・モードへのプロセッサ・コアの遷移は、少し複雑になっている。具体的には、プロセッサ・コアがレーン・モードで動作している時、スレッド・モードへのスイッチは、スレッド・モード要求などの明示的なスイッチング命令に応答して（自発的に）発生するか、または、例外を引き起こす命令が発生する（すなわち、スレッド・モードをデフォルト・ステートにする）時に（非自発的に）発生する。第１の事例（事例Ａ：明示的な命令）を、図８の方法論８００Ａを参照して説明し、第２の事例（事例Ｂ：例外）を、図９の方法論８００Ｂを参照して説明する。
【００５１】
図８は、プロセッサ・コアをレーン・モードからスレッド・モードに自発的にスイッチする（遷移させる）ための例示的な方法論８００Ａを示す図である。図８に示すように、方法論８００Ａは、ステップの例示的な系列を表し、それらのステップは、スレッド・モード要求などの明示的な命令に遭遇する時に、スレッド・モードにスイッチするために、（図６の）方法論６００のステップ６１０によって実行され得るものである。
【００５２】
ステップ８０２Ａで、プロセッサ・コアのステートが、レーン・モードからスレッド・モードに転送される。例示的な実施形態によれば、ステップ８０２Ａは、ｉ）レーン・レジスタをメモリに退避させること（例えば、前に説明した、図２のステップ２０８を参照されたい）、および、ｉｉ）コンテンツをレーン・レジスタからスレッド・レジスタに転送する／移動させること（上記を参照されたい）、の少なくとも１つを含むが、それらに限定されない。
【００５３】
ステップ８０４Ａで、特殊命令が、プロセッサ・モードをスレッド・モードに変化させるために呼び出される。例示的な実施形態によれば、特殊命令は、プロセッサ・コアの内部の特殊フラグ／レジスタをセットし、それによって、すべての後続命令が、スレッド・モードで実行される。ステップ８０６Ａで、レーンにより使用されるステートが解放され、ステップ８０８Ａで、命令ストリームはスレッド・モードで実行される。「ステート」は、レーン・モードを開始する前にコンパイラにより割り振られた、可能なｃｐｕおよびメモリ・リソース（例えば、スタック空間）を意味する。
【００５４】
一方、レーン・モードでの命令実行中に例外が発生した時、レーン・モードは割り込みされ、コアは通常のスレッド・モードに戻される。その場合、例外ハンドラが、コアをスレッド・モードに変化させることになり、割り込みからの戻りが、レーン・モード・ステータスを復元することになる。例えば図９を参照されたい。当技術分野で知られているように、例外ハンドラは、例外を解決することを試行するために実行される特定のサブルーチンである。例外ハンドラは、スレッド・モードで、より良好に実行され、そのため、レーン・モードの余分なセマンティクスに関わる必要がない。
【００５５】
図９は、プロセッサ・コアをレーン・モードからスレッド・モードに非自発的にスイッチする（遷移させる）ための例示的な方法論８００Ｂを示す図である。図９に示すように、方法論８００Ｂは、ステップの例示的な系列を表し、それらのステップは、例外がレーン・モードでの命令実行中に発生した時に、スレッド・モードにスイッチするために、（図６の）方法論６００のステップ６１０によって実行され得るものである。当技術分野で知られているように、例外は、命令でのコンフリクトまたはエラーに起因して発生し、オペレーションを停止またはアボートさせ得る。例えば、０による除算を含む計算により例外が発生する。
【００５６】
この例では、ステップ８０２Ｂに従って、レーン・モードでの命令ストリームの実行の間に、例外を引き起こす命令が発生する。プログラム・カウンタ（ＰＣ）は、実行されている現在の命令（または代替的に、次の命令）をマーキングまたはポイントする。例外が発生した時、レーン・モード実行に割り込みし、コアを通常（デフォルト）スレッド・モードに戻すことが望ましい。例外が対処されると、所望のレーン・モードに戻るための試みが行われることになる。したがってステップ８０４Ｂで、必要なステートが、後でレーン・モードを再開するために退避させられる。例示的な実施形態によれば、このことは、例外を引き起こしたレーンのステートを退避させること、または、レーン・レジスタのステートを退避させること、あるいはその両方を含む。
【００５７】
次にステップ８０６Ｂで、命令が、レーン・モードからスレッド・モードにスイッチするために呼び出される。コアが、通常スレッド・モードに戻されると、例外を解決する（すなわち、対処する）ことができる。ステップ８０８Ｂを参照されたい。例外は、当技術分野で知られているように、例外ハンドラを使用して解決することができる。例外が解決されると、レーン・モード・ステータスが復元される。例えば、ステップ８１０Ｂで、レーン・モード・ステートが復元され、ステップ８１２Ｂで、コアがレーン・モードに遷移させられる。ステップ８１４Ｂで、計算が、それがステップ８０４Ｂ（上記を参照されたい）で中断されたところから再開され、例外を引き起こしたレーンでの命令が再試行される。
【００５８】
スレッドからレーンへ、およびレーンからスレッドへモードを遷移させる技法について説明してきたが、次に、どのようにレジスタが、スレッド・モードからレーン・モードへのシフト、およびその逆のシフトに対して準備されるかの非限定的な例について説明する。
【００５９】
例：ユーザは、関数ｆｏｏ（Ａ，Ｂ，…）をレーン・モードで実行することを欲し、Ｌはレーンの数であり、ＬＧＲ［０…Ｌ］［０…３２］は、各々のレーンに対する汎用レジスタであり、ＧＰＲ［３２］は、スレッド・モードに対する汎用レジスタであるとする。コンパイラまたはユーザは、関数ｆｏｏを、以下のアクションを実行することになる、シングル命令マルチ・レーン実行ラッパ内にラップしなければならない。
ｓｍｉｌｅ＿ｆｏｏ（Ａ，Ｂ，…）｛
ｆｏｒ（ｉ＝０；ｉ＜Ｌ；ｉ＋＋）｛  ／／必要なステートをスレッドからレーンに転送する
ＬＧＲ（ｉ）［６］＝Ｎ；  ／／
ＬＧＲ（ｉ）［５］＝Ｂ；  ／／  パラメータを、スレッド・レジスタからコピーすることによりコールに対して準備する
ＬＧＲ（ｉ）［４］＝Ａ；  ／／  レーン・レジスタに
ＬＧＲ（ｉ）［２］＝ＧＰＲ［２］；  ／／  各々のレーンは、スレッド・モードでのものと同じＴＯＣを得る
ＬＧＲ（ｉ）［１］＝ｓｔａｃｋ（ｉ）；  ／／  各々のレーンは、それ自体のスタックを得る
ＬＧＲ（ｉ）［０］＝ｉ；  ／／  各々のレーンは、レーンｉｄを得る（専用レジスタ（ＳＰＲ）またはスタック・ロケーションであり得る）
｝
ｅａｌ  ／／  すべてのレーンを有効にする
ｓｗｉｔｃｈ２ｌｍ  ／／  レーン・モードにスイッチする
各々のレーンがｆｏｏ（Ａ，Ｂ）をコールする
ｓｗｉｔｃｈ２ｔｍ  ／／スレッド・モードにスイッチする
｝
【００６０】
本発明は、システム、方法、またはコンピュータ・プログラム製品であり得る。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるための、コンピュータ可読プログラム命令を有する、コンピュータ可読ストレージ・メディア（または、複数のメディア）を含み得る。
【００６１】
コンピュータ可読ストレージ・メディアは、命令実行デバイスによる使用のための命令を保持および記憶し得る有形デバイスであり得る。コンピュータ可読ストレージ・メディアは、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、または、上述のものの任意の適した組合せであり得るが、それらに限定されない。コンピュータ可読ストレージ・メディアの、より具体的な例の非網羅的な列挙としては、以下のもの、すなわち、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル・バーサタイル・ディスク（ＤＶＤ）、ｍｅｍｏｒｙ  ｓｔｉｃｋ（Ｒ）、フロッピー（Ｒ）・ディスク、命令が記録されるパンチ・カードまたは溝内の一段高い構造などの機械的に符号化されるデバイス、および、上述のものの任意の適した組合せを含む。コンピュータ可読ストレージ・メディアを、本明細書で使用する場合は、本質的には、電波もしくは他の自由伝搬する電磁波、導波路もしくは他の伝送メディアを介して伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、または、電線を介して伝送される電気信号などの、一時的な信号であると解釈すべきではない。
【００６２】
本明細書で説明するコンピュータ可読プログラム命令は、それぞれのコンピューティング／処理デバイスにコンピュータ可読ストレージ・メディアから、あるいは、外部コンピュータまたは外部ストレージ・デバイスに、ネットワーク、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはその組合せを介して、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備え得る。各々のコンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、コンピュータ可読プログラム命令を、それぞれのコンピューティング／処理デバイスの内部のコンピュータ可読ストレージ・メディアでの記憶のために転送する。
【００６３】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、ステート・セッティング・データ、または、１つもしくは複数のプログラミング言語の任意の組合せで書き記される、ソース・コードもしくはオブジェクト・コードのいずれかであり得るものであり、それらのプログラミング言語は、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋、または類するものなどのオブジェクト指向プログラミング言語、および、「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む。コンピュータ可読プログラム命令は、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンド・アローン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上、および部分的にリモート・コンピュータ上で、または、全体的にリモート・コンピュータもしくはサーバ上で実行し得る。後の方のシナリオでは、リモート・コンピュータは、ユーザのコンピュータに、ローカル・エリア・ネットワーク（ＬＡＮ）もしくはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介して接続され得るものであり、または接続は、外部コンピュータに対して（例えば、インターネットを介して、インターネット・サービス・プロバイダを使用して）行われ得る。一部の実施形態では、例えば、プログラマブル論理回路網、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル論理アレイ（ＰＬＡ）を含む電子回路網が、本発明の態様を実行するために、コンピュータ可読プログラム命令のステート情報を利用して、電子回路網をパーソナライズすることにより、コンピュータ可読プログラム命令を実行し得る。
【００６４】
本発明の態様を、本明細書では、本発明の実施形態による、方法、装置（システム）、およびコンピュータ・プログラム製品の、フローチャート図またはブロック図あるいはその両方を参照して説明している。フローチャート図またはブロック図あるいはその両方の各々のブロック、および、フローチャート図またはブロック図あるいはその両方でのブロックの組合せが、コンピュータ可読プログラム命令により実装され得るということが理解されよう。
【００６５】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行する命令が、フローチャートまたはブロック図あるいはその両方の、１つまたは複数のブロックで指定される機能／行為を実装するための手段を作り出するように、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、マシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令はさらには、命令が記憶されたコンピュータ可読ストレージ・メディアが、フローチャートまたはブロック図あるいはその両方の、１つまたは複数のブロックで指定される機能／行為の態様を実装する命令を含む製造品を構成するように、コンピュータ可読ストレージ・メディアに記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはその組合せに、特定の方式で機能するように指示することができるものであってもよい。
【００６６】
コンピュータ可読プログラム命令はさらには、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の、１つまたは複数のブロックで指定される機能／行為を実装するように、コンピュータ実装プロセスを生み出すべく、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【００６７】
図でのフローチャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装形態の、アーキテクチャ、機能性、および動作を示すものである。この点に関して、フローチャートまたはブロック図での各々のブロックは、指定される論理機能を実装するための１つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または一部分を表し得る。一部の代替的実装形態では、ブロックで記される機能は、図で記される順序から外れて発生することがある。例えば、連続して示される２つのブロックは、実際には、実質的に同時発生的に実行されることがあり、または、ブロックは時には、含まれる機能性に依存して、逆の順序で実行されることがある。ブロック図またはフローチャート図あるいはその両方の各々のブロック、および、ブロック図またはフローチャート図あるいはその両方でのブロックの組合せは、指定される機能もしくは行為を実行する、または、専用ハードウェアおよびコンピュータ命令の組合せを実行する、専用ハードウェアに基づくシステムにより実装され得るということが、さらには留意されよう。
【００６８】
ここで図１０に目を向けると、本明細書で提示される方法論の１つまたは複数を実装するための装置９００のブロック図が示されている。単に例として、装置９００は、図５の方法論５００のステップの１つもしくは複数、図６の方法論６００のステップの１つもしくは複数、図７の方法論７００のステップの１つもしくは複数、図８の方法論８００Ａのステップの１つもしくは複数、または、図９の方法論８００Ｂのステップの１つもしくは複数、あるいはその組合せを実装するように構成される。
【００６９】
装置９００は、コンピュータ・システム９１０と、リムーバブル・メディア９５０とを含む。コンピュータ・システム９１０は、プロセッサ・デバイス９２０と、ネットワーク・インターフェイス９２５と、メモリ９３０と、メディア・インターフェイス９３５と、オプションのディスプレイ９４０とを含む。ネットワーク・インターフェイス９２５によって、コンピュータ・システム９１０が、ネットワークに接続することが可能となり、一方で、メディア・インターフェイス９３５によって、コンピュータ・システム９１０が、ハード・ドライブまたはリムーバブル・メディア９５０などのメディアとインタラクトすることが可能となる。
【００７０】
プロセッサ・デバイス９２０は、本明細書で開示される方法、ステップ、および機能を実装するように構成され得る。メモリ９３０は、分散型でもローカルでもよく、プロセッサ・デバイス９２０は、分散型でも単体でもよい。メモリ９３０は、電気、磁気、もしくは光メモリ、または、これらもしくは他のタイプのストレージ・デバイスの任意の組合せとして実装され得る。さらに、用語「メモリ」を、プロセッサ・デバイス９２０によりアクセスされるアドレス指定可能空間内のアドレスから読み出される、または、そのアドレスに書き込まれることが可能な任意の情報を包含するのに十分に、広範に解釈すべきである。この定義によって、ネットワーク・インターフェイス９２５を介してアクセス可能なネットワーク上の情報は、プロセッサ・デバイス９２０がその情報をネットワークから検索し得るので、やはりメモリ９３０の範囲内にある。プロセッサ・デバイス９２０を構成する各々の分散型プロセッサは、一般的には、それ自体のアドレス指定可能メモリ空間を含む。コンピュータ・システム９１０の一部またはすべては、特定用途向け、または一般用の集積回路に組み込むことができる。
【００７１】
オプションのディスプレイ９４０は、装置９００の人間のユーザとインタラクトするのに適した、任意のタイプのディスプレイである。一般的にはディスプレイ９４０は、コンピュータ・モニタ、または他の同様のディスプレイである。
【００７２】
本発明の例示的な実施形態を、本明細書で説明したが、本発明は、それらの実施形態に限定されることはなく、当業者であれば、様々な他の変形および変更を、本発明の範囲から逸脱することなく行うことができるであろう。
【図１】
0006697457.tif 000002
【図２】
0006697457.tif 000003
【図３】
0006697457.tif 000004
【図４】
0006697457.tif 000005
【図５】
0006697457.tif 000006
【図６】
0006697457.tif 000007
【図７】
0006697457.tif 000008
【図８】
0006697457.tif 000009
【図９】
0006697457.tif 000010
【図１０】
0006697457.tif 000011