JP3977340B2 - コンピュータ命令をマルチプロセッシングによって実行するための方法および装置 - Google Patents

コンピュータ命令をマルチプロセッシングによって実行するための方法および装置 Download PDF

Info

Publication number
JP3977340B2
JP3977340B2 JP2003577137A JP2003577137A JP3977340B2 JP 3977340 B2 JP3977340 B2 JP 3977340B2 JP 2003577137 A JP2003577137 A JP 2003577137A JP 2003577137 A JP2003577137 A JP 2003577137A JP 3977340 B2 JP3977340 B2 JP 3977340B2
Authority
JP
Japan
Prior art keywords
sub
instruction
processor
processors
main processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP2003577137A
Other languages
English (en)
Other versions
JP2005520249A (ja
Inventor
英尚 馬越
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Computer Entertainment Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Computer Entertainment Inc filed Critical Sony Computer Entertainment Inc
Publication of JP2005520249A publication Critical patent/JP2005520249A/ja
Application granted granted Critical
Publication of JP3977340B2 publication Critical patent/JP3977340B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/20Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterised by details of the game platform
    • A63F2300/203Image generating hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Hardware Redundancy (AREA)
  • Multi Processors (AREA)

Description

本発明はコンピュータ命令の実行に関し、より詳細には、複数のサブプロセッサを使用してループ操作を効率的に実行することに関する。
コンピュータ・システムにおいては、様々なタスクを遂行するために幅広い用途で用いられるコンピュータ・システムのオペレーション(operation)の制御をマイクロプロセッサによって行うことが多い。マイクロプロセッサは、特定のオペレーションを特定の方法で処理するようにプログラムできる。通常、マイクロプロセッサは命令をフェッチするか、または命令を受け取る。命令とは、データを加算したり、プログラムの別の部分にジャンプしたり、論理演算を実行するなどのオペレーションを実行するようにマイクロプロセッサに対して指示するものである。オペレーションは複数のステップで実行され、このステップには、命令をデコードするステップ、メモリのアドレスを算出するステップ、メモリにあるデータにアクセスするかメモリからデータを読み出すステップ、このデータを使用して命令を実行するステップ、結果をメモリに書き込むステップなどが1つ以上が含まれる。
コンピュータ・グラフィックなど一部のアプリケーションでは、演算が多用されており、表示装置にイメージを効果的にレンダリングして表示するために多くの命令を実行しなければならないことがある。演算を多用するコンピュータ・グラフィックのアプリケーションに、ポリゴン/ピクセル・シェーディング(グラフィックス・シェーディングなど)のための三次元グラフィック処理がある。例えば、ビデオゲームのディスプレイに、あるプレーヤが別のプレーヤに投げたボールを描画することがある。ディスプレイ上のボールやその他のオブジェクトは、一連のポリゴンとして表され得る。ボールがディスプレイを移動するにつれて、ボールと、そのボールの影に入るオブジェクトのシェーディングが変化し得る。マイクロプロセッサは、ボールおよび影と重なる(intersect)それぞれのポリゴンの各画素(picture element:PEL)のシェーディングを演算および/または再演算し得る。上記の演算では、複数の反復(すなわちループ)が行われ、数百万回もの計算が行われることがある。
上記に挙げたグラフィックスのシェーディングの例のように、特定のオペレーションのための命令および計算を全て1つのマイクロプロセッサで処理することの難点として、時間がかかることが挙げられる。通常は、実行する命令が増えるにつれて、総演算時間が長くなる。上記のような演算を多用するアプリケーションを処理する方法の1つに、マイクロプロセッサによってタスクを分割して、分割したタスクを1つ以上のサブプロセッサに分散させる方法がある。タスクは1つ以上の命令のこともあれば、1つの命令の1つ以上の部分セグメントであることもある。タスクを複数のサブプロセッサに分散させれば、タスクを完了するまでの時間を短縮できる。他の利点としては、データのスループットとシステムの信頼性の向上が挙げられる。また、サブプロセッサは同じオペレーションや類似したオペレーションを反復的に実行するため、オペレーションを能率的に実行できる(命令のサブセットを実行するなど)ようにサブプロセッサをカスタマイズすることもできる。
タスクを分散させる方法として、メイン・プロセッサが、一群のサブプロセッサに並列に命令を送る方法がある。複数のサブプロセッサにタスクを分散させる別の方法では、メイン・プロセッサは一連のサブプロセッサに逐次的に命令を送る。しかし、これらの方法にはそれぞれにまつわる欠点がある。
複数のサブプロセッサにタスクを分割して分散させる方法の問題の1つに順序付けエラー(sequencing error)がある。このエラーは、分割されたタスクの一部が正しい順序で処理されず、このためデータの誤りが生ずる。並列サブプロセッシングは、順序付けエラーの影響を特に受けやすいことがある。別の問題として、マイクロプロセッサすなわちメイン・プロセッサが、サブプロセッサおよび共有リソース(例えば、データバス/アドレスバス)のオペレーションを監視して制御しなければならない点がある。さらに別の問題に、スケーラビリティがある。コンピュータ・アーキテクチャには、数個のサブプロセッサにしか対応していないものもあれば、対応可能なサブプロセッサの数に制限がないものもある。さらに、逐次サブプロセッシングでは、逐次サブプロセッサがタスクを1つずつ受け取るため、並列サブプロセッシングよりも処理に時間を要する。
上記の問題を軽減するため、さまざまな技術が開発され使用されてきた。例えば、あるコンピュータ・アーキテクチャでは、メイン・プロセッサと、所望の構成に固定配線された複数の専用サブプロセッサとを備えている。このようなコンピュータ・アーキテクチャは演算時間を短縮できるが、固定配線を行うという構成は柔軟性を欠き、乏しい演算資源を効率的に利用できないことがある。詳細には、固定配線のサブプロセッサでは、固定されたデータ・フローにおいてオン/オフ切り替え機能およびプログラム可能なパラメータを備えるようにすることができる。しかし、この機能は、上記したグラフィックスのシェーディングの例のような演算を多用するアプリケーションを実行するのに十分柔軟ではない。このため、上記の問題に適切に対処することができる代替のアーキテクチャが所望されている。
本発明の1つ以上の態様によると、マルチプロセッシング・コンピュータ・システムは、メイン・プロセッサおよび複数のサブプロセッサを備える。メイン・プロセッサは、プログラムの命令ループの処理を管理するように動作可能である。各命令ループは、1つ以上のサブ命令を含む。複数のサブプロセッサは、連続した複数のステージにおいて各サブ命令を処理するように動作可能である。サブプロセッサのうちの少なくとも第1のサブプロセッサは、メイン・プロセッサから1つ以上のサブ命令を逐次的に受け取り、サブプロセッサのうちの次のサブプロセッサにサブ命令を渡すように動作可能である。サブプロセッサのうちの第2のサブプロセッサは、第1のサブプロセッサから1つ以上のサブ命令を逐次的に受け取るように動作可能である。
好ましくは、メイン・プロセッサは実行すべきループセット数および剰余ループの回数を識別する。ループセット数がゼロより大きい場合、メイン・プロセッサはループ・カウンタに利用可能な複数のサブプロセッサの個数を設定する。1つ以上のサブ命令が、ループ・カウンタと共にサブプロセッサのうちの第1のサブプロセッサに逐次的に渡される。所定のループにある全てのサブ命令がサブプロセッサのうちの第1のサブプロセッサに渡されたら、ループセット数がデクリメントされる。ループセット数がゼロに等しい場合、メイン・プロセッサは、ループ・カウンタに剰余ループの回数を設定して、サブプロセッサのうちの第1のサブプロセッサにループ・カウンタと共に1つ以上のサブ命令を逐次的に送る。
本発明の別の1つ以上の態様によれば、マルチプロセッシング・コンピュータ・システムは、メイン・プロセッサ、複数のサブプロセッサおよびカスケーディング・バスを備える。メイン・プロセッサはプログラムの命令ループを処理するように動作可能である。各命令ループは、1つ以上のサブ命令を含む。複数のサブプロセッサは、連続した複数のステージにおいて各サブ命令を処理するように動作可能である。サブプロセッサのうちの少なくとも第1のサブプロセッサは、メイン・プロセッサから1つ以上のサブ命令を逐次的に受け取り、サブプロセッサのうちの次のサブプロセッサにサブ命令を渡すように動作可能である。サブプロセッサのうちの第2のサブプロセッサは、第1のサブプロセッサから1つ以上のサブ命令を逐次的に受け取るように動作可能である。カスケーディング・バスは、メイン・プロセッサからサブプロセッサのうちの第1のサブプロセッサに1つ以上のサブ命令を提供するように動作可能である。
本発明のさらに別の1つ以上の態様によれば、マルチプロセッシングを行う方法は、プログラムの命令ループであって、各々が1つ以上のサブ命令を含む命令ループを、メイン・プロセッサによって処理するように管理するステップと、メイン・プロセッサから複数のサブプロセッサのうちの1つである第1のサブプロセッサにおいて1つ以上のサブ命令を逐次的に受け取るステップと、連続した複数のステージにおいて各サブ命令を処理するステップと、命令ループの一部しか完了していない場合は、サブプロセッサのうちの次のサブプロセッサに1つ以上のサブ命令を渡すステップと、サブプロセッサのうちの第2のサブプロセッサにおいて1つ以上のサブ命令を逐次的に受け取るステップと、を有する。
好ましくは、この方法は、利用可能なサブプロセッサの個数を決定するステップと、実行すべきループセット数を特定するステップと、実行すべき剰余ループの回数を特定するステップと、を有する。この方法は好ましくは、ループセット数がゼロより大きい場合、ループ・カウンタに利用可能なサブプロセッサの個数を設定するステップと、サブプロセッサのうちの次のサブプロセッサにループ・カウンタと共に1つ以上のサブ命令を伝えるステップと、所定の命令ループにある全てのサブ命令がサブプロセッサのうちの第1のサブプロセッサに渡されたら、所定の命令ループセット数をデクリメントするステップと、を有する。この方法は好ましくは、ループセット数がゼロより大きく、かつ剰余ループの回数がゼロより大きい場合、ループ・カウンタに剰余ループの回数を設定するステップと、サブプロセッサのうちの次のサブプロセッサにループ・カウンタと共に1つ以上のサブ命令を渡すステップと、を有する。
本発明のさらに別の1つ以上の態様によれば、マルチプロセッシングを行う方法は、第1のデバイスにある第1のメイン・プロセッサおよび第2のデバイスにある第2のメイン・プロセッサのうちからメイン・プロセッサを選択するステップと、プログラムの命令ループであって、各々が1つ以上のサブ命令を含む命令ループの、稼働中のメイン・プロセッサによる処理を管理するステップと、複数のサブプロセッサのうちの1つである第1のサブプロセッサにおいてメイン・プロセッサから1つ以上のサブ命令を逐次的に受け取るステップと、連続した複数のステージにおいて各サブ命令を処理するステップと、ループ・カウンタがゼロより大きい場合、サブプロセッサのうちの次のサブプロセッサに1つ以上のサブ命令を渡すステップと、サブプロセッサのうちの第2のサブプロセッサにおいて1つ以上のサブ命令を逐次的に受け取るステップと、を有する。
以下で図面を参照するが、図面において同一の参照符号は同一の要素を参照している。図1に、本発明の1つ以上の態様を使用しているマルチプロセッシング・システム・アーキテクチャ100を示す。マルチプロセッシング・システム・アーキテクチャ100は、メイン・プロセッサ102と、複数のサブプロセッサ104,106,108,110とを備える。図1には4つのサブプロセッサが記載されているが、マルチプロセッシング・システム・アーキテクチャ100に使用するサブプロセッサの個数は幾つであってもよい。好ましくは、少なくとも2つのサブプロセッサが使用される。使用できるサブプロセッサの個数については理論上制限がない。
メイン・プロセッサ102は、好ましくは一般的なコンピュータ命令を実行できる汎用マイクロプロセッサである。メイン・プロセッサ102は、好ましくは、割り込みを受け取って、特定のオペレーションの実行を中止または停止する。好ましい一実施形態において、メイン・プロセッサ102はスーパースカラー・アーキテクチャを備える。別の好ましい実施形態においては、メイン・プロセッサ102は、VLIW(Very Long Instruction Word:超長命令ワード)アーキテクチャを備える。スーパースカラー・アーキテクチャおよびVLIWアーキテクチャは例示的なものに過ぎず、本発明の範囲のメイン・プロセッサ102を制限するものと解釈されるべきではない。メイン・プロセッサ102の算術論理演算装置(「ALU」)およびレジスタ・ファイルは、従来技術において公知のように、好ましくはグラフィック処理に使用するベクトル・データを処理する。ALUは、算術演算または論理演算(例えば「AND」、「OR」、「NOT」等)といった基本的なデータ変換を実行する。レジスタ・ファイルは、命令の実行時に一時的に記憶場所を提供する。
メイン・プロセッサ102は、データの読出し/記憶命令、算術演算命令と論理演算命令、ジャンプ命令、シフト命令、および分岐命令のようなコンピュータ命令を実行してもよいが、これらは例示に過ぎない。メイン・プロセッサ102は、好ましくは、命令のフェッチI、命令のデコードD、アドレス計算A、命令の実行E、およびライト・バック操作Wを任意選択で実行するように動作可能である。命令のフェッチIでは、メモリから実行するための命令を取得する。命令のフェッチIは、好ましくは命令フェッチ・メカニズム(例えばメイン・プロセッサ102の制御装置)によって実行される。命令フェッチ・メカニズムは、好ましくは命令キャッシュ・メモリを備える。命令のデコードDでは、フェッチした命令の内容を判定する。命令のデコードDでは、例えば命令ルック・アップ・テーブルを使用し得る。例えば、各命令は符号によって表され得る。命令のデコードDでは、命令ルック・アップ・テーブルを使用して、この符号に対応する命令を特定し得る。アドレス計算Aでは、メモリ内でのアドレスを特定する。メモリ内のこのアドレスには、命令の実行Eに使用するデータが含まれ得る。メモリは、メイン・プロセッサ102とは離れたデバイスに存在する(「オフチップ」)こともあれば、メイン・プロセッサ102と同じデバイスに存在する(「オンチップ」)こともある。メモリは、ローカル・メモリ・キャッシュであってもよい。命令の実行Eにおいては、ALUが命令(例えば「AND」、「OR」、「LOOP」、「JUMP」)を実行する。ライト・バック操作Wにより、メモリ内の、データが以前に記憶されていた場所と同じ場所かまたは別の場所に結果が書き込まれる。あるいは、ライト・バック操作Wにより結果が返される。
マルチプロセッシング・システム・アーキテクチャ100は、ループ操作を能率よく実行するように設計されており、このため演算を多用する計算を効率的に実行する。例えば、例として挙げるプログラム命令ループに以下の処理が含まれる場合を考える。
for(j=0; j<Num; j++)
{
Operation(j)
}
メイン・プロセッサ102は、この命令ループの処理を管理する。メイン・プロセッサ102は、好ましくはループの外部でオペレーションを実行し(例えばカウンタがj=0からj<Numまでインクリメントするように管理し)、サブプロセッサ104,106,108,110に情報を渡すことによってループを制御する。ループは、好ましくは、サブプロセッサ104,106,108,110の個数および実行すべきループの回数に基づいて制御される。サブプロセッサ104,106,108,110は、各ループ内でオペレーション(Operation(j))を実行する。このオペレーションは、1つ以上のサブオペレーションを含み得る。
矢印120,122,124,126に示すように、メイン・プロセッサ102およびサブプロセッサ104,106,108,110はカスケード接続されている。矢印120,122,124,126によって示される情報の流れは、好ましくはカスケーディング・バスを使用して実装される。カスケーディング・バスは、好ましくは、メイン・プロセッサ102とサブプロセッサ104,106,108,110との間で命令やその他の情報の受け渡しを行う命令コード・バスを備える。カスケーディング・バスは、好ましくは双方向である。図3A,3Bを参照して後述するように、メイン・プロセッサ102からサブプロセッサ104(例えば第1のサブプロセッサ)に向かう情報には、1つ以上の命令コード、デコード済みの情報、データ、パラメータなどのほか、ループ・カウンタが含まれる。サブプロセッサ104は、次にこの情報の一部または全てをサブプロセッサ106に渡し得る。
サブプロセッサ104,106,108,110の各々は、所定の命令(例えばサブ命令)のセットを実行するように動作可能である。この命令セットは、好ましくは、サブプロセッサ104,106,108,110の全てに共通である。好ましい一実施形態において、サブ命令には、メイン・プロセッサ102によって使用される命令のうち、「分岐」、「ジャンプ」といったプログラム・カウンタに関連する命令を除き全ての命令が全て含まれる。サブプロセッサ104,106,108,110は、好ましくは割り込みを受け取らない。このようなサブ命令のセットは、好ましくはループのオペレーションを実行するために使用される。サブプロセッサ104,106,108,110は、各サブ命令に対してオペレーションを1つ以上実行する。このオペレーションには、命令のデコードd、アドレス計算a、命令の実行e、およびライト・バック操作wなどがある。オペレーションd,a,eおよびwは、メイン・プロセッサ102に関して上記したオペレーションD,A,EおよびWと様々な点において同等である。好ましくは、ライト・バック操作wには、サブプロセッサ104,106,108,110からメイン・プロセッサ102に状態情報および結果などを転送することが含まれる。
メイン・プロセッサ102は、好ましくはオペレーションI,D,A,EおよびWを,サブプロセッサ104,106,108,110は、好ましくはオペレーションd,a,eおよびwを、それぞれ命令処理パイプラインにおいて実行する。図2を参照して後述するように、サブプロセッサ104,106,108,110およびメイン・プロセッサ102のそれぞれの命令処理パイプラインは逐次的に作動する。
図2に、図1のマルチプロセッシング・システム・アーキテクチャ100をさらに詳細に示す。このアーキテクチャの機能には、逐次処理の実行を続けつつ、ループ・タスクが複数のサブプロセッサ204,206,208等に分散されるよう、複数のループを並列的に実行できる機能がある。より詳細には、図2は、ある特定の瞬間(例えばサイクル)における、例として挙げる一連の命令ループのスナップショット200を示している。メイン・プロセッサ202は、一連の命令を(好ましくは逐次的に)フェッチするか受け取り、この命令にはメイン・プロセッサ用の命令miと、サブ命令si−1,si−2、・・・、si−8とが含まれる。スナップショット200に示す現在のオペレーション・サイクルにおいて、メイン・プロセッサ202は、サブ命令si−8に対する命令のフェッチI、サブ命令si−7に対する命令のデコードD、サブ命令si−6に対するアドレス計算A、サブ命令si−5に対する命令の実行E、およびサブ命令si−4に対するライト・バックWをそれぞれ実行している。メイン・プロセッサ202は、サブ命令si−3,si−2,およびsi−1のほか、3つのメイン・プロセッサ命令miの処理を完了している。これらの命令は、破線で囲んで図示されている。
スナップショット200に示すオペレーション・サイクルにおいて、サブプロセッサ204は、サブ命令si−3に対する命令のデコードd,si−2に対するアドレス計算a、およびサブ命令si−1に対する命令の実行eを実行しており、ライト・バック操作wを実行しているサブ命令はない(「nop」)。サブプロセッサ206は、サブ命令si−2に対する命令のデコードd、およびサブ命令si−1に対するアドレス計算を実行しており、命令の実行eまたはライト・バック操作wを実行している命令はない(nop)。サブプロセッサ208は、サブ命令si−1に対する命令のデコードdを実行しており、アドレス計算a、命令の実行e、またはライト・バック操作wを行っている命令はない(nop)。
サブプロセッサ204,206,208の各々は、そのサブプロセッサ204,206,208に渡されるそれぞれのサブ命令に対し、ループの第1ステージの命令処理を実行する。つまり、サブプロセッサ204は、サブ命令si−1に対するループの第1の反復(例えばj=1)のd,a,eおよびw(必要な場合)を実行し、サブプロセッサ206は、サブ命令si−1に対するループの第2の反復(例えば、j=2)のd,a,eおよびw(必要な場合)を実行し、サブプロセッサ208、サブ命令si−1に対するループの第3の反復(例えばj=3)のd,a,eおよびw(必要な場合)を実行する。
メイン・プロセッサ202がサブプロセッサ204,206,208用のサブ命令を検出すると、メイン・プロセッサ202はサブ命令をサブプロセッサ204に出力する。好ましくは、メイン・プロセッサ202用の命令と、サブプロセッサ204,206,208用のサブ命令とは識別可能である。メイン・プロセッサ202用の命令と、サブプロセッサ204,206,208用のサブ命令とを区別する方法の1つに、サブ命令の開始点を示す識別用命令と終了点を示す識別用命令とを定義する方法がある。別法として、メイン・プロセッサ202およびサブプロセッサ204,206,208に1つの命令セットのみを定義する方法もある。命令セットに含まれる命令は、好ましくは命令オペレーション・コード(「命令コード」)によって識別される。命令の先頭のワードは、通常は、その命令の命令コードである。好ましくは、メイン・プロセッサ202に指定される命令コードのセットと、サブプロセッサ204,206,208に指定される命令コードのセットとは異なっている。別法として、好ましくは命令コードのビット・フィールドのうちの1つ以上のビットが、メイン・プロセッサ命令とサブプロセッサ命令とを区別するために使用される。さらに別の方法として、メイン・プロセッサ202用の命令フローの一部にサブ命令のためのマクロ命令を定義する方法がある。このマクロ命令が実行されると、サブ命令が呼び出される。上記の方法は例に過ぎず、これ以外の方法によって識別を行ってもよい。
サブプロセッサ204,206,208は、実行すべきループの回数に応じて、次のサブプロセッサ206,208等に少なくとも1つのサブ命令を渡す、すなわちカスケードする。例えば、スナップショット200において、メイン・プロセッサ202はサブ命令si−4に対するライト・バック操作Wを実行し、サブプロセッサ204にサブ命令si−3を渡す。サブプロセッサ204は、サブ命令si−3に対する命令のデコードd、サブ命令si−2に対するアドレス計算a、およびサブ命令si−1に対する命令の実行eを実行し、サブプロセッサ206にサブ命令si−2を渡す。サブプロセッサ206は、サブ命令si−2に対する命令のデコードd、およびサブ命令si−1に対するアドレス計算aを実行し、サブプロセッサ208にサブ命令si−1を渡す。サブプロセッサ208ではこの命令に対するデコードdを実行する。N回のサイクルが実行されると、あるサブ命令がN個のサブプロセッサに渡される。
図3Aを参照して、メイン・プロセッサ202による命令処理300の本発明の一態様について記載する。アクション302において、メイン・プロセッサ202は命令をフェッチするかまたは取得する。アクション304において、この命令がメイン・プロセッサ202用の命令であるか、サブプロセッサ204,206,208用のサブ命令であるかを判定する。命令がメイン・プロセッサ202用であると判定された場合、この処理は、好ましくはアクション306に分岐して、メイン・プロセッサ202がこの命令を処理できるようになる。これに対し、命令がサブ命令であると判定された場合、処理は好ましくはアクション308に分岐する。アクション308において、利用可能なサブプロセッサ204,206,208の個数を求める。利用可能なサブプロセッサ204,206,208の個数は、好ましくは、ループの組で一貫して一定である。
アクション310において、好ましくはループセット数および剰余ループの回数を求める。ループセット数とは、メイン・プロセッサ202がサブプロセッサ204に各サブ命令を渡す回数である。剰余ループの回数とは、サブプロセッサ204,206,208の総数よりも小さい分のループ回数である。実行すべきループの回数が1000で、サブプロセッサの個数が64である場合、ループセット数は15、剰余ループの回数は40となるが、これは例示に過ぎない。
アクション312において、ループセット数がゼロより大きいかどうか(すなわち、実行すべきループの組が少なくとも1つあるかどうか)を判定する。ループセット数がゼロより大きい場合、処理フローは好ましくはアクション314に分岐する。ループセット数がゼロである場合、処理フローは好ましくはアクション330に分岐する。アクション314において、ループ・カウンタにサブプロセッサの個数をセットする。図3Bを参照してさらに詳細に後述するように、ループ・カウンタは、次のサブプロセッサにサブ命令を送るかどうかの判定を行うために、サブプロセッサ204,206または208によって使用される。アクション316において、要素Aによって示されるように、現在のsi−nをサブプロセッサ204に送信する。サブプロセッサ204,206,208がこの後に行う現在のsi−nの処理については、図3Bを参照して後述する。
アクション318において、特定のループについて、サブ命令si−nを全てサブプロセッサ204に送信したかどうかを判定する。まだ送信されていないサブ命令si−nがある場合、処理フローは好ましくはアクション316へ戻り、次のサブ命令si−nを送信できるようになる。逆に、全てのサブ命令si−nが送信された場合、処理フローは好ましくはアクション320に分岐する。アクション320において、1つのループの組が完了したことを示すために、ループセット数をデクリメントする。上記の例において、ループセット数の初期値に15をセットした場合、第1のループの組(例えば最初の64回のループ)が完了すると、ループセット数がデクリメントされて14となる。次に、処理フローは好ましくはアクション312に戻り、ループセット数の判定を再び行う。
ループセット数がゼロである(すなわち全てのループセットが実行されている)場合、処理フローは好ましくはアクション330に進む。アクション330で、剰余ループの回数がゼロより大きいかどうかを判定する。剰余ループの回数がゼロである(すなわち、全てのループが実行されたため、サブプロセッサ204,206,208にサブ命令を送る必要がない)場合、処理フローは好ましくはアクション338に分岐し、処理フローが終了する。剰余ループの回数がゼロより大きい場合、処理フローは好ましくはアクション332に分岐し、ループ・カウンタに剰余ループの回数をセットする。上の例において、960回のループが15個のループの組で既に実行されているため、ループ・カウンタは40にセットされる。アクション334において、サブプロセッサ204にサブ命令si−nを送信する。アクション336において、全てのサブ命令si−nがサブプロセッサ204に送信されたかどうか判定される。まだ送信されていないサブ命令si−nがある場合、処理フローは好ましくはアクション334に戻る。逆に、全てのサブ命令si−nが送信された場合、処理フローは好ましくはアクション340に分岐し、処理フローが終了する。
図3Bを参照して、サブプロセッサ204,206,208によるサブ命令の処理350の特定の本発明の態様について説明する。アクション352において、サブプロセッサ204,206または208は要素Aを介してサブ命令si−nを受け取る。図3Aを参照して、サブ命令si−nがメイン・プロセッサ202からサブプロセッサ204に渡されると上記したが、図3Bのアクションは、サブプロセッサ204,206,208の全てに当てはまる。
サブ命令si−nを受け取ると、2つの連続するアクションが発生する。連続するアクションのうちの1つは、所定のサブプロセッサ204,206または208の命令処理パイプラインである。アクション354において、サブ命令si−nに対する命令のデコードdを実行する。アクション356において、サブ命令si−nに対するアドレス計算aを実行する。アクション358において、サブ命令si−nに対する命令の実行eを実行する。任意選択で、アクション360において、サブ命令si−nに対するライト・バック操作wを実行する。アクション362において、命令の実行パイプラインが終了する。
連続するアクションのもう一方は、アクション370から始まり、ループ・カウンタをデクリメントする。アクション372において、ループ・カウンタがゼロより大きいかどうかを判定する。ループ・カウンタがゼロより大きい(すなわち、別のループが実行される)場合、処理フローは好ましくはアクション374に分岐する。ループ・カウンタがゼロより大きくない場合、処理フローは好ましくはアクション378に分岐する。アクション374において、現在のサブプロセッサ204,206または208は、次のサブプロセッサ206または208にサブ命令si−nを渡す。アクション376において、現在のサブプロセッサ204,206または208による処理フローが終了する。前記ループ・カウンタがゼロの場合、アクション378において、次のサブプロセッサ206または208にサブ命令si−nを渡さない。次に、アクション380において処理フローが終了する。このように、上記の例においては、64個のサブプロセッサ204,206,208によって15個のループの組が実行されて960回のループが実行されることに加え、先頭の40個のサブプロセッサ204,206,208が40回の剰余ループを実行するため、合計1000回のループが実行される。
図2に戻ると、各命令処理パイプラインによって、サブプロセッサ204,206,208の各々が、所定のサイクル(例えば1クロック・サイクル)において複数のサブ命令のための1つのオペレーション(例えばd,a,eまたはw)を実行できるようになる。これらの命令処理パイプラインは、マルチプロセッシング・システム・アーキテクチャ100内で結合されており、複数のサブ命令のための複数のループを並列に実行する。マルチプロセッシング・システム・アーキテクチャ100は、タスクの特定の部分(例えばサブ命令)の逐次処理が確実に行われるようにする一方で、複数のサブプロセッサにタスクを分散(例えばループ)させる。好ましくは、サブプロセッサ204,206,208の各々は、サブ命令を局所的に(例えば自身のハードウェアの内部で)実行する。サブプロセッサ204,206,208は、好ましくは、メイン・プロセッサ202が制御または管理を行わなくとも直接メモリにアクセスする。メモリはキャッシュ・メモリであり得、サブプロセッサ204,206,208の各々は、好ましくは自身のキャッシュ・メモリを備えている。
各サブプロセッサ204,206,208等は、好ましくは、自身に関連付けられたプロセッサ番号を有する。プロセッサ番号は、好ましくはループ・カウンタと関連付けて識別される。サブプロセッサのプログラムは、このプロセッサ番号を使用して、例えば、パラメータを計算したり、サブプロセッサ204、206または208のいずれが一連の命令ループの最後のループを実行するかを特定することができる。図3A,3Bに関して上記したように、ループ・カウンタにサブプロセッサ204,206,208の個数がセットされると、サブプロセッサ204,206,208の全てが命令ループを実行する。ループ・カウンタに剰余ループの回数がセットされた場合、サブプロセッサ204,206,208のうちの一部しか命令ループを実行しない。上記の例のように、剰余ループの回数が40で、サブプロセッサ204,206,208の個数が64である場合、先頭の40個のサブプロセッサ204,206,208(すなわちプロセッサ番号1〜40)のみが命令ループを実行する。アクション378に関して記載したように、40番目のサブプロセッサ204,206または208は、41番目のサブプロセッサ204,206または208にサブ命令si−nを送信しない。
サブプロセッサ204,206,208は、メイン・プロセッサ202からみてオンチップであってもオフチップであってもよい。サブプロセッサ204,206,208の1つ以上が独立したデバイスにオフチップで存在する場合、これらの別個のデバイスは、好ましくはメイン・プロセッサ202にカスケードされている。
図4に、メイン・デバイス402およびサブデバイス422を備えた代表的なアーキテクチャ400を示す。メイン・デバイス402は、メイン・プロセッサ404、モード選択装置406、および任意の数のサブプロセッサ408,410,412を備え、サブプロセッサ412は、N番目のサブプロセッサである。サブデバイス422は、メイン・プロセッサ424、モード選択装置426、および任意の数のサブプロセッサ428,430,432を備える。メイン・プロセッサ404は、プログラムの命令ループを管理するようになっており、メイン・プロセッサ404は、好ましくは命令ループの外部でオペレーションを実行して、ループを制御する。本説明において上記した例と同様に、各命令ループでは、1つ以上のサブ命令の処理が行われ得る。メイン・プロセッサ404は、好ましくはモード選択装置406によって使用可能にされ、モード選択装置406は、好ましくはストラップ入力414を備える。メイン・プロセッサ404による命令ループの処理の管理をメイン・プロセッサ424が妨げることのないように、メイン・プロセッサ424は好ましくは(モード選択装置426およびストラップ入力434によって)使用不可にされる。上記したカスケーディング・プロセスを通じて、メイン・プロセッサ404はサブプロセッサ408,410,412,428,430,432を管理する。なお、メイン・プロセッサ424は、サブプロセッサとしても動作し得、好ましくは、接続436を介して信号を受け取る。メイン・プロセッサ404は、好ましくは常に命令ループの処理を管理している。
メイン・プロセッサ404は、好ましくは、カスケードされているサブプロセッサ408,410,412,428,430,432(このほか、任意選択でメイン・プロセッサ424)の個数を特定し得る。この識別は、さまざまな方法で行うことができる。例えば、ハードウェア入力または構成入力(configuration input)によって、カスケードされているサブプロセッサ408,410,412,428,430,432の個数を特定されてもよい。別法として、メイン・プロセッサ404が、データを使用するか、クロック・サイクルをカウントするか、またはその他の方法によってサブプロセッサ408,410,412,428,430,432の個数を求めてもよい。
本発明の方法および装置は、複数のサブプロセッサにサブ命令をカスケードすることによって命令のループの処理に要する時間を短縮することができ有利である。メイン・プロセッサは、サブ命令があるサブプロセッサから次のサブプロセッサにカスケードされるように、命令ループの処理を有効に管理する。このように、命令処理パイプラインにおいて各サブ命令にオペレーションを実行することによって、ループの各反復が逐次的に処理されることが保証される。カスケーディング・バスにより、共有リソースが効率的に利用されるようになる。さらに、このマルチプロセッシング・コンピュータ・システムは、任意の数のサブプロセッサを処理することができ、このためアーキテクチャがスケーラブルとなる。
本明細書中において、特定の実施形態を参照して本発明を記載したが、これらの実施形態は、単に本発明の原理および用途を例示するものに過ぎないことが理解されるべきである。このため、例として挙げた実施形態に多くの変更を行うことが可能であり、添付の請求の範囲に記載の本発明の趣旨および範囲から逸脱することなくその他の構成を考察することが可能である。
本発明は、複数のサブプロセッサを使用しているコンピュータ命令のループ操作の効率的な実行に使用されるが、これに限らず広範な産業上の利用可能性を有する。
本発明の1つ以上の態様を使用しているマルチプロセッシング・システム・アーキテクチャの高水準図である。 本発明の1つ以上の態様による命令処理をより詳細に示すアーキテクチャ図である。 本発明の1つ以上の態様による、メイン・プロセッサによる命令の処理のフローチャートである。 本発明の1つ以上の態様による、サブプロセッサによる命令の処理のフローチャートである。 本発明のさらに別の1つ以上の態様を使用しているデバイス・カスケーディングのためのコンピュータシステム・アーキテクチャの高水準図である。

Claims (47)

  1. マルチプロセッシング・コンピュータ・システムであって、
    各々が1つ以上のサブ命令を含むプログラムの命令ループの処理を管理するように動作可能なメイン・プロセッサと、
    連続した複数のステージにおいて各サブ命令を処理するように動作可能な複数のサブプロセッサと、を備え、前記複数のサブプロセッサのうちの少なくとも第1のサブプロセッサは、前記メイン・プロセッサから1つ以上のサブ命令を逐次的に受け取り、前記サブプロセッサのうちの次のサブプロセッサに前記サブ命令を渡すように動作可能であり、前記複数のサブプロセッサのうちの少なくとも第2のサブプロセッサは、前記第1のサブプロセッサから前記1つ以上のサブ命令を逐次的に受け取るように動作可能であるマルチプロセッシング・コンピュータ・システム。
  2. 前記連続した複数のステージは命令処理パイプラインである請求項1に記載のマルチプロセッシング・コンピュータ・システム。
  3. 前記命令処理パイプラインは前記1つ以上のサイクルの間、逐次的に動作する請求項2に記載のマルチプロセッシング・コンピュータ・システム。
  4. 第1のサイクルの間に命令のデコードが実行され、第2のサイクルの間にアドレス計算が実行され、第3のサイクルの間に命令の実行が実行される請求項3に記載のマルチプロセッシング・コンピュータ・システム。
  5. 第4のサイクルの間にライト・バック操作が実行される請求項4に記載のマルチプロセッシング・コンピュータ・システム。
  6. 前記複数のサブプロセッサは割り込みを受け付けない請求項1に記載のマルチプロセッシング・コンピュータ・システム。
  7. 前記複数のサブプロセッサは電子メモリに動作可能に接続される請求項1に記載のマルチプロセッシング・コンピュータ・システム。
  8. 前記複数のサブプロセッサは前記電子メモリに直接アクセスする請求項7に記載のマルチプロセッシング・コンピュータ・システム。
  9. 前記メイン・プロセッサは電子メモリに動作可能に接続される請求項1に記載のマルチプロセッシング・コンピュータ・システム。
  10. 前記電子メモリはキャッシュ・メモリである請求項9に記載のマルチプロセッシング・コンピュータ・システム。
  11. 前記メイン・プロセッサは第1のデバイスの一部をなし、前記複数のサブプロセッサの少なくとも一部のサブプロセッサは第2のデバイスの一部をなし、前記第2のデバイスは前記第1のデバイスとは離れており、前記第1のデバイスにカスケードされている請求項1に記載のマルチプロセッシング・コンピュータ・システム。
  12. 前記メイン・プロセッサは前記1つ以上のサブプロセッサのイベントを検出するように動作可能であり、前記メイン・プロセッサは、前記イベントを検出すると、前記サブプロセッサのうちの前記第1のサブプロセッサに前記1つ以上のサブ命令を逐次的に出力する請求項1に記載のマルチプロセッシング・コンピュータ・システム。
  13. 前記メイン・プロセッサは前記命令ループの1つ以上を開始する前に前記イベントを検出し、前記メイン・プロセッサは前記サブプロセッサの動作を制御する請求項12に記載のマルチプロセッシング・コンピュータ・システム。
  14. 前記メイン・プロセッサが一般的なコンピュータ命令を実行可能である請求項1に記載のマルチプロセッシング・コンピュータ・システム。
  15. 前記メイン・プロセッサは割り込みを受け付けることができる請求項1に記載のマルチプロセッシング・コンピュータ・システム。
  16. 前記メイン・プロセッサは並列アーキテクチャを使用している請求項1に記載のマルチプロセッシング・コンピュータ・システム。
  17. 前記並列アーキテクチャはスーパースカラー・アーキテクチャである請求項16に記載のマルチプロセッシング・コンピュータ・システム。
  18. 前記並列アーキテクチャは超長命令ワード・アーキテクチャ(VLIW)である請求項16に記載のマルチプロセッシング・コンピュータ・システム。
  19. 前記メイン・プロセッサはALUおよびレジスタ・ファイルを備え、前記ALUおよび前記レジスタ・ファイルはベクトル・データを処理するように動作可能である請求項1に記載のマルチプロセッシング・コンピュータ・システム。
  20. 前記メイン・プロセッサは利用可能なサブプロセッサの個数を特定する請求項1に記載のマルチプロセッシング・コンピュータ・システム。
  21. 前記メイン・プロセッサは実行すべきループセット数および剰余ループの回数を識別する請求項20に記載のマルチプロセッシング・コンピュータ・システム。
  22. 前記ループセット数がゼロより大きい場合、前記メイン・プロセッサは、ループ・カウンタに前記利用可能な複数のサブプロセッサの個数を設定して、前記サブプロセッサのうちの前記第1のサブプロセッサに前記ループ・カウンタと共に前記1つ以上のサブ命令を逐次的に送信し、所定の命令ループにある全てのサブ命令が前記サブプロセッサのうちの前記第1のサブプロセッサに渡されたら、前記ループセット数をデクリメントする請求項21に記載のマルチプロセッシング・コンピュータ・システム。
  23. 前記ループセット数がゼロに等しく、かつ前記剰余ループの回数がゼロより大きい場合、前記メイン・プロセッサは、ループ・カウンタに前記剰余ループの回数を設定して、前記サブプロセッサのうちの前記第1のサブプロセッサに前記ループ・カウンタと共に前記1つ以上のサブ命令を逐次的に送る請求項21に記載のマルチプロセッシング・コンピュータ・システム。
  24. 前記複数のサブプロセッサのうちの所定のサブプロセッサは、新しいサブ命令を受け取ると前記ループ・カウンタをデクリメントし、前記ループ・カウンタがゼロより大きい場合には、前記所定のサブプロセッサは前記複数のサブプロセッサのうちの次のサブプロセッサに前記ループ・カウンタと共に前記新しいサブ命令を渡し、前記ループ・カウンタがゼロの場合には、前記所定のサブプロセッサは前記サブプロセッサのうちの次のサブプロセッサに前記新しいサブ命令を渡さない請求項1に記載のマルチプロセッシング・コンピュータ・システム。
  25. マルチプロセッシング・コンピュータ・システムであって、
    プログラムの命令ループであって、各々が1つ以上のサブ命令を含む命令ループの処理を管理するように動作可能なメイン・プロセッサと、
    連続した複数のステージにおいて各サブ命令を処理するように動作可能な複数のサブプロセッサと、前記複数のサブプロセッサのうちの少なくとも第1のサブプロセッサは、前記メイン・プロセッサから1つ以上のサブ命令を逐次的に受け取り、前記サブプロセッサのうちの次のサブプロセッサに前記サブ命令を渡すように動作可能であり、前記複数のサブプロセッサのうちの少なくとも第2のサブプロセッサは、前記第1のサブプロセッサから前記1つ以上のサブ命令を逐次的に受け取るように動作可能であり、
    前記メイン・プロセッサから前記サブプロセッサのうちの前記第1のサブプロセッサに前記1つ以上のサブ命令を提供するように動作可能であるカスケーディング・バスと、を備えたマルチプロセッシング・コンピュータ・システム。
  26. 前記カスケーディング・バスは双方向である請求項25に記載のマルチプロセッシング・コンピュータ・システム。
  27. 前記カスケーディング・バスは前記メイン・プロセッサから前記サブプロセッサのうちの前記第1のサブプロセッサにループ・データを提供し、前記ループ・データは1つ以上の命令コード、デコード済みの情報、シェーディング・データ、パラメータおよびループ・カウンタを含む、請求項26に記載のマルチプロセッシング・コンピュータ・システム。
  28. 前記カスケーディング・バスは、前記複数のサブプロセッサのうちの1つ以上のサブプロセッサから前記メイン・プロセッサに1つ以上の状態情報および結果情報を提供する請求項26に記載のマルチプロセッシング・コンピュータ・システム。
  29. 前記メイン・プロセッサにカスケードされている追加プロセッサ・デバイスをさらに備える請求項25に記載のマルチプロセッシング・コンピュータ・システム。
  30. 前記追加プロセッサ・デバイスは追加メイン・プロセッサを有する請求項29に記載のマルチプロセッシング・コンピュータ・システム。
  31. 前記追加メイン・プロセッサは前記複数のサブプロセッサのうちの1つとして作動する請求項30に記載のマルチプロセッシング・コンピュータ・システム。
  32. 前記追加メイン・プロセッサは、モード選択装置メカニズムによって前記複数のサブプロセッサのうちの1つとして動作するように選択される請求項31に記載のマルチプロセッシング・コンピュータ・システム。
  33. マルチプロセッシングを行う方法であって、
    プログラムの命令ループであって、各々が1つ以上のサブ命令を含む命令ループのメイン・プロセッサによる処理を管理するステップと、
    前記メイン・プロセッサから複数のサブプロセッサのうちの1つである第1のサブプロセッサにおいて前記1つ以上のサブ命令を逐次的に受け取るステップと、
    連続した複数のステージにおいて各サブ命令を処理するステップと、
    前記命令ループの一部しか完了していない場合は、前記サブプロセッサのうちの次のサブプロセッサに前記1つ以上のサブ命令を渡すステップと、
    前記サブプロセッサのうちの第2のサブプロセッサにおいて前記1つ以上のサブ命令を逐次的に受け取るステップと、を有する方法。
  34. 連続した複数のステージは命令処理パイプラインである請求項33に記載のマルチプロセッシングを行う方法。
  35. 1つ以上のサイクルの間、前記命令処理パイプラインを逐次的に動作させるステップをさらに有する、請求項34に記載のマルチプロセッシングを行う方法。
  36. 第1のサイクルにおいて第1のサブ命令に対して命令のデコードを実行するステップと、
    第2のサイクルにおいて前記第1のサブ命令に対してアドレス計算を実行するステップと、
    第3のサイクルにおいて前記第1のサブ命令に対して命令の実行を実行するステップと、をさらに有する請求項35に記載のマルチプロセッシングを行う方法。
  37. 第4のサイクルにおいて前記第1のサブ命令に対してライト・バック操作を実行するステップをさらに有する、請求項36に記載のマルチプロセッシングを行う方法。
  38. 所定の命令ループが第1のサブ命令および第2のサブ命令を含む場合に、
    第1のサイクルにおいて前記第1のサブ命令に対して命令のデコードを実行するステップと、
    第2のサイクルにおいて前記第1のサブ命令に対してアドレス計算を実行するステップと、
    前記第2のサイクルにおいて前記第2のサブ命令に対して命令のデコードを実行するステップと、
    第3のサイクルにおいて前記第1のサブ命令に対して命令の実行を実行するステップと、
    前記第3のサイクルにおいて前記第2のサブ命令に対してアドレス計算を実行するステップと、
    第4のサイクルにおいて前記第2のサブ命令に対して命令の実行を実行するステップと、をさらに有する、請求項35に記載のマルチプロセッシングを行う方法
  39. 前記第4のサイクルにおいて前記第1のサブ命令に対してライト・バック操作を実行するステップと、
    第5のサイクルにおいて前記第2のサブ命令に対してライト・バック操作を実行するステップと、をさらに有する請求項38に記載のマルチプロセッシングを行う方法。
  40. 前記1つ以上のサブ命令を逐次的に受け取る前に、前記メイン・プロセッサにおいてイベントを検出するステップと、
    前記第1のサブプロセッサに前記1つ以上のサブ命令を逐次的に出力するステップと、をさらに有する請求項33に記載のマルチプロセッシングを行う方法。
  41. 前記メイン・プロセッサが命令フェッチ・メカニズムを有する場合、前記命令フェッチ・メカニズムを使用して命令メモリ・キャッシュから前記命令ループを取得するステップを有する請求項33に記載のマルチプロセッシングを行う方法。
  42. 利用可能なサブプロセッサの個数を決定するステップと、
    実行すべきループセット数を特定するステップと、
    実行すべき剰余ループの回数を特定するステップと、をさらに有する請求項33に記載のマルチプロセッシングを行う方法。
  43. 前記ループセット数がゼロより大きい場合、
    ループ・カウンタに前記利用可能なサブプロセッサの個数を設定するステップと、
    前記サブプロセッサのうちの次の前記サブプロセッサに前記ループ・カウンタと共に前記1つ以上のサブ命令を渡すステップと、
    所定の命令ループにある全てのサブ命令が前記サブプロセッサのうちの前記第1のサブプロセッサに渡されたら、前記ループセット数をデクリメントするステップと、をさらに有する、請求項42に記載のマルチプロセッシングを行う方法
  44. 前記ループセット数がゼロより大きく、かつ前記剰余ループの回数がゼロより大きい場合、
    ループ・カウンタに前記剰余ループの数を設定するステップと、
    前記サブプロセッサのうちの次の前記サブプロセッサに前記ループ・カウンタと共に前記1つ以上のサブ命令を渡すステップと、をさらに有する、請求項42に記載のマルチプロセッシングを行う方法。
  45. マルチプロセッシングを行う方法であって、
    第1のデバイスにある第1のメイン・プロセッサおよび第2のデバイスにある第2のメイン・プロセッサのうちから稼働中のメイン・プロセッサを選択するステップと、
    プログラムの命令ループであって、各々が1つ以上のサブ命令を含む命令ループの前記稼働中のメイン・プロセッサによる処理を管理するステップと、
    複数のサブプロセッサのうちの1つである第1のサブプロセッサにおいて前記稼働中のメイン・プロセッサから前記1つ以上のサブ命令を逐次的に受け取るステップと、
    連続した複数のステージにおいて各サブ命令を処理するステップと、
    ループ・カウンタがゼロより大きい場合、前記サブプロセッサのうちの次のサブプロセッサに前記1つ以上のサブ命令を渡すステップと、
    前記サブプロセッサのうちの第2のサブプロセッサにおいて前記1つ以上のサブ命令を逐次的に受け取るステップと、を有する方法。
  46. 前記稼働中のメイン・プロセッサの選択はモード選択装置メカニズムを使用して実行される請求項45に記載のマルチプロセッシングを行う方法。
  47. 前記第1のメイン・プロセッサは前記稼働中のメイン・プロセッサとして選択され、前記第2のメイン・プロセッサは前記複数のサブプロセッサのうちの1つとして選択される請求項45に記載のマルチプロセッシングを行う方法。
JP2003577137A 2002-03-13 2002-10-18 コンピュータ命令をマルチプロセッシングによって実行するための方法および装置 Expired - Lifetime JP3977340B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US36387302P 2002-03-13 2002-03-13
US10/202,355 US7162620B2 (en) 2002-03-13 2002-07-24 Methods and apparatus for multi-processing execution of computer instructions
PCT/US2002/033507 WO2003079206A1 (en) 2002-03-13 2002-10-18 Methods and apparatus for multi-processing execution of computer instructions

Publications (2)

Publication Number Publication Date
JP2005520249A JP2005520249A (ja) 2005-07-07
JP3977340B2 true JP3977340B2 (ja) 2007-09-19

Family

ID=28044473

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003577137A Expired - Lifetime JP3977340B2 (ja) 2002-03-13 2002-10-18 コンピュータ命令をマルチプロセッシングによって実行するための方法および装置

Country Status (9)

Country Link
US (1) US7162620B2 (ja)
EP (1) EP1483675B1 (ja)
JP (1) JP3977340B2 (ja)
KR (1) KR100667509B1 (ja)
AT (1) ATE438145T1 (ja)
AU (1) AU2002335102A1 (ja)
DE (1) DE60233168D1 (ja)
ES (1) ES2330318T3 (ja)
WO (1) WO2003079206A1 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6825843B2 (en) * 2002-07-18 2004-11-30 Nvidia Corporation Method and apparatus for loop and branch instructions in a programmable graphics pipeline
US7533382B2 (en) * 2002-10-30 2009-05-12 Stmicroelectronics, Inc. Hyperprocessor
US7218291B2 (en) * 2004-09-13 2007-05-15 Nvidia Corporation Increased scalability in the fragment shading pipeline
KR100806274B1 (ko) * 2005-12-06 2008-02-22 한국전자통신연구원 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법
US20090160863A1 (en) * 2007-12-21 2009-06-25 Michael Frank Unified Processor Architecture For Processing General and Graphics Workload
US8359365B2 (en) 2008-02-11 2013-01-22 Nuix Pty Ltd Systems and methods for load-balancing by secondary processors in parallel document indexing
US9785700B2 (en) 2008-02-11 2017-10-10 Nuix Pty Ltd Systems and methods for load-balancing by secondary processors in parallelized indexing
US9928260B2 (en) 2008-02-11 2018-03-27 Nuix Pty Ltd Systems and methods for scalable delocalized information governance
US8151090B2 (en) * 2009-02-17 2012-04-03 Samsung Electronics Co., Ltd. Sequentially propagating instructions of thread through serially coupled PEs for concurrent processing respective thread on different data and synchronizing upon branch
JP2012252374A (ja) * 2011-05-31 2012-12-20 Renesas Electronics Corp 情報処理装置
US9529599B2 (en) * 2012-02-13 2016-12-27 William Erik Anderson Dynamic propagation with iterative pipeline processing
JP5831316B2 (ja) * 2012-03-19 2015-12-09 富士通株式会社 並列処理装置
US10826930B2 (en) 2014-07-22 2020-11-03 Nuix Pty Ltd Systems and methods for parallelized custom data-processing and search
KR20160054850A (ko) * 2014-11-07 2016-05-17 삼성전자주식회사 다수의 프로세서들을 운용하는 장치 및 방법
US11200249B2 (en) 2015-04-16 2021-12-14 Nuix Limited Systems and methods for data indexing with user-side scripting
CN109690309B (zh) * 2016-09-08 2022-10-25 株式会社岛津制作所 气相色谱仪

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5081575A (en) * 1987-11-06 1992-01-14 Oryx Corporation Highly parallel computer architecture employing crossbar switch with selectable pipeline delay
US5522083A (en) 1989-11-17 1996-05-28 Texas Instruments Incorporated Reconfigurable multi-processor operating in SIMD mode with one processor fetching instructions for use by remaining processors
US5809340A (en) * 1993-04-30 1998-09-15 Packard Bell Nec Adaptively generating timing signals for access to various memory devices based on stored profiles
US5522069A (en) * 1993-04-30 1996-05-28 Zenith Data Systems Corporation Symmetric multiprocessing system with unified environment and distributed system functions
US6219773B1 (en) 1993-10-18 2001-04-17 Via-Cyrix, Inc. System and method of retiring misaligned write operands from a write buffer
US5838987A (en) 1995-10-06 1998-11-17 National Semiconductor Corporation Processor for eliminating external isochronous subsystems
US6088783A (en) 1996-02-16 2000-07-11 Morton; Steven G DPS having a plurality of like processors controlled in parallel by an instruction word, and a control processor also controlled by the instruction word
US5764934A (en) 1996-07-03 1998-06-09 Intel Corporation Processor subsystem for use with a universal computer architecture
EP0950216B1 (en) 1997-10-02 2003-11-26 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
US6101592A (en) 1998-12-18 2000-08-08 Billions Of Operations Per Second, Inc. Methods and apparatus for scalable instruction set architecture with dynamic compact instructions
US6212617B1 (en) 1998-05-13 2001-04-03 Microsoft Corporation Parallel processing method and system using a lazy parallel data type to reduce inter-processor communication
US6269440B1 (en) 1999-02-05 2001-07-31 Agere Systems Guardian Corp. Accelerating vector processing using plural sequencers to process multiple loop iterations simultaneously
JP3946393B2 (ja) 1999-10-19 2007-07-18 株式会社東芝 階層構造をもつ並列計算機

Also Published As

Publication number Publication date
JP2005520249A (ja) 2005-07-07
ES2330318T3 (es) 2009-12-09
KR100667509B1 (ko) 2007-01-10
AU2002335102A1 (en) 2003-09-29
KR20040086462A (ko) 2004-10-08
EP1483675A4 (en) 2007-02-14
ATE438145T1 (de) 2009-08-15
US7162620B2 (en) 2007-01-09
EP1483675B1 (en) 2009-07-29
WO2003079206A1 (en) 2003-09-25
EP1483675A1 (en) 2004-12-08
US20030177343A1 (en) 2003-09-18
DE60233168D1 (de) 2009-09-10

Similar Documents

Publication Publication Date Title
JP3977340B2 (ja) コンピュータ命令をマルチプロセッシングによって実行するための方法および装置
JP3547482B2 (ja) 情報処理装置
US6073215A (en) Data processing system having a data prefetch mechanism and method therefor
US6202130B1 (en) Data processing system for processing vector data and method therefor
JP5512803B2 (ja) ベクトル命令を取り扱うためのデータ処理装置および方法
US6119203A (en) Mechanism for sharing data cache resources between data prefetch operations and normal load/store operations in a data processing system
US5519864A (en) Method and apparatus for scheduling the dispatch of instructions from a reservation station
JP3575617B2 (ja) コンピュータシステム
KR100464406B1 (ko) 가변길이 vliw 명령어를 위한 디스패치 장치 및 방법
US5941983A (en) Out-of-order execution using encoded dependencies between instructions in queues to determine stall values that control issurance of instructions from the queues
JP3881763B2 (ja) データ処理装置
US5809268A (en) Method and system for tracking resource allocation within a processor
US5604878A (en) Method and apparatus for avoiding writeback conflicts between execution units sharing a common writeback path
WO1995016954A1 (fr) Circuit de traitement d&#39;instructions dans un systeme informatique
JPH03129433A (ja) 並列処理装置および並列処理方法
US6058471A (en) Data processing system capable of executing groups of instructions in parallel
US6971000B1 (en) Use of software hint for branch prediction in the absence of hint bit in the branch instruction
JP2010066892A (ja) データプロセッサ及びデータ処理システム
JPH10154073A (ja) データ依存性を管理する装置及び方法
US5930520A (en) Pipelining device in a parallel processing apparatus and an instruction supplying method therefor
US5428811A (en) Interface between a register file which arbitrates between a number of single cycle and multiple cycle functional units
US7543135B2 (en) Processor and method for selectively processing instruction to be read using instruction code already in pipeline or already stored in prefetch buffer
US5737562A (en) CPU pipeline having queuing stage to facilitate branch instructions
JP3490005B2 (ja) 命令制御装置及びその方法
US5745723A (en) Data processing system capable of execution of plural instructions in parallel

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20070619

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070620

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100629

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 3977340

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100629

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110629

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120629

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130629

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term