(57)【要約】  同期オーバヘッドのコストを削減するためのマルチレベルプロセッサ(200)は、上位レベルプロセッサ(201)を備える。上位レベルプロセッサ(201)は、制御をとり、共有データを使用する権利及びクリティカルなセクションに入る権利をプロセッサ速度で複数の下位レベルプロセッサ(203、204...20n)のそれぞれに直接発行する。一例では、下位レベルの並列プロセッサの命令レジスタが、上位レベルプロセッサ(201)のデータメモリにマッピングされる。別の実施形態(1300)は、3つのレベルのプロセッサを組み込む。この方法は、下位レベルプロセッサの命令を上位レベルプロセッサのメモリにマッピングすること、および下位レベルプロセッサの動作を制御することを含む。この方法の変形はSIMDおよびSI>MIMDの実行を容易にする。プロセッサは電力消費を削減するためにクロック周波数を伸張する。
2013541101.tif 000002
【特許請求の範囲】
【請求項１】
データを処理するためのプロセッサであって、
データを処理するための命令を記憶するレジスタを有する複数の下位レベルプロセッサと、
前記第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へのインデックスに分割される、プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータデータ処理に関し、特に、マルチプロセッサデータ処理に関する。さらにより詳細には、本発明は、マルチレベルプロセッサを同期させるための装置、方法、およびシステムに関する。
【背景技術】
【０００２】
単一のマイクロプロセッサのパワーは、技術およびアーキテクチャにおける最近までの向上により、容量、速度、および複雑さの継続的増加を経験してきた。この向上は、最近になって収穫逓減に達した。メモリ/プロセッサの速度ギャップの増大と、チップ内部の導体による遅延とのせいで、単一プロセッサの性能は、その限界に達し始めた。これは、コンポーネント密度がより高くなることによって引き起こされる電力管理制限および温度管理制限のせいでクロック速度レートの上昇が減速することと組み合わさる。
【０００３】
単一プロセッサの性能はその限界に達しつつあるが、新しいマルチメディア応用例、ますます複雑化するディジタル信号処理、気象モデリングなどの科学的応用例、および、CADツールを使用して複雑なシステムを設計するための他の工学応用例により、コンピューティングパワーに対する必要性は高まっている。
【０００４】
技術はまだ向上しつつあり、1チップ当たりのトランジスタをより多くより高速に生産しているが、単一プロセッサのアーキテクチャは、これらの向上を効果的に利用し続けることができない。この結果、産業界は、単一チップ中のマルチコアに切り替えてきた。産業界は最近、単一のチップ中で2つ、4つ、および8つのコアを生産してきており、ユーザは、比例した性能利得を得ることを期待している。加えて、単一チップ上のマルチプロセッサシステムを用いれば、最近まで多くの人には手が届かなかった並列処理が、今や手頃なコストで入手可能である。
【０００５】
マルチプロセッサシステムの性能利得はまた、主に同期オーバヘッドおよび通信オーバヘッドに起因する根本的な問題によって制限される。同期問題を解決するための以前の試みは、限られた成功しか収めてこなかった。並列プロセッサは、アプリケーションを、データを共有して同時実行できる複数のプロセスに分割し、ネットワークおよびメモリを使用して相互間で通信しなければならない。データの共有は通常、相互排除を使用して、時間において直列化される。
【０００６】
並列コンピューティングでは、複数のプロセッサを使用して得られる理論的な最大高速化を予測するのに、アムダールの法則がしばしば使用される。並列コンピューティングにおける、複数のプロセッサを使用したプログラムの高速化は、プログラムの逐次的な部分に必要な時間よって制限される。例えば、プログラムが、単一のプロセッサコアを使用すると20時間を要し、1時間の特定部分は並列化できないが、見込みのある残りの19時間(95%)の部分は並列化できる場合は、何個のプロセッサをこのプログラムの並列化実行に充てるかにかかわらず、最小実行時間は、このクリティカルな1時間よりも短くはなり得ない。したがって、高速化は20倍までに制限される。
【０００７】
最も楽観的な結論は、当然ながら、コアが増加するのに伴って効率的に働く信頼性のある並列ソフトウェアをどのように作るかを、誰かが見つけ出すことであると言われてきた。これは、次の30年のマイクロプロセッサハードウェアを構築するための、切望される基礎を提供するであろう。1チップ当たりのトランジスタの数が1〜2年ごとに定例的に倍増するのが止まった(ムーアの法則の恐ろしい終わり)としても、革新的なパッケージングにより、複数のチップから経済的なシステムを生み出すことができて、消費者が長く享受してきた性能利得を維持することができるかもしれない。
【０００８】
マルチプロセッサシステムでは、特別なアトミック命令を使用して同期が実施される。このアトミック命令により、各プロセッサは、共有データアイテムを使用する権利またはクリティカルなコードセクションに入る権利を有する前に、ロックと呼ばれる特別なメモリ位置を獲得することができる。これは、ロックを獲得しようと競合するN個のプロセッサ全てについてネットワークまたはバスを使用すること、および他の全てのプロセッサについて待機することを伴う。待機中、プロセッサは、タイトなループ中でスピンし、時間および電力を浪費する。プロセッサは、ロックを獲得する度に、終了すればロックを解放しなければならない。これは、各ロックを獲得および解放するためにバスまたはネットワークを使用してロック位置を無効化することを伴う。
【０００９】
SGI Origin 3000システム中の32プロセッサの同期の時間コストは、232000サイクルかかる時間コストである。このサイクルの間に、32個のプロセッサは2200万FLOPSを実行できたであろうし、またこのサイクルは、従来の同期がシステム性能を損なうことの明確な表れである。スヌーピングのためにチップ外のネットワークを使用する従来のマルチプロセッサのスケーラビリティに対するロックの影響は、8個のプロセッサを使用する場合は約6までしかスケールしないが、32個のプロセッサを使用するときは、スケーラビリティは1に落ちる。チップ内に高速ネットワークを有するマルチプロセッサは、32個のプロセッサを使用するとき、約12までしかスケールしない。
【００１０】
従来のマルチコアプロセッサは、同期のために、load-linked命令およびそれに続くstore conditional命令という、特別なアトミック命令を使用する。LL(load-linked)命令が、データのブロックをキャッシュにロードし、次いで、後続のstore conditional(SC)命令が、同じブロックへの書込みを試みる。これは、前のLL以降にブロックが参照されていない場合にのみ成功する。LLとSCとの対の間に別のプロセッサからブロックへの参照があれば、それはSCを失敗させる。このための同期コストは、バスまたはネットワークを使用するレイテンシと、それに加えて、プロセッサが失敗する度に、プロセッサがSCの成功を待機してタイトなループ中でスピンしながら繰り返しバスを使用してキャッシュからブロックをロードしなければならず(無効化のため)、時間および電力を浪費することである。
【００１１】
この問題を解決する手法の1つは、RAMP(Research Accelerator for Multiple Processors)リサーチプロジェクトであった。RAMPは、大規模な並列コンピュータのための効果的なソフトウェアを開発しようとして、フィールドプログラマブルゲートアレイ(FPGA)を使用して大規模な超並列プロセッサ(MPP、Massive Parallel Processor)(1000個までのプロセッサ)を構築することを提案する。この方法に伴う問題は、大規模なマルチプロセッサシステムをエミュレートするが、その挙動を正確に表さないことである。例えば、RAMPが現実のプロセッサを使用するときは、プロセッサメモリ速度比率が非常に大きくなって、膨大な数のプロセッサの性能利得の制限を引き起こし、メモリギャップによる大きいレイテンシを隠す必要がある。FPGAエミュレーションは、現実のシステムに対して100倍未満の減速を達成する。したがって、現実の大規模な並列処理システムに使用することはできない。
【００１２】
並列処理性能を改善するための別の試みとして、トランザクショナルメモリ(TM)が開発された。トランザクショナルメモリは、大きいコードのトランザクションをロックなしでアトミックに実行することによって、同期オーバヘッドを低減しようとするものである。トランザクションが失敗した場合、トランザクションはコミットしないことになり、トランザクションをサポートするオーバヘッドが浪費される。トランザクショナルメモリシステムに伴う重要な課題は、原子性、一貫性、および独立性のプロパティを守らせるオーバヘッドを低減することである。ハードウェアTMの制限は、ハードウェアバッファリングがシステムをメモリ階層の下位レベルで溢れ(spill)状態に追い込むことに起因する。ソフトウェアTMは、読取りと書込みのセットを追跡するためにメタデータを操作するようにされるときに追加の制限を有し、追加の命令が実行されるとき、これらの命令がメモリシステム中のオーバヘッドおよび電力消費を増大させる。
【００１３】
上述のどの方法も、スケーラビリティの問題に効果的に対処しない。RAMPは、現実の高速プロセッサなら何千もの並列命令の実行を必要とするであろう大きいメモリレイテンシを隠すために、プロセッサを低速化する。TMは、大きいコードチャンクが並列で実行されるのを制限し、トランザクション間で一致を有することに依存し、したがって、細粒度並列性を妨げ、最も遅いトランザクションの性能にシステム性能が制限されるようにする。
【００１４】
最近、研究者らは、並列アプリケーションの直列部分の性能、またクリティカルなセクションの性能も向上させるために、非対称型チップマルチプロセッサ(ACM、Asymmetric Chip Multiprocessor)を提案した。プロセッサごとのロックを使用してクリティカルなセクション中のコードを実行するのではなく、個々のプロセッサが、クリティカルなセクションを実行するために大きいコア(特別な強力プロセッサ)に対する要求を送り、次いで、要求元プロセッサは実行を再開することができる。この方法は、各プロセッサから大きいコアプロセッサにメッセージを送受信するための、追加のオーバヘッドを必要とする。バスを使用して、クリティカルなセクション中のデータおよびコードを大きいプロセッサに転送しなければならず、余分なオーバヘッドが追加される。この方法は、直列方式で一度に1つのクリティカルなセクションのコードしか実行することができず、複数の並行プロセッサグループのクリティカルなセクション同士が異なる場合であっても、これらのグループがそのクリティカルなセクション中で動作するのを可能にすることができない。全てのプロセッサは、大きいプロセッサを使用する権利を得るために共に競合し、したがって、一度に1つのプロセッサのみが成功し、他のプロセッサは待機しなければならない。
【００１５】
ACMによる改善は、主に、大きいプロセッサが全てのプロセッサよりも高速であり直列コードを高速化できることからくるものである。制限の1つは、このより大きいプロセッサがより多くの電力を消費し、実装すべきシリコンの点でより多くのコストがかかることである。ACMの別の制限は、他の全てのプロセッサが大きいプロセッサを使用してそれらの直列コードを実行するとき、大きいプロセッサのキャッシュが、空間局所性のない種々のプログラム領域からのコードおよびデータを記憶し、エビクションによるキャッシュミスレートの増加を引き起こすことである。
【００１６】
従来のマルチプロセッサシステムは、異なるプロセッサが共有データにアクセスしようとするときまたはクリティカルなコードセクションに入ろうとするときに、ロックを使用して、異なるプロセッサ間で同期をとる。共有データアイテムまたはクリティカルなセクションはそれぞれ、ロックと呼ばれるメモリ位置を使用する。ロックは、レジスタの内容をスワップすることによって獲得しなければならない。レジスタは、ロックの内容によって1にセットされる。レジスタが0を返す場合は、ロックはフリーであり、プロセッサは、レジスタの値を使用して、ロックをアトミックに1にセットする。スワップがレジスタ中の1を返す場合は、ロックは別のプロセッサによって使用されており、プロセッサは、スワップの成功を待機してループ中でスピンしなければならない。
【００１７】
以下は、従来のマルチプロセッサにおける同期のためのコードである。
【００１８】
【数１】
2013541101.tif 000003
【００１９】
上のコードでは、各プロセッサが、バスまたはネットワークを使用してロックに書き込む必要がある。というのは、ロックは共有変数であり、他のプロセッサのキャッシュ中で更新または無効化されなければならないからである。プロセッサは、クリティカルなセクション中のコードの実行を終了してロックに0を書き込むとき、ネットワークを使用しなければならない。これは、プロセッサがバスまたはネットワークをもう1回使用することを必要とし、N個のプロセッサの場合、費やされるのは以下のとおりとなる。
2N+1+2(N-1)+...2+1すなわち
(2i+1)(i=0〜N)の合計 = 2N+N×Nバスサイクル
上式は、最悪の条件を与える。最良の条件は、2Nバスサイクルである。
【００２０】
図1は、3つのプロセッサが時間T0でバスを使用して共有変数を獲得しようとするのを示すブロック図100である。プロセッサPNが、T0でロックを獲得する第1のプロセッサであり、P1、P0は待機している。PNはT1でロックを解放し、すぐにP1がロックを獲得し、P0は待機している。時間T2で、P1はロックを解放し、P0が最後にロックを獲得する。この例は、最良の可能な条件、すなわち2Nを表す。
【発明の概要】
【課題を解決するための手段】
【００２１】
本明細書に述べるマルチレベル処理は、各プロセッサが同期に関与する必要なしに、上位レベルプロセッサが制御をとって、共有データを使用する権利またはクリティカルなセクションに入る権利をプロセッサ速度で各プロセッサに直接に発行するようにすることによって、同期オーバヘッドのコストを削減する。下位レベルの並列プロセッサの命令レジスタは、コピーまたは転送なしに上位レベルプロセッサのデータメモリにマッピングされ、したがって、上位レベルプロセッサは、低レベルの並列プロセッサによって関与されることも意識されることもなく、各並列プロセッサの命令を読み取ることおよび変更することができる。述べるマルチレベル処理を使用するシステムは、100サイクルのバスを使用する従来の32マルチプロセッサシステムの場合の同期待機時間を、32×32×100サイクルからわずか32×1サイクルに短縮し、3200倍の利得をもたらす。加えて、このシステムは、異なる共有データアイテムへの同時アクセスと、共有データへのアクセス権を待機する間に電力削減のために各プロセッサを停止する能力とを可能にする。述べる実施形態は、SIMDへの効果的な実装を用いてベクトル演算をサポートするための容易な方法を提供する。このシステムは、高位レベルプロセッサが逐次コードから並列コードを生成するようにすることによって、並列プログラミングをプログラマにとってより単純なものにする。これは、命令フェッチのための帯域幅要件を低減する。下位レベルプロセッサがさらに別の下位レベル並列プロセッサへの同期プロセッサとして使用されるとき、このシステムは、マルチプロセッサのための無限のスケーラビリティをもたらすことになる。
【００２２】
本発明の特徴および利点は、明確にするための添付の図面と共に読まれる後続の詳細な記述から、明らかになるであろう。図では、下位レベルに3つのプロセッサしか示されていないが、実際の数は3をはるかに超えるであろうことは理解される。
【図面の簡単な説明】
【００２３】
【図１】バスを使用して共有変数を獲得しようとする3つの従来のプロセッサのブロック図である。
【図２】本発明の一実施形態を組み込むシステムのブロック図である。
【図３】本発明の図2の実施形態を組み込むシステムの別の態様を例示するブロック図である。
【図４】バスを例示する、本発明の図2の実施形態を組み込むシステムのブロック図である。
【図５】図2の実施形態の一部の詳細な設計の概略図である。
【図６】図2の実施形態の動作を例示するキューのブロック図である。
【図７】本発明を組み込む方法のフローチャートである。
【図８】本発明の図2の実施形態の別の部分のブロック図である。
【図９】本発明の別の実施形態のブロック図である。
【図１０】本発明の図9の実施形態の一部のブロック図である。
【図１１】本発明の第3の実施形態のブロック図である。
【図１２】本発明の第4の実施形態のブロック図である。
【図１３】本発明の第5の実施形態のブロック図である。
【発明を実施するための形態】
【００２４】
以下の実施形態は、同期を含めた並列処理の根本的な問題に対処することに焦点を合わせたものである。現在および将来の大規模並列システムに適した解決法を有することが望ましい。実施形態は、ロックの必要性をなくし、上位レベルプロセッサを介した同期を提供する。上位レベルプロセッサは、各プロセッサが1つのロックを求めて競合する必要なしに、共有データを使用する権利またはクリティカルなセクションに入る権利をプロセッサ速度で各プロセッサに直接に発行する制御をとる。同期のオーバヘッドは、共有データを使用する権利については1クロックに低減される。ロックを用いる従来の同期はN2バスサイクルかかるが、対照的に、本発明のマルチレベル処理ではNプロセッササイクルである。100サイクルのバスを使用する従来の32マルチプロセッサシステムの場合、同期は32×32×100サイクルかかるが、対照的に、マルチレベル処理の場合は、わずか32×1サイクルであり、3200倍の利得をもたらす。
【００２５】
図2は、本発明の一実施形態を組み込むシステム200のブロック図である。この実施形態は、以下でSyncPまたは「同期プロセッサ」と呼ばれる、高位レベルプロセッサ201を使用する。高位レベルプロセッサ201は、下位レベルプロセッサの命令レジスタを高位レベルプロセッサのデータメモリにマッピングすることによって、レジスタを物理的に複製することもしくはレジスタをコピーすることなしに、またはこれらの命令を高位レベルプロセッサに転送することなしに、下位レベルプロセッサ中の全ての命令を見たり監視したりする能力を有する。
【００２６】
図2では、マルチレベルプロセッサ201(SyncP)が専用バス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(Single Instruction Multiple Data)およびSI>MIMDの場合のみである。SyncPが下位プロセッサ203、204〜206の命令レジスタに対して読み書きできるように下位プロセッサのクロックを同期させるためのよりずっと単純な方法も可能であり、技術および実装によって決まる。
【００２９】
この実施形態は、高レベルプロセッサSyncP201を使用して、命令をそのデータメモリ211にマッピングすることによって下位レベルプロセッサ203、204〜206の命令レジスタの並列処理を継続的に監視する。SyncP201についてのコードは以下のとおりである。
【００３０】
【数２】
2013541101.tif 000004
【００３１】
このコードは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、P1 304、次いでP0 303に対して3クロックサイクルでアサートするためにSyncP301が使用する方法300を示す図である。
【００３６】
図3では、クリティカルなセクション中のコードを実行するのにかかる時間は無視されることに留意されたい。
【００３７】
この実施形態によって達成される、同期時間の利得を計算するために、以下を仮定する。
プロセッサ数=10、および、バスサイクル時間=10プロセッササイクル。
従来のマルチプロセッサ同期は、2N〜2N+N×Nかかる。
すなわち、2×10×10=200〜(200+1000)サイクル。
マルチレベル同期は、N=10サイクルしかかからない。
利得範囲は、20〜120倍である。
【００３８】
多数のプロセッサを考えると、かつ何百サイクルものネットワークを使用すると、利得は何千倍にもなる。この利得は、同期時間の利得であって性能全体の利得ではないことに留意するのは重要である。
【００３９】
高レベルプロセッサ301が下位レベルプロセッサ303、304〜306の命令に対して読み書きできることは、以下の重要な利点を有する。
1.  ロックが解放されるのを待機して各プロセッサ303、304〜306がスピンする必要がないので、電力が削減される。各下位レベルプロセッサ303、304〜306は、停止命令を使用するか、またはそのクロックを伸張する。
2.  SyncP301は、下位レベルプロセッサ303、304〜306中の全ての命令を監視し、したがって、複数の共有変数を同時に使用する権利を同時に発行することができる。一方、従来のマルチプロセッサは、共有バスに依拠して、他のプロセッサからの他の読取命令または書込命令によって割込みできないアトミックな操作を用いて同期をサポートする。
3.  SyncP301は、全ての下位レベルプロセッサ303、304〜306に対して1つの命令を挿入することができ、したがって、単純で効果的なSIMDを実装してベクトル演算をサポートする。
4.  SyncP301は、間接データを全ての低レベル命令に書き込むことができ、それにより、各プロセッサ303、304〜306は、キャッシュまたはメモリからどんな命令もフェッチする必要なしに、データの1つのフィールドを使用してマイクロコードROMに索引付けして、異なる命令を実行することになる。
【００４０】
処理システムの実施形態は、特別な監視バスを使用して、任意の下位レベル処理命令レジスタの内容を読み書きする。図4は、特別なバス402を使用してSyncP401がN個の下位レベルプロセッサ403、404〜406に接続されるのを示すブロック図400である。
【００４１】
バス402は、アドレスバス402aを含む。アドレスバス402aは、SyncP401がN個の下位レベルプロセッサ403、404〜406のどの命令レジスタにアクセスしたいかを定義する。アドレスバス402aはlogN本のワイヤを有し、N=32の場合、アドレスバス402aは、5本のアドレスラインしか有さない。プロセッサP0 403の命令レジスタ、IR0 413は、アドレス=0によってアクセスされ、プロセッサP1 404のIR1 414は、アドレス=1によってアクセスされ、以下同様であり、プロセッサPN406のIRN416は、アドレス=Nによってアクセスされる。
【００４２】
バス402は、データバス402dも含む。データバス402dは、アクセスされる低レベルの命令レジスタの内容を含む。64ビット命令の場合、データバス402dの幅は64ビットである。SysncP401は、アクセスされる命令レジスタからデータを読み取ったとき、その値を命令コードの値と比較することになる。値が、共有変数Xにアクセスする要求としての同期関連命令のコードと一致する場合は、SyncP401は、アクセスされる命令レジスタ中に特別な命令を書き込むことによって、この要求を許可することを決定することができる。この特別な命令は、低レベルプロセッサ403、404〜406が共有変数へのアクセス権を有することができるようにする。
【００４３】
バス402は、低レベルプロセッサ403、404〜406のそれぞれの命令レジスタ413、414〜416に対する読取り/書込みのための、制御ライン(402c)も含む。これは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にアクセスするのに使用される命令は、以下を含む。
LOAD R4, 1024(R0); - P0 403のIR413が位置1024にマッピングすると仮定した場合に、P0 403の命令レジスタ413を読み取る
STORE R7, 1028(R0); - P1 404のIR414が位置1028にマッピングすると仮定した場合に、P1 404の命令レジスタ414に書き込む
【００４８】
ロード命令は、1024+におけるメモリ位置の値と、R0の内容とを、SyncP401のレジスタR4に転送する。R0の値は、通常は0に設定され、1024は、下位レベルプロセッサ403、404〜406の命令レジスタ413、414〜416をマッピングする開始アドレスである。この例では、図5のアドレスバス402aは、1024に設定されることになり、データバス402dは、P0のIRの値を有することになり、制御バス402cは、読取りのためにREAD/WRITE=0を有することになる。
【００４９】
ストア命令は、SyncP401が、SyncP401のレジスタR7中で設定された値をP1 404の命令レジスタ414に書き込むことができるようにする。この値は、共有変数Xへのアクセス権を与える命令である場合がある。この例では、図5のアドレスバス402aは、1028に設定されることになり、データバス402dは、R7の値を有することになり、制御バス402cは、書込みのためにREAD/WRITE=1を有することになる。
【００５０】
図5は、SyncP401がどのようにいずれかの下位レベルプロセッサ403、404〜406にアクセスしてその命令レジスタに対して読取りまたは書込みを行うことができるかに関する詳細な設計を示す概略図500である。SyncPのバス402aからのアドレスがデコーダ503によってデコードされて、下位レベルプロセッサ403、404〜406のN個の命令レジスタ504から1つの命令レジスタ504a〜dが選択される。デコーダ出力の信号IRi504cがアクティブであると仮定し、下位レベルプロセッサ404がアクセスされて、その命令レジスタ414に対して読取りまたは書込みが行われる。フリップフロップ506は、下位レベルプロセッサ404の、アクセスされる命令レジスタ414の1ビットである。ロード命令のときは、SyncP-R/W信号=0であり、インバータが信号SyncP_R/W=0に接続されるので、上のANDゲート506aがイネーブルになる。ゲート506aがイネーブルのとき、命令レジスタの内容を各フリップフロップに書き戻すことによって命令レジスタ中の同じ命令が維持される。また、読取りのときは、信号IRiがアクティブであるため、下のANDゲート506bがイネーブルになり、これにより、各フリップフロップの内容がトライステートバッファの中を通ってSyncPデータバス402dに行くことができる。
【００５１】
ストア動作のときは、信号IRiがアクティブであり、SyncP_R/W=1であり、これにより、真ん中のAND506cゲートがイネーブルになり、上位レベルのSyncPからのデータ「DiSyncP」がフリップフロップに記憶される。これは、下位レベルプロセッサ404によって実行されるようにSyncP401によって書き込まれる、新しい命令である。
【００５２】
SyncP401は、下位レベルプロセッサ403、404〜406の命令を監視して、これらの命令をグループに分けることができる。各グループは、1つの共有変数を求めて競合する。図6は、SyncP401がキューを使用して種々の共有変数を記憶するのを示す図600である。図6には、バリアイベントがP3とP14との間で共有され、変数XがP1とP11との間で共有され、YがP5とP6との間で共有されるのを示す。
【００５３】
複数の変数の同期は、以下のステップによって達成される。
1.  SyncP401は、下位レベルプロセッサ403、404〜406の全ての命令を任意の順序で読み取る。
2.  下位レベルプロセッサ403、404〜406のうちの1つからの、共有変数の使用要求をSyncP401が見つけた場合、SyncP401は、この変数用に確保されたキューに、要求元のプロセッサ番号を記憶する。例えば、変数Xには、アクセスXキューが使用される。P11が、Xを要求していると判明した第1のプロセッサである(要求の順に配列されるのではない)。
3.  SyncP401は、命令レジスタの読取りを継続し、共有変数の使用を求める種々の要求をソートする。
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(ストリーミングSIMD拡張命令)命令セットをサポートするが、この命令セットは、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×8=256要素のベクトル長を生じることになる。CRAYのような長いベクトルをサポートしたベクトルプロセッサは、構築するのに非常にコストがかかる。
【００６３】
図9は、SyncP901が全ての下位レベルプロセッサ902、903〜904の命令レジスタ912、913〜914に命令ADDV R1,R2,R3を書き込むことのブロック図900である。この命令は、各下位レベルプロセッサ902、903〜904によって実行されたとき、各プロセッサ902、903〜904中のR2およびR3の内容に対する追加を実施する。しかし、各プロセッサ902、903〜904中のR2およびR3は、ベクトルアレイ中の異なる要素の値を保持する。例えば、ベクトルAをベクトルBに追加する場合、最初にLOADV R2,0(R5)命令が実行され、各下位レベルプロセッサ902、903〜904中のR5は、アレイA中の異なる要素のアドレスになるように設定される。このSIMD命令を実行すると、Aの要素が、種々のプロセッサのR2レジスタに転送される。
【００６４】
以下のコードは、マルチレベル処理においてSIMDを使用して実施されるベクトル演算を説明する。
【００６５】
【数３】
2013541101.tif 000005
【００６６】
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ゲートの出力は、DN=1の結果として、1にセットされる。図9に戻ると、前に説明したように、R/W=1のとき、SyncP901からの全ての入力データDN-1〜D0は、全ての下位レベルプロセッサ902、903〜904の命令レジスタ912、913〜914に同時に書き込まれる。次いで、各下位レベルプロセッサ902、903〜904は、それらの命令レジスタに書き込まれた同じ命令の並列実行を開始する。図には、実行された命令が、R2の内容をR3に追加し、結果をベクトルとしてR1に記憶するのを示す。
【００６８】
各プロセッサ902、903〜904のR2およびR3中の要素は、要素のベクトルを形成する。要素は、さらに別のLOADDV SIMD命令を用いてメモリからロードすることができる。
【００６９】
マルチレベル処理には、もう1つの重要な機能がある。これは、逐次命令が、複数のデータストリーム中で働く複数の命令を生成できるようにするものである。SyncP901は、そのデータをフィールドに分割し、次いで、各フィールドは、実行される準備のできたデコード済み命令のリストを記憶するROMへのアドレスとして使用される。マイクロコードROMを使用することで、IntelのPentium4(登録商標)におけるような、パイプラインを機能停止(stall)なく維持するためのデコードステージの必要がなくなる。
【００７０】
図11は、SI>MIMDをサポートするシステムを示すブロック図1100である。SyncP1101のデータバス1102dは、64ビットであるものとし、8つの別々のフィールドに分割され、各フィールドは、対応する下位レベルプロセッサ1103、1104〜1105のそれぞれのROM1113、1114〜1116にアクセスするためのアドレスとして使用される。この例では、P0 1103は、SyncPデータのD7...D0を使用して、256個の位置を有するそのROM1113にアドレスする。SyncP1101がより長いデータを有する場合、各ROM1113、1114〜1116は、コード化済み命令のより大きい記憶域を有することができる。10ビットアドレスが、1024個の異なるデコード済み命令にアクセスすることになる。
【００７１】
図11にはまた、SyncP1101のデータD7〜D0が、P0に対するADD命令を生成したP0 1103のROM1113へのアドレスとして使用されるのを示す。SyncPデータD15〜D8は、SUB命令を生成したP1 1104のROM1114へのアドレスである。図11に示すように、これらは、SyncP1101が1つの命令を実行することから得られる、並列実行される異なる命令であり、この1つの命令は、データを複数のアドレスとして使用して、いくつかのROM1113、1114〜1116からの複数の異なる命令にアクセスする。
【００７２】
このSI>MIMD方法には、以下を含めた複数の利点がある。
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にセットされる。
【００７４】
以下のような種々のマルチプレクサ選択がある。
1.  SyncP1101が命令の書込みおよび変更を行う必要がない場合は、下位レベルの処理は、命令レジスタ中で同じ命令を保持する。マルチプレクサ1201は、同じ命令レジスタの内容を入力として選択する。
2.  マルチプレクサ1201は、主に同期に使用される停止命令または許可命令を書き込む必要がある場合は、SyncPD1101の第1のデータ入力を選択する。
3.  SyncPがSIMDを実施する必要がある場合は、マルチプレクサ1201は、SyncPD1101の第2のデータ入力を選択する。この場合、SyncP1101のデータは、全ての下位レベルプロセッサの命令レジスタに書き込まれる。
4.  SyncP1101がSI>MIMD命令を実施する必要があるときは、マルチプレクサ1201は、ROM OUT入力を選択する。
【００７５】
マルチレベル処理は、レベルの数を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およびSI>MIMDを含めた前述の機能のいくつかを、3レベルの処理について実施することも可能である。
【００７９】
複数の下位レベルプロセッサの命令レジスタに対して読み書きすることによって、下位レベルプロセッサの関与なしに下位レベルプロセッサを制御する高位レベルプロセッサは、同期オーバヘッドを、何千ものプロセッササイクルからわずかなサイクルに低減する。例示的な実施形態は、他にも多くの重要な利点を有することができ、これらの利点には、共有変数にアクセスするために待機する間にこれらのプロセッサを停止させることによって、電力を削減できることが含まれる。
【００８０】
高位レベルプロセッサは、単純な逐次命令を並列命令に変換して、並列ソフトウェアの記述をより容易にすることができる。単純なSIMD実装を用いて、長いベクトルに対してベクトル演算を効果的にサポートすることができる。また、マルチレベル処理を他のレベルに拡張することもでき、無限のスケーラビリティを可能にする。
【００８１】
示した実施形態は例示に過ぎず、本発明は、添付の特許請求の範囲によってのみ定義される。
【符号の説明】
【００８２】
200  マルチレベルプロセッサ
201  上位レベルプロセッサ、同期プロセッサ、SyncP
202  バス
203、204〜206  下位レベルプロセッサ
210  データメモリ位置
211  データメモリ
215  データメモリ位置
220  データメモリ位置
213、214〜216  命令レジスタ
301  SyncP
303、304〜306  下位レベルプロセッサ
401  SyncP
402  バス
402a  アドレスバス
402b  データバス
402c  制御ライン
403、404〜406  下位レベルプロセッサ
413、414〜416  命令レジスタ
504a〜d  命令レジスタ
506  フリップフロップ
801  命令レジスタ
803  フリップフロップ
901  SyncP
902、903〜904  下位レベルプロセッサ
902d  データバス
912、913〜914  命令レジスタ
1101  SyncP
1102d  データバス
1103、1104〜1105  下位レベルプロセッサ
1103、1104〜1106  下位レベルプロセッサ
1113、1114〜1116  ROM
1301  SyncP
1302  バス
1303、1304〜1306  第2レベルプロセッサ
1313、1314〜1316  命令レジスタ
1321〜1327  第3レベルプロセッサ
1331〜1337  命令レジスタ
【図２】
2013541101.tif 000006
【図４】
2013541101.tif 000007
【図１１】
2013541101.tif 000008
【図１２】
2013541101.tif 000009
【図１】
2013541101.tif 000010
【図３】
2013541101.tif 000011
【図５】
2013541101.tif 000012
【図６】
2013541101.tif 000013
【図７】
2013541101.tif 000014
【図８】
2013541101.tif 000015
【図９】
2013541101.tif 000016
【図１０】
2013541101.tif 000017
【図１３】
2013541101.tif 000018
【国際調査報告】
2013541101.tif 000019
2013541101.tif 000020
2013541101.tif 000021