(57)【要約】  システム（３００）は、マスタプロセッサ（３０１）と少なくとも１つのスレーブプロセッサ（３２１，３３１）とを有する。前記マスタプロセッサ（３０１）の状態には第１の複数の変数が含まれ、前記スレーブプロセッサ（３２１，３３１）の状態には第２の複数の変数が含まれる。前記システム（３００）は、前記マスタプロセッサ（３０１）と前記スレーブプロセッサ（３２１，３３１）とによってデータが処理されるパラレル動作モードと、前記マスタプロセッサ（３０１）によってデータが処理されるシリアル動作モードとを有する。前記システム（３００）は、前記パラレル動作モードで割り込みまたは例外が発生すると、前記第１の複数の変数および前記第２の複数の変数の少なくとも一部をバッファメモリ（３１３）に保存するステップと、前記システム（３００）を前記シリアル動作モードに切り替えるステップと、を実行する。前記スレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記第１の複数の変数の少なくとも１つが、前記第２の複数の変数の少なくとも１つの値にセットされる。
2010529533.tif 000002
【特許請求の範囲】
【請求項１】
マスタプロセッサ（３０１）と少なくとも１つのスレーブプロセッサ（３２１，３３１）とを有するシステム（３００）であって、前記マスタプロセッサ（３０１）の状態には第１の複数の変数が含まれ、前記スレーブプロセッサ（３２１，３３１）の状態には第２の複数の変数が含まれ、前記システム（３００）は、前記マスタプロセッサ（３０１）と前記スレーブプロセッサ（３２１，３３１）とによってデータが処理されるパラレル動作モードと、前記マスタプロセッサ（３０１）によってデータが処理されるシリアル動作モードとを有し、
前記システム（３００）は、前記パラレル動作モードで割り込みまたは例外が発生すると、前記第１の複数の変数および前記第２の複数の変数の少なくとも一部をバッファメモリ（３１３）に保存するステップと、前記システム（３００）を前記シリアル動作モードに切り替えるステップと、を実行するように構成され、
前記システム（３００）は、前記スレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記第１の複数の変数の少なくとも１つを、前記第２の複数の変数の少なくとも１つの値にセットするように更に構成されているシステム（３００）。
【請求項２】
前記第１の複数の変数は第１の戻りアドレスを含み、前記第２の複数の変数は第２の戻りアドレスを含み、前記システム（３００）はトランポリン命令を備え、
前記システム（３００）は、前記マスタプロセッサ（３０１）で前記割り込みまたは例外が発生した場合に、前記第１の戻りアドレスおよび前記第２の複数の変数を前記バッファメモリ（３１３）に保存するステップと、前記第１の戻りアドレスを前記トランポリン命令のアドレスで置換するステップと、を実行するように構成され、
前記トランポリン命令は、前記マスタプロセッサ（３０１）で前記割り込みまたは例外が発生した場合に、前記システム（３００）を前記パラレル動作モードに切り替えるステップと、前記バッファメモリ（３１３）から前記第２の複数の変数および前記第１の戻りアドレスを読み出すステップと、を実行するように構成されている、請求項１に記載のシステム（３００）。
【請求項３】
前記システム（３００）は、前記スレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記第１の複数の変数および前記第２の複数の変数を前記バッファメモリ（３１３）に保存するステップと、前記第１の戻りアドレスを前記トランポリン命令の前記アドレスで置換するステップと、前記シリアル動作モードに切り替えるステップと、を実行するように更に構成され、
前記トランポリン命令は、前記少なくとも１つのスレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記システム（３００）を前記パラレル動作モードに切り替えるステップと、前記バッファメモリ（３１３）から前記第２の複数の変数を読み出すステップと、前記第２の複数の変数の前記少なくとも１つを、前記第１の複数の変数の前記少なくとも１つの値にセットするステップと、前記バッファメモリ（３１３）から前記第１の複数の変数を読み出すステップと、を実行するように構成されている、請求項２に記載のシステム（３００）。
【請求項４】
前記パラレル動作モードを許可するための許可命令を更に備え、前記許可命令は、前記第１の複数の変数の第１の変数を前記バッファメモリ（３１３）のアドレスにセットし、前記第１の複数の変数の第２の変数を前記トランポリン命令のアドレスにセットし、前記プロセッサを前記パラレル動作モードに切り替えるように構成されている、請求項１乃至３のいずれか１項に記載のシステム（３００）。
【請求項５】
前記第１の複数の変数の１つ以上の値を、前記第２の複数の変数の１つ以上に書き込むように構成された変数送信命令を更に備える、請求項１乃至３のいずれか１項に記載のシステム（３００）。
【請求項６】
前記第２の複数の変数の１つ以上の値を、前記第１の複数の変数の１つ以上に書き込むように構成された変数受信命令を更に備える、請求項１乃至３のいずれか１項に記載のシステム（３００）。
【請求項７】
前記少なくとも１つのスレーブプロセッサ（３２１，３３１）による命令の実行を開始するように構成されたフォーク命令を更に備え、前記命令の実行は特定のメモリアドレスにおいて開始する、請求項１乃至３のいずれか１項に記載のシステム（３００）。
【請求項８】
前記少なくとも１つのスレーブプロセッサ（３２１，３３１）による命令の実行を停止するように適合されたスレーブジョイン命令を更に備える、請求項１乃至３のいずれか１項に記載のシステム（３００）。
【請求項９】
前記少なくとも１つのスレーブプロセッサ（３２１，３３１）での命令の実行が終了するまで、前記マスタプロセッサ（３０１）を待機させるように構成されたマスタジョイン命令を更に備える、請求項８に記載のシステム（３００）。
【請求項１０】
前記システム（３００）を前記パラレル動作モードから前記シリアル動作モードに切り替えるように構成されたエンド命令を更に備える、請求項１乃至３のいずれか１項に記載のシステム（３００）。
【請求項１１】
マスタプロセッサ（３０１）と少なくとも１つのスレーブプロセッサ（３２１，３３１）とを有するシステム（３００）を動作させる方法であって、前記マスタプロセッサ（３０１）の状態には第１の複数の変数が含まれ、前記スレーブプロセッサ（３２１，３３１）の状態には第２の複数の変数が含まれ、前記システム（３００）は、前記マスタプロセッサ（３０１）と前記スレーブプロセッサ（３２１，３３１）とによってデータが処理されるパラレル動作モードと、前記スレーブプロセッサ（３２１，３３１）によってデータが処理されるシリアル動作モードとを有し、前記方法は、
前記パラレル動作モードで割り込みまたは例外が発生すると、前記第１の複数の変数および前記第２の複数の変数の少なくとも一部をバッファメモリ（３１３）に保存するステップと、前記システム（３００）を前記シリアル動作モードに切り替えるステップとを実行し、
前記少なくとも１つのスレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記第１の複数の変数の少なくとも１つを、前記第２の複数の変数の少なくとも１つの値にセットする方法。
【請求項１２】
前記第１の複数の変数は第１の戻りアドレスを含み、前記第２の複数の変数は第２の戻りアドレスを含み、前記システム（３００）はトランポリン命令を備え、前記方法はさらに、
前記マスタプロセッサ（３０１）で前記割り込みまたは例外が発生した場合に、前記第１の戻りアドレスおよび前記第２の複数の変数を前記バッファメモリ（３１３）に保存するステップと、前記第１の戻りアドレスを前記トランポリン命令のアドレスで置換するステップとを実行し、
前記トランポリン命令が実行される際に、前記マスタプロセッサ（３０１）で前記割り込みまたは例外が発生した場合に、前記システム（３００）を前記パラレル動作モードに切り替えるステップと、前記バッファメモリ（３１３）から前記第２の複数の変数および前記第１の戻りアドレスを読み出すステップと、を実行する請求項１１に記載の方法。
【請求項１３】
前記スレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記第１の複数の変数および前記第２の複数の変数を前記バッファメモリ（３１３）に保存するステップと、前記第１の戻りアドレスを前記トランポリン命令の前記アドレスで置換するステップと、前記シリアル動作モードに切り替えるステップと、を実行し、
前記トランポリン命令を実行する際に、前記少なくとも１つのスレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記システム（３００）を前記パラレル動作モードに切り替えるステップと、前記バッファメモリ（３１３）から前記第２の複数の変数を読み出すステップと、前記第２の複数の変数の前記少なくとも１つを、前記第１の複数の変数の前記少なくとも１つの値にセットするステップと、前記バッファメモリ（３１３）から前記第１の複数の変数を読み出すステップと、を実行する請求項１２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般にコンピュータシステムの分野に関し、より詳細には、複数のプロセッサを備えるシステムに関する。
【背景技術】
【０００２】
最新のコンピュータシステムでは、複数の命令を備えるプロセッサが使用されている。プロセッサは、プロセッサに接続されたシステムメモリから命令およびデータを読み出し、命令に従って命令および／またはデータを変更する。システムメモリには、ＲＡＭなどの揮発性であるが高速アクセス可能なメモリデバイスのほか、ハードディスクなどの低速であるが永久的なメモリデバイスも含まれる。また、コンピュータは、キーボード、マウスなどのデバイスおよび／またはネットワーク接続から入力を受け取り、例えばモニタ、１台以上のスピーカおよび／またはプリンタなどのデバイスに出力を供給しうる。ほとんどのコンピュータシステムでは、各種プログラムの処理と共に、コンピュータシステムの構成要素間のデータ転送を制御するために、「オペレーティングシステム」と呼ばれる専用のコンピュータプログラムが使用されている。
【０００３】
図１ａは、従来技術（the stete of the art）に係るコンピュータシステム１００の模式ブロック図を示す。コンピュータシステム１００は、プロセッサ１０１、システムメモリ１０４、および１台以上の入出力デバイス１０３を備える。矢印１０２は、プロセッサ１０１、システムメモリ１０４および入出力デバイス１０３間のデータ転送を模式的に示す。
【０００４】
プロセッサ１０１は、複数のレジスタ１０２，１０３，１０４，１０５を備える。データがシステムメモリ１０４からレジスタ１０２〜１０５に読み出されると共に、レジスタ１０２〜１０５内のデータがシステムメモリ１０４に書き込まれうる。プロセッサ１０１は、レジスタ１０２〜１０５の内容を変更するように適合された命令のほか、レジスタ１０２〜１０５とシステムメモリ１０４間および／またはレジスタ１０２〜１０５間でデータを転送するための命令を備えうる。また、このようなタスクを組み合わせて実行する命令も提供されてもよい。通常、プロセッサ１０１は、システムメモリ１０４に記憶されているデータよりも、レジスタ１０２〜１０５内のデータのほうが極めて高速にアクセスすることができる。
【０００５】
コンピュータシステム１００のパフォーマンスを向上させるために、１つのシングルプロセッサ１０１の代わりに、複数のプロセッサを提供することが望ましいことがある。このようにすれば、複数のタスクおよび／またはスレッドを同時に実行することができる。これにより、コンピュータシステム１００の動作速度を高速化することができる。
【０００６】
しかし、従来技術に係るコンピュータシステムでは、図１ｂを参照して以下で説明するように、プロセッサの個数を増やすと、オペレーティングシステムの変更が必要となることがある。図１ｂは、従来技術に係るコンピュータシステム１００のプロセッサ１０１で実行中のタスク２０１の模式フローチャートを示す。タスク２０１には、プロセッサ１０１によって逐次的に処理される複数の命令２１０〜２１５が含まれる。このため、プロセッサ１０１は、命令２１０から命令２１１へ、命令２１１から命令２１２へと順に処理していく。
【０００７】
タスク２０１の処理中、例えば、命令２１２の処理中またはその後に、割り込みまたは例外（図１ｂでは矢印２３０で模式的に示す）が発生しうる。例外は、命令２１２の処理中のエラーの場合（例えば、ゼロ除算の場合）、あるいは、システムメモリ１０４からのエラーメッセージ（ページフォルトなど）の場合に生成されうる。また、例外は、タスク２０１の命令（例えば命令２１２）によっても定期的に発生しうる。タスク２０１によって発生する例外の代表的な用途として、コンピュータシステム１００のオペレーティングシステムの呼び出しがある。割り込みは、プロセッサ１０１以外のデバイスに起因するイベントによって、例えば、入出力デバイス１０３に対する入力によって、あるいは、入出力デバイス１０３の同期要求によって生成されうる。コンピュータシステム１００でマルチタスク処理が実行されている場合には、プロセスまたはスレッドなどの各種タスクを交替に作動させるために、タイミング回路によって生成される割り込みが使用されうる。
【０００８】
割り込みまたは例外時には、タスク２０１の実行が中断され、割り込みルーチン２０２（例えば、オペレーティングシステムの一部である）が実行される。割り込みルーチン２０２には、複数の命令２２０〜２２５が含まれる。これらの命令は逐次的に処理される。割り込みルーチン２０２の最後の命令２２５の処理後に、タスク２０１の処理が、割り込みが発生した命令２１２の次の命令（すなわち、上の例では命令２１３）から再開されうる。
【０００９】
割り込みルーチン２０２は、プロセッサ１０１のレジスタ１０２〜１０５の内容を変更することがある。割り込みまたは例外が発生しても、タスク２０１が正常に動作することを保証するために、割り込みまたは例外の発生後に、レジスタ１０２〜１０５の内容が、システムメモリ１０４内の記憶位置にコピーされる。タスク２０１の実行が再開される前に、記憶位置の内容が読み出されて、レジスタ１０２〜１０５に戻される。このようにして、命令２１３を実行してタスク２０１の実行が再開される際に、レジスタ１０２〜１０が、命令２１３が命令２１２の直後に実行されたと仮定した場合と実質的に同じデータを有することができる。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
従来技術に係るコンピュータシステム１００では、レジスタの内容の記憶位置へのコピーとその読み戻しが、割り込みルーチン２０２に含まれる命令によって行われ、このような命令は、コンピュータシステム１００のオペレーティングシステムの一部として実装されている。このため、コンピュータシステム１００にプロセッサを追加する際には、プロセッサのいずれかで割り込みまたは例外が発生した場合に、プロセッサのレジスタの内容がシステムメモリに正しく記憶され、割り込みルーチンの完了後に、レジスタに正しく読み戻されることを保証するために、オペレーティングシステムの変更が必要となることがある。
【００１１】
個々のプロセッサでのプロセスの実行およびタスクをスケジュールするために、オペレーティングシステムの更なる変更することが必要となりうる。従来技術に係るコンピュータシステムでは、プロセッサでのプロセスおよび／またはスレッドの実行と、プロセッサへのプログラムおよび／またはスレッドの分配との制御が、オペレーティングシステムによって行われる。複数のプロセッサ用にオペレーティングシステムを適合させる必要があることに加え、プロセスおよび／またはスレッドの実行の制御は、プロセスおよび／またはスレッドの作成および／または制御のために比較的大きなオーバーヘッドを必要としうる。詳細には、オペレーティングシステムルーチンの呼び出し前に、プロセッサのレジスタの内容を記憶位置にコピーして、オペレーティングシステムルーチンの終了後に、記憶位置の内容をレジスタに読み戻すことにより、相当のオーバーヘッドが発生しうる。
【００１２】
従来技術に係るコンピュータシステム１００の問題点として、オペレーティングシステムの開発業者が、追加のプロセッサまたは他の任意の可能なデバイスのサポートを実装するまで、コンピュータシステム１００に追加されたプロセッサを適切に使用することができないという点が挙げられる。
【００１３】
従来技術に係るコンピュータシステム１００の更に別の問題点として、オペレーティングシステムによるプロセスおよび／またはスレッドの作成および／または制御に要するオーバーヘッドが比較的大きいことにより、特に、比較的粒度の細かいマルチタスク処理および／またはマルチスレッド処理が使用される場合に、コンピュータシステム１００のパフォーマンスが低下することがあるという点が挙げられる。
【００１４】
更に、複数のプロセッサをサポートしている従来技術に係るコンピュータシステムの場合であっても、追加のプロセッサまたは機能をオペレーティングシステムから隠すことが望ましいことがある。これには、オペレーティングシステムによって認識されない追加のハードウェアおよび／またはプロセッサも含まれうる。したがって、従来技術に係るコンピュータシステム１００の更に別の問題点として、オペレーティングシステムから認識されないプロセッサまたはハードウェアなどの追加の資源を使用することが難しいことがある点が挙げられる。
【００１５】
本開示は、上に記載した問題の１つ以上の影響を回避することができるか、または少なくとも低減させることができる各種のシステムおよび方法を対象としている。
【課題を解決するための手段】
【００１６】
以下では、本発明の一部の態様の基本を理解できるように、発明の概要を説明する。この概要は、本発明のすべてを概観するものではない。本発明の主要または重要な要素を特定したり、本発明の範囲を詳細に記載することを意図するものでもない。その唯一の目的は、下で説明する詳細な説明に先だって、概念の一部を簡潔に示すことにある。
【００１７】
例示的な一例によれば、システムは、マスタプロセッサと少なくとも１つのスレーブプロセッサとを有する。前記マスタプロセッサの状態には第１の複数の変数が含まれ、前記スレーブプロセッサの状態には第２の複数の変数が含まれる。前記システムは、前記マスタプロセッサと前記スレーブプロセッサとによってデータが処理されるパラレル動作モードと、前記マスタプロセッサによってデータが処理されるシリアル動作モードとを有する。前記システムは、前記パラレル動作モードで割り込みまたは例外が発生すると、前記第１の複数の変数および前記第２の複数の変数の少なくとも一部をバッファメモリに保存するステップと、前記システムを前記シリアル動作モードに切り替えるステップと、を実行するように構成されている。前記システムは、前記スレーブプロセッサで前記割り込みまたは例外が発生した場合に、前記第１の複数の変数の少なくとも１つを、前記第２の複数の変数の少なくとも１つの値にセットするように更に構成されている。
【００１８】
例示的な別の例によれば、システムは、マスタプロセッサと少なくとも１つのスレーブプロセッサとを有する。前記マスタプロセッサの状態には、第１の戻りアドレスを含む第１の複数の変数が含まれ、前記スレーブプロセッサの状態には、第２の戻りアドレスを含む第２の複数の変数が含まれる。前記システムは、前記マスタプロセッサと前記スレーブプロセッサとによってデータが処理されるパラレル動作モードと、前記マスタプロセッサによってデータが処理されるシリアル動作モードとを有する。前記システムは、トランポリン命令を備える。前記システムは、前記パラレル動作モード中に前記マスタプロセッサで割り込みまたは例外が発生すると、前記第１の戻りアドレスおよび前記第２の複数の変数を前記バッファメモリに保存するステップと、前記第１の戻りアドレスを前記トランポリン命令のアドレスで置換するステップと、前記シリアル動作モードに切り替えるステップと、を実行するように構成されている。前記システムは、前記パラレル動作モード中に前記スレーブプロセッサで割り込みまたは例外が発生すると、前記第１の複数の変数および前記第２の複数の変数をバッファメモリに保存するステップと、前記第１の複数の変数の少なくとも１つを、前記第２の変数の少なくとも１つの値にセットするステップと、前記第１の戻りアドレスを前記トランポリン命令のアドレスで置換するステップと、前記第１の動作モードに切り替えるステップと、を実行するように更に構成されている。前記トランポリン命令は、前記マスタプロセッサで前記割り込みまたは例外が発生した場合に、前記システムを前記パラレル動作モードに切り替えるステップと、前記バッファメモリから前記第２の複数の変数および前記第１の戻りアドレスを読み出すステップと、を実行するように適合されている。前記トランポリン命令は、前記少なくとも１つのスレーブプロセッサで前記割り込みまたは例外が発生した場合に、前記システムを前記パラレル動作モードに切り替えるステップと、前記バッファメモリから前記第２の複数の変数を読み出すステップと、前記第２の複数の変数の前記少なくとも１つを、前記第１の複数の変数の前記少なくとも１つの値にセットするステップと、前記バッファメモリから前記第１の複数の変数を読み出すステップと、を実行するように更に適合されている。
【００１９】
更に別の例示的な例によれば、マスタプロセッサと少なくとも１つのスレーブプロセッサとを有するシステムを動作させる方法であって、前記マスタプロセッサの状態には第１の複数の変数が含まれ、前記スレーブプロセッサの状態には第２の複数の変数が含まれ、前記システムは、前記マスタプロセッサと前記スレーブプロセッサとによってデータが処理されるパラレル動作モードと、前記スレーブプロセッサによってデータが処理されるシリアル動作モードとを有し、前記方法は、以下の特徴を有する。前記パラレル動作モードで割り込みまたは例外が発生すると、前記第１の複数の変数および前記第２の複数の変数の少なくとも一部をバッファメモリに保存するステップと、前記システムを前記シリアル動作モードに切り替えるステップと、が実行される。前記少なくとも１つのスレーブプロセッサで前記割り込みが発生すると、前記第１の複数の変数の少なくとも１つが、前記第２の複数の変数の少なくとも１つの値にセットされる。
【図面の簡単な説明】
【００２０】
【図１ａ】従来技術に係るコンピュータシステムの模式図。
【図１ｂ】従来技術に係るコンピュータシステムで実行中のプログラムおよび割り込みルーチンのフローチャート。
【図２ａ】本開示の例示的な一実施形態に係るコンピュータシステムの模式図。
【図２ｂ】本開示の例示的な一実施形態に係るコンピュータシステムで実行中のプログラムのフローチャート。
【図２ｃ】本開示の例示的な一実施形態に係るコンピュータシステムで実行中のプログラムおよび割り込みルーチンのフローチャート。
【発明を実施するための形態】
【００２１】
添付の図面と併せて下記の説明を読めば、本発明が理解されるであろう。添付の図面においては、同一の参照符号は同じ要素を参照している。
【００２２】
本明細書に記載の主題は、種々の変形および代替形態を取り得るが、その特定の実施形態が、図面に例として図示され、ここに詳細に記載されているに過ぎない。しかし、この特定の実施形態の詳細な説明は、本発明を開示した特定の形態に限定することを意図するものではなく、反対に、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれるすべての変形例、均等物および代替例を含む点に留意すべきである。
【００２３】
本発明の各種の例示的な実施形態を下記に記載する。簡潔を期すために、実際の実装の特徴をすべて本明細書に記載することはしない。当然、実際の実施形態の開発においては、システム上の制約およびビジネス上の制約に適合させるなど、開発の具体的な目的を達成するために、実装に固有の判断が数多く必要とされ、これは実装によって変わるということが理解される。更に、この種の開発作業は複雑かつ時間がかかるものであるが、本開示の利益を受ける当業者にとって日常的な作業であるということを理解されたい。
【００２４】
次に、添付の図面を参照して本主題を説明する。説明のみを目的として、当業者に知られている細かい点を説明して本開示をわかりにくくすることのないように、さまざまな構造、システムおよびデバイスが、図面で模式的に示されている。しかし、本開示の例示的な例を記載および説明するために、添付の図面を添付する。本明細書において使用される語句は、関連技術の当業者が理解している意味と同じ意味に使用されていると理解および解釈すべきである。本明細書においてある語句が矛盾なく用いられている場合、その語句が特別な定義を有する、すなわち通常かつ慣用的に用いられ、当業者が理解している意味と異なる定義を有することはない。ある語句が特別な意味を有する、すなわち当業者の理解とは異なる意味に用いられる場合は、そのような特別な定義は本明細書に明示的に記載して、その特別な定義を直接的かつ明確に示す。
【００２５】
例示的な一実施形態によれば、マスタプロセッサと少なくとも１つのスレーブプロセッサとを有するコンピュータシステムが提供される。一部の実施形態では、コンピュータシステムは１つのスレーブプロセッサを備えてもよいが、別の実施形態では、複数のスレーブプロセッサが設けられてもよい。コンピュータシステムは、マスタプロセッサと少なくとも１つのスレーブプロセッサとの両方によってデータが処理されるパラレル動作モードを有する。コンピュータシステムが複数のスレーブプロセッサを備える実施形態では、各スレーブプロセッサまたはスレーブプロセッサの一部のみが、命令をパラレル動作モードで同時に実行しうる。このため、パラレル動作モードでは、コンピュータシステムのパフォーマンスを向上させるために、複数のタスクを、マスタプロセッサとスレーブプロセッサとで同時に実行することができる。一部の実施形態では、シリアル動作モードは、コンピュータシステムが、１つのプロセッサのみを有する従来モデルの機能を提供する互換モードであってもよい。
【００２６】
マスタプロセッサの状態には、マスタプロセッサのレジスタの内容などの複数の変数が含まれる。同様に、各スレーブプロセッサの状態には、複数の変数が含まれ、この複数の変数には、スレーブプロセッサのレジスタの内容および／またはスレーブプロセッサが現在命令を実行しているかどうかを示す実行中状態ビットなどがある。マスタプロセッサとスレーブプロセッサの両方において、当該プロセッサの複数の変数の１つに、割り込みまたは例外がなくなった場合に、プロセッサが命令の実行を再開する戻りアドレスが格納されうる。例えば、戻りアドレスが、個々のプロセッサのレジスタの１つに価格能されうる。
【００２７】
コンピュータシステムは、マスタプロセッサの複数の変数の１つ以上の値を、スレーブプロセッサの１つの複数の変数の１つ以上に書き込むように適合された変数送信命令を備えうる。このため、スレーブプロセッサによってスレッドの実行が開始される前に、スレーブプロセッサのパラメータが設定されうる。各スレーブプロセッサにおける命令の実行がフォーク命令によって開始され、このフォーク命令は、命令の実行を開始するスレーブプロセッサの識別番号と、命令の実行を開始するターゲットアドレスとを、引数として受け取りうる。スレーブプロセッサでのスレッドの実行が、スレーブジョイン命令によって停止されうる。スレーブジョイン命令が、スレーブプロセッサによって実行されている命令のシーケンス中に存在する場合、スレーブプロセッサは命令の実行を停止する。マスタジョイン命令は、マスタプロセッサとスレーブプロセッサの１つとの間の同期に使用されうる。マスタジョイン命令は、スレーブプロセッサの識別番号を引数として呼び出される。マスタジョイン命令が、マスタプロセッサによって実行されている命令のシーケンス中に存在する場合、マスタプロセッサは、マスタジョイン命令の引数に指定されているスレーブプロセッサの命令の実行が終了するまで待機する。コンピュータシステムは、スレーブプロセッサの１つの複数の変数の１つ以上を、マスタプロセッサの複数の変数の１つ以上の値に書き込むように適合された変数受信命令を更に備えうる。変数受信命令は、スレーブプロセッサでのタスクの実行の結果の値、または結果を格納しているメモリバッファへのポインタを受け取るために使用さうる。
【００２８】
このため、コンピュータシステムにおいて、プロセスまたはスレッドを、マスタプロセッサとスレーブプロセッサとでパラレル方式で実行することができる。上で説明した命令を使用して、コンピュータシステムで実行中のオペレーティングシステムから独立して、スレーブプロセッサの１つ以上でのタスクの実行を、開始および停止させることができる。
【００２９】
コンピュータシステムは、パラレル動作モードで割り込みまたは例外が発生した場合に、マスタプロセッサおよびスレーブプロセッサの状態を表わす変数の少なくとも一部を、バッファメモリに保存し、システムをシリアル動作モードに切り替えるように構成されうる。詳細には、従来モデルのコンピュータシステムに存在しないレジスタの内容などの、スレーブプロセッサの変数とマスタプロセッサの変数とが保存されうる。このため、１つのプロセッサを備えたコンピュータシステムでは使用されない、スレーブプロセッサの変数とマスタプロセッサの変数を保存するように、オペレーティングシステムが適合されている必要はない。このため、１つのプロセッサを有する従来モデルとの本コンピュータシステムの互換性が得られ、従来モデル用に適合されたオペレーティングシステムを、本コンピュータシステムに使用することができる。
【００３０】
スレーブプロセッサで割り込みまたは例外が発生した場合、マスタプロセッサの複数の変数の少なくとも１つが、割り込みまたは例外が発生したスレーブプロセッサの複数の変数の少なくとも１つの値に設定されうる。このため、スレーブプロセッサの変数が、オペレーティングシステムに伝達され、オペレーティングシステムは、オペレーティングシステムによって実行されている割り込みルーチンに関連するデータを、マスタプロセッサから読み出しうる。
【００３１】
コンピュータシステムは、トランポリン命令を更に備えうる。トランポリン命令は、割り込みまたは例外時に記憶された、スレーブプロセッサの変数と、任意選択でマスタプロセッサの変数とを、バッファメモリから読み出すように適合されうる。また、トランポリン命令は、コンピュータシステムをシリアル動作モードからパラレル動作モードに切り替えるためにも適合されうる。スレーブプロセッサで割り込みまたは例外が発生した場合、トランポリン命令は、割り込みまたは例外が発生したときに、スレーブプロセッサの変数の値にセットされたマスタプロセッサの変数を、スレーブプロセッサの変数の値に書き込みうる。これは、バッファメモリからマスタプロセッサの元の変数を読み出す前に行なわれうる。
【００３２】
割り込みまたは例外時に、マスタプロセッサの戻りアドレスが、トランポリン命令のアドレスで置換されうる。このようにして、割り込みルーチンの終了後に、トランポリン命令が自動的に呼び出される。このため、１つのプロセッサを備えたコンピュータシステムにはないスレーブプロセッサおよび／またはマスタプロセッサの変数を、オペレーティングシステムから独立して処理することができる。これにより、オペレーティングシステムから認識されずに、コンピュータシステムのパラレル動作モードを使用することができる。このため、コンピュータシステムのパラレル動作モードを使用できるようにするために、オペレーティングシステムを適合させる必要が実質的になくなる。
【００３３】
図２ａは、例示的な一実施形態に係るコンピュータシステム３００の模式図を示す。コンピュータシステム３００は、マスタプロセッサ３０１と、スレーブプロセッサ３２１，３３１とを備える。しかし、本発明は、図２ａに示すような２つのスレーブプロセッサが提供される実施形態に限定されない。別の実施形態では、３以上のスレーブプロセッサが提供されてもよい。更に別の実施形態では、コンピュータシステム３００が、１つのスレーブプロセッサを備えてもよい。また、本発明は、スレーブプロセッサ３２１，３３１が汎用プロセッサである実施形態にも限定されない。別の実施形態では、スレーブプロセッサ３２１，３３１が特殊機能ハードウェアを備えてもよい。
【００３４】
コンピュータシステム３００は、システムメモリ３０４と入出力デバイス３０３とを更に備えうる。矢印３１４は、マスタプロセッサ３０１、スレーブプロセッサ３２１，３３１、システムメモリ３０４および入出力デバイス３０３間のデータ転送を模式的に示す。
【００３５】
マスタプロセッサ３０１は、複数のレジスタ３０２〜３０７を備える。一部の実施形態では、複数のレジスタ３０２〜３０７には、例えば、レジスタ３０２〜３０５を含む第１のサブセットと、レジスタ３０６，３０７を含む第２のサブセットとが含まれうる。第１のサブセットのレジスタ３０２〜３０５は、例えば、図１ａ〜１ｂを参照して上で説明したコンピュータシステム１００のプロセッサ１０１のレジスタ１０２〜１０５など、従来技術に係るコンピュータシステムのプロセッサのレジスタに対応しうる。マスタプロセッサ３０１は、コンピュータシステム３００のシリアル動作モードにおいて、従来技術に係るプロセッサ１０１の命令のセットを含む命令のセットを提供するように更に構成されうる。このため、コンピュータシステム３００は、シリアル動作モードにおいて、従来技術に係るコンピュータシステム１００用に提供されているバイナリコードを実行することができる。
【００３６】
第２のサブセットのレジスタ３０６，３０７は、下で更に詳細に説明するように、マスタプロセッサ３０１とスレーブプロセッサ３２１，３３１とにおけるデータのパラレル処理に関連するデータの転送を処理するために使用されうる。
【００３７】
マスタプロセッサ３０１と同様に、第１のスレーブプロセッサ３２１は、複数のレジスタ３２２〜３２５を備え、第２のスレーブプロセッサ３３１は、複数のレジスタ３３２〜３３５を備えうる。一部の実施形態では、スレーブプロセッサ３２１，３３１のレジスタ３２２〜３２１，３３２〜３３５は、マスタプロセッサ３０１のレジスタの第１のサブセット３０２〜３０５に対応しうる。レジスタ３０２〜３０７，３２２〜３２５，３３２〜３３５のそれぞれには、マスタプロセッサ３０２、第１のスレーブプロセッサ３２１および第２のスレーブプロセッサ３３１の状態を表す変数が記憶されうる。
【００３８】
一部の実施形態では、マスタプロセッサ３０１とスレーブプロセッサ３２１，３３１はそれぞれ、当業者に公知のｘ８６またはｘ８６−６４タイプのプロセッサの機能を提供するように適合されうる。別の実施形態では、マスタプロセッサ３０１とスレーブプロセッサ３２１，３３１のそれぞれが、別のタイプのプロセッサの機能を提供するように構成されてもよい。更に別の実施形態では、マスタプロセッサ３０１は、スレーブプロセッサ３２１，３３１とは異なるタイプのプロセッサの機能を提供するように適合されてもよい。
【００３９】
一実施形態では、マスタプロセッサ３０１は、既存のオペレーティングシステムが対応しているタイプのプロセッサの機能（例えば、ｘ８６またはｘ８６−６４プロセッサの機能）を提供するように適合されており、スレーブプロセッサ３２１，３３１は、必ずしもオペレーティングシステムが対応していなくてもよい別のタイプのプロセッサであってもよい。例えば、スレーブプロセッサ３２１，３３１のダイでの占有面積を最小化するために、スレーブプロセッサ３２１，３３１が簡易なアーキテクチャを有してもよい。これにより、コンピュータシステム３００のパフォーマンスを向上させるために、コンピュータシステム３００のスレーブプロセッサ３２１，３３１の個数を増やすことが可能となる。また、スレーブプロセッサ３２１，３３１のアーキテクチャと簡易化することにより、個々のスレーブプロセッサのそれぞれの動作速度を上げるために、スレーブプロセッサ３２１，３３１のクロック速度を上げることが可能となる。
【００４０】
一部の実施形態では、マスタプロセッサ３０１とスレーブプロセッサ３２１，３３１の１つ以上とが、１つのダイに設けられてもよい。別の実施形態では、マスタプロセッサ３０１とスレーブプロセッサ３２１，３３１とが、別のダイに設けられてもよい。
【００４１】
マスタプロセッサ３０１は、指標ビット３０８と制御レジスタビット３０９とを備えうる。指標ビット３０８は、コンピュータシステム３００が現在、マスタプロセッサ３０１によってデータが処理されうるシリアル動作モードと、マスタプロセッサ３０１とスレーブプロセッサ３２１，３３１の１つ以上の両方によってデータが処理されうるパラレル動作モードのいずれで動作しているかを示す、アーキテクチャから認識されないビットなどである。制御レジスタビット３０９は、パラレル動作モードが許可されているかどうかを示しうる。制御レジスタビット３０９が第１の値に（例えば値「ＯＮ」に）セットされている場合、プログラムは、コンピュータシステム３００のパラレル動作モードで動作することができる。しかし、制御レジスタビット３０９が第２の値に（例えば値「ＯＦＦ」に）セットされている場合、コンピュータシステム３００はシリアル動作モードでしか使用することができない。
【００４２】
マスタプロセッサ３０１と同様に、各スレーブプロセッサ３２１，３３１も、指標ビットと制御レジスタビットとを備えうる。図２ａでは、参照符号３２８，３３８はスレーブプロセッサ３２１，３３１の指標ビットを示し、参照符号３２９，３３９はスレーブプロセッサ３２１，３３１の制御レジスタビットを示す。別の実施形態では、スレーブプロセッサ３２１，３３１が、指標ビット３２８，３２９を必ずしも備えていなくてもよい。このような実施形態では、マスタプロセッサ３０１の制御レジスタビット３０９が、コンピュータシステム３００のパラレル動作モードが許可されていることを示すために使用され、マスタプロセッサ３０１の指標ビット３０９が、コンピュータシステム３００がパラレル動作モードであることを示すために使用されうる。
【００４３】
第１のスレーブプロセッサ３２１は、実行中状態ビット３３０を更に備えうる。実行中状態ビット３３０は、第１のスレーブプロセッサ３２１が現在実行中であるか、あるいは、第１のスレーブプロセッサ３２１が停止しているかを示す。例えば、実行中状態ビット３３０が値「ＯＮ」にセットされている場合、第１のスレーブプロセッサ３２１が現在実行中であることを示し、実行中状態ビット３３０が値「ＯＦＦ」にセットされている場合、第１のスレーブプロセッサ３２１が停止していることを示しうる。また、第１のスレーブプロセッサ３２１と同様に、第２のスレーブプロセッサ３３１も実行中状態ビット３４０を備えうる。
【００４４】
システムメモリ３０４内にバッファメモリ３１３が設けられうる。バッファメモリ３１３には、下で更に詳細に説明するように、コンピュータシステム３００がパラレル動作モード中に割り込みまたは例外が発生した場合に、マスタプロセッサのレジスタ３０２〜３０７の一部または全部の内容、スレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５の一部またはすべての内容、ならびに追加情報（例えば、指標ビット３０８，３２８，３３８、制御レジスタビット３０９，３２９，３３９および／または実行中状態ビット３３０，３４０の値など）が記憶されうる。コンピュータシステム３００でマルチタスク処理が実行されている場合、各プロセスに対して個々にバッファメモリが割り当てられうる。
【００４５】
一部の実施形態では、バッファメモリ３１３は、コンピュータシステム３００のパラレル動作モードが使用されるプログラムのコードから、ＣＰＵドライバルーチンを呼び出すことによって割り当てられうる。上で詳細に説明したように、ＣＰＵドライバルーチンはレジスタ３０２〜３０７，３２２〜３２５，３３２〜３３５の内容と、任意選択で追加情報とを保存するために十分なサイズのメモリ領域を割り当てるように適合されうる。一部の実施形態では、バッファメモリ３１３は、オペレーティングシステムによってマスストレージデバイス（例えばハードディスク）にスワップされない非ページプールシステムメモリに提供されうる。一部のコンピュータシステム３００では、非ページプールシステムメモリでのメモリの割り当ては、ＣＰＵドライバルーチンにのみ許可されている。
【００４６】
非ページプールシステムメモリにメモリバッファ３１３を割り当てることにより、メモリバッファ３１３が物理メモリ内に常に存在し、ページフォルトが発生しないことを保証することができ、有利である。これにより、アトミックオペレーションによって、バッファメモリ３１３との間で、第２の複数のレジスタ３０９〜３１２の内容と、任意選択で追加データとを容易に読み書きできるようになる。このため、メモリバッファ３１３にデータを書き込み中に割り込みまたは例外が発生した場合に起こりうるエラーを、有利に回避することができる。
【００４７】
ＣＰＵドライバルーチンは、メモリバッファ３１３のメモリアドレスを返すように構成されうる。一部の実施形態では、メモリアドレスは仮想アドレスであってもよい。これより、コンピュータシステム３００で実行中の全プロセスを互いに分離できるようになり、各プロセスに対して、別個のメモリページを使用することが必要となりうる。メモリバッファ３１３の割り当てができない場合（例えば、非ページプールメモリ空間に利用可能なメモリがない場合など）、ＣＰＵドライバルーチンは失敗を示しうる。
【００４８】
一部の実施形態では、バッファメモリ３１３を割り当てるＣＰＵドライバルーチンは、プロセッサの供給業者が提供するＣＰＵドライバの一部であってもよい。バッファメモリ３１３を割り当てるＣＰＵドライバルーチンのほかに、バッファメモリ３１３を解放するための第２のＣＰＵドライバルーチンも提供されうる。当業者が周知のように、ＣＰＵドライバルーチンは、オペレーティングシステムのブート中にオペレーティングシステムによってロードされ、コンピュータシステム３００で実行中のプログラムによって実行されうる機能を提供しうる。このため、第２の動作モードを使用するプログラムは、メモリバッファ３１３を割り当てるＣＰＵドライバルーチンと、解放するためのＣＰＵドライバルーチンとを呼び出しうる。
【００４９】
コンピュータシステム３００は、コンピュータシステム３００のパラレル動作モードを許可する許可命令を備えうる。許可命令は、バッファメモリ３１３のアドレス（例えば仮想アドレス）とトランポリン命令のアドレスとを、オペランドとして受け取る。トランポリン命令は、コンピュータシステム３００によって提供される。一部の実施形態では、トランポリン命令は、マスタプロセッサ３０１によって提供されうる。下で更に詳細に説明するように、通常、トランポリン命令は、割り込みルーチンの完了後、レジスタ３０２〜３０７，３２２〜３２５，３３２〜３３５の一部または全部の内容をリストアするために使用される。トランポリン命令は、パラレル動作モードを使用するプログラムに配置され、トランポリン命令のアドレスは、プログラム内に配置されているトランポリン命令のメモリロケーションへのポインタであってもよい。
【００５０】
コンピュータシステム３００は、許可命令が呼び出された場合に、以下に挙げるステップを実行するように構成されうる。コンピュータシステム３００は、制御レジスタビット３０９を確認しうる。制御レジスタビット３０９が、パラレル動作モードが許可されていないことを示す場合、許可命令により違法命令フォルトが発生し、その後のステップが実行されることはない。パラレル動作モードが許可されている場合、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の第１のレジスタ（例えばレジスタ３０６）が、バッファメモリ３１３のアドレスにセットされ、レジスタ３０２〜３０７の第２のサブセット３０６，３０７の第２のレジスタ（例えばレジスタ３０７）が、トランポリン命令のアドレスにセットされうる。別の実施形態では、バッファメモリ３１３のアドレスとトランポリン命令のアドレスとを記憶するために、マスタプロセッサ３０１のレジスタ３０１〜３０７の別のレジスタが使用されてもよい。更に、コンピュータシステム３００は、指標ビット３０８と、任意選択でスレーブプロセッサ３２１，３３１の指標ビット３２８，３３８とを、コンピュータシステムがパラレル動作モードであることを示す値にセットしうる。次に、コンピュータシステム３００は、パラレル動作モードで次の命令を実行しうる。
【００５１】
一部の実施形態では、許可命令が、スレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５をクリアするように更に構成されうる。このため、状態情報が異なるプロセス間で伝達されるのを回避することができ、これにより、コンピュータシステム３００のセキュリティを強化することができる。
【００５２】
コンピュータシステム３００は、マスタプロセッサ３０１のレジスタ３０２〜３０７の１つ以上の内容を、スレーブプロセッサ３２１，３３１の１つのレジスタ３２２〜３２５，３３１〜３３５の１つ以上に書き込むように適合された変数送信命令を更に備えうる。一部の実施形態では、変数送信命令は、レジスタに内容を書き込む先のスレーブプロセッサ３２１，３３１の識別番号と、内容をスレーブプロセッサ３２１，３３１に送信するマスタプロセッサ３０１のレジスタを特定するデータと、値の設定先のスレーブプロセッサ３２１，３３１のレジスタを特定するデータとを、オペランドとして受け取る。一実施形態では、変数送信命令は、ある時点でのマスタプロセッサ３０１のレジスタの１つの内容を、スレーブプロセッサ３２１，３３１の１つに送信するように構成されており、マスタプロセッサ３０１と個々のスレーブプロセッサ３２１，３３１とのレジスタを特定するデータには、マスタプロセッサ３０１とスレーブプロセッサ３２１，３３１の個々のレジスタの識別番号が含まれうる。
【００５３】
コンピュータシステム３００は、変数送信命令が呼び出された場合に、以下に挙げるステップを実行するように構成されうる。コンピュータシステム３００は、指標ビット３０８を確認しうる。指標ビット３０８が、コンピュータシステム３００がパラレル動作モードではないことを示す場合、変数送信命令により違法命令フォルトが発生し、その後のステップが実行されることはない。パラレル動作モードの場合、変数送信命令がマスタプロセッサ３０１によって実行されたかどうかがチェックされうる。変数送信命令がスレーブプロセッサ３２１，３３１の１つによって実行された場合、違法命令フォルトが発生し、その後のアクションが実行されることはない。マスタプロセッサ３０１によって実行された場合、変数送信命令のオペランドに指定されているマスタプロセッサ３０１のレジスタ３０２〜３０７の１つ以上の内容が、指定されたスレーブプロセッサ３２１，３３１の指定されたレジスタに書き込まれる。次に、コンピュータシステム３００は次の命令を実行しうる。
【００５４】
コンピュータシステム３００は、スレーブプロセッサ３２１，３３１の１つのレジスタ３２２〜３２５，３３１〜３３５の１つ以上の内容を、マスタプロセッサ３０１のレジスタ３０２〜３０７の１つ以上に書き込むように適合された変数受信命令を更に備えうる。変数受信命令は、変数の受信元のスレーブプロセッサ３２１，３３１の識別番号と、内容を読み出すスレーブプロセッサ３２１，３３１のレジスタを特定するデータと、値の設定先のマスタプロセッサ３０１のレジスタを特定するデータとを、オペランドとして受け取りうる。変数送信命令と同様に、レジスタを特定するデータには、スレーブプロセッサ３２１，３３１のレジスタの識別番号と、マスタプロセッサ３０１のレジスタの識別番号とが含まれうる。
【００５５】
コンピュータシステム３００は、変数受信命令が呼び出された場合に、以下に挙げるステップを実行するように構成されうる。コンピュータシステム３００は、指標ビット３０８を確認しうる。指標ビット３０８が、コンピュータシステム３００がパラレル動作モードではないことを示す場合、変数受信命令により違法命令フォルトが発生し、その後のアクションが実行されることはない。パラレル動作モードの場合、変数受信命令がマスタプロセッサ３０１によって実行されたかどうかがチェックされる。変数受信命令がスレーブプロセッサ３２１，３３１の１つによって実行された場合、変数受信命令により違法命令フォルトが発生し、その後のアクションが実行されることはない。マスタプロセッサ３０１によって実行された場合、指定された１つのスレーブプロセッサ３２１，３３１の指定された１つ以上のレジスタの内容が、マスタプロセッサ３０１の指定されたレジスタに書き込まれる。
【００５６】
変数送信命令と変数受信命令とは、マスタプロセッサ３０１とスレーブプロセッサ３２１，３３１間で情報を交換するために使用することができる。詳細には、変数送信命令は、スレーブプロセッサ３２１，３３１でスレッドが開始される前に、スレーブプロセッサ３２１，３３１のパラメータを設定するために使用することができ、変数受信命令は、スレッドの実行の完了後に、結果の値、または１つ以上の結果の値を格納しているメモリロケーションへのポインタを取得するために使用することができ、この点については下で更に詳細に説明する。
【００５７】
コンピュータシステム３００は、スレーブプロセッサ３２１，３３１の１つによる命令の実行を開始するように適合されたフォーク命令を更に備えうる。フォーク命令は、命令の実行を開始させるスレーブプロセッサ３２１，３３１の識別番号と、命令の実行を開始するターゲットアドレスとを、オペランドとして受け取りうる。
【００５８】
コンピュータシステム３００は、フォーク命令が呼び出された場合に、以下に挙げるステップを実行するように構成されうる。コンピュータシステム３００は、指標ビット３０８を確認しうる。指標ビット３０８が、コンピュータシステム３００がパラレル動作モードではないことを示す場合、違法命令フォルトが発生し、その後のアクションが実行されることはない。パラレル動作モードの場合、フォーク命令がマスタプロセッサ３０１によって実行されたかどうかがチェックされる。フォーク命令３０１がスレーブプロセッサ３２１，３３１の１つによって実行された場合、違法命令フォルトが発生し、その後のアクションが実行されることはない。マスタプロセッサ３０１によって実行された場合、指定されたターゲットアドレスが、指定されたスレーブプロセッサ３２１，３３１に送られる。当該スレーブプロセッサ３２１，３３１は、ターゲットアドレスを受け取る。スレーブプロセッサ３２１，３３１では、実行中状態ビット３３０，３４０が、スレーブプロセッサ３２１，３３１が実行中であることを示す値にセットされ、スレーブプロセッサ３２１，３３１がターゲットアドレスにおいて命令の実行を開始する。次に、ほかの命令が実行されうる。
【００５９】
変数送信命令、変数受信命令および／またはフォーク命令を、命令のオペランドに指定されているスレーブプロセッサ３２１，３３１の実行中に使用すると、一部の実施形態では、予測できない結果を生じうる。このような実施形態では、コンピュータシステムで実行中のプログラムのコードが、このような事態が生じないように適合されうる。別の実施形態では、オペランドに指定されているスレーブプロセッサ３２１，３３１の実行中に、変数送信命令、変数受信命令またはフォーク命令が呼び出された場合は、違法命令フォルトを発生させるようにコンピュータシステム３００が適合されてもよい。
【００６０】
コンピュータシステム３００は、スレーブプロセッサ３２１，３３１の１つによる命令の実行を停止するように適合されたスレーブジョイン命令を更に備えうる。スレーブジョイン命令が、スレーブプロセッサ３２１，３３１の１つによって実行され、スレーブジョイン命令を実行したスレーブプロセッサで命令の実行が停止されうる。詳細には、コンピュータシステム３００は、スレーブジョイン命令が呼び出された場合に、以下に挙げるステップを実行するように適合されうる。コンピュータシステム３００は、指標ビット３０８を確認しうる。指標ビット３０８が、コンピュータシステム３００がパラレル動作モードではないことを示す場合、違法命令フォルトが発生し、その後のアクションが実行されることはない。パラレル動作モードの場合、スレーブジョイン命令がスレーブプロセッサ３２１，３３１の１つによって実行されたかどうかがチェックされる。スレーブジョイン命令がスレーブプロセッサ３２１，３３１で実行されていない場合、違法命令フォルトが発生し、その後のアクションが実行されることはない。スレーブプロセッサ３２１，３３１の１つによって実行された場合、実行中状態ビット３３０が、スレーブプロセッサ３２１，３３１が実行していないことを示す値にセットされ、スレーブプロセッサ３２１，３３１での命令の実行が停止されうる。
【００６１】
コンピュータシステム３００は、スレーブプロセッサ３２１，３３１の１つで命令の実行が停止されるまで、マスタプロセッサ３０１を待機させるように適合されたマスタジョイン命令も更に備えうる。マスタジョイン命令は、マスタプロセッサ３０１が待機するスレーブプロセッサ３２１，３３１の１つの識別番号を、オペランドとして受け取りうる。
【００６２】
コンピュータシステム３００は、マスタジョイン命令が呼び出された場合に、以下に挙げるステップを実行するように構成されうる。コンピュータシステム３００は、指標ビット３０８を確認しうる。指標ビット３０８が、コンピュータシステム３００がパラレル動作モードではないことを示す場合、違法命令フォルトが発生し、その後のアクションがとられることはない。パラレル動作モードの場合、マスタジョイン命令がマスタプロセッサ３０１によって実行されたかどうかがチェックされる。マスタジョイン命令がマスタプロセッサ３０１によって実行されていない場合、違法命令フォルトが発生し、その後のアクションが実行されることはない。マスタプロセッサ３０１によって実行された場合、マスタジョイン命令のオペランドに指定されたスレーブプロセッサ３２１，３３１の実行中状態ビット３３０，３４０が、当該スレーブプロセッサ３２１，３３１が実行中であることを示すかどうかがチェックされる。次に、実行中状態ビット３３０，３４０が、スレーブプロセッサ３２１，３３１が実行していないことを示す値にセットされるまで、マスタプロセッサ３０１が待機する。次に、マスタプロセッサ３０１における命令の実行が、マスタジョイン命令に続く命令により再開されうる。
【００６３】
別の実施形態では、マスタジョイン命令が、当該スレーブプロセッサ３２１，３３１が未だに実行中であるかどうかを確認しうる。次に、マスタジョイン命令は、アーキテクチャから認識可能なレジスタ（例えばマスタプロセッサ３０１のレジスタ３０２〜３０７の１つ）に、その結果を返しうる。その後、コンピュータシステム３００で実行中のプログラムが、この状態を使用して、その後行う動作を決定することができる。このため、マスタプロセッサ３０１は、当該スレーブプロセッサ３２１，３３１の実行状態を確認して、プログラムの実行を再開しうる。このような実施形態では、マスタジョイン命令の更なる特徴が、上で説明したほかの実施形態の特徴と同じであってもよい。
【００６４】
スレーブジョイン命令とマスタジョイン命令は、マスタプロセッサ３０１で実行中のスレッドとスレーブプロセッサ３２１，３３１で実行中のスレッドを同期させるために使用されうる。マスタジョイン命令は、スレーブコア３２１，３３１の１つを厳密に特定しうる。このため、異なるスレーブプロセッサで実行中のスレッドを、全スレッド用に共通のジョインポイントを必要とすることなく、プログラムの実行中の異なる時点で同期させることができる。このため、高い柔軟性を得ることができる。
【００６５】
本発明は、それぞれ独立したマスタジョイン命令とスレーブジョイン命令が提供される実施形態に限定されない。別の実施形態では、１つのジョイン命令が提供されてもよい。ジョイン命令が呼び出されると、このジョイン命令が、マスタプロセッサ３０１で実行されたか、スレーブプロセッサ３２１，３３１の１つで実行されたかがチェックされる。ジョイン命令がスレーブプロセッサ３２１，３３１の１つで実行された場合、スレーブジョイン命令に関して上で説明したステップに対応するステップが実行される。逆に、ジョイン命令がマスタプロセッサ３０１で実行された場合、マスタジョイン命令に関して上で説明したステップに対応するステップが実行されうる。
【００６６】
上で説明したように、コンピュータシステム３００はトランポリン命令を更に備えうる。トランポリン命令は、割り込みルーチンの完了後に、マスタプロセッサ３０１のレジスタ３０２〜３０７、およびスレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５の一部または全部の内容をリストアするために使用されうる。
【００６７】
トランポリン命令は、マスタプロセッサ３０１で割り込みが発生した場合に、コンピュータシステム３００をパラレル動作モードに切り替えるステップと、レジスタ３２２〜３２５，３３２〜３３５の内容とマスタプロセッサ３０１の戻りアドレスとを、バッファメモリ３１３から読み出すステップを実行するように適合されうる。また、レジスタ３０２〜３０７の第２のサブセット３０６，３０７の内容もバッファメモリから読み出されうる。
【００６８】
トランポリン命令は、スレーブプロセッサ３２１，３３１の１つで割り込みまたは例外が発生した場合に、コンピュータシステム３００をパラレル動作モードに切り替えるステップと、スレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５の内容をバッファメモリから読み出すステップと、マスタプロセッサのレジスタ３０２〜３０７の１つ以上の内容を、割り込みまたは例外が発生したスレーブコア３２１，３３１のレジスタに書き込むステップと、マスタプロセッサ３０１のレジスタ３０２〜３０７の内容をバッファメモリから読み出すステップとを実行するように更に適合されうる。
【００６９】
一部の実施形態では、コンピュータシステム３００は、トランポリン命令が呼び出された場合に、以下に挙げるステップを実行するように構成されうる。コンピュータシステム３００は、制御レジスタビット３０９を確認しうる。制御レジスタビット３０９が、コンピュータシステム３００のパラレル動作モードが許可されていないことを示す場合には、違法命令フォルトが発生する。パラレル動作モードが許可されている場合には、バッファメモリ３１３のアドレスが、マスタプロセッサ３０１のレジスタ３０２〜３０７の１つから読み出されうる。一部の実施形態では、バッファメモリ３１３のアドレスが、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の１つから（例えばレジスタ３０５から）読み出されうる。
【００７０】
次に、コンピュータシステム３００は、バッファメモリ３１３から、割り込みまたは例外を発生させたプロセッサの識別番号を読み出しうる。一部の実施形態では、マスタプロセッサ３０１が識別番号０を、第１のスレーブプロセッサ３２１が識別番号１を、第２のスレーブプロセッサ３３１が識別番号２をそれぞれ有しうる。スレーブプロセッサの個数が２以外の実施形態では、各スレーブプロセッサが、０を超える自然数の識別番号を有し、マスタプロセッサ３０１が、識別番号０を有しうる。更に別の実施形態では、プロセッサ３０１，３２１，３３１のために異なる番号付与方式が使用されてもよい。次に、コンピュータシステム３００は、この識別番号から、割り込みまたは例外が、マスタプロセッサ３０１によって発生したか、スレーブプロセッサ３２１，３３１の１つのいずれにより発生したかを決定しうる。
【００７１】
割り込みまたは例外が、マスタプロセッサ３０１によって発生した場合には（このことはプロセッサの識別番号が０であることにより示される）、コンピュータシステム３００は、第１のスレーブプロセッサ３２１のレジスタ３２２〜３２５と、第２のスレーブプロセッサ３３１のレジスタ３３２〜３３５とのそれぞれの内容を、バッファメモリ３１３から読み出しうる。また、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の内容も、バッファメモリ３１３から読み出されうる。更に、マスタプロセッサ３０１の戻りアドレスも、バッファメモリから読み出されうる。一部の実施形態では、マスタプロセッサの戻りアドレスが、マスタプロセッサ３０１のレジスタの１つに（例えばレジスタ３０２に）書き込まれうる。更に、スレーブプロセッサ３２１，３３１の実行中状態ビット３３０，３４０も、バッファメモリ３１３から読み出されうる。一部の実施形態では、バッファメモリ３１３から読み出した、スレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５の内容には、スレーブプロセッサ３２１，３３１の戻りアドレスが含まれうる。別の実施形態では、スレーブプロセッサ３２１，３３１の戻りアドレスが、バッファメモリ３１３から別に読み出されてもよい。
【００７２】
次に、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の１つの内容（例えばレジスタ３０６の内容）と、バッファメモリのアドレスを読み出したレジスタの内容（例えばレジスタ３０５の内容）とが、交換されうる。このため、バッファメモリ３１３のアドレスがレジスタ３０６に書き込まれ、レジスタ３０６は、許可命令によってバッファメモリ３１３のアドレスが記憶されるレジスタである。バッファメモリ３１３から読み出した第２のサブセット３０６，３０７の別のレジスタ（例えばレジスタ３０７）には、トランポリン命令のアドレスが格納されうる。
【００７３】
次に、指標ビット３０８が、コンピュータシステム３００がパラレル動作モードであることを示す値に（例えば値「ＯＮ」に）セットされうる。このため、コンピュータシステム３００が、パラレル動作モードに切り替えられ、命令の実行が、スレーブプロセッサ３２１，３３１のそれぞれで開始され、その際、実行中状態ビット３３０，３４０が、個々のスレーブプロセッサ３２１，３３１の実行状態を示す。マスタプロセッサ３０１では、命令の実行が、バッファメモリ３０１から読み出した戻りアドレスで再開されうる。このため、割り込みまたは例外によって中断されたプログラムの処理が、コンピュータシステム３００のパラレル動作モードで再開されうる。
【００７４】
割り込みまたは例外がスレーブプロセッサ３２１，３３１の１つによって発生した場合、第１のスレーブプロセッサ３２１のレジスタ３２２〜３２５と第２のスレーブプロセッサ３３１のレジスタ３３２〜３３５との内容のほか、実行中状態ビット３３０，３４０が、バッファメモリ３１３から読み出されうる。また、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の内容も、バッファメモリ３１３から読み出されうる。レジスタ３０７、あるいは、別の実施形態ではレジスタの第２のサブセット３０６，３０７の別のレジスタには、トランポリン命令のアドレスが格納されうる。
【００７５】
次に、バッファメモリのアドレスを読み出したレジスタの１つの内容（例えばレジスタ３０５の内容）が、例えば、バッファメモリ３１３内に提供されうる一時レジスタに書き込まれ、割り込みまたは例外を発生させたスレーブプロセッサ３２１，３３１の対応するレジスタの内容が、バッファメモリ３１３からレジスタ３０５に読み出されうる。例えば、割り込みまたは例外が第１のスレーブプロセッサ３２１によって発生した場合、第１のスレーブプロセッサ３２１のレジスタ３２５の記憶されている内容が、バッファメモリ３１３からレジスタ３０５に読み出されうる。割り込みまたは例外が第２のスレーブプロセッサ３３１によって発生した場合、第２のスレーブプロセッサ３３１のレジスタ３３５の記憶されている内容が、バッファメモリ３１３からレジスタ３０５に読み出されうる。
【００７６】
以下に更に詳しく説明するように、割り込みルーチンの完了後、第１のプロセッサ３０１の残りのレジスタ３０２〜３０４には、割り込みまたは例外が発生したスレーブプロセッサ３２１，３３１のレジスタの内容が格納されており、そのレジスタの一部の内容が、割り込みルーチンによって変更されていることがある。このため、割り込みまたは例外が発生したスレーブプロセッサの対応するレジスタの内容を、マスタプロセッサ３０１のレジスタ３０５に書き込んだ後は、マスタプロセッサ３０１のレジスタの第１のサブセット３０２〜３０５には、割り込みまたは例外が発生したスレーブプロセッサの対応するレジスタの内容を表わすデータが格納されており、レジスタの一部の内容が、割り込みルーチンによって変更されていることがある。
【００７７】
マスタプロセッサ３０１のレジスタ３０２〜３０５の第１のサブセット３０２〜３０５の内容が、割り込みまたは例外が発生したスレーブプロセッサ３２１，３３１のレジスタに書き込まれうる。例えば、第１のスレーブプロセッサ３２１で割り込みまたは例外が発生した場合、レジスタ３０２〜３０５の内容が、第１のスレーブプロセッサ３２１のレジスタ３２２〜３２５に書き込まれうる。第２のスレーブプロセッサ３３１で割り込みまたは例外が発生した場合、レジスタ３０２〜３０５の内容が、第２のスレーブプロセッサ３３２のレジスタ３３１〜３３５に書き込まれうる。このため、割り込みルーチンによって行われたレジスタ内容の変更が、スレーブプロセッサ３２１，３３１のレジスタに書き込まれうる。
【００７８】
本発明は、マスタプロセッサのレジスタ３０２〜３０７の第１のサブセット３０２〜３０５のそれぞれの内容が、割り込みまたは例外を発生させたスレーブプロセッサのレジスタにコピーされる実施形態に限定されない。別の実施形態では、割り込みルーチンによって変更されうるレジスタの第１のサブセット３０２〜３０５の一部の内容のみが、スレーブプロセッサにコピーされてもよい。このため、マスタプロセッサ３０１からスレーブプロセッサ３２１，３３１にコピーする必要があるデータ量を減らすことができるため、トランポリン命令の実行を高速化することができる。
【００７９】
マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の一部またはすべての内容を、割り込みまたは例外を発生させたスレーブプロセッサ３２１，３３１のレジスタに書き込んだ後、マスタプロセッサ３０１の戻りアドレスも格納しているマスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の内容が、バッファメモリ３１３から読み出されうる。更に、一時レジスタに保存されたバッファメモリ３１３のアドレスが、マスタプロセッサ３０１のレジスタの第２の複数のレジスタの１つに（例えばレジスタ３０６に）書き込まれうる。このようにして、割り込みまたは例外の前のマスタプロセッサ３０１の状態がリストアされうる。
【００８０】
次に、マスタプロセッサ３００の指標ビット３０８と、任意選択でスレーブプロセッサ３２１，３３１の指標ビット３２８，３３８とが、コンピュータシステム３００がパラレル動作モードで動作していることを示す値にセットされ、命令の実行がスレーブプロセッサ３２１，３３１のそれぞれで許可され、その際、実行中状態ビット３３０，３４０は、当該スレーブプロセッサが割り込みまたは例外の前に実行されていたことを示している。また、マスタプロセッサ３０１での命令の実行が、マスタプロセッサ３０１の戻りアドレスで開始されうる。このようにして、コンピュータシステム３００でプログラムの実行が再開されうる。
【００８１】
コンピュータシステム３００は、トランポリン命令の上記のステップをアトミックオペレーションとして実行するように適合されうる。このため、トランポリン命令の実行中に割り込みまたは例外が発生したために生ずるエラーを、有利に回避することができる。
【００８２】
コンピュータシステム３００は、コンピュータシステム３００を、パラレル動作モードからシリアル動作モードに切り替えるように適合されたエンド命令も更に有しうる。このために、コンピュータシステム３００は、指標ビット３０８と、任意選択でスレーブプロセッサ３２１，３３１の指標ビット３２８，３３８とを、コンピュータシステムがシリアル動作モードであることを示す値にセットしうる。一実施形態では、指標ビット３０８，３２８，３３８が、値「ＯＦＦ」にセットされうる。
【００８３】
コンピュータシステム３００は、パラレル動作モード中に割り込みまたは例外が発生した場合に、マスタプロセッサ３０１のレジスタ３０２〜３０７およびスレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５の内容の少なくとも一部の内容と、任意選択で、スレーブプロセッサ３２１，３３１の実行中状態ビット３３０，３４０の値とを、バッファメモリ３１３に保存するステップと、コンピュータシステム３００をシリアル動作モードに切り替えるステップとを実行するように更に適合されうる。割り込みまたは例外がスレーブプロセッサ３２１，３３１の１つで発生した場合、コンピュータシステム３００は、更に、マスタプロセッサのレジスタ３０２〜３０７の少なくとも１つの内容を、当該のスレーブプロセッサのレジスタの少なくとも１つの内容にセットしうる。このため、プロセッサ３０１，３２１，３３１のレジスタ内のデータが、オペレーティングシステムとは独立して保存されうる。割り込みまたは例外がスレーブプロセッサ３２１，３３１の１つで発生している場合、オペレーティングシステムの割り込みルーチンに関連するデータが、スレーブプロセッサ３２１，３３１からマスタプロセッサ３０１のレジスタに書き込まれうる。このため、オペレーティングシステムが、スレーブプロセッサ３２１，３３１の存在を考慮に入れる必要がなくとも、このようなデータが、オペレーティングシステムによって処理できるようになる。詳細には、オペレーティングシステムが、スレーブプロセッサ３２１，３３１のどのプロセッサから、割り込みルーチンの実行に関連するデータを取得するように適合されている必要がない。
【００８４】
一部の実施形態では、指標ビット３０８が、コンピュータシステム３００が第２の動作モードであることを示す値にセットされている間に、割り込みまたは例外が発生した場合、コンピュータシステム３００は以下に挙げるステップを実行するように構成されうる。コンピュータシステム３００によって実行されるアクションは、割り込みまたは例外が、マスタプロセッサ３０１で発生したか、あるいはスレーブプロセッサ３２１，３３１の１つで発生したかに応じて決まる。
【００８５】
割り込みまたは例外がマスタプロセッサ３０１で発生した場合、コンピュータシステム３００はスレーブプロセッサ３２１，３３１の命令の実行を停止することができる。スレーブプロセッサ３２１，３３１でそれぞれの命令の実行が停止されると、コンピュータシステム３００は、スレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５の内容を、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の１つから（例えばレジスタ３０６から）アドレスを読み出したバッファメモリ３１３に書き込みうる。これらのレジスタには、スレーブプロセッサ３２１，３３１のそれぞれの戻りアドレスが格納されうる。また、スレーブプロセッサ３２１，３３１の実行中状態ビット３３０，３４０も、バッファメモリ３１３に保存されうる。実行中状態ビット３３０，３４０は、割り込みまたは例外が発生する前に、スレーブプロセッサ３２１，３３１のそれぞれが、命令を実行していたかとどうかを示す。更に、マスタプロセッサ３０１の識別番号も、バッファメモリ３１３に保存されうる。既に説明したように、一部の実施形態では、マスタプロセッサ３０１は識別番号０を有しうる。このような実施形態では、マスタプロセッサ３０１で割り込みまたは例外が発生した場合、バッファメモリ３１３に識別番号０が保存されうる。
【００８６】
次に、バッファメモリ３１３のアドレスを格納しているマスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の１つ（一部の実施形態ではレジスタ３０６）の内容が、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の１つの内容と（例えばレジスタ３０５の内容と）交換されうる。レジスタ３０６と内容が交換されるレジスタは、トランポリン命令によってバッファメモリ３１３のアドレスを読み出したレジスタと同じでありうる。
【００８７】
マスタプロセッサ３０１のレジスタ３０２〜３０５の第１のサブセットは、従来技術に係るプロセッサのレジスタの組に対応しうる。このため、コンピュータシステム３００で実行中の、従来技術に係るプロセッサに適合されたオペレーティングシステムは、割り込みまたは例外時に、マスタプロセッサ３０１のレジスタの第１のサブセット３０２〜３０５の内容を保存し、オペレーティングシステムの一部である割り込みルーチンの完了後、レジスタの第１のサブセット３０２〜３０５の内容をリストアするように構成されている。このため、バッファメモリのアドレスを格納しているレジスタの内容とレジスタの第１のサブセット３０２〜３０５の内容とを交換することにより、割り込みルーチンの完了後、バッファメモリのアドレスが、マスタプロセッサ３０１のレジスタ３０２〜３０５の１つに格納されており、トランポリン命令によってアクセスできることが保証される。また、コンピュータシステム３００のパラレル動作モードでは、バッファメモリ３１３のアドレスが、マスタプロセッサのレジスタの第２のサブセット３０６，３０７の１つに記憶されているため、パラレル動作モードでは、第１のサブセットのレジスタ３０２〜３０５のそれぞれを、コンピュータシステム３００で実行中のプログラムによって使用することができる。このため、コンピュータシステム３００の、従来技術に係るコンピュータシステム１００との互換性を向上させることができる。
【００８８】
次に、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の内容が、バッファメモリ３１３に保存されうる。次に、マスタプロセッサ３０１の戻りアドレスが取得されうる。一部の実施形態では、マスタプロセッサ３０１の戻りアドレスが、レジスタの第１のサブセットの１つから（例えばレジスタ３０２から）読み出されうる。マスタプロセッサ３０１の戻りアドレスを保存後に、マスタプロセッサ３０１の戻りアドレスが、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の１つから（例えばレジスタ３０７から）読み出されたトランポリン命令のアドレスと置換されうる。このため、オペレーティングシステムの割り込みルーチンの完了後、トランポリン命令が呼び出され、オペレーティングシステムによってリストアされない、マスタプロセッサ３０１のレジスタの第２のサブセット３０６，３０７の内容、スレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５の内容、ならびにスレーブプロセッサ３２１，３３１の実行中状態ビット３３０，３４０がリストアされる。スレーブプロセッサ３２１，３３１のレジスタには、スレーブプロセッサ３２１，３３１のそれぞれの戻りアドレスが格納されうる。
【００８９】
割り込みまたは例外がスレーブプロセッサ３２１，３３１の１つで発生している場合、マスタプロセッサ３０１のほか、各スレーブプロセッサ３２１，３３１での命令の実行が停止されうる。コンピュータシステム３００は、すべてのプロセッサ３０１，３２１，３３１で命令の実行が停止されると、マスタプロセッサ３０１の各レジスタ３０２〜３０７の内容を、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の１つから（例えばレジスタ３０６から）アドレスを読み出したバッファメモリ３１３に保存しうる。また、各スレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５の内容のほか、スレーブプロセッサ３２１，３３１のそれぞれの実行中状態ビット３３０，３４０の値も、バッファメモリ３１３に保存されうる。実行中状態ビット３３０，３４０の値は、割り込みまたは例外が発生した時点で、スレーブプロセッサ３２１，３３１のいずれが実行していたかを示す。
【００９０】
次に、バッファメモリ３１３のアドレスを記憶しているマスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の１つの内容が、一時レジスタ（一部の実施形態では、バッファメモリ３１３内に設けられうる）に書き込まれうる。また、割り込みまたは例外が発生したスレーブプロセッサ３２１，３３１の識別番号が、バッファメモリ３１３に保存されうる。一部の実施形態では、第１のスレーブプロセッサ３２１は識別番号１を、第２のスレーブプロセッサ３３１は識別番号２をそれぞれ有しうる。このような実施形態では、割り込みまたは例外が第１のスレーブプロセッサ３２１で発生した場合、識別番号１がバッファメモリ３１３に保存され、割り込みまたは例外が第２のスレーブプロセッサ３３１で発生した場合、識別番号２がバッファメモリ３１３に保存されうる。スレーブプロセッサ３２１，３３１のレジスタには、スレーブプロセッサ３２１，３３１のそれぞれの戻りアドレスが格納されうる。
【００９１】
次に、割り込みまたは例外が発生したスレーブプロセッサ３２１，３３１のレジスタの内容が、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５に書き込まれうる。第１のスレーブプロセッサ３２１で割り込みまたは例外が発生した場合、第１のスレーブプロセッサ３２１のレジスタ３２２〜３２５の内容が、マスタプロセッサ３０１のレジスタ３０２〜３０５に書き込まれうる。同様に、第２のスレーブプロセッサ３３１で割り込みまたは例外が発生した場合、第２のスレーブプロセッサ３３１のレジスタ３２２〜３２５の内容が、レジスタ３０２〜３０５に書き込まれうる。本発明は、第１のスレーブプロセッサ３２１のレジスタ３２２〜３２５または第２のスレーブプロセッサ３３１のレジスタ３３２〜３３５のそれぞれの内容が、マスタプロセッサ３０１の対応するレジスタに書き込まれる実施形態に限定されない。別の実施形態では、オペレーティングシステムの割り込みルーチンによって変更されたスレーブプロセッサの一部のレジスタの内容のみが、マスタプロセッサ３０１のレジスタに書き込まれてもよい。
【００９２】
割り込みルーチンにおいて、オペレーティングシステムは、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の内容を処理するが、これは、従来技術に係るプロセッサのレジスタの組（例えば、図１ａ〜１ｂを参照して上で説明した従来技術に係るプロセッサ１０１の状態のレジスタ１０２〜１０５）に対応しうる。レジスタ３０２〜３０５の内容には、オペレーティングシステムに関連する割り込みまたは例外に関するあらゆる情報が含まれてもよく、これには、割り込みまたは例外に関する追加情報を格納しているスレーブプロセッサ３２１，３３１のスタックのメモリアドレスなどがある。
【００９３】
割り込みまたは例外が発生したスレーブプロセッサ３２１，３３１のレジスタの内容が、マスタプロセッサ３０１のレジスタ３０２〜３０５に書き込まれた後は、マスタプロセッサ３０１の状態が、割り込みまたは例外がマスタプロセッサ３０１で発生したと仮定した場合に取得される状態に対応するようになる。このため、オペレーティングシステムからは、マスタプロセッサ３０１で割り込みまたは例外が発生したように認識される。このため、オペレーティングシステムが１つのプロセッサのみを有するコンピュータシステムに適合されている実施形態であっても、オペレーティングシステムが割り込みまたは例外を処理することができる。
【００９４】
次に、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の１つ（例えばレジスタ３０５）の内容（その内容は、割り込みまたは例外が発生したスレーブプロセッサ３２１，３３１の対応するレジスタの内容と同じに設定されている）が、一時バッファからアドレスを取得したバッファメモリ３１３に書き込まれ、バッファメモリ３１３のアドレスがレジスタ３０５に書き込まれうる。このため、バッファメモリ３１３のアドレスがマスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の１つに格納され、これが、割り込みルーチンの完了後に、オペレーティングシステムによってリストアされうる。
【００９５】
次に、マスタプロセッサ３０１の戻りアドレスがバッファメモリ３１３に記憶され、マスタプロセッサ３０１の戻りアドレスが、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の１つから（例えばレジスタ３０７から）読み出されるトランポリン命令のアドレスと置換されうる。このため、割り込みルーチンの完了後に、トランポリン命令が実行されうる。
【００９６】
コンピュータシステム３００のパラレル動作モード中に割り込みまたは例外が発生した場合にコンピュータシステム３００によって実行される上記のステップは、アトミックオペレーションとして実行されうる。このため、当業者が周知のように、コンピュータシステム３００によるステップの実行中の割り込みまたは例外の発生を回避することができる。
【００９７】
上記のステップを実行した後は、割り込みまたは例外が、マスタプロセッサ３０１で発生したか、あるいは、スレーブプロセッサ３２１，３３１の１つで発生したかどうかを問わず、コンピュータシステム３００は、マスタプロセッサ３０１の指標ビット３０８を、コンピュータシステム３００がシリアル動作モードであることを示す値に（例えば値「ＯＦＦ」に）セットしうる。このようにして、コンピュータシステム３００がシリアル動作モードに切り替えられうる。次に、オペレーティングシステムの割り込みルーチンが実行されうる。
【００９８】
以下では、コンピュータシステム３００で実行中のプログラム４００の模式フローチャートを示す図２ｂと、プログラム４００および割り込みルーチン５０２の模式フローチャートを示す図２ｃとを参照して、コンピュータシステム３００の動作について説明する。
【００９９】
コンピュータシステム３００のオペレーティングシステムのロード前に、マスタプロセッサ３０１とスレーブプロセッサ３２１，３３１とが識別されうる。一部の実施形態では、プロセッサが、マスタプロセッサ３０１であるか、またはスレーブプロセッサ３２１，３３１の１つであるかの割り当てが、ハードウェアの形で提供されうる。このような実施形態では、マスタプロセッサ３０１であるか、またはスレーブプロセッサ３２１，３３１の１つであるかの割り当ては、コンピュータシステム３００のライフタイムを通じて固定とされうる。別の実施形態では、マスタプロセッサ３０１であるか、またはスレーブプロセッサ３２１，３３１の１つであるかの割り当てが、ソフトウェアによって行われうる。例えば、マスタプロセッサ３０１とスレーブプロセッサ３２１，３３１とが、コンピュータシステム３００の基本入出力ソフトウェア（ＢＩＯＳ）によって識別されうる。このような実施形態では、コンピュータシステム３００のＢＩＯＳの設定を変更することにより、プロセッサの割り当てを変更することができる。
【０１００】
マスタプロセッサ３００とスレーブプロセッサ３２１、３３１とが識別された後に、コンピュータシステム３００のオペレーティングシステムがロードされうる。オペレーティングシステムの起動時には、コンピュータシステム３００はシリアル動作モードでありうる。このため、マスタプロセッサ３０１は、従来技術に係るコンピュータプロセッサの機能（例えば図１ａ〜１ｂを参照して上で説明したコンピュータシステム１００のプロセッサ１０１の機能）を提供しうる。このため、コンピュータシステム３００は、一部の実施形態では、従来技術に係るコンピュータシステム１００に適合されたオペレーティングシステムと協働することができる。オペレーティングシステムがコンピュータシステム３００で実行すると、プログラム４００が起動されうる。
【０１０１】
プログラム４００のステップ４０１において、バッファメモリ３１３を割り当てるために提供されたＣＰＵドライバルーチンを呼び出すことによって、システムメモリ３０４内にバッファメモリ３１３が割り当てられうる。次に、ステップ４０２において、コンピュータシステム３００のパラレル動作モードを許可するために許可命令が実行され、ステップ４０３において、スレーブプロセッサ３２１，３３１によって実行されるプログラムのスレッド用のスタックメモリが割り当てられうる。スタックメモリを割り当てるために、当業者に公知のメモリ割り当て手法を使用することができる。
【０１０２】
ステップ４０４において、第１の複数の命令が実行されうる。第１の複数の命令は、マスタプロセッサ３０１によってシリアル方式で実行されうる。マスタプロセッサ３０１は、例えば、図１ａ〜１ｂを参照して上で説明したプロセッサ１０１などの、従来技術に係るプロセッサの命令セットを提供することができるため、第１の複数の命令には、従来技術に係るプロセッサによっても実行することができるコードが含まれうる。このため、第１の複数の命令は、従来技術に係るプロセッサ１０１用のコードを提供するように適合されたコンパイラによって生成することができる。このため、既存のライブラリからのコードがプログラム４００に含まれてもよい。
【０１０３】
ステップ４０５において、参照符号４０６に示す第１のスレーブプロセッサ３２１のレジスタ３２２〜３２５にデータを送信するために、変数送信命令が一回以上呼び出されうる。このため、第１のマスタプロセッサ３２１が、プログラム４００のスレッドを実行するように調整されうる。ステップ４０７において、第２のスレーブプロセッサ３３１に、プログラム４００の別のスレッドを実行する調整をさせるため、参照符号４０７に示すように変数送信命令が使用され、第２のスレーブプロセッサ３３１のレジスタ３３２〜３３５にデータが送信されうる。本発明は、第１のスレーブプロセッサ３２１のレジスタ３２２〜３２５に第１のデータが送信され、その後で第２のスレーブプロセッサ３３１にデータが送信される実施形態に限定されない。別の実施形態では、第１のスレーブプロセッサ３２１のレジスタ３２２〜３２５にデータを送信する前に、第２のスレーブプロセッサ３３１のレジスタ３３２〜３３５にデータが送信されてもよい。
【０１０４】
ステップ４０９において、第１のスレーブプロセッサ３２１で命令の実行を開始するために、フォーク命令が実行されうる。このため、ステップ４１０において、第２の複数の命令が、第１のスレーブプロセッサ３２１によって実行されうる。ステップ４１１において、第２のスレーブプロセッサ３３１で命令の実行を開始するために、フォーク命令が使用されうる。このため、ステップ４１２において、第２のスレーブプロセッサ３３１が第３の複数の命令を実行しうる。次に、マスタプロセッサ３０１は、第４の複数の命令を実行しうる。第２の複数の命令、第３の複数の命令および第４の複数の命令が、コンピュータシステム３００によって同時に実行され、その際、第２の複数の命令の実行、第３の複数の命令の実行および第４の複数の命令の実行により、プログラム４００の別個のスレッドが作成される。このため、図１ａ〜１ｂを参照して上で説明した従来技術に係るコンピュータシステム１００と比べてプログラム４００の実行速度を高速化することができる。
【０１０５】
マスタプロセッサ３０１およびスレーブプロセッサ３２１，３３１のそれぞれが、例えば、図１ａ〜１ｂを参照して上で説明した従来技術に係るプロセッサ１０１の機能など、特定のタイプのプロセッサの機能を提供するように適合されている実施形態では、第２の複数の命令、第３の複数の命令および第４の複数の命令のそれぞれに、当該タイプのプロセッサでの実行に適合されたコードが含まれうる。例えば、第２の複数の命令、第３の複数の命令および第４の複数の命令のそれぞれに、ｘ８６またはｘ８６−６４タイプのプロセッサでの実行に適合されたコードが含まれうる。
【０１０６】
スレーブプロセッサ３２１，３３１が、マスタプロセッサ３０１とは異種のプロセッサである別の実施形態では、第２の複数の命令と第３の複数の命令に、スレーブプロセッサ３２１，３３１での実行に特に適合されたコードが含まれ、命令の第４の複数に、マスタプロセッサ３０１での実行に特に適合されたコードが含まれうる。
【０１０７】
第２の複数の命令を含むスレッドの完了後に、第１のスレーブプロセッサ３２１が、第１のスレーブプロセッサ３２１での命令の実行を停止するために、スレーブジョイン命令を実行しうる（ステップ４１５）。このために、スレーブジョイン命令は、第２の複数の命令の最後の命令として提供されうる。同様に、第３の複数の命令の実行後に、第２のスレーブプロセッサ３３１での命令の実行が停止される（ステップ４２３）ように、スレーブジョイン命令は、第３の複数の命令の最後の命令としても提供されうる。
【０１０８】
第４の複数の命令の実行の完了後、ステップ４１４において、マスタプロセッサ３０１は、第１のスレーブプロセッサ３２１が第２の複数の命令の実行を完了するまで待機するために、マスタジョイン命令を実行しうる。次に、ステップ４１６において、第２のスレーブプロセッサ３３１が第３の複数の命令の実行を完了するまで待機するために、マスタジョイン命令がマスタプロセッサ３０１によって再度実行されうる。
【０１０９】
次に、ステップ４１７，４１９において、マスタプロセッサ３０１は、第１のスレーブプロセッサ３２１および第２のスレーブプロセッサ３３１から、第２の複数の命令および第３の複数の命令によるスレッドの実行の結果をそれぞれ読み出すために、変数受信命令を実行しうる。図２ｂでは、第１のスレーブプロセッサ３２１によるレジスタ３２２〜３２５の内容の提供が参照符号４１８によって示され、第２のスレーブプロセッサ３３１によるレジスタ３３２〜３３５の内容の提供が参照符号４２０によって示されている。
【０１１０】
次に、マスタプロセッサ４２１は、第５の複数の命令をシリアル方式で実行しうる（ステップ４２１）。ステップ４０４で実行された第１の複数の命令と同様に、第５の複数の命令には、図１ａ〜１ｂを参照して上で説明したプロセッサ１０１など（その機能がマスタプロセッサ３０１によって提供されている）、従来技術に係るプロセッサの実行に適合されたコードが含まれうる。このため、第５の複数の命令には、従来技術に係るプロセッサ１０１用のコードを提供するように適合されたコンパイラによって作成されたコードが含まれうる。
【０１１１】
プログラム４００の実行の終了前に、ステップ４２２において、マスタプロセッサ３０１は、コンピュータシステム３００をシリアル動作モードに切り替えるために、エンド命令を実行しうる。また、プログラム４００の実行が終了する前に、バッファメモリ３１３が解放され、この解放は、コンピュータシステム３００に提供されているＣＰＵドライバルーチンを呼び出すことによって行うことができる。
【０１１２】
図２ｃは、プログラム４００および割り込みルーチン５０２の模式フローチャートを示す。これらは、スレーブプロセッサ３２１，３３１およびマスタプロセッサ３０において、第２の複数の命令、第３の複数の命令および第４の複数の命令がそれぞれ実行されている間に、割り込みまたは例外が発生した場合に実行されうる。
【０１１３】
図２ｃでは、参照符号５１０，５１１，５１２は、マスタプロセッサ３０１によって実行される第４の複数の命令内の命令を示す。参照符号５１０’，５１１’，５１２’は、第１のスレーブプロセッサ３２１によって実行される第２の複数の命令内の命令を示し、参照符号５１０”，５１１”，５１２”は、第２のスレーブプロセッサ３３１によって実行される第３の複数の命令内の命令を示す。
【０１１４】
命令５１２，５１２'，５１２"が、マスタプロセッサ３０１とスレーブプロセッサ３２１，３３１とにおいてそれぞれ実行されている時点で、割り込みまたは例外４６０が発生しうる。割り込みまたは例外４６０の後、システム３００は、マスタプロセッサ３０１のレジスタ３０２〜３０７とスレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５との内容の少なくとも一部を、バッファメモリ３１３に保存するステップと、コンピュータシステム３００をシリアル動作モードに切り替えるステップを実行しうる。割り込みまたは例外が、スレーブプロセッサ３２１，３３１の１つで発生した場合、コンピュータシステム３００は、割り込みまたは例外が発生したスレーブプロセッサ３２１のレジスタ３２２〜３２５またはスレーブプロセッサ３３１のレジスタ３３２〜３３５の少なくとも１つの内容を、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の少なくとも１つにも書き込みうる。図２ｃでは、割り込みまたは例外時にコンピュータシステム３００によって実行されるアクションが、参照符号５４０で示される。また、コンピュータシステム３００は、コンピュータシステム３００がパラレル動作モード中に割り込みまたは例外が発生した場合には、図２ａを参照して上で説明したように、更に別のアクションも実行しうる。
【０１１５】
次に、コンピュータシステム３００は、割り込みルーチン５０２の命令５２０〜５２５を実行しうる。割り込みルーチン５０２は、コンピュータシステム３００のシリアル動作モードをサポートするオペレーティングシステムの一部であってもよく、パラレル動作モードをサポートしている必要はない。このため、割り込みルーチン５０２には、マスタプロセッサのレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の内容を、システムメモリ３０４に保存し、割り込みルーチン５０２の実行の終了時に、システムメモリ３０４からレジスタの第１のサブセット３０２〜３０５の内容を読み出すように適合された命令が含まれうる。また、割り込みルーチン５０２は、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の一部またはすべての内容を変更しうる。
【０１１６】
しかし、割り込みルーチン５０２が、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の内容、第１のスレーブプロセッサ３２１のレジスタ３２２〜３２５の内容、第２のスレーブプロセッサ３３１のレジスタ３３２〜３３５の内容、ならびにスレーブプロセッサ３２１，３３１の実行中状態ビット３３０，３４０の値を保存およびリストアするように適合されている必要はない。一部の実施形態では、割り込みルーチン５０２は、マルチタスク処理を許可しているオペレーティングシステムの一部であってもよい。詳細には、割り込みルーチン５０２は、コンピュータシステム３００のパラレル動作モードを使用することができる別のプログラムを実行するように適合されていてもよく、この場合、レジスタ３０６，３０７，３２２〜３２５，３３２〜３３５と、実行中状態ビット３３０，３４０の内容とが変更されうる。割り込みルーチン５０２が、割り込みルーチン５０２の最後の命令５２５の実行後に、レジスタ３０６，３０７，３２２〜３２５，３３２〜３３５と実行中状態ビット３３０，３４０との内容をリストアする必要がないため、レジスタ３０６，３０７，３２２〜３２５，３３２〜３３５と実行中状態ビット３３０，３４０との内容が、プログラム４００の命令５１２，５１２’，５１２”の実行後のこれらの内容と変わってしまうことがある。
【０１１７】
割り込みルーチン５０２が実行されたマスタプロセッサ３０１の戻りアドレスが、トランポリン命令５５０のアドレスによって置換されているため、割り込みルーチン５０２の完了後に、コンピュータシステム３００はトランポリン命令５５０を実行する。
【０１１８】
トランポリン命令５５０の実行時に、コンピュータシステム３００は図２ａを参照して上で説明したステップを実行しうる。トランポリン命令の実行後、プロセッサ３０１，３２１，３３１のレジスタ３０２〜３０７，３２２〜３２５，３３２〜３３５および実行中状態ビット３３０，３４０のそれぞれの内容がリストアされ、その際、割り込みルーチン５０２によって行われたレジスタの一部の変更が適切に処理されうる。
【０１１９】
このため、コンピュータシステム３００のオペレーティングシステム、より詳細には割り込みルーチン５０２が、プロセッサ３０１，３２１，３３１のレジスタ３０２〜３０７，３２２〜３２５，３３２〜３３５および実行中状態ビット３３０，３４０のそれぞれの内容を保存およびリストアするように適合されてはいないにも関わらず、割り込みルーチン５０２の実行後に、レジスタ３０２〜３０７，３２２〜３２５，３３２〜３３５と実行中状態ビット３３０，３４０との内容がリストアされる。また、割り込みルーチン５０２は、コンピュータシステム３００のシリアル動作モードで実行されうる。このため、オペレーティングシステムを、コンピュータシステム３００のパラレル動作モード用に適合させる必要がない。このため、本開示によるコンピュータシステム３００は、スレーブプロセッサ３２１，３３１をサポートしていない既存のコンピュータシステム用に作成されたソフトウェアと高い互換性を有する。
【０１２０】
一部の実施形態では、コンピュータシステム３００は、コンピュータシステム３００をパラレル動作モードからシリアル動作モードに切り替えるための第１のモードスイッチ命令を更に備えうる。システムは、第１のモードスイッチ命令が呼び出されたときに、マスタプロセッサ３０１およびスレーブプロセッサ３２１，３３１のレジスタ３０２〜３０７，３２２〜３２５，３３２〜３３５の少なくとも一部の内容を、バッファメモリ３１３に保存するステップと、システムをシリアル動作モードに切り替えるステップを実行するように適合されうる。第１のモードスイッチ命令が、スレーブプロセッサ３２１，３３１の１つによって実行された場合、コンピュータシステム３００は、第１のモードスイッチ命令が実行されたスレーブプロセッサ３２１のレジスタ３２２〜３２５またはスレーブプロセッサ３３１のレジスタ３３２〜３３５の少なくとも１つの内容を、マスタプロセッサ３０１のレジスタ３０２〜３０７の少なくとも１つに書き込むように更に構成されうる。
【０１２１】
一部の実施形態では、コンピュータシステム３００は、第１のモードスイッチ命令を実行する際に、以下に挙げるステップを実行するように構成されうる。コンピュータシステム３００は、指標ビット３０８が、コンピュータシステム３００がパラレル動作モードであることを示す値にセットされているかどうかを確認しうる。指標ビット３０８が、コンピュータシステム３００がシリアル動作モードであることを示す場合、違法命令フォルトが発生し、その後のアクションが実行されることはない。コンピュータシステム３００によって実行されるその後のアクションは、第１のモードスイッチ命令が、マスタプロセッサ３０１によって実行されたか、あるいはスレーブプロセッサ３２１，３３１の１つによって実行されたかに応じて変わる。
【０１２２】
第１のモードスイッチ命令がマスタプロセッサ３０１によって実行された場合、コンピュータシステム３００はスレーブプロセッサ３２１，３３１での命令の実行を停止しうる。スレーブプロセッサ３２１，３３１でそれぞれの命令の実行が停止されると、コンピュータシステム３００は、スレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５と、任意選択でスレーブプロセッサ３２１，３３２の実行中状態ビット３３０，３４０との内容を、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の１つから（例えばレジスタ３０６から）アドレスを読み出したバッファメモリ３１３に書き込みうる。また、マスタプロセッサ３０１の識別番号（一部の実施形態では番号０である）も、バッファメモリ３１３に書き込まれうる。
【０１２３】
次に、バッファメモリ３１３のアドレスを格納しているマスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の１つ（例えばレジスタ３０６）の内容が、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の１つの内容と（例えばレジスタ３０５の内容と）交換されうる。上で説明したように、コンピュータシステム３００で実行中のオペレーティングシステムは、割り込みまたは例外時に、マスタプロセッサ３０１のレジスタの第１のサブセット３０２〜３０５を処理するように構成されうる。このため、レジスタ３０５とレジスタ３０６の内容を交換することにより、割り込みまたは例外時に、オペレーティングシステムによってバッファメモリ３１３のアドレスが保存およびリストアされることが保証されるようになる。
【０１２４】
次に、コンピュータシステムは、マスタプロセッサ３０１の第２のサブセット３０６，３０７の内容をバッファメモリ３１３に保存しうる。上で説明したように、レジスタ３０２〜３０７の第２のサブセット３０６，３０７の１つ（例えばレジスタ３０７）には、トランポリン命令のアドレスが格納されうる。このため、レジスタ３０６，３０７の内容を保存する際に、トランポリン命令のアドレスがバッファメモリ３１３に保存されうる。次に、コンピュータシステム３００は、指標ビット３０８を、コンピュータシステムが第２の動作モードであることを示す値に（例えば値「ＯＦＦ」に）セットしうる。
【０１２５】
第１のモードスイッチ命令がスレーブプロセッサ３２１，３３１の１つによって実行された場合、コンピュータシステム３００はスレーブプロセッサ３２１，３３１のほか、マスタプロセッサ３０１でも命令の実行を中断しうる。すべてのプロセッサ３０１，３２１，３３１で命令の実行が停止された後に、マスタプロセッサ３０１のレジスタ３０２〜３０７の内容が、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の１つから（例えばレジスタ３０６から）アドレスを読み出したバッファメモリ３１３に保存されうる。また、スレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５の内容と、任意選択でスレーブプロセッサ３２１，３３１の実行中状態ビット３３０，３４０の値とが、バッファメモリ３１３に保存されうる。
【０１２６】
一部の実施形態では、第１のモードスイッチ命令が実行されたスレーブプロセッサ３２１，３３１の内容を、バッファメモリに保存する必要はない。このような実施形態では、残りのスレーブプロセッサのレジスタの内容のみがバッファメモリ３１３に保存される。このため、第１のモードスイッチ命令が第１のスレーブプロセッサ３２１によって実行された場合、第２のスレーブプロセッサ３３１のレジスタ３３２〜３３５の内容と、任意選択で、コンピュータシステム３００に設けられているスレーブプロセッサ３２１，３３１以外の他のスレーブプロセッサのレジスタの内容とが、バッファメモリ３１３に保存される。逆に、第１のモードスイッチ命令が第２のスレーブプロセッサ３３１によって実行された場合、システムは、第１のスレーブプロセッサ３２１のレジスタ３２２〜３２５の内容をバッファメモリ３１３に保存する。しかし、このような実施形態では、実行中状態ビット３３０，３４０のそれぞれの値がバッファメモリ３１３に保存されうる。
【０１２７】
次に、バッファメモリのアドレスを含むマスタプロセッサ３０１のレジスタの内容（例えばレジスタ３０６の内容）が、一時レジスタ（一部の実施形態では、バッファメモリ３１３に設けられる）に保存されうる。更に、第１のモードスイッチ命令が実行されたプロセッサの識別番号も、バッファメモリ３１３に保存されうる。例えば、第１のモードスイッチ命令が第１のスレーブプロセッサ３２１によって実行された場合、コンピュータシステム３００は、バッファメモリ３１３に識別番号１を保存する。第１のモードスイッチ命令が第２のスレーブプロセッサ３３１によって実行された場合、コンピュータシステム３００は、バッファメモリ３１３に識別番号２を保存する。別の実施形態では、別の識別番号が使用されてもよい。
【０１２８】
次に、第１のモードスイッチ命令を実行したスレーブプロセッサ３２１のレジスタ３２２〜３２５またはスレーブプロセッサ３３１の３３２〜３３５の内容が、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５に書き込まれうる。一部の実施形態では、レジスタ３２２〜３２５または３３２〜３３５の内容の、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５への書き込み中に、レジスタの第２のサブセット３０６，３０７の一部または全部の内容が上書きされうる。
【０１２９】
次に、コンピュータシステム３００は、マスタプロセッサ３０１のレジスタ３０２〜３０５の第１のサブセットの１つの内容（例えばレジスタ３０５の内容）を、バッファメモリ３１３に保存しうる。次に、一時バッファの内容が、レジスタ３０５に書き込まれうる。このため、バッファメモリ３１３のアドレスがレジスタに記憶され、このレジスタの内容が、割り込みまたは例外時にオペレーティングシステムによって処理される。次に、コンピュータシステム３００をシリアル動作モードに切り替えるために、指標ビット３０８が、コンピュータシステム３００が第１の動作モードであることを示す値に（例えば値「ＯＦＦ」に）セットされうる。
【０１３０】
一部の実施形態では、コンピュータシステム３００は、第１のモードスイッチ命令の実行中に割り込みまたは例外が発生したために生ずる問題を回避するために、上記のステップをアトミック割り込みとして実行するように構成されうる。
【０１３１】
第１のモードスイッチ命令の実行後に、コンピュータシステムは、１つ以上の命令をシリアル動作モードで実行しうる。コンピュータシステム３００は、上で説明した許可命令、あるいは下で詳細に説明する第２のモードスイッチ命令が実行されるまで、シリアル動作モードを続ける。例えば、コンピュータシステム３００は、コンピュータシステム３００のオペレーティングシステムの呼び出しを実行しうる。
【０１３２】
コンピュータシステム３００は、コンピュータシステム３００をシリアル動作モードからパラレル動作モードに切り替え、プロセッサ３０１，３２１，３３１のレジスタ３０２〜３０７，３２２〜３２５，３３２〜３３５の一部または全部と、任意選択でスレーブプロセッサ３２１，３３１の実行中状態ビット３３０，３４０の値との内容を、バッファメモリ３１３から読み出すように適合された第２のモードスイッチ命令を更に備える。前に行った第１のモードスイッチ命令の実行が、スレーブプロセッサ３２１，３３１の１つによって行われた場合、コンピュータシステム３００は、マスタプロセッサ３０１のレジスタ３０２〜３０７の少なくとも１つの内容を、第１のモードスイッチ命令を実行したスレーブプロセッサ３２１，３３１にも書き込みうる。
【０１３３】
一部の実施形態では、コンピュータシステム３００は、第２のモードスイッチ命令を実行する際に、以下に挙げるステップを実行するように構成されうる。最初に、コンピュータシステム３００は、制御レジスタビット３０９を確認しうる。制御レジスタビット３０９の値が、コンピュータシステム３００のパラレル動作モードが許可されていないことを示す場合には、違法命令フォルトが発生し、その後のアクションが実行されることはない。パラレル動作モードが許可されている場合、コンピュータシステム３００は、前に第１のモードスイッチ命令を実行したプロセッサを示す指標番号（indication number）を読み出しうる。コンピュータシステム３００によって実行されるその後のステップは、第１のモードスイッチ命令が、マスタプロセッサ３０１によって実行されたか、あるいはスレーブプロセッサ３２１，３３１の１つによって実行されたかに応じて変わる。
【０１３４】
第１のモードスイッチ命令がマスタプロセッサ３０１によって実行された場合（これは、一部の実施形態では、インジケータ番号が０の値であることによって示されうる）、コンピュータシステム３００は、スレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５の内容と、任意選択で実行中状態ビット３３０，３４０の値とを、バッファメモリ３１３から読み出しうる。また、コンピュータシステム３００は、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の内容も、バッファメモリから読み出しうる。次に、バッファメモリ３１３のアドレスをレジスタの第２のサブセット３０６，３０７に記憶するために、バッファメモリのアドレスを格納しているマスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の１つの内容と、レジスタの第２のサブセット３０６，３０７の１つの内容とが交換されうる。一部の実施形態では、レジスタ３０５とレジスタ３０６の内容が交換されうる。
【０１３５】
次に、コンピュータシステム３００は、指標ビット３０８を、コンピュータシステム３００がパラレル動作モードであることを示す値にセットしうる。一部の実施形態では、指標ビット３０８が、値「ＯＦＦ」にセットされうる。次に、命令の実行が、マスタプロセッサ３０１と、スレーブプロセッサ３２１，３３１のいずれかで再開され、その際、実行中状態ビット３３０，３４０の値は、第１のモードスイッチ命令が実行される前に、当該スレーブプロセッサ３２１，３３１が命令を実行していたことを示す。
【０１３６】
前の第１のモードスイッチ命令の実行が、スレーブプロセッサの１つによって行われた場合（このことは、インジケータ番号が０より大きい値であることによって示されうる）、スレーブプロセッサ３２１，３３１のレジスタ３２２〜３２５，３３２〜３３５の内容のほか、実行中状態ビット３３０，３４０の値が、マスタプロセッサ３０１の第１のサブセット３０２〜３０５の１つから（例えばレジスタ３０５から）アドレスが読み出されるバッファメモリ３１３から読み出されうる。一部の実施形態では、バッファメモリ３１３から読み出す必要があるのは、前に第１のモードスイッチ命令の実行を行わなかったスレーブプロセッサ３２１，３３１のレジスタの内容だけでよい。また、コンピュータシステム３００は、マスタプロセッサ３０１のレジスタ３０２〜３０７の第２のサブセット３０６，３０７の内容も、バッファメモリ３１３から読み出しうる。
【０１３７】
次に、バッファメモリ３１３のアドレスを格納しているレジスタ（一部の実施形態ではレジスタ３０５など）の内容が、バッファメモリ３１３に設けられうる一時レジスタに書き込まれ、レジスタ３０５の内容がバッファメモリ３１３から読み出されうる。次に、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５の内容が、前の第１のモードスイッチ命令の実行が行われたスレーブプロセッサ３２１，３３１のレジスタに書き込まれうる。このため、このスレーブプロセッサ３２１，３３１のレジスタは、コンピュータシステム３００がシリアル動作モードで動作していた間に行われたマスタプロセッサ３０１のレジスタへの変更を格納しうる。このため、シリアル動作モード中にマスタプロセッサ３０１で実行されていたスレッドの実行を、スレーブプロセッサで容易に再開することができる。例えば、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５には、コンピュータシステム３００がシリアル動作モードで動作していた間に発生した割り込みまたは例外に関する例外情報が格納されており、この情報が、コンピュータシステム３００がパラレル動作モードのときに、スレーブプロセッサ３２１，３３１によって扱われうる。
【０１３８】
次に、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜２０５の内容が、バッファメモリ３１３から読み出され、指標ビット３０８が、コンピュータシステム３００がパラレル動作モードであることを示す値にセットされ、命令の実行が、マスタプロセッサ３０１と、スレーブプロセッサ３２１，３３１とにおいて再開されうる。その際、実行中状態ビット３３０，３４０の値は、コンピュータシステム３００をシリアル動作モードに切り替えるために第１のモードスイッチ命令が呼び出されたときに、当該スレーブプロセッサ３２１，３３１で命令が実行されていたことを示す。
【０１３９】
一部の実施形態では、コンピュータシステム３００は、第２のモードスイッチ命令の実行中に割り込みまたは例外が発生したために生ずる問題を回避するために、第２のモードスイッチ命令の上記のステップを、アトミックオペレーションとして実行するように構成されうる。
【０１４０】
コンピュータシステム３００をパラレル動作モードとシリアル動作モード間で切り替えうるプログラムを実装するために、第１のモードスイッチ命令と第２のモードスイッチ命令とが使用されうる。第１のモードスイッチ命令が実行された場合、許可命令または第２のモードスイッチ命令が実行されるまで、プログラムのその後の実行がシリアル動作モードで実行される。第１のモードスイッチ命令および／または第２のモードスイッチ命令を使用するプログラムは、第１のモードスイッチ命令の実行後に、バッファメモリ３１３のアドレスを記憶している、マスタプロセッサのレジスタ３０５またはレジスタ３０２〜３０７の別のレジスタの内容を、システムメモリ３０４に記憶する命令と、第２のモードスイッチ命令の実行前に、システムメモリ３０４からレジスタ３０５の内容を読み出すための更に別の命令を備えうる。これは、コンピュータシステム３００のシリアル動作モードの標準的なストア命令とロード命令によって行うことができる。プログラムは、レジスタ３０５の内容をシステムメモリに記憶した後に、マスタプロセッサ３０１のレジスタ３０２〜３０７の第１のサブセット３０２〜３０５のそれぞれを使用しうる。別の実施形態では、第１のモードスイッチ命令および／または第２のモードスイッチ命令を実行する前に、メモリバッファ３１３のアドレスが変数に格納され、この変数からメモリバッファ３１３のアドレスがレジスタ３０５にロードされうる。
【０１４１】
コンピュータシステム３００の上記の機能および命令は、マスタプロセッサ３０１とスレーブプロセッサ３２１，３３１に設けられる専用回路によって、あるいはマスタプロセッサ３０１とスレーブプロセッサ３２１，３３１に提供されるマイクロコードによって提供されうる。
【０１４２】
上記に記載した特定の実施形態は例に過ぎず、本発明は、本開示の教示の利益を得る当業者にとって自明の、異なるが均等の別法によって変更および実施されてもよい。例えば、上記のプロセス工程を記載した順序とは異なる順序で実行してもよい。更に、ここに記載した構成または設計の詳細が、添付の特許請求の範囲以外によって限定されることない。このため、上記に記載した特定の実施形態を変形または変更することが可能であり、このような変形例はすべて本発明の範囲ならびに趣旨に含まれることが意図されることが明らかである。したがって、ここに保護を請求する対象は、添付の特許請求の範囲に記載したとおりである。
【図１ａ】
2010529533.tif 000003
【図１ｂ】
2010529533.tif 000004
【図２ａ】
2010529533.tif 000005
【図２ｂ】
2010529533.tif 000006
【図２ｃ】
2010529533.tif 000007
【手続補正書】
【提出日】平成21年5月7日(2009.5.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
マスタプロセッサ（３０１）と少なくとも１つのスレーブプロセッサ（３２１，３３１）とを有するシステム（３００）であって、前記マスタプロセッサ（３０１）の状態には第１の複数の変数が含まれ、前記スレーブプロセッサ（３２１，３３１）の状態には第２の複数の変数が含まれ、前記システム（３００）は、前記マスタプロセッサ（３０１）と前記スレーブプロセッサ（３２１，３３１）とによってデータが処理されるパラレル動作モードと、前記マスタプロセッサ（３０１）によってデータが処理されるシリアル動作モードとを有し、
前記システム（３００）は、前記パラレル動作モードで割り込みまたは例外が発生すると、前記第１の複数の変数および前記第２の複数の変数の少なくとも一部をバッファメモリ（３１３）に保存するステップと、前記システム（３００）を前記シリアル動作モードに切り替えるステップと、を実行するように構成され、
前記システム（３００）は、前記スレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記第１の複数の変数の少なくとも１つを、前記第２の複数の変数の少なくとも１つの値にセットするように更に構成され、
前記第１の複数の変数は第１の戻りアドレスを含み、前記第２の複数の変数は第２の戻りアドレスを含み、前記システム（３００）はトランポリン命令を備え、
前記システム（３００）は、前記マスタプロセッサ（３０１）で前記割り込みまたは例外が発生した場合に、前記第１の戻りアドレスおよび前記第２の複数の変数を前記バッファメモリ（３１３）に保存するステップと、前記第１の戻りアドレスを前記トランポリン命令のアドレスで置換するステップと、を実行するように構成され、
前記トランポリン命令は、前記マスタプロセッサ（３０１）で前記割り込みまたは例外が発生した場合に、前記システム（３００）を前記パラレル動作モードに切り替えるステップと、前記バッファメモリ（３１３）から前記第２の複数の変数および前記第１の戻りアドレスを読み出すステップと、を実行するように構成されているシステム（３００）。
【請求項２】
前記システム（３００）は、前記スレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記第１の複数の変数および前記第１の複数の変数を前記バッファメモリ（３１３）に保存するステップと、前記第１の戻りアドレスを前記トランポリン命令の前記アドレスで置換するステップと、前記シリアル動作モードに切り替えるステップと、を実行するように更に構成され、
前記トランポリン命令は、前記少なくとも１つのスレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記システム（３００）を前記パラレル動作モードに切り替えるステップと、前記バッファメモリ（３１３）から前記第２の複数の変数を読み出すステップと、前記第２の複数の変数の前記少なくとも１つを、前記第１の複数の変数の前記少なくとも１つの値にセットするステップと、前記バッファメモリ（３１３）から前記第１の複数の変数を読み出すステップと、を実行するように構成されている請求項１に記載のシステム（３００）。
【請求項３】
前記パラレル動作モードを許可するための許可命令を更に備え、前記許可命令は、前記第１の複数の変数の第１の変数を前記バッファメモリ（３１３）のアドレスにセットし、前記第１の複数の変数の第２の変数を前記トランポリン命令のアドレスにセットし、前記プロセッサを前記パラレル動作モードに切り替えるように構成されている請求項１または２に記載のシステム（３００）。
【請求項４】
前記第１の複数の変数の１つ以上の値を、前記第２の複数の変数の１つ以上に書き込むように構成された変数送信命令を更に備える請求項１乃至３のいずれか１項に記載のシステム（３００）。
【請求項５】
前記第２の複数の変数の１つ以上の値を、前記第１の複数の変数の１つ以上に書き込むように構成された変数受信命令を更に備える請求項１乃至３のいずれか１項に記載のシステム（３００）。
【請求項６】
前記少なくとも１つのスレーブプロセッサ（３２１，３３１）による命令の実行を開始するように適合されたフォーク命令を更に備え、前記命令の実行は特定のメモリアドレスにおいて開始する請求項１乃至３のいずれか１項に記載のシステム（３００）。
【請求項７】
前記少なくとも１つのスレーブプロセッサ（３２１，３３１）による命令の実行を停止するように適合されたスレーブジョイン命令を更に備える請求項１乃至３のいずれか１項に記載のシステム（３００）。
【請求項８】
前記少なくとも１つのスレーブプロセッサ（３２１，３３１）での命令の実行が終了するまで、前記マスタプロセッサ（３０１）を待機させるように構成されたマスタジョイン命令を更に備える請求項７に記載のシステム（３００）。
【請求項９】
前記システム（３００）を前記パラレル動作モードから前記シリアル動作モードに切り替えるように構成されたエンド命令を更に備える請求項１乃至３のいずれか１項に記載のシステム（３００）。
【請求項１０】
マスタプロセッサ（３０１）と少なくとも１つのスレーブプロセッサ（３２１，３３１）とを有するシステム（３００）を動作させる方法であって、前記マスタプロセッサ（３０１）の状態には第１の複数の変数が含まれ、前記スレーブプロセッサ（３２１，３３１）の状態には第２の複数の変数が含まれ、前記システム（３００）は、前記マスタプロセッサ（３０１）と前記スレーブプロセッサ（３２１，３３１）とによってデータが処理されるパラレル動作モードと、前記スレーブプロセッサ（３２１，３３１）によってデータが処理されるシリアル動作モードとを有し、前記方法は、
前記パラレル動作モードで割り込みまたは例外が発生すると、前記第１の複数の変数および前記第２の複数の変数の少なくとも一部をバッファメモリ（３１３）に保存するステップと、前記システム（３００）を前記シリアル動作モードに切り替えるステップとを実行し、
前記少なくとも１つのスレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記第１の複数の変数の少なくとも１つを前記第２の複数の変数の少なくとも１つの値にセットし、
前記第１の複数の変数は第１の戻りアドレスを含み、前記第２の複数の変数は第２の戻りアドレスを含み、前記システム（３００）はトランポリン命令を備え、前記方法はさらに、
前記マスタプロセッサ（３０１）で前記割り込みまたは例外が発生した場合に、前記第１の戻りアドレスおよび前記第２の複数の変数を前記バッファメモリ（３１３）に保存するステップと、前記第１の戻りアドレスを前記トランポリン命令のアドレスで置換するステップとを実行し、
前記トランポリン命令が実行される際に、前記マスタプロセッサ（３０１）で前記割り込みまたは例外が発生した場合に、前記システム（３００）を前記パラレル動作モードに切り替えるステップと、前記バッファメモリ（３１３）から前記第２の複数の変数および前記第１の戻りアドレスを読み出すステップとを実行する請求項１１に記載の方法。
【請求項１１】
前記スレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記第１の複数の変数および前記第２の複数の変数を前記バッファメモリ（３１３）に保存するステップと、前記第１の戻りアドレスを前記トランポリン命令の前記アドレスで置換するステップと、前記シリアル動作モードに切り替えるステップとを実行し、
前記トランポリン命令を実行する際に、前記少なくとも１つのスレーブプロセッサ（３２１，３３１）で前記割り込みまたは例外が発生した場合に、前記システム（３００）を前記パラレル動作モードに切り替えるステップと、前記バッファメモリ（３１３）から前記第２の複数の変数を読み出すステップと、前記第２の複数の変数の前記少なくとも１つを、前記第１の複数の変数の前記少なくとも１つの値にセットするステップと、前記バッファメモリ（３１３）から前記第１の複数の変数を読み出すステップと、を実行する請求項１０に記載の方法。
【国際調査報告】
2010529533.tif 000008
2010529533.tif 000009
2010529533.tif 000010