(57)【要約】マルチプロセッシング・コンピュータ・アーキテクチャ（１００）およびこのオペレーション方法が提供される。マルチプロセッシング・アーキテクチャ（１００）はメイン・プロセッサ（１０２）と、複数のサブプロセッサ（１０４，１０６，１０８，１１０）とを提供し、これらは能率的にループ操作を実行するために共にカスケードされている。メイン・プロセッサ（１０２）は、ループの外部でオペレーションを実行してループを制御する。複数のサブプロセッサ（１０４，１０６，１０８，１１０）は動作可能に相互接続されており、各々メイン・プロセッサ（１０２）によって所定のループの反復に割り当てられる。サブプロセッサ（１０４，１０６，１０８，１１０）の各々は、１つ以上のサブ命令を逐次的に受け取り、各サブ命令を処理して、そ次のサブプロセッサ（１０６，１０８，１１０）にのサブ命令を渡すように動作可能である。
2005520249.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッシング・コンピュータ・システムであって、
各々が１つ以上のサブ命令を含むプログラムの命令ループの処理を管理するように動作可能なメイン・プロセッサと、
連続した複数のステージにおいて各サブ命令を処理するように動作可能な複数のサブプロセッサと、を備え、前記複数のサブプロセッサのうちの少なくとも第１のサブプロセッサは、前記メイン・プロセッサから１つ以上のサブ命令を逐次的に受け取り、前記サブプロセッサのうちの次のサブプロセッサに前記サブ命令を渡すように動作可能であり、前記複数のサブプロセッサのうちの少なくとも第２のサブプロセッサは、前記第１のサブプロセッサから前記１つ以上のサブ命令を逐次的に受け取るように動作可能であるマルチプロセッシング・コンピュータ・システム。
【請求項２】
前記連続した複数のステージは命令処理パイプラインである請求項１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項３】
前記命令処理パイプラインは前記１つ以上のサイクルの間、逐次的に動作する請求項２に記載のマルチプロセッシング・コンピュータ・システム。
【請求項４】
第１のサイクルの間に命令のデコードが実行され、第２のサイクルの間にアドレス計算が実行され、第３のサイクルの間に命令の実行が実行される請求項３に記載のマルチプロセッシング・コンピュータ・システム。
【請求項５】
第４のサイクルの間にライト・バック操作が実行される請求項４に記載のマルチプロセッシング・コンピュータ・システム。
【請求項６】
前記複数のサブプロセッサは割り込みを受け付けない請求項１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項７】
前記複数のサブプロセッサは電子メモリに動作可能に接続される請求項１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項８】
前記複数のサブプロセッサは前記電子メモリに直接アクセスする請求項７に記載のマルチプロセッシング・コンピュータ・システム。
【請求項９】
前記メイン・プロセッサは電子メモリに動作可能に接続される請求項１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項１０】
前記電子メモリはキャッシュ・メモリである請求項９に記載のマルチプロセッシング・コンピュータ・システム。
【請求項１１】
前記メイン・プロセッサは第１のデバイスの一部をなし、前記複数のサブプロセッサの少なくとも一部のサブプロセッサは第２のデバイスの一部をなし、前記第２のデバイスは前記第１のデバイスとは離れており、前記第１のデバイスにカスケードされている請求項１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項１２】
前記メイン・プロセッサは前記１つ以上のサブプロセッサのイベントを検出するように動作可能であり、前記メイン・プロセッサは、前記イベントを検出すると、前記サブプロセッサのうちの前記第１のサブプロセッサに前記１つ以上のサブ命令を逐次的に出力する請求項１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項１３】
前記メイン・プロセッサは前記命令ループの１つ以上を開始する前に前記イベントを検出し、前記メイン・プロセッサは前記サブプロセッサの動作を制御する請求項１２に記載のマルチプロセッシング・コンピュータ・システム。
【請求項１４】
前記メイン・プロセッサが一般的なコンピュータ命令を実行可能である請求項１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項１５】
前記メイン・プロセッサは割り込みを受け付けることができる請求項１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項１６】
前記メイン・プロセッサは並列アーキテクチャを使用している請求項１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項１７】
前記並列アーキテクチャはスーパースカラー・アーキテクチャである請求項１６に記載のマルチプロセッシング・コンピュータ・システム。
【請求項１８】
前記並列アーキテクチャは超長命令ワード・アーキテクチャ（ＶＬＩＷ）である請求項１６に記載のマルチプロセッシング・コンピュータ・システム。
【請求項１９】
前記メイン・プロセッサはＡＬＵおよびレジスタ・ファイルを備え、前記ＡＬＵおよび前記レジスタ・ファイルはベクトル・データを処理するように動作可能である請求項１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項２０】
前記メイン・プロセッサは利用可能なサブプロセッサの個数を特定する請求項１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項２１】
前記メイン・プロセッサは実行すべきループセット数および剰余ループの回数を識別する請求項２０に記載のマルチプロセッシング・コンピュータ・システム。
【請求項２２】
前記ループセット数がゼロより大きい場合、前記メイン・プロセッサは、ループ・カウンタに前記利用可能な複数のサブプロセッサの個数を設定して、前記サブプロセッサのうちの前記第１のサブプロセッサに前記ループ・カウンタと共に前記１つ以上のサブ命令を逐次的に送信し、所定の命令ループにある全てのサブ命令が前記サブプロセッサのうちの前記第１のサブプロセッサに渡されたら、前記ループセット数をデクリメントする請求項２１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項２３】
前記ループセット数がゼロに等しく、かつ前記剰余ループの回数がゼロより大きい場合、前記メイン・プロセッサは、ループ・カウンタに前記剰余ループの回数を設定して、前記サブプロセッサのうちの前記第１のサブプロセッサに前記ループ・カウンタと共に前記１つ以上のサブ命令を逐次的に送る請求項２１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項２４】
前記複数のサブプロセッサのうちの所定のサブプロセッサは、新しいサブ命令を受け取ると前記ループ・カウンタをデクリメントし、前記ループ・カウンタがゼロより大きい場合には、前記所定のサブプロセッサは前記複数のサブプロセッサのうちの次のサブプロセッサに前記ループ・カウンタと共に前記新しいサブ命令を渡し、前記ループ・カウンタがゼロの場合には、前記所定のサブプロセッサは前記サブプロセッサのうちの次のサブプロセッサに前記新しいサブ命令を渡さない請求項１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項２５】
マルチプロセッシング・コンピュータ・システムであって、
プログラムの命令ループであって、各々が１つ以上のサブ命令を含む命令ループの処理を管理するように動作可能なメイン・プロセッサと、
連続した複数のステージにおいて各サブ命令を処理するように動作可能な複数のサブプロセッサと、前記複数のサブプロセッサのうちの少なくとも第１のサブプロセッサは、前記メイン・プロセッサから１つ以上のサブ命令を逐次的に受け取り、前記サブプロセッサのうちの次のサブプロセッサに前記サブ命令を渡すように動作可能であり、前記複数のサブプロセッサのうちの少なくとも第２のサブプロセッサは、前記第１のサブプロセッサから前記１つ以上のサブ命令を逐次的に受け取るように動作可能であり、
前記メイン・プロセッサから前記サブプロセッサのうちの前記第１のサブプロセッサに前記１つ以上のサブ命令を提供するように動作可能であるカスケーディング・バスと、を備えたマルチプロセッシング・コンピュータ・システム。
【請求項２６】
前記カスケーディング・バスは双方向である請求項２５に記載のマルチプロセッシング・コンピュータ・システム。
【請求項２７】
前記カスケーディング・バスは前記メイン・プロセッサから前記サブプロセッサのうちの前記第１のサブプロセッサにループ・データを提供し、前記ループ・データは１つ以上の命令コード、デコード済みの情報、シェーディング・データ、パラメータおよびループ・カウンタを含む、請求項２６に記載のマルチプロセッシング・コンピュータ・システム。
【請求項２８】
前記カスケーディング・バスは、前記複数のサブプロセッサのうちの１つ以上のサブプロセッサから前記メイン・プロセッサに１つ以上の状態情報および結果情報を提供する請求項２６に記載のマルチプロセッシング・コンピュータ・システム。
【請求項２９】
前記メイン・プロセッサにカスケードされている追加プロセッサ・デバイスをさらに備える請求項２５に記載のマルチプロセッシング・コンピュータ・システム。
【請求項３０】
前記追加プロセッサ・デバイスは追加メイン・プロセッサを有する請求項２９に記載のマルチプロセッシング・コンピュータ・システム。
【請求項３１】
前記追加メイン・プロセッサは前記複数のサブプロセッサのうちの１つとして作動する請求項３０に記載のマルチプロセッシング・コンピュータ・システム。
【請求項３２】
前記追加メイン・プロセッサは、モード選択装置メカニズムによって前記複数のサブプロセッサのうちの１つとして動作するように選択される請求項３１に記載のマルチプロセッシング・コンピュータ・システム。
【請求項３３】
マルチプロセッシングを行う方法であって、
プログラムの命令ループであって、各々が１つ以上のサブ命令を含む命令ループのメイン・プロセッサによる処理を管理するステップと、
前記メイン・プロセッサから複数のサブプロセッサのうちの１つである第１のサブプロセッサにおいて前記１つ以上のサブ命令を逐次的に受け取るステップと、
連続した複数のステージにおいて各サブ命令を処理するステップと、
前記命令ループの一部しか完了していない場合は、前記サブプロセッサのうちの次のサブプロセッサに前記１つ以上のサブ命令を渡すステップと、
前記サブプロセッサのうちの第２のサブプロセッサにおいて前記１つ以上のサブ命令を逐次的に受け取るステップと、を有する方法。
【請求項３４】
連続した複数のステージは命令処理パイプラインである請求項３３に記載のマルチプロセッシングを行う方法。
【請求項３５】
１つ以上のサイクルの間、前記命令処理パイプラインを逐次的に動作させるステップをさらに有する、請求項３４に記載のマルチプロセッシングを行う方法。
【請求項３６】
第１のサイクルにおいて第１のサブ命令に対して命令のデコードを実行するステップと、
第２のサイクルにおいて前記第１のサブ命令に対してアドレス計算を実行するステップと、
第３のサイクルにおいて前記第１のサブ命令に対して命令の実行を実行するステップと、をさらに有する請求項３５に記載のマルチプロセッシングを行う方法。
【請求項３７】
第４のサイクルにおいて前記第１のサブ命令に対してライト・バック操作を実行するステップをさらに有する、請求項３６に記載のマルチプロセッシングを行う方法。
【請求項３８】
所定の命令ループが第１のサブ命令および第２のサブ命令を含む場合に、
第１のサイクルにおいて前記第１のサブ命令に対して命令のデコードを実行するステップと、
第２のサイクルにおいて前記第１のサブ命令に対してアドレス計算を実行するステップと、
前記第２のサイクルにおいて前記第２のサブ命令に対して命令のデコードを実行するステップと、
第３のサイクルにおいて前記第１のサブ命令に対して命令の実行を実行するステップと、
前記第３のサイクルにおいて前記第２のサブ命令に対してアドレス計算を実行するステップと、
第４のサイクルにおいて前記第２のサブ命令に対して命令の実行を実行するステップと、をさらに有する、請求項３５に記載のマルチプロセッシングを行う方法
【請求項３９】
前記第４のサイクルにおいて前記第１のサブ命令に対してライト・バック操作を実行するステップと、
第５のサイクルにおいて前記第２のサブ命令に対してライト・バック操作を実行するステップと、をさらに有する請求項３８に記載のマルチプロセッシングを行う方法。
【請求項４０】
前記１つ以上のサブ命令を逐次的に受け取る前に、前記メイン・プロセッサにおいてイベントを検出するステップと、
前記第１のサブプロセッサに前記１つ以上のサブ命令を逐次的に出力するステップと、をさらに有する請求項３３に記載のマルチプロセッシングを行う方法。
【請求項４１】
前記メイン・プロセッサが命令フェッチ・メカニズムを有する場合、前記命令フェッチ・メカニズムを使用して命令メモリ・キャッシュから前記命令ループを取得するステップを有する請求項３３に記載のマルチプロセッシングを行う方法。
【請求項４２】
利用可能なサブプロセッサの個数を決定するステップと、
実行すべきループセット数を特定するステップと、
実行すべき剰余ループの回数を特定するステップと、をさらに有する請求項３３に記載のマルチプロセッシングを行う方法。
【請求項４３】
前記ループセット数がゼロより大きい場合、
ループ・カウンタに前記利用可能なサブプロセッサの個数を設定するステップと、
前記サブプロセッサのうちの次の前記サブプロセッサに前記ループ・カウンタと共に前記１つ以上のサブ命令を渡すステップと、
所定の命令ループにある全てのサブ命令が前記サブプロセッサのうちの前記第１のサブプロセッサに渡されたら、前記ループセット数をデクリメントするステップと、をさらに有する、請求項４２に記載のマルチプロセッシングを行う方法
【請求項４４】
前記ループセット数がゼロより大きく、かつ前記剰余ループの回数がゼロより大きい場合、
ループ・カウンタに前記剰余ループの数を設定するステップと、
前記サブプロセッサのうちの次の前記サブプロセッサに前記ループ・カウンタと共に前記１つ以上のサブ命令を渡すステップと、をさらに有する、請求項４２に記載のマルチプロセッシングを行う方法。
【請求項４５】
マルチプロセッシングを行う方法であって、
第１のデバイスにある第１のメイン・プロセッサおよび第２のデバイスにある第２のメイン・プロセッサのうちから稼働中のメイン・プロセッサを選択するステップと、
プログラムの命令ループであって、各々が１つ以上のサブ命令を含む命令ループの前記稼働中のメイン・プロセッサによる処理を管理するステップと、
複数のサブプロセッサのうちの１つである第１のサブプロセッサにおいて前記稼働中のメイン・プロセッサから前記１つ以上のサブ命令を逐次的に受け取るステップと、
連続した複数のステージにおいて各サブ命令を処理するステップと、
ループ・カウンタがゼロより大きい場合、前記サブプロセッサのうちの次のサブプロセッサに前記１つ以上のサブ命令を渡すステップと、
前記サブプロセッサのうちの第２のサブプロセッサにおいて前記１つ以上のサブ命令を逐次的に受け取るステップと、を有する方法。
【請求項４６】
前記稼働中のメイン・プロセッサの選択はモード選択装置メカニズムを使用して実行される請求項４５に記載のマルチプロセッシングを行う方法。
【請求項４７】
前記第１のメイン・プロセッサは前記稼働中のメイン・プロセッサとして選択され、前記第２のメイン・プロセッサは前記複数のサブプロセッサのうちの１つとして選択される請求項４５に記載のマルチプロセッシングを行う方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータ命令の実行に関し、より詳細には、複数のサブプロセッサを使用してループ操作を効率的に実行することに関する。
【背景技術】
【０００２】
コンピュータ・システムにおいては、様々なタスクを遂行するために幅広い用途で用いられるコンピュータ・システムのオペレーション（operation）の制御をマイクロプロセッサによって行うことが多い。マイクロプロセッサは、特定のオペレーションを特定の方法で処理するようにプログラムできる。通常、マイクロプロセッサは命令をフェッチするか、または命令を受け取る。命令とは、データを加算したり、プログラムの別の部分にジャンプしたり、論理演算を実行するなどのオペレーションを実行するようにマイクロプロセッサに対して指示するものである。オペレーションは複数のステップで実行され、このステップには、命令をデコードするステップ、メモリのアドレスを算出するステップ、メモリにあるデータにアクセスするかメモリからデータを読み出すステップ、このデータを使用して命令を実行するステップ、結果をメモリに書き込むステップなどが１つ以上が含まれる。
【０００３】
コンピュータ・グラフィックなど一部のアプリケーションでは、演算が多用されており、表示装置にイメージを効果的にレンダリングして表示するために多くの命令を実行しなければならないことがある。演算を多用するコンピュータ・グラフィックのアプリケーションに、ポリゴン／ピクセル・シェーディング（グラフィックス・シェーディングなど）のための三次元グラフィック処理がある。例えば、ビデオゲームのディスプレイに、あるプレーヤが別のプレーヤに投げたボールを描画することがある。ディスプレイ上のボールやその他のオブジェクトは、一連のポリゴンとして表され得る。ボールがディスプレイを移動するにつれて、ボールと、そのボールの影に入るオブジェクトのシェーディングが変化し得る。マイクロプロセッサは、ボールおよび影と重なる（intersect）それぞれのポリゴンの各画素（picture element：PEL）のシェーディングを演算および／または再演算し得る。上記の演算では、複数の反復（すなわちループ）が行われ、数百万回もの計算が行われることがある。
【０００４】
上記に挙げたグラフィックスのシェーディングの例のように、特定のオペレーションのための命令および計算を全て１つのマイクロプロセッサで処理することの難点として、時間がかかることが挙げられる。通常は、実行する命令が増えるにつれて、総演算時間が長くなる。上記のような演算を多用するアプリケーションを処理する方法の１つに、マイクロプロセッサによってタスクを分割して、分割したタスクを１つ以上のサブプロセッサに分散させる方法がある。タスクは１つ以上の命令のこともあれば、１つの命令の１つ以上の部分セグメントであることもある。タスクを複数のサブプロセッサに分散させれば、タスクを完了するまでの時間を短縮できる。他の利点としては、データのスループットとシステムの信頼性の向上が挙げられる。また、サブプロセッサは同じオペレーションや類似したオペレーションを反復的に実行するため、オペレーションを能率的に実行できる（命令のサブセットを実行するなど）ようにサブプロセッサをカスタマイズすることもできる。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
タスクを分散させる方法として、メイン・プロセッサが、一群のサブプロセッサに並列に命令を送る方法がある。複数のサブプロセッサにタスクを分散させる別の方法では、メイン・プロセッサは一連のサブプロセッサに逐次的に命令を送る。しかし、これらの方法にはそれぞれにまつわる欠点がある。
【０００６】
複数のサブプロセッサにタスクを分割して分散させる方法の問題の１つに順序付けエラー（sequencing error）がある。このエラーは、分割されたタスクの一部が正しい順序で処理されず、このためデータの誤りが生ずる。並列サブプロセッシングは、順序付けエラーの影響を特に受けやすいことがある。別の問題として、マイクロプロセッサすなわちメイン・プロセッサが、サブプロセッサおよび共有リソース（例えば、データバス／アドレスバス）のオペレーションを監視して制御しなければならない点がある。さらに別の問題に、スケーラビリティがある。コンピュータ・アーキテクチャには、数個のサブプロセッサにしか対応していないものもあれば、対応可能なサブプロセッサの数に制限がないものもある。さらに、逐次サブプロセッシングでは、逐次サブプロセッサがタスクを１つずつ受け取るため、並列サブプロセッシングよりも処理に時間を要する。
【０００７】
上記の問題を軽減するため、さまざまな技術が開発され使用されてきた。例えば、あるコンピュータ・アーキテクチャでは、メイン・プロセッサと、所望の構成に固定配線された複数の専用サブプロセッサとを備えている。このようなコンピュータ・アーキテクチャは演算時間を短縮できるが、固定配線を行うという構成は柔軟性を欠き、乏しい演算資源を効率的に利用できないことがある。詳細には、固定配線のサブプロセッサでは、固定されたデータ・フローにおいてオン／オフ切り替え機能およびプログラム可能なパラメータを備えるようにすることができる。しかし、この機能は、上記したグラフィックスのシェーディングの例のような演算を多用するアプリケーションを実行するのに十分柔軟ではない。このため、上記の問題に適切に対処することができる代替のアーキテクチャが所望されている。
【課題を解決するための手段】
【０００８】
本発明の１つ以上の態様によると、マルチプロセッシング・コンピュータ・システムは、メイン・プロセッサおよび複数のサブプロセッサを備える。メイン・プロセッサは、プログラムの命令ループの処理を管理するように動作可能である。各命令ループは、１つ以上のサブ命令を含む。複数のサブプロセッサは、連続した複数のステージにおいて各サブ命令を処理するように動作可能である。サブプロセッサのうちの少なくとも第１のサブプロセッサは、メイン・プロセッサから１つ以上のサブ命令を逐次的に受け取り、サブプロセッサのうちの次のサブプロセッサにサブ命令を渡すように動作可能である。サブプロセッサのうちの第２のサブプロセッサは、第１のサブプロセッサから１つ以上のサブ命令を逐次的に受け取るように動作可能である。
【０００９】
好ましくは、メイン・プロセッサは実行すべきループセット数および剰余ループの回数を識別する。ループセット数がゼロより大きい場合、メイン・プロセッサはループ・カウンタに利用可能な複数のサブプロセッサの個数を設定する。１つ以上のサブ命令が、ループ・カウンタと共にサブプロセッサのうちの第１のサブプロセッサに逐次的に渡される。所定のループにある全てのサブ命令がサブプロセッサのうちの第１のサブプロセッサに渡されたら、ループセット数がデクリメントされる。ループセット数がゼロに等しい場合、メイン・プロセッサは、ループ・カウンタに剰余ループの回数を設定して、サブプロセッサのうちの第１のサブプロセッサにループ・カウンタと共に１つ以上のサブ命令を逐次的に送る。
【００１０】
本発明の別の１つ以上の態様によれば、マルチプロセッシング・コンピュータ・システムは、メイン・プロセッサ、複数のサブプロセッサおよびカスケーディング・バスを備える。メイン・プロセッサはプログラムの命令ループを処理するように動作可能である。各命令ループは、１つ以上のサブ命令を含む。複数のサブプロセッサは、連続した複数のステージにおいて各サブ命令を処理するように動作可能である。サブプロセッサのうちの少なくとも第１のサブプロセッサは、メイン・プロセッサから１つ以上のサブ命令を逐次的に受け取り、サブプロセッサのうちの次のサブプロセッサにサブ命令を渡すように動作可能である。サブプロセッサのうちの第２のサブプロセッサは、第１のサブプロセッサから１つ以上のサブ命令を逐次的に受け取るように動作可能である。カスケーディング・バスは、メイン・プロセッサからサブプロセッサのうちの第１のサブプロセッサに１つ以上のサブ命令を提供するように動作可能である。
【００１１】
本発明のさらに別の１つ以上の態様によれば、マルチプロセッシングを行う方法は、プログラムの命令ループであって、各々が１つ以上のサブ命令を含む命令ループを、メイン・プロセッサによって処理するように管理するステップと、メイン・プロセッサから複数のサブプロセッサのうちの１つである第１のサブプロセッサにおいて１つ以上のサブ命令を逐次的に受け取るステップと、連続した複数のステージにおいて各サブ命令を処理するステップと、命令ループの一部しか完了していない場合は、サブプロセッサのうちの次のサブプロセッサに１つ以上のサブ命令を渡すステップと、サブプロセッサのうちの第２のサブプロセッサにおいて１つ以上のサブ命令を逐次的に受け取るステップと、を有する。
【００１２】
好ましくは、この方法は、利用可能なサブプロセッサの個数を決定するステップと、実行すべきループセット数を特定するステップと、実行すべき剰余ループの回数を特定するステップと、を有する。この方法は好ましくは、ループセット数がゼロより大きい場合、ループ・カウンタに利用可能なサブプロセッサの個数を設定するステップと、サブプロセッサのうちの次のサブプロセッサにループ・カウンタと共に１つ以上のサブ命令を伝えるステップと、所定の命令ループにある全てのサブ命令がサブプロセッサのうちの第１のサブプロセッサに渡されたら、所定の命令ループセット数をデクリメントするステップと、を有する。この方法は好ましくは、ループセット数がゼロより大きく、かつ剰余ループの回数がゼロより大きい場合、ループ・カウンタに剰余ループの回数を設定するステップと、サブプロセッサのうちの次のサブプロセッサにループ・カウンタと共に１つ以上のサブ命令を渡すステップと、を有する。
【００１３】
本発明のさらに別の１つ以上の態様によれば、マルチプロセッシングを行う方法は、第１のデバイスにある第１のメイン・プロセッサおよび第２のデバイスにある第２のメイン・プロセッサのうちからメイン・プロセッサを選択するステップと、プログラムの命令ループであって、各々が１つ以上のサブ命令を含む命令ループの、稼働中のメイン・プロセッサによる処理を管理するステップと、複数のサブプロセッサのうちの１つである第１のサブプロセッサにおいてメイン・プロセッサから１つ以上のサブ命令を逐次的に受け取るステップと、連続した複数のステージにおいて各サブ命令を処理するステップと、ループ・カウンタがゼロより大きい場合、サブプロセッサのうちの次のサブプロセッサに１つ以上のサブ命令を渡すステップと、サブプロセッサのうちの第２のサブプロセッサにおいて１つ以上のサブ命令を逐次的に受け取るステップと、を有する。
【発明を実施するための最良の形態】
【００１４】
以下で図面を参照するが、図面において同一の参照符号は同一の要素を参照している。図１に、本発明の１つ以上の態様を使用しているマルチプロセッシング・システム・アーキテクチャ１００を示す。マルチプロセッシング・システム・アーキテクチャ１００は、メイン・プロセッサ１０２と、複数のサブプロセッサ１０４，１０６，１０８，１１０とを備える。図１には４つのサブプロセッサが記載されているが、マルチプロセッシング・システム・アーキテクチャ１００に使用するサブプロセッサの個数は幾つであってもよい。好ましくは、少なくとも２つのサブプロセッサが使用される。使用できるサブプロセッサの個数については理論上制限がない。
【００１５】
メイン・プロセッサ１０２は、好ましくは一般的なコンピュータ命令を実行できる汎用マイクロプロセッサである。メイン・プロセッサ１０２は、好ましくは、割り込みを受け取って、特定のオペレーションの実行を中止または停止する。好ましい一実施形態において、メイン・プロセッサ１０２はスーパースカラー・アーキテクチャを備える。別の好ましい実施形態においては、メイン・プロセッサ１０２は、ＶＬＩＷ（Very Long Instruction Word：超長命令ワード）アーキテクチャを備える。スーパースカラー・アーキテクチャおよびＶＬＩＷアーキテクチャは例示的なものに過ぎず、本発明の範囲のメイン・プロセッサ１０２を制限するものと解釈されるべきではない。メイン・プロセッサ１０２の算術論理演算装置（「ＡＬＵ」）およびレジスタ・ファイルは、従来技術において公知のように、好ましくはグラフィック処理に使用するベクトル・データを処理する。ＡＬＵは、算術演算または論理演算（例えば「ＡＮＤ」、「ＯＲ」、「ＮＯＴ」等）といった基本的なデータ変換を実行する。レジスタ・ファイルは、命令の実行時に一時的に記憶場所を提供する。
【００１６】
メイン・プロセッサ１０２は、データの読出し／記憶命令、算術演算命令と論理演算命令、ジャンプ命令、シフト命令、および分岐命令のようなコンピュータ命令を実行してもよいが、これらは例示に過ぎない。メイン・プロセッサ１０２は、好ましくは、命令のフェッチＩ、命令のデコードＤ、アドレス計算Ａ、命令の実行Ｅ、およびライト・バック操作Ｗを任意選択で実行するように動作可能である。命令のフェッチＩでは、メモリから実行するための命令を取得する。命令のフェッチＩは、好ましくは命令フェッチ・メカニズム（例えばメイン・プロセッサ１０２の制御装置）によって実行される。命令フェッチ・メカニズムは、好ましくは命令キャッシュ・メモリを備える。命令のデコードＤでは、フェッチした命令の内容を判定する。命令のデコードＤでは、例えば命令ルック・アップ・テーブルを使用し得る。例えば、各命令は符号によって表され得る。命令のデコードＤでは、命令ルック・アップ・テーブルを使用して、この符号に対応する命令を特定し得る。アドレス計算Ａでは、メモリ内でのアドレスを特定する。メモリ内のこのアドレスには、命令の実行Ｅに使用するデータが含まれ得る。メモリは、メイン・プロセッサ１０２とは離れたデバイスに存在する（「オフチップ」）こともあれば、メイン・プロセッサ１０２と同じデバイスに存在する（「オンチップ」）こともある。メモリは、ローカル・メモリ・キャッシュであってもよい。命令の実行Ｅにおいては、ＡＬＵが命令（例えば「ＡＮＤ」、「ＯＲ」、「ＬＯＯＰ」、「ＪＵＭＰ」）を実行する。ライト・バック操作Ｗにより、メモリ内の、データが以前に記憶されていた場所と同じ場所かまたは別の場所に結果が書き込まれる。あるいは、ライト・バック操作Ｗにより結果が返される。
【００１７】
マルチプロセッシング・システム・アーキテクチャ１００は、ループ操作を能率よく実行するように設計されており、このため演算を多用する計算を効率的に実行する。例えば、例として挙げるプログラム命令ループに以下の処理が含まれる場合を考える。
for(j=０; j<Num; j++)
{
Operation(j)
}
【００１８】
メイン・プロセッサ１０２は、この命令ループの処理を管理する。メイン・プロセッサ１０２は、好ましくはループの外部でオペレーションを実行し（例えばカウンタがｊ＝０からｊ＜Ｎｕｍまでインクリメントするように管理し）、サブプロセッサ１０４，１０６，１０８，１１０に情報を渡すことによってループを制御する。ループは、好ましくは、サブプロセッサ１０４，１０６，１０８，１１０の個数および実行すべきループの回数に基づいて制御される。サブプロセッサ１０４，１０６，１０８，１１０は、各ループ内でオペレーション（Ｏｐｅｒａｔｉｏｎ（ｊ））を実行する。このオペレーションは、１つ以上のサブオペレーションを含み得る。
【００１９】
矢印１２０，１２２，１２４，１２６に示すように、メイン・プロセッサ１０２およびサブプロセッサ１０４，１０６，１０８，１１０はカスケード接続されている。矢印１２０，１２２，１２４，１２６によって示される情報の流れは、好ましくはカスケーディング・バスを使用して実装される。カスケーディング・バスは、好ましくは、メイン・プロセッサ１０２とサブプロセッサ１０４，１０６，１０８，１１０との間で命令やその他の情報の受け渡しを行う命令コード・バスを備える。カスケーディング・バスは、好ましくは双方向である。図３Ａ，３Ｂを参照して後述するように、メイン・プロセッサ１０２からサブプロセッサ１０４（例えば第１のサブプロセッサ）に向かう情報には、１つ以上の命令コード、デコード済みの情報、データ、パラメータなどのほか、ループ・カウンタが含まれる。サブプロセッサ１０４は、次にこの情報の一部または全てをサブプロセッサ１０６に渡し得る。
【００２０】
サブプロセッサ１０４，１０６，１０８，１１０の各々は、所定の命令（例えばサブ命令）のセットを実行するように動作可能である。この命令セットは、好ましくは、サブプロセッサ１０４，１０６，１０８，１１０の全てに共通である。好ましい一実施形態において、サブ命令には、メイン・プロセッサ１０２によって使用される命令のうち、「分岐」、「ジャンプ」といったプログラム・カウンタに関連する命令を除き全ての命令が全て含まれる。サブプロセッサ１０４，１０６，１０８，１１０は、好ましくは割り込みを受け取らない。このようなサブ命令のセットは、好ましくはループのオペレーションを実行するために使用される。サブプロセッサ１０４，１０６，１０８，１１０は、各サブ命令に対してオペレーションを１つ以上実行する。このオペレーションには、命令のデコードｄ、アドレス計算ａ、命令の実行ｅ、およびライト・バック操作ｗなどがある。オペレーションｄ，ａ，ｅおよびｗは、メイン・プロセッサ１０２に関して上記したオペレーションＤ，Ａ，ＥおよびＷと様々な点において同等である。好ましくは、ライト・バック操作ｗには、サブプロセッサ１０４，１０６，１０８，１１０からメイン・プロセッサ１０２に状態情報および結果などを転送することが含まれる。
【００２１】
メイン・プロセッサ１０２は、好ましくはオペレーションＩ，Ｄ，Ａ，ＥおよびＷを，サブプロセッサ１０４，１０６，１０８，１１０は、好ましくはオペレーションｄ，ａ，ｅおよびｗを、それぞれ命令処理パイプラインにおいて実行する。図２を参照して後述するように、サブプロセッサ１０４，１０６，１０８，１１０およびメイン・プロセッサ１０２のそれぞれの命令処理パイプラインは逐次的に作動する。
【００２２】
図２に、図１のマルチプロセッシング・システム・アーキテクチャ１００をさらに詳細に示す。このアーキテクチャの機能には、逐次処理の実行を続けつつ、ループ・タスクが複数のサブプロセッサ２０４，２０６，２０８等に分散されるよう、複数のループを並列的に実行できる機能がある。より詳細には、図２は、ある特定の瞬間（例えばサイクル）における、例として挙げる一連の命令ループのスナップショット２００を示している。メイン・プロセッサ２０２は、一連の命令を（好ましくは逐次的に）フェッチするか受け取り、この命令にはメイン・プロセッサ用の命令ｍｉと、サブ命令ｓｉ−１，ｓｉ−２、・・・、ｓｉ−８とが含まれる。スナップショット２００に示す現在のオペレーション・サイクルにおいて、メイン・プロセッサ２０２は、サブ命令ｓｉ−８に対する命令のフェッチＩ、サブ命令ｓｉ−７に対する命令のデコードＤ、サブ命令ｓｉ−６に対するアドレス計算Ａ、サブ命令ｓｉ−５に対する命令の実行Ｅ、およびサブ命令ｓｉ−４に対するライト・バックＷをそれぞれ実行している。メイン・プロセッサ２０２は、サブ命令ｓｉ−３，ｓｉ−２，およびｓｉ−１のほか、３つのメイン・プロセッサ命令ｍｉの処理を完了している。これらの命令は、破線で囲んで図示されている。
【００２３】
スナップショット２００に示すオペレーション・サイクルにおいて、サブプロセッサ２０４は、サブ命令ｓｉ−３に対する命令のデコードｄ，ｓｉ−２に対するアドレス計算ａ、およびサブ命令ｓｉ−１に対する命令の実行ｅを実行しており、ライト・バック操作ｗを実行しているサブ命令はない（「ｎｏｐ」）。サブプロセッサ２０６は、サブ命令ｓｉ−２に対する命令のデコードｄ、およびサブ命令ｓｉ−１に対するアドレス計算を実行しており、命令の実行ｅまたはライト・バック操作ｗを実行している命令はない（ｎｏｐ）。サブプロセッサ２０８は、サブ命令ｓｉ−１に対する命令のデコードｄを実行しており、アドレス計算ａ、命令の実行ｅ、またはライト・バック操作ｗを行っている命令はない（ｎｏｐ）。
【００２４】
サブプロセッサ２０４，２０６，２０８の各々は、そのサブプロセッサ２０４，２０６，２０８に渡されるそれぞれのサブ命令に対し、ループの第１ステージの命令処理を実行する。つまり、サブプロセッサ２０４は、サブ命令ｓｉ−１に対するループの第１の反復（例えばｊ＝１）のｄ，ａ，ｅおよびｗ（必要な場合）を実行し、サブプロセッサ２０６は、サブ命令ｓｉ−１に対するループの第２の反復（例えば、ｊ＝２）のｄ，ａ，ｅおよびｗ（必要な場合）を実行し、サブプロセッサ２０８、サブ命令ｓｉ−１に対するループの第３の反復（例えばｊ＝３）のｄ，ａ，ｅおよびｗ（必要な場合）を実行する。
【００２５】
メイン・プロセッサ２０２がサブプロセッサ２０４，２０６，２０８用のサブ命令を検出すると、メイン・プロセッサ２０２はサブ命令をサブプロセッサ２０４に出力する。好ましくは、メイン・プロセッサ２０２用の命令と、サブプロセッサ２０４，２０６，２０８用のサブ命令とは識別可能である。メイン・プロセッサ２０２用の命令と、サブプロセッサ２０４，２０６，２０８用のサブ命令とを区別する方法の１つに、サブ命令の開始点を示す識別用命令と終了点を示す識別用命令とを定義する方法がある。別法として、メイン・プロセッサ２０２およびサブプロセッサ２０４，２０６，２０８に１つの命令セットのみを定義する方法もある。命令セットに含まれる命令は、好ましくは命令オペレーション・コード（「命令コード」）によって識別される。命令の先頭のワードは、通常は、その命令の命令コードである。好ましくは、メイン・プロセッサ２０２に指定される命令コードのセットと、サブプロセッサ２０４，２０６，２０８に指定される命令コードのセットとは異なっている。別法として、好ましくは命令コードのビット・フィールドのうちの１つ以上のビットが、メイン・プロセッサ命令とサブプロセッサ命令とを区別するために使用される。さらに別の方法として、メイン・プロセッサ２０２用の命令フローの一部にサブ命令のためのマクロ命令を定義する方法がある。このマクロ命令が実行されると、サブ命令が呼び出される。上記の方法は例に過ぎず、これ以外の方法によって識別を行ってもよい。
【００２６】
サブプロセッサ２０４，２０６，２０８は、実行すべきループの回数に応じて、次のサブプロセッサ２０６，２０８等に少なくとも１つのサブ命令を渡す、すなわちカスケードする。例えば、スナップショット２００において、メイン・プロセッサ２０２はサブ命令ｓｉ−４に対するライト・バック操作Ｗを実行し、サブプロセッサ２０４にサブ命令ｓｉ−３を渡す。サブプロセッサ２０４は、サブ命令ｓｉ−３に対する命令のデコードｄ、サブ命令ｓｉ−２に対するアドレス計算ａ、およびサブ命令ｓｉ−１に対する命令の実行ｅを実行し、サブプロセッサ２０６にサブ命令ｓｉ−２を渡す。サブプロセッサ２０６は、サブ命令ｓｉ−２に対する命令のデコードｄ、およびサブ命令ｓｉ−１に対するアドレス計算ａを実行し、サブプロセッサ２０８にサブ命令ｓｉ−１を渡す。サブプロセッサ２０８ではこの命令に対するデコードｄを実行する。Ｎ回のサイクルが実行されると、あるサブ命令がＮ個のサブプロセッサに渡される。
【００２７】
図３Ａを参照して、メイン・プロセッサ２０２による命令処理３００の本発明の一態様について記載する。アクション３０２において、メイン・プロセッサ２０２は命令をフェッチするかまたは取得する。アクション３０４において、この命令がメイン・プロセッサ２０２用の命令であるか、サブプロセッサ２０４，２０６，２０８用のサブ命令であるかを判定する。命令がメイン・プロセッサ２０２用であると判定された場合、この処理は、好ましくはアクション３０６に分岐して、メイン・プロセッサ２０２がこの命令を処理できるようになる。これに対し、命令がサブ命令であると判定された場合、処理は好ましくはアクション３０８に分岐する。アクション３０８において、利用可能なサブプロセッサ２０４，２０６，２０８の個数を求める。利用可能なサブプロセッサ２０４，２０６，２０８の個数は、好ましくは、ループの組で一貫して一定である。
【００２８】
アクション３１０において、好ましくはループセット数および剰余ループの回数を求める。ループセット数とは、メイン・プロセッサ２０２がサブプロセッサ２０４に各サブ命令を渡す回数である。剰余ループの回数とは、サブプロセッサ２０４，２０６，２０８の総数よりも小さい分のループ回数である。実行すべきループの回数が１０００で、サブプロセッサの個数が６４である場合、ループセット数は１５、剰余ループの回数は４０となるが、これは例示に過ぎない。
【００２９】
アクション３１２において、ループセット数がゼロより大きいかどうか（すなわち、実行すべきループの組が少なくとも１つあるかどうか）を判定する。ループセット数がゼロより大きい場合、処理フローは好ましくはアクション３１４に分岐する。ループセット数がゼロである場合、処理フローは好ましくはアクション３３０に分岐する。アクション３１４において、ループ・カウンタにサブプロセッサの個数をセットする。図３Ｂを参照してさらに詳細に後述するように、ループ・カウンタは、次のサブプロセッサにサブ命令を送るかどうかの判定を行うために、サブプロセッサ２０４，２０６または２０８によって使用される。アクション３１６において、要素Ａによって示されるように、現在のｓｉ−ｎをサブプロセッサ２０４に送信する。サブプロセッサ２０４，２０６，２０８がこの後に行う現在のｓｉ−ｎの処理については、図３Ｂを参照して後述する。
【００３０】
アクション３１８において、特定のループについて、サブ命令ｓｉ−ｎを全てサブプロセッサ２０４に送信したかどうかを判定する。まだ送信されていないサブ命令ｓｉ−ｎがある場合、処理フローは好ましくはアクション３１６へ戻り、次のサブ命令ｓｉ−ｎを送信できるようになる。逆に、全てのサブ命令ｓｉ−ｎが送信された場合、処理フローは好ましくはアクション３２０に分岐する。アクション３２０において、１つのループの組が完了したことを示すために、ループセット数をデクリメントする。上記の例において、ループセット数の初期値に１５をセットした場合、第１のループの組（例えば最初の６４回のループ）が完了すると、ループセット数がデクリメントされて１４となる。次に、処理フローは好ましくはアクション３１２に戻り、ループセット数の判定を再び行う。
【００３１】
ループセット数がゼロである（すなわち全てのループセットが実行されている）場合、処理フローは好ましくはアクション３３０に進む。アクション３３０で、剰余ループの回数がゼロより大きいかどうかを判定する。剰余ループの回数がゼロである（すなわち、全てのループが実行されたため、サブプロセッサ２０４，２０６，２０８にサブ命令を送る必要がない）場合、処理フローは好ましくはアクション３３８に分岐し、処理フローが終了する。剰余ループの回数がゼロより大きい場合、処理フローは好ましくはアクション３３２に分岐し、ループ・カウンタに剰余ループの回数をセットする。上の例において、９６０回のループが１５個のループの組で既に実行されているため、ループ・カウンタは４０にセットされる。アクション３３４において、サブプロセッサ２０４にサブ命令ｓｉ−ｎを送信する。アクション３３６において、全てのサブ命令ｓｉ−ｎがサブプロセッサ２０４に送信されたかどうか判定される。まだ送信されていないサブ命令ｓｉ−ｎがある場合、処理フローは好ましくはアクション３３４に戻る。逆に、全てのサブ命令ｓｉ−ｎが送信された場合、処理フローは好ましくはアクション３４０に分岐し、処理フローが終了する。
【００３２】
図３Ｂを参照して、サブプロセッサ２０４，２０６，２０８によるサブ命令の処理３５０の特定の本発明の態様について説明する。アクション３５２において、サブプロセッサ２０４，２０６または２０８は要素Ａを介してサブ命令ｓｉ−ｎを受け取る。図３Ａを参照して、サブ命令ｓｉ−ｎがメイン・プロセッサ２０２からサブプロセッサ２０４に渡されると上記したが、図３Ｂのアクションは、サブプロセッサ２０４，２０６，２０８の全てに当てはまる。
【００３３】
サブ命令ｓｉ−ｎを受け取ると、２つの連続するアクションが発生する。連続するアクションのうちの１つは、所定のサブプロセッサ２０４，２０６または２０８の命令処理パイプラインである。アクション３５４において、サブ命令ｓｉ−ｎに対する命令のデコードｄを実行する。アクション３５６において、サブ命令ｓｉ−ｎに対するアドレス計算ａを実行する。アクション３５８において、サブ命令ｓｉ−ｎに対する命令の実行ｅを実行する。任意選択で、アクション３６０において、サブ命令ｓｉ−ｎに対するライト・バック操作ｗを実行する。アクション３６２において、命令の実行パイプラインが終了する。
【００３４】
連続するアクションのもう一方は、アクション３７０から始まり、ループ・カウンタをデクリメントする。アクション３７２において、ループ・カウンタがゼロより大きいかどうかを判定する。ループ・カウンタがゼロより大きい（すなわち、別のループが実行される）場合、処理フローは好ましくはアクション３７４に分岐する。ループ・カウンタがゼロより大きくない場合、処理フローは好ましくはアクション３７８に分岐する。アクション３７４において、現在のサブプロセッサ２０４，２０６または２０８は、次のサブプロセッサ２０６または２０８にサブ命令ｓｉ−ｎを渡す。アクション３７６において、現在のサブプロセッサ２０４，２０６または２０８による処理フローが終了する。前記ループ・カウンタがゼロの場合、アクション３７８において、次のサブプロセッサ２０６または２０８にサブ命令ｓｉ−ｎを渡さない。次に、アクション３８０において処理フローが終了する。このように、上記の例においては、６４個のサブプロセッサ２０４，２０６，２０８によって１５個のループの組が実行されて９６０回のループが実行されることに加え、先頭の４０個のサブプロセッサ２０４，２０６，２０８が４０回の剰余ループを実行するため、合計１０００回のループが実行される。
【００３５】
図２に戻ると、各命令処理パイプラインによって、サブプロセッサ２０４，２０６，２０８の各々が、所定のサイクル（例えば１クロック・サイクル）において複数のサブ命令のための１つのオペレーション（例えばｄ，ａ，ｅまたはｗ）を実行できるようになる。これらの命令処理パイプラインは、マルチプロセッシング・システム・アーキテクチャ１００内で結合されており、複数のサブ命令のための複数のループを並列に実行する。マルチプロセッシング・システム・アーキテクチャ１００は、タスクの特定の部分（例えばサブ命令）の逐次処理が確実に行われるようにする一方で、複数のサブプロセッサにタスクを分散（例えばループ）させる。好ましくは、サブプロセッサ２０４，２０６，２０８の各々は、サブ命令を局所的に（例えば自身のハードウェアの内部で）実行する。サブプロセッサ２０４，２０６，２０８は、好ましくは、メイン・プロセッサ２０２が制御または管理を行わなくとも直接メモリにアクセスする。メモリはキャッシュ・メモリであり得、サブプロセッサ２０４，２０６，２０８の各々は、好ましくは自身のキャッシュ・メモリを備えている。
【００３６】
各サブプロセッサ２０４，２０６，２０８等は、好ましくは、自身に関連付けられたプロセッサ番号を有する。プロセッサ番号は、好ましくはループ・カウンタと関連付けて識別される。サブプロセッサのプログラムは、このプロセッサ番号を使用して、例えば、パラメータを計算したり、サブプロセッサ２０４、２０６または２０８のいずれが一連の命令ループの最後のループを実行するかを特定することができる。図３Ａ，３Ｂに関して上記したように、ループ・カウンタにサブプロセッサ２０４，２０６，２０８の個数がセットされると、サブプロセッサ２０４，２０６，２０８の全てが命令ループを実行する。ループ・カウンタに剰余ループの回数がセットされた場合、サブプロセッサ２０４，２０６，２０８のうちの一部しか命令ループを実行しない。上記の例のように、剰余ループの回数が４０で、サブプロセッサ２０４，２０６，２０８の個数が６４である場合、先頭の４０個のサブプロセッサ２０４，２０６，２０８（すなわちプロセッサ番号１〜４０）のみが命令ループを実行する。アクション３７８に関して記載したように、４０番目のサブプロセッサ２０４，２０６または２０８は、４１番目のサブプロセッサ２０４，２０６または２０８にサブ命令ｓｉ−ｎを送信しない。
【００３７】
サブプロセッサ２０４，２０６，２０８は、メイン・プロセッサ２０２からみてオンチップであってもオフチップであってもよい。サブプロセッサ２０４，２０６，２０８の１つ以上が独立したデバイスにオフチップで存在する場合、これらの別個のデバイスは、好ましくはメイン・プロセッサ２０２にカスケードされている。
【００３８】
図４に、メイン・デバイス４０２およびサブデバイス４２２を備えた代表的なアーキテクチャ４００を示す。メイン・デバイス４０２は、メイン・プロセッサ４０４、モード選択装置４０６、および任意の数のサブプロセッサ４０８，４１０，４１２を備え、サブプロセッサ４１２は、Ｎ番目のサブプロセッサである。サブデバイス４２２は、メイン・プロセッサ４２４、モード選択装置４２６、および任意の数のサブプロセッサ４２８，４３０，４３２を備える。メイン・プロセッサ４０４は、プログラムの命令ループを管理するようになっており、メイン・プロセッサ４０４は、好ましくは命令ループの外部でオペレーションを実行して、ループを制御する。本説明において上記した例と同様に、各命令ループでは、１つ以上のサブ命令の処理が行われ得る。メイン・プロセッサ４０４は、好ましくはモード選択装置４０６によって使用可能にされ、モード選択装置４０６は、好ましくはストラップ入力４１４を備える。メイン・プロセッサ４０４による命令ループの処理の管理をメイン・プロセッサ４２４が妨げることのないように、メイン・プロセッサ４２４は好ましくは（モード選択装置４２６およびストラップ入力４３４によって）使用不可にされる。上記したカスケーディング・プロセスを通じて、メイン・プロセッサ４０４はサブプロセッサ４０８，４１０，４１２，４２８，４３０，４３２を管理する。なお、メイン・プロセッサ４２４は、サブプロセッサとしても動作し得、好ましくは、接続４３６を介して信号を受け取る。メイン・プロセッサ４０４は、好ましくは常に命令ループの処理を管理している。
【００３９】
メイン・プロセッサ４０４は、好ましくは、カスケードされているサブプロセッサ４０８，４１０，４１２，４２８，４３０，４３２（このほか、任意選択でメイン・プロセッサ４２４）の個数を特定し得る。この識別は、さまざまな方法で行うことができる。例えば、ハードウェア入力または構成入力（configuration input）によって、カスケードされているサブプロセッサ４０８，４１０，４１２，４２８，４３０，４３２の個数を特定されてもよい。別法として、メイン・プロセッサ４０４が、データを使用するか、クロック・サイクルをカウントするか、またはその他の方法によってサブプロセッサ４０８，４１０，４１２，４２８，４３０，４３２の個数を求めてもよい。
【００４０】
本発明の方法および装置は、複数のサブプロセッサにサブ命令をカスケードすることによって命令のループの処理に要する時間を短縮することができ有利である。メイン・プロセッサは、サブ命令があるサブプロセッサから次のサブプロセッサにカスケードされるように、命令ループの処理を有効に管理する。このように、命令処理パイプラインにおいて各サブ命令にオペレーションを実行することによって、ループの各反復が逐次的に処理されることが保証される。カスケーディング・バスにより、共有リソースが効率的に利用されるようになる。さらに、このマルチプロセッシング・コンピュータ・システムは、任意の数のサブプロセッサを処理することができ、このためアーキテクチャがスケーラブルとなる。
【００４１】
本明細書中において、特定の実施形態を参照して本発明を記載したが、これらの実施形態は、単に本発明の原理および用途を例示するものに過ぎないことが理解されるべきである。このため、例として挙げた実施形態に多くの変更を行うことが可能であり、添付の請求の範囲に記載の本発明の趣旨および範囲から逸脱することなくその他の構成を考察することが可能である。
【産業上の利用可能性】
【００４２】
本発明は、複数のサブプロセッサを使用しているコンピュータ命令のループ操作の効率的な実行に使用されるが、これに限らず広範な産業上の利用可能性を有する。
【図面の簡単な説明】
【００４３】
【図１】本発明の１つ以上の態様を使用しているマルチプロセッシング・システム・アーキテクチャの高水準図である。
【図２】本発明の１つ以上の態様による命令処理をより詳細に示すアーキテクチャ図である。
【図３Ａ】本発明の１つ以上の態様による、メイン・プロセッサによる命令の処理のフローチャートである。
【図３Ｂ】本発明の１つ以上の態様による、サブプロセッサによる命令の処理のフローチャートである。
【図４】本発明のさらに別の１つ以上の態様を使用しているデバイス・カスケーディングのためのコンピュータシステム・アーキテクチャの高水準図である。
【図１】
2005520249.tif 000003
【図２】
2005520249.tif 000004
【図３Ａ】
2005520249.tif 000005
【図３Ｂ】
2005520249.tif 000006
【図４】
2005520249.tif 000007
【国際調査報告】
2005520249.tif 000008
2005520249.tif 000009