データを処理するためのプロセッサであって、データを処理するための命令を記憶するレジスタを有する複数の下位レベルプロセッサと、前記第1レベルのプロセッサに接続された、データを処理するためのメモリを備える上位レベルプロセッサとを備え、前記上位レベルプロセッサが前記複数の第2レベルのプロセッサの動作の少なくとも一部を制御する、プロセッサ。前記上位レベルプロセッサが、前記下位レベルプロセッサのそれぞれの命令の一部を前記上位レベルプロセッサのメモリにマッピングする、請求項1に記載のプロセッサ。前記上位レベルプロセッサが、前記下位レベルプロセッサの命令の全てをメモリにマッピングする、請求項2に記載のプロセッサ。前記上位レベルプロセッサと前記下位レベルプロセッサのそれぞれとの間に接続されたバスをさらに備える、請求項1に記載のプロセッサ。前記下位レベルプロセッサのそれぞれに別々のメモリ領域が割り振られる、請求項3に記載のプロセッサ。前記上位レベルプロセッサがイネーブルにされて、前記下位レベルプロセッサの実行する命令と、前記命令を実行する時間とを制御する、請求項1に記載のプロセッサ。前記上位レベルプロセッサがイネーブルにされて、前記下位レベルプロセッサに命令を注入して、前記下位レベルプロセッサの実行する命令と、前記命令を実行する時間とを制御する、請求項6に記載のプロセッサ。命令の前記注入が同期要件に基づく、請求項7に記載のプロセッサ。注入される前記命令が停止命令である、請求項7に記載のプロセッサ。前記上位レベルプロセッサがイネーブルにされて、前記下位レベルプロセッサのそれぞれのクロック速度を制御する、請求項1に記載のプロセッサ。前記上位レベルプロセッサがイネーブルにされて、複数の下位レベルプロセッサに同一の変数を提供する、請求項1に記載のプロセッサ。前記バスがさらに、前記上位レベルプロセッサが前記下位レベルプロセッサのどのレジスタにアドレスするかを定義するためのアドレスバスと、アクセスされる下位プロセッサレジスタの内容を含むためのデータバスと、前記下位レベルプロセッサに対する読取り書込みを制御するための制御ラインとを備える、請求項2に記載のプロセッサ。前記データバスが64ビットの幅を有し、前記制御ラインが1ビットの値を有する、請求項12に記載のプロセッサ。マルチレベルプロセッサ中で種々のプロセッサを同期させる方法であって、下位レベルプロセッサのレジスタの命令を上位レベルプロセッサのメモリにマッピングするステップと、下位レベルプロセッサを同期させるために前記上位レベルプロセッサから前記下位レベルプロセッサに命令を注入するステップとを含む方法。上位レベルプロセッサによって各下位レベルプロセッサのクロック速度を制御するステップをさらに含む、請求項14に記載のマルチレベルプロセッサ中で種々のプロセッサを同期させる方法。前記注入するステップが停止命令を注入する、請求項14に記載のマルチレベルプロセッサ中で種々のプロセッサを同期させる方法。減速されることが望まれる下位レベルプロセッサのクロックサイクルを伸張することによって、前記クロック速度が制御される、請求項15に記載のマルチレベルプロセッサ中で種々のプロセッサを同期させる方法。クリティカルなコードが実行された後で前記下位レベルプロセッサに対する停止命令を除去するステップをさらに含む、請求項14に記載のマルチレベルプロセッサ中で種々のプロセッサを同期させる方法。共有変数の実行が発生した後で前記下位レベルプロセッサに対する停止命令を除去するステップをさらに含む、請求項14に記載のマルチレベルプロセッサ中で種々のプロセッサを同期させる方法。前記クロックサイクルを伸張することがフリップフロップの使用による、請求項17に記載のマルチレベルプロセッサ中で種々のプロセッサを同期させる方法。データを処理するためのシステムであって、データを処理するための命令を記憶するレジスタを有する複数の下位レベルプロセッサと、前記第1レベルのプロセッサに接続された、データを処理するためのメモリを備える上位レベルプロセッサであって、前記複数の第2レベルのプロセッサの動作の少なくとも一部を制御する上位レベルプロセッサと、データを入力するための入力、およびデータを出力するための出力とを備えるシステム。前記上位レベルプロセッサが、前記下位レベルプロセッサのそれぞれの命令の一部を前記上位レベルプロセッサのメモリにマッピングする、請求項21に記載のシステム。前記上位レベルプロセッサが、前記下位レベルプロセッサの命令の全てをメモリにマッピングする、請求項21に記載のシステム。前記上位レベルプロセッサと前記下位レベルプロセッサのそれぞれとの間に接続されたバスをさらに備える、請求項21に記載のシステム。前記下位レベルプロセッサのそれぞれに別々のメモリが割り振られる、請求項23に記載のシステム。前記上位レベルプロセッサがイネーブルにされて、前記下位レベルプロセッサの実行する命令と、前記命令を実行する時間とを制御する、請求項21に記載のシステム。前記上位レベルプロセッサがイネーブルにされて、前記下位レベルプロセッサに命令を注入して、前記下位レベルプロセッサの実行する命令と、前記命令を実行する時間とを制御する、請求項26に記載のシステム。命令の前記注入が同期要件に基づく、請求項27に記載のシステム。注入される前記命令が停止命令である、請求項27に記載のシステム。前記上位レベルプロセッサがイネーブルにされて、前記下位レベルプロセッサのそれぞれのクロック速度を制御する、請求項21に記載のシステム。前記上位レベルプロセッサがイネーブルにされて、複数の下位レベルプロセッサに同一の変数を提供する、請求項21に記載のシステム。前記バスがさらに、前記上位レベルプロセッサが前記下位レベルプロセッサのどのレジスタにアドレスするかを定義するためのアドレスバスと、アクセスされる下位プロセッサレジスタの内容を含むためのデータバスと、前記下位レベルプロセッサに対する読取り書込みを制御するための制御ラインとを備える、請求項21に記載のシステム。前記データバスが64ビットの幅を有し、前記制御ラインが1ビットの値を有する、請求項32に記載のシステム。命令を処理するための実行ユニットと、前記実行ユニットに接続された、命令の処理のタイミングをとるためのクロックとを備えるプロセッサであって、電力消費の削減を可能にするためにクロックサイクルを伸張する能力を有するプロセッサ。クロック周波数を半分にすることによって前記クロック周波数を伸張するための回路をさらに備える、請求項34に記載のプロセッサ。前記回路がフリップフロップを備える、請求項34に記載のプロセッサ。停止命令の受領時に前記クロックサイクルが伸張される、請求項34に記載のプロセッサ。ROMを有する上位レベルプロセッサと、自らのROMをそれぞれが有する複数の下位レベルプロセッサとを備えるプロセッサであって、前記上位レベルプロセッサによって発行された1つの命令から複数の異なる独立した並列命令を生成するために、前記上位レベルプロセッサの前記ROM中の単一の命令が前記下位レベルプロセッサ中の複数のROMへのインデックスに分割される、プロセッサ。本明細書に述べるマルチレベル処理は、各プロセッサが同期に関与する必要なしに、上位レベルプロセッサが制御をとって、共有データを使用する権利またはクリティカルなセクションに入る権利をプロセッサ速度で各プロセッサに直接に発行するようにすることによって、同期オーバヘッドのコストを削減する。下位レベルの並列プロセッサの命令レジスタは、コピーまたは転送なしに上位レベルプロセッサのデータメモリにマッピングされ、したがって、上位レベルプロセッサは、低レベルの並列プロセッサによって関与されることも意識されることもなく、各並列プロセッサの命令を読み取ることおよび変更することができる。述べるマルチレベル処理を使用するシステムは、100サイクルのバスを使用する従来の32マルチプロセッサシステムの場合の同期待機時間を、32×32×100サイクルからわずか32×1サイクルに短縮し、3200倍の利得をもたらす。加えて、このシステムは、異なる共有データアイテムへの同時アクセスと、共有データへのアクセス権を待機する間に電力削減のために各プロセッサを停止する能力とを可能にする。述べる実施形態は、SIMDへの効果的な実装を用いてベクトル演算をサポートするための容易な方法を提供する。このシステムは、高位レベルプロセッサが逐次コードから並列コードを生成するようにすることによって、並列プログラミングをプログラマにとってより単純なものにする。これは、命令フェッチのための帯域幅要件を低減する。下位レベルプロセッサがさらに別の下位レベル並列プロセッサへの同期プロセッサとして使用されるとき、このシステムは、マルチプロセッサのための無限のスケーラビリティをもたらすことになる。本発明の特徴および利点は、明確にするための添付の図面と共に読まれる後続の詳細な記述から、明らかになるであろう。図では、下位レベルに3つのプロセッサしか示されていないが、実際の数は3をはるかに超えるであろうことは理解される。以下の実施形態は、同期を含めた並列処理の根本的な問題に対処することに焦点を合わせたものである。現在および将来の大規模並列システムに適した解決法を有することが望ましい。実施形態は、ロックの必要性をなくし、上位レベルプロセッサを介した同期を提供する。上位レベルプロセッサは、各プロセッサが1つのロックを求めて競合する必要なしに、共有データを使用する権利またはクリティカルなセクションに入る権利をプロセッサ速度で各プロセッサに直接に発行する制御をとる。同期のオーバヘッドは、共有データを使用する権利については1クロックに低減される。ロックを用いる従来の同期はN2バスサイクルかかるが、対照的に、本発明のマルチレベル処理ではNプロセッササイクルである。100サイクルのバスを使用する従来の32マルチプロセッサシステムの場合、同期は32×32×100サイクルかかるが、対照的に、マルチレベル処理の場合は、わずか32×1サイクルであり、3200倍の利得をもたらす。図2は、本発明の一実施形態を組み込むシステム200のブロック図である。この実施形態は、以下でSyncPまたは同期プロセッサと呼ばれる、高位レベルプロセッサ201を使用する。高位レベルプロセッサ201は、下位レベルプロセッサの命令レジスタを高位レベルプロセッサのデータメモリにマッピングすることによって、レジスタを物理的に複製することもしくはレジスタをコピーすることなしに、またはこれらの命令を高位レベルプロセッサに転送することなしに、下位レベルプロセッサ中の全ての命令を見たり監視したりする能力を有する。図2では、マルチレベルプロセッサ201が専用バス202を使用してどのように下位レベルプロセッサの全ての命令をそのデータメモリ211にマッピングするかを例示する。これにより、SyncP201は、下位レベルプロセッサの任意の命令レジスタがSyncP201自体のメモリであるかのように、その命令レジスタにアクセスすることができる。第1の下位レベルプロセッサ203は、その命令レジスタ213がSyncP201のデータメモリ位置210にマッピングされる。第2の下位レベルプロセッサ204のレジスタ214は、データメモリ位置215にマッピングする。同様にして、全てのプロセッサは、201中のデータメモリ位置にマッピングする。最後に、最後の下位レベルプロセッサ206のレジスタ216は、データメモリ位置220にマッピングする。下位レベルプロセッサ203、204~206の命令を監視することで、上位レベルプロセッサ201は、下位レベルプロセッサが実行する命令とこれらの命令を実行する時点とを制御することができる。これは、同期要件に基づいて任意の時点で所望の命令を下位レベルプロセッサ203、204~206の命令レジスタ213、214~216に注入することによって可能である。低レベルの並列プロセッサ203、204~206の異なる命令レジスタ213、214~216を上位レベルのSyncP201のデータメモリ211にマッピングするための実装の詳細については、後に実装のセクションで提供する。SyncP201によって下位レベルプロセッサ203、204~206から選択された下位レベルプロセッサは、停止命令を実行する。停止命令により、この下位レベルプロセッサは、実行を停止し、SyncP201がこの下位レベルプロセッサの命令を読み取ってから所望の命令を挿入することによって実行の制御をとるのを待機する。SyncP201はまた、各下位レベルプロセッサ203、204~206のクロック速度を制御することができ、それにより、SyncPバス202を使用して特定のデータコードを状態機械に送ることによって下位レベルプロセッサの命令レジスタに対して確実に読み書きできるようにすることができる。状態機械は、クロックを生成するか、または、各プロセッサのクロック制御をSyncP201のデータメモリにマッピングすることができる。SyncP201は、下位プロセッサのクロックを生成するために状態機械が使用する値を、データメモリ211に書き込む。この機能はマルチレベル処理同期では必要とされないことに留意するのは重要である。というのは、下位レベルプロセッサ203、204~206は、停止命令を使用し、211にマッピングされた命令レジスタに対してSyncP201が読み書きするのに必要なだけの時間をSyncP201に与えるからである。このクロック生成機能は、SIMDおよびSIMIMDの場合のみである。SyncPが下位プロセッサ203、204~206の命令レジスタに対して読み書きできるように下位プロセッサのクロックを同期させるためのよりずっと単純な方法も可能であり、技術および実装によって決まる。この実施形態は、高レベルプロセッサSyncP201を使用して、命令をそのデータメモリ211にマッピングすることによって下位レベルプロセッサ203、204~206の命令レジスタの並列処理を継続的に監視する。SyncP201についてのコードは以下のとおりである。このコードはSyncP201中でのみ実行され、その間、N個の下位レベルプロセッサ203、204~206は、それらのコードを実行する。この実施形態では、同期コードは、下位レベルプロセッサ203、204~206が関与することも意識することもなしに、バックグラウンドで実行される。SyncP201は、要求している命令に直接書き込むことができ、クリティカルなセクションに入る権利を与えることができる。一方、同じ変数Xの使用を要求している他の下位レベルプロセッサ203、204~206は、待機する。要求命令はそれらの命令レジスタ中に留まり、この間に、プロセッサ203、204~206のパイプラインは、それらのクロックサイクルを伸張することによって、または命令を停止に変換することによって、停止される。クロックを伸張する目的は、クロックを遅くして電力を節約することである。命令を停止することおよびプロセッサクロックを伸張することの詳細については、後に電力節約機能のセクションで説明する。下位プロセッサ203、204~206から選択されたプロセッサが、クリティカルなセクション中のコードの実行を完了したとき、または共有変数Xの使用を終了したとき、このプロセッサは、Xの要求の終了をSyncP201に知らせるために、停止機能を有する別の命令を使用する。SyncP201は、これを読み取ると、停止命令を除去し、下位レベルプロセッサ203、204~206のうちの選択された1つがそのコードの残りの実行を継続できるようにする。全てのN個の要求元プロセッサがXを使用するのに足りる時間は、およそNサイクルのみである。図3は、共有変数の使用権を、PN306、P1304、次いでP0303に対して3クロックサイクルでアサートするためにSyncP301が使用する方法300を示す図である。図3では、クリティカルなセクション中のコードを実行するのにかかる時間は無視されることに留意されたい。この実施形態によって達成される、同期時間の利得を計算するために、以下を仮定する。プロセッサ数10、および、バスサイクル時間10プロセッササイクル。従来のマルチプロセッサ同期は、2N~2NN×Nかかる。すなわち、2×10×10200~サイクル。マルチレベル同期は、N10サイクルしかかからない。利得範囲は、20~120倍である。多数のプロセッサを考えると、かつ何百サイクルものネットワークを使用すると、利得は何千倍にもなる。この利得は、同期時間の利得であって性能全体の利得ではないことに留意するのは重要である。高レベルプロセッサ301が下位レベルプロセッサ303、304~306の命令に対して読み書きできることは、以下の重要な利点を有する。1ロックが解放されるのを待機して各プロセッサ303、304~306がスピンする必要がないので、電力が削減される。各下位レベルプロセッサ303、304~306は、停止命令を使用するか、またはそのクロックを伸張する。2SyncP301は、下位レベルプロセッサ303、304~306中の全ての命令を監視し、したがって、複数の共有変数を同時に使用する権利を同時に発行することができる。一方、従来のマルチプロセッサは、共有バスに依拠して、他のプロセッサからの他の読取命令または書込命令によって割込みできないアトミックな操作を用いて同期をサポートする。3SyncP301は、全ての下位レベルプロセッサ303、304~306に対して1つの命令を挿入することができ、したがって、単純で効果的なSIMDを実装してベクトル演算をサポートする。4SyncP301は、間接データを全ての低レベル命令に書き込むことができ、それにより、各プロセッサ303、304~306は、キャッシュまたはメモリからどんな命令もフェッチする必要なしに、データの1つのフィールドを使用してマイクロコードROMに索引付けして、異なる命令を実行することになる。処理システムの実施形態は、特別な監視バスを使用して、任意の下位レベル処理命令レジスタの内容を読み書きする。図4は、特別なバス402を使用してSyncP401がN個の下位レベルプロセッサ403、404~406に接続されるのを示すブロック図400である。バス402は、アドレスバス402aを含む。アドレスバス402aは、SyncP401がN個の下位レベルプロセッサ403、404~406のどの命令レジスタにアクセスしたいかを定義する。アドレスバス402aはlogN本のワイヤを有し、N32の場合、アドレスバス402aは、5本のアドレスラインしか有さない。プロセッサP0403の命令レジスタ、IR0413は、アドレス0によってアクセスされ、プロセッサP1404のIR1414は、アドレス1によってアクセスされ、以下同様であり、プロセッサPN406のIRN416は、アドレスNによってアクセスされる。バス402は、データバス402dも含む。データバス402dは、アクセスされる低レベルの命令レジスタの内容を含む。64ビット命令の場合、データバス402dの幅は64ビットである。SysncP401は、アクセスされる命令レジスタからデータを読み取ったとき、その値を命令コードの値と比較することになる。値が、共有変数Xにアクセスする要求としての同期関連命令のコードと一致する場合は、SyncP401は、アクセスされる命令レジスタ中に特別な命令を書き込むことによって、この要求を許可することを決定することができる。この特別な命令は、低レベルプロセッサ403、404~406が共有変数へのアクセス権を有することができるようにする。バス402は、低レベルプロセッサ403、404~406のそれぞれの命令レジスタ413、414~416に対する読取り書込みのための、制御ラインも含む。これは1ビットラインであり、この値0のときは、SyncP401は読取りを実施し、この値1のときは、SyncP401は書込みを実施する。下位レベルプロセッサ403、404~406の命令レジスタ413、414~416のアドレスマッピングは、SyncP401のデータメモリマップ中のSyncP401アドレス0で開始する必要はない。より高いアドレスにマッピングする必要がある場合は、命令レジスタ413、414~416にアクセスするときに、SyncP401のより高いアドレスラインが1にセットされる。例えば、命令レジスタ413、414~416にアクセスするとき、A10を無視した場合は、SyncP401のデータメモリ上でIR0にアクセスするための開始アドレスは、0と1024のいずれかとなる。命令レジスタ413、414~416に対するメモリ位置はプロセッサ速度でアクセスされることに留意するのは重要である。というのは、これらのメモリ位置は、下位レベルプロセッサ403、404~406の命令レジスタの速度を有し、システムに対してどんな物理空間も電力消費もかからないからである。下位レベルプロセッサ403、404~406のIR413、414~416にアクセスするのに使用される命令は、以下を含む。LOADR41024P0403のIR413が位置1024にマッピングすると仮定した場合に、P0403の命令レジスタ413を読み取るSTORER71028P1404のIR414が位置1028にマッピングすると仮定した場合に、P1404の命令レジスタ414に書き込むロード命令は、1024におけるメモリ位置の値と、R0の内容とを、SyncP401のレジスタR4に転送する。R0の値は、通常は0に設定され、1024は、下位レベルプロセッサ403、404~406の命令レジスタ413、414~416をマッピングする開始アドレスである。この例では、図5のアドレスバス402aは、1024に設定されることになり、データバス402dは、P0のIRの値を有することになり、制御バス402cは、読取りのためにREADWRITE0を有することになる。ストア命令は、SyncP401が、SyncP401のレジスタR7中で設定された値をP1404の命令レジスタ414に書き込むことができるようにする。この値は、共有変数Xへのアクセス権を与える命令である場合がある。この例では、図5のアドレスバス402aは、1028に設定されることになり、データバス402dは、R7の値を有することになり、制御バス402cは、書込みのためにREADWRITE1を有することになる。図5は、SyncP401がどのようにいずれかの下位レベルプロセッサ403、404~406にアクセスしてその命令レジスタに対して読取りまたは書込みを行うことができるかに関する詳細な設計を示す概略図500である。SyncPのバス402aからのアドレスがデコーダ503によってデコードされて、下位レベルプロセッサ403、404~406のN個の命令レジスタ504から1つの命令レジスタ504a~dが選択される。デコーダ出力の信号IRi504cがアクティブであると仮定し、下位レベルプロセッサ404がアクセスされて、その命令レジスタ414に対して読取りまたは書込みが行われる。フリップフロップ506は、下位レベルプロセッサ404の、アクセスされる命令レジスタ414の1ビットである。ロード命令のときは、SyncPRW信号0であり、インバータが信号SyncPRW0に接続されるので、上のANDゲート506aがイネーブルになる。ゲート506aがイネーブルのとき、命令レジスタの内容を各フリップフロップに書き戻すことによって命令レジスタ中の同じ命令が維持される。また、読取りのときは、信号IRiがアクティブであるため、下のANDゲート506bがイネーブルになり、これにより、各フリップフロップの内容がトライステートバッファの中を通ってSyncPデータバス402dに行くことができる。ストア動作のときは、信号IRiがアクティブであり、SyncPRW1であり、これにより、真ん中のAND506cゲートがイネーブルになり、上位レベルのSyncPからのデータDiSyncPがフリップフロップに記憶される。これは、下位レベルプロセッサ404によって実行されるようにSyncP401によって書き込まれる、新しい命令である。SyncP401は、下位レベルプロセッサ403、404~406の命令を監視して、これらの命令をグループに分けることができる。各グループは、1つの共有変数を求めて競合する。図6は、SyncP401がキューを使用して種々の共有変数を記憶するのを示す図600である。図6には、バリアイベントがP3とP14との間で共有され、変数XがP1とP11との間で共有され、YがP5とP6との間で共有されるのを示す。複数の変数の同期は、以下のステップによって達成される。1SyncP401は、下位レベルプロセッサ403、404~406の全ての命令を任意の順序で読み取る。2下位レベルプロセッサ403、404~406のうちの1つからの、共有変数の使用要求をSyncP401が見つけた場合、SyncP401は、この変数用に確保されたキューに、要求元のプロセッサ番号を記憶する。例えば、変数Xには、アクセスXキューが使用される。P11が、Xを要求していると判明した第1のプロセッサである。3SyncP401は、命令レジスタの読取りを継続し、共有変数の使用を求める種々の要求をソートする。4キューを有する共有変数、例えばXを、別のプロセッサが要求している場合、SyncP401は、図6のP1のように、プロセッサ番号をXのキューに追加する。5各キューにつき、SyncP401は、マルチレベル処理の同期のセクションで上に提供したのと同じコードを使用して、要求元プロセッサを許可する。SyncPは、スーパースケーラアーキテクチャを使用するか、または、シングルイシューでは、各グループの必要コードを組み合わせることによって逐次コードを使用する。同期は、プロセッサ速度で実行される命令をほとんど使用しないので、逐次コードの性能は許容可能である。図7は、複数の共有変数を同時に管理するのに使用される方法を示すフローチャート700である。SyncP401が種々のキュー中の要求をソートした後、SyncP401は、各要求元プロセッサにアクセスを与えることで開始する。SyncP401は、アクセスのインタリーブを使用して、複数の下位レベルプロセッサが異なる共有変数に同時にアクセスするのを同時に可能にする。SyncP401は、単純な逐次コードを使用してこれらのアクセスを許可する。インタリーブにより、SyncPが逐次コードおよび単一のバスを使用して下位レベルプロセッサの命令にアクセスしている間に異なる共有変数に使用される同期の時間を重ねることが可能になる。図7に示すように、第1の列P2が、初めに、Xを最初に使用する許可を得る。次いで、P5が、連続してYを使用する許可を得る。XおよびYにアクセスする同期時間は、重なり、並行して発生する。P2がXの使用を終了すると、P2は停止命令をアサートする。停止命令は、SyncP401によって読み取られ、すぐにXの使用権をP8に与え、また、P2が継続できるようにもする。この図では、P2とP8がXを共有しており、両方ともXを同時に要求しており、P2がXを使用するとき、P8は、SyncP401がXの使用許可をP8に与えるまで停止されると仮定する。同様にして、P1とP5はYを共有し、P7とP3はZを共有する。下位レベルプロセッサ403、404~406は、共有変数の使用を要求するときまたは使用を終了したとき、特別な停止命令を使用する。下位レベルプロセッサ403、404~406のパイプラインのうちの1つの制御回路は、状態機械を使用する。この状態機械は、停止命令を実行してパイプラインを停止させるとき、制御回路を同じ状態に留まらせる。パイプラインは、SyncP401によって停止命令が除去されて異なる命令が書き込まれたときにのみ、その通常の命令実行を継続する。図8は、下位レベルプロセッサ403、404~406のうちの1つがどのように停止命令の結果としてクロックを伸張することによってその実行を停止するかに関するブロック図800である。命令レジスタ801が停止命令を含み、次いで、デコーダ出力信号がアクティブになり1に等しくなる。デコーダ802の出力に接続されたORゲートが、出力1を生成して、フリップフロップ803の出力およびクロック信号を1に等しくすることになる。命令が停止でない場合は、フリップフロップ803の出力は、クロック信号の逆数からのフィードバックにより2倍クロックごとにトグルし、フリップフロップ803の2倍クロックの周波数の2分の1で、必要とされるクロックを生成する。任意の回路中の電力消費は、クロックの周波数に比例する。新しいプロセッサの高速化は、チップ内部の電力管理が困難なせいで、これらのプロセッサの設計における問題を生じる。許可を待機する間にプロセッサを停止することは、電力を削減する助けとなる。従来のプロセッサはロックを使用するが、従来のプロセッサは、ロックが解放されるのを待機して、スピンし続けて電力を消費する。パイプラインのクロックを伸張することによってパイプラインを停止させるこの機能は、どんな従来のプロセッサのための機能としても使用できることに留意するのは重要である。現代のプロセッサは、SIMD命令セットを提供して、ベクトル演算の性能を改善する。例えば、IntelのNehalemおよびIntelのXeonプロセッサは、SSE命令セットをサポートするが、この命令セットは、4つの32ビット変数を保持することのできる128ビットレジスタを提供する。SSE拡張命令は、追加の命令をISAに加えるので、アーキテクチャを複雑にする。SSE拡張命令は、追加のパイプラインステージを加え、追加の命令のオーバヘッドを使用してレジスタに対するデータのパックおよびアンパックをサポートする。マルチレベル処理は、設計への追加の複雑さなしに、SIMD機能を提供する。SyncP401が下位レベルプロセッサの命令レジスタに書き込むことができることで、SyncP401は、下位プロセッサ403、404~406の全ての命令レジスタに対する書込み信号をイネーブルにすることによって、全ての命令レジスタに1つの命令を書き込むことができる。マルチレベル処理では、SIMDは、複数の異なるデータに作用する同じ多重命令として実装され、これは、SIMD実装における異なる効果的な方法である。各下位レベルプロセッサは、命令がSIMDであることを知らない。したがって、IntelのSSE実装と比較して、これをサポートするのに複雑さを追加する必要はない。また、従来の命令によってアクセスされるのと同じレジスタをそのデータとして使用するので、レジスタに対してデータをパックまたはアンパックする必要もない。マルチレベルでは、下位レベルプロセッサ中の1つのレジスタに対して、複数のデータ要素をパックすることが可能である。128ビットレジスタを使用する8つの下位レベルプロセッサが、各レジスタ中で4つの要素をパックする場合、IntelのSSEのベクトル長がわずか4であるのと比較して、ベクトル長32を生じる。32個のプロセッサが16ビット要素のデータをパックする場合、1サイクルの動作で実行される、32×8256要素のベクトル長を生じることになる。CRAYのような長いベクトルをサポートしたベクトルプロセッサは、構築するのに非常にコストがかかる。図9は、SyncP901が全ての下位レベルプロセッサ902、903~904の命令レジスタ912、913~914に命令ADDVR1R2R3を書き込むことのブロック図900である。この命令は、各下位レベルプロセッサ902、903~904によって実行されたとき、各プロセッサ902、903~904中のR2およびR3の内容に対する追加を実施する。しかし、各プロセッサ902、903~904中のR2およびR3は、ベクトルアレイ中の異なる要素の値を保持する。例えば、ベクトルAをベクトルBに追加する場合、最初にLOADVR20命令が実行され、各下位レベルプロセッサ902、903~904中のR5は、アレイA中の異なる要素のアドレスになるように設定される。このSIMD命令を実行すると、Aの要素が、種々のプロセッサのR2レジスタに転送される。以下のコードは、マルチレベル処理においてSIMDを使用して実施されるベクトル演算を説明する。SyncP901は、図10に示すそのデータバス902dを使用して、そのデータバスの最上位ビットDNを1に等しくすることによって、全ての下位レベルプロセッサ902、903~904のそれぞれの命令レジスタ912、913~914に書き込む。SIMDでない他のどんな命令の場合も、DNビットは0にセットされる。図10は、マルチレベル処理におけるSIMDの実装を示すブロック図1000である。命令レジスタのうちの1つを選択するのに使用される、デコーダ1001の出力1002の全ては、ORゲート1003、1004~1005に接続され、ORゲートの他方の入力はDNである。全ての下位レベルプロセッサの全ての命令レジスタに対する全てのORゲートの出力は、DN1の結果として、1にセットされる。図9に戻ると、前に説明したように、RW1のとき、SyncP901からの全ての入力データDN1~D0は、全ての下位レベルプロセッサ902、903~904の命令レジスタ912、913~914に同時に書き込まれる。次いで、各下位レベルプロセッサ902、903~904は、それらの命令レジスタに書き込まれた同じ命令の並列実行を開始する。図には、実行された命令が、R2の内容をR3に追加し、結果をベクトルとしてR1に記憶するのを示す。各プロセッサ902、903~904のR2およびR3中の要素は、要素のベクトルを形成する。要素は、さらに別のLOADDVSIMD命令を用いてメモリからロードすることができる。マルチレベル処理には、もう1つの重要な機能がある。これは、逐次命令が、複数のデータストリーム中で働く複数の命令を生成できるようにするものである。SyncP901は、そのデータをフィールドに分割し、次いで、各フィールドは、実行される準備のできたデコード済み命令のリストを記憶するROMへのアドレスとして使用される。マイクロコードROMを使用することで、IntelのPentium4におけるような、パイプラインを機能停止なく維持するためのデコードステージの必要がなくなる。図11は、SIMIMDをサポートするシステムを示すブロック図1100である。SyncP1101のデータバス1102dは、64ビットであるものとし、8つの別々のフィールドに分割され、各フィールドは、対応する下位レベルプロセッサ1103、1104~1105のそれぞれのROM1113、1114~1116にアクセスするためのアドレスとして使用される。この例では、P01103は、SyncPデータのD7D0を使用して、256個の位置を有するそのROM1113にアドレスする。SyncP1101がより長いデータを有する場合、各ROM1113、1114~1116は、コード化済み命令のより大きい記憶域を有することができる。10ビットアドレスが、1024個の異なるデコード済み命令にアクセスすることになる。図11にはまた、SyncP1101のデータD7~D0が、P0に対するADD命令を生成したP01103のROM1113へのアドレスとして使用されるのを示す。SyncPデータD15~D8は、SUB命令を生成したP11104のROM1114へのアドレスである。図11に示すように、これらは、SyncP1101が1つの命令を実行することから得られる、並列実行される異なる命令であり、この1つの命令は、データを複数のアドレスとして使用して、いくつかのROM1113、1114~1116からの複数の異なる命令にアクセスする。このSIMIMD方法には、以下を含めた複数の利点がある。1単一逐次命令を使用して複数のプロセッサ1103、1104~1106のための並列コードを生成するので、並列コードを記述するのが容易になる。2単一の命令から生成されたコード部分には、同期は必要ない。3下位レベルプロセッサ1103、1104~1105は、命令をキャッシュからフェッチしたりメモリを遅くしたりする必要なしに、それらのROM1113、1114~1116からそれぞれ直接に命令を実行する。したがって、電力および複雑さが低減する。4命令は、ROM1113、1114~1116からプロセッサ速度で実行される。これにより、プロセッサ1103、1104~1105への命令送達の性能および帯域幅が向上する。5下位レベルプロセッサ1103、1104~1106のための、コストがかかり複雑な命令キャッシュまたは命令メモリの必要性を低減するかまたはなくすことができる。図12は、SyncP1101がどのように下位レベルプロセッサ1103、1104~1106への種々の命令の発行を制御するかを示す図1200である。マルチプレクサ1201を使用して、SyncP1101によって下位レベルの処理に供給されるデータのタイプに基づいて、下位レベルプロセッサ1103、1104~1106のIRに対する種々のタイプの命令が選択される。マルチプレクサの選択ラインが、SyncP1101のデータラインのいくつかに接続され、SyncP1101が実施する特定の動作によって制御される。例えば、SIMDでは、SyncP1101のビットDNが1にセットされる。以下のような種々のマルチプレクサ選択がある。1SyncP1101が命令の書込みおよび変更を行う必要がない場合は、下位レベルの処理は、命令レジスタ中で同じ命令を保持する。マルチプレクサ1201は、同じ命令レジスタの内容を入力として選択する。2マルチプレクサ1201は、主に同期に使用される停止命令または許可命令を書き込む必要がある場合は、SyncPD1101の第1のデータ入力を選択する。3SyncPがSIMDを実施する必要がある場合は、マルチプレクサ1201は、SyncPD1101の第2のデータ入力を選択する。この場合、SyncP1101のデータは、全ての下位レベルプロセッサの命令レジスタに書き込まれる。4SyncP1101がSIMIMD命令を実施する必要があるときは、マルチプレクサ1201は、ROMOUT入力を選択する。マルチレベル処理は、レベルの数を3つ以上のレベルの下位レベルプロセッサに拡張することができ、コードの実行は、さらに別の下位レベルプロセッサに対するSyncPの任務を実施する。システム中のプロセッサの数はN×N個となり、このシステムのスケーラビリティはN×Nとなる。下位レベルプロセッサの同期を管理する高位レベルプロセッサを有することで達成される、同期オーバヘッドの低減は、システムのスケーラビリティをN×Nに増大させる助けとなる。図13は、3レベルの処理を示すブロック図1300である。第1レベルのプロセッサであるSyncP1301は、前に説明したように、第2レベルの処理1305のプロセッサ1303、1304~1306の命令レジスタ1313、1114~1116の全てをそのデータメモリにマッピングし、特別なバス1302を使用してこれらの命令レジスタに対して読取りまたは書込みを行うことができる。第2レベル1305の各プロセッサ1303、1304~1306もまた、SyncP1301と同様に、いくつかの他の下位レベルプロセッサを制御することができる。例外として、これらの第2レベルプロセッサ1303、1304~1306は、それらの通常の処理動作も実施する。第2レベルプロセッサ1303、1304~1306は、それらのデータメモリに、第3レベルプロセッサ1321~1322の命令レジスタ1331~1332を第2レベルプロセッサ1303によってマッピングし、命令レジスタ1336~1337を第2レベルプロセッサ1306によってマッピングして、これらの同期を管理する。下位レベルプロセッサ1321~1327をプロセッサ速度で停止または許可するのには1サイクルしか要しないので、下位レベルプロセッサ1321~1327の管理が必要とするサポートは最小限である。また、SIMDおよびSIMIMDを含めた前述の機能のいくつかを、3レベルの処理について実施することも可能である。複数の下位レベルプロセッサの命令レジスタに対して読み書きすることによって、下位レベルプロセッサの関与なしに下位レベルプロセッサを制御する高位レベルプロセッサは、同期オーバヘッドを、何千ものプロセッササイクルからわずかなサイクルに低減する。例示的な実施形態は、他にも多くの重要な利点を有することができ、これらの利点には、共有変数にアクセスするために待機する間にこれらのプロセッサを停止させることによって、電力を削減できることが含まれる。高位レベルプロセッサは、単純な逐次命令を並列命令に変換して、並列ソフトウェアの記述をより容易にすることができる。単純なSIMD実装を用いて、長いベクトルに対してベクトル演算を効果的にサポートすることができる。また、マルチレベル処理を他のレベルに拡張することもでき、無限のスケーラビリティを可能にする。示した実施形態は例示に過ぎず、本発明は、添付の特許請求の範囲によってのみ定義される。