(57)【特許請求の範囲】
【請求項１】
処理要素のＳＩＭＤ（単一命令複数データ）アレイを備えるデータ処理装置であって、
複数の命令ストリームの各々に対する命令項目を検索する手段と、
前記複数の命令ストリームを結合してシリアル命令ストリームにする手段と、
前記シリアル命令ストリームを処理要素のアレイのデータ処理を制御する処理コントローラまたは前記処理要素へおよび前記処理要素からのデータの転送を制御するデータ転送コントローラのいずれかに配分する手段と、
各々が各命令ストリーム用であり、それぞれの命令ストリームを制御する複数の命令ストリームプロセッサと、
命令ストリーム間の同期を制御するセマフォコントローラと、
前記命令ストリームの各々に関する状態情報を供給する状態ブロックと、
状態情報を受信するように接続され、かつ前記命令ストリームのどれがアクティブであるべきであるかを決定するように作動可能であるスケジューリング手段と、を具備し、
前記処理要素が、複数の処理ブロックに作動可能に分割され、前記処理ブロックがデータ項目のそれぞれのグループを処理するように作動可能である、データ処理装置。
【請求項２】
共通受信命令に従ってそれぞれのデータ項目を処理するように作動可能である処理要素のアレイを備えるデータ処理装置であって、
複数の命令ストリームの各々に対する命令項目を検索する手段と、
前記複数の命令ストリームを結合してシリアル命令ストリームにする手段と、
前記シリアル命令ストリームを処理要素のアレイのデータ処理を制御する処理コントローラまたは前記処理要素へおよび前記処理要素からのデータの転送を制御するデータ転送コントローラのいずれかに配分する手段と、
各々が各命令ストリーム用であり、それぞれの命令ストリームを制御する複数の命令ストリームプロセッサと、
命令ストリーム間の同期を制御するセマフォコントローラと、
前記命令ストリームの各々に関する状態情報を供給する状態ブロックと、
状態情報を受信するように接続され、かつ前記命令ストリームのどれがアクティブであるべきであるかを決定するように作動可能であるスケジューリング手段と、を具備し、
前記処理要素が、少なくとも１つの処理要素を有する複数の処理ブロックに作動可能に分割され、前記処理ブロックがデータ項目のそれぞれのグループを処理するように作動可能である、データ処理装置。
【請求項３】
前記処理ブロックの中の少なくとも１つが、欠陥のある処理ブロックの代わりにデータ項目のグループを処理するように作動可能な冗長ブロックである、請求項１または２記載の装置。
【請求項４】
処理ブロックに生じる欠陥を検出し、かつこの処理ブロックのデータ処理機能を冗長処理ブロックに転送するように作動可能な欠陥検出手段を備える、請求項３記載の装置。
【請求項５】
各処理ブロックには、関連するブロックの欠陥処理要素の代わりにデータ項目を処理するように作動可能な少なくとも１つの冗長処理要素が装備されている、請求項１乃至請求項４のいずれか一項に記載の装置。
【請求項６】
処理ブロックの前記処理要素が、その中の所定数の処理要素を有するグループに配置され、各々のこのようなグループが、前記グループの欠陥処理要素を取り換えるための少なくとも１つのこのような冗長処理要素を含む、請求項５記載の装置。
【請求項７】
処理要素に生じる欠陥を検出し、かつこの処理要素のデータ処理機能を冗長処理要素に転送するように作動可能な欠陥検出手段を備える、請求項５または６記載の装置。
【請求項８】
各処理ブロックが、各処理要素のための数式を評価し、かつそれぞれの評価を前記処理ブロックの前記処理要素に供給するように作動可能である、数式評価器を含む、請求項１乃至請求項７のいずれか一項に記載の装置。
【請求項９】
前記ブロックの各処理要素のための式ａｘ＋ｂｙ＋ｃを評価するように作動可能であり、各処理要素が、特定の（ｘ，ｙ）値を割り当てられ、かつａ、ｂおよびｃが前記数式評価器に供給された係数である、請求項８記載の装置。
【請求項１０】
前記係数ａ、ｂおよびｃが、前記処理ブロックの前記処理要素によって前記数式評価器に供給される、請求項９記載の装置。
【請求項１１】
前記係数ａ、ｂおよびｃが、前記処理ブロックの外部にある供給源によって前記数式評価器に供給される、請求項９記載の装置。
【請求項１２】
前記処理要素によって処理される命令項目およびデータ項目が、互いから別々に前記処理要素に供給される、請求項１乃至請求項１１のいずれか一項に記載の装置。
【請求項１３】
処理ブロックの処理要素によって処理されるデータ項目が、この処理ブロックの処理要素によって供給される、請求項１乃至請求項１２のいずれか一項に記載の装置。
【請求項１４】
各処理要素が、データ項目および命令項目を受信し、受信命令項目に従って作動可能であるプロセッサユニットと、前記プロセッサユニットから受信されたデータ項目を記憶するメモリユニットと、前記プロセッサユニットと前記メモリユニットとの間に配置され、前記プロセッサユニットおよび前記メモリユニットからのデータ項目を記憶するように作動可能であり、これらのユニットの他方に転送し、かつ前記処理要素の前記プロセッサユニットによって処理するためのデータ項目を記憶するように作動可能であるレジスタファイルとを含む、請求項１乃至請求項１３のいずれか一項に記載の装置。
【請求項１５】
データ項目および命令項目を記憶する外部メモリと、
各処理要素と前記外部メモリとの間のデータ項目および命令項目の転送を制御するコントローラ手段とを備え、
前記または各処理要素が、
データ項目および命令項目を受信するように接続され、かつ前記命令項目に従って前記データ項目を処理するように作動可能なプロセッサユニットと、
前記プロセッサユニットに入力するためのデータ項目を一時的に記憶する複数の記憶レジスタであって、前記記憶レジスタの少なくとも１つがオフセット値を記憶するように作動可能である記憶レジスタと、
データ項目と外部メモリアドレスを示すアドレスデータを記憶するメモリユニットと、
データ項目を記憶するレジスタファイルであって、前記レジスタファイルが、前記プロセッサユニットと前記メモリユニットとの間に接続され、これらのユニットの他方に転送するためにこれらのユニットのいずれかからデータ項目を受信し、かつ前記処理要素の外部のメモリにデータ項目を転送し、かつ前記プロセッサユニットによって処理するためのデータ項目を記憶する、レジスタファイルとを備え、
前記コントローラ手段が、オフセット値を前記記憶レジスタから検索し、前記オフセット値を所定の基準アドレスと結合し、計算された内部アドレスを生じさせ、前記内部メモリの前記計算された内部アドレスに記憶された外部アドレスデータを検索し、かつ前記外部アドレスで前記外部メモリにアクセスするように作動可能である、請求項１または２記載のデータ処理装置。
【請求項１６】
前記コントローラ手段が、記憶データまたは命令項目を外部メモリの外部アドレスから検索し、前記検索されたデータまたは命令項目を前記処理要素に転送するように作動可能である、請求項１５記載のデータ処理装置。
【請求項１７】
前記コントローラ手段が、前記処理要素からのデータ項目を前記外部アドレスに記憶するための前記外部メモリに転送するように作動可能である、請求項１５記載のデータ処理装置。
【請求項１８】
各処理要素が、
命令項目に従ってデータ項目を処理するプロセッサユニットと、
前記処理要素がデータ項目を処理するために使用可能であるかどうかを指示するイネーブルレジスタとを備え、
前記イネーブルレジスタが、複数のインディケータを含み、各々が前記処理要素の使用許可状態または使用禁止状態を示すように作動可能であり、前記インディケータ全てが前記使用許可状態を示す場合、前記処理要素がデータ項目の処理のために利用可能である、請求項１乃至請求項１７のいずれか一項に記載のデータ処理装置。
【請求項１９】
前記イネーブルレジスタの各インディケータが、関連される前記処理要素のための条件付処理ステップの状態を示すように作動可能である、請求項１８記載のデータ処理装置。
【請求項２０】
前記イネーブルレジスタがハードウェアレジスタによって備えられる、請求項１８または１９記載のデータ処理装置。
【請求項２１】
各処理要素が、プロセッサユニットと、データ項目をデータ記憶ユニットへおよびデータ記憶ユニットから転送するメモリ入出力ポートと、データ項目を前記プロセッサユニットに転送するデータレジスタのセットとを備え、前記データレジスタのセットの前記レジスタの各々が、データ項目を前記メモリ入出力ポートから受信し、かつデータ項目を前記プロセッサユニットの出力から受信し、かつデータ項目を前記プロセッサユニットの入力に転送するために接続される、請求項１乃至請求項２０のいずれか一項に記載のデータ処理装置。
【請求項２２】
請求項１乃至請求項２１のいずれか一項に記載のデータ処理装置で命令ストリームをスケジュールする方法であって、どの命令ストリームが、時間における特定の瞬間に優先順位を有するかを決定し、かつこの命令ストリームを前記ＳＩＭＤアレイに転送することを備える、方法。
【請求項２３】
処理要素のＳＩＭＤ（単一命令複数データ）アレイを備えるデータ処理装置を使用してデータ項目を処理する方法であって、
複数の命令ストリームの各々に対する命令項目を検索し、
前記複数の命令ストリームを結合してシリアル命令ストリームにし、
前記シリアル命令ストリームを処理要素のアレイのデータ処理を制御する処理コントローラまたは前記処理要素へおよび前記処理要素からのデータの転送を制御するデータ転送コントローラのいずれかに配分し、
各々が各命令ストリーム用であり、それぞれの命令ストリームを制御し、
命令ストリーム間の同期を制御し、
前記命令ストリームの各々に関する状態情報を供給し、
状態情報を受信するように接続され、かつ前記命令ストリームのどれがアクティブであるべきであるかを決定し、
共通命令を前記アレイの前記処理要素の全てに供給し、
各処理要素が前記共通命令に従って異なるデータ項目を処理するようにそれぞれのデータ項目を前記処理要素に供給することを備え、
前記データ項目が、前記命令項目とは無関係に前記処理要素に供給される、方法。
【請求項２４】
前記アレイによって処理されるデータ項目が、前記アレイの前記処理要素の少なくとも１つによって直接供給される、請求項２３記載の方法。
【請求項２５】
前記処理要素が、複数の処理ブロックに作動可能に分割され、各ブロックが所定のグループからデータ項目を処理するように作動可能である、請求項２３記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、並列データ処理装置に関し、特にＳＩＭＤ（単一命令複数データ）処理装置に関する。
【背景技術】
【０００２】  データ処理システムは、ますます、大量のデータを処理することを必要とされている。さらに、このようなシステムのユーザは、データ処理の速度が加速することを要求している。大量データの高速処理に対するニーズの１つの特定の例は、コンピュータグラフィックスの分野にある。コンピュータグラフィックスにおいては、例えば、画面に表示されるオブジェクトや形状のジオメトリ、テキスチャ、および色に関係する大量データが作成される。コンピュータグラフィックスのユーザは、処理されるデータ量を増加し、データが処理されなければならない速度を加速するより真に迫った、より高速なグラフィックディスプレイをますます要求しつつある。【０００３】  コンピュータシステム内で大量のデータを処理するために過去に提案された処理アーキテクチャは、処理要素の単一命令複数データ（ＳＩＭＤ）アレイを使用する。このようなアレイの中では、処理要素の全てが同じ命令ストリームを受け取るが、異なるそれぞれのデータ項目上で動作する。このようなアーキテクチャは、それによって並列でデータを処理することができるが、並列命令ストリームを作成する必要はない。これは、並列処理機械から優れた性能を得る効率的、かつ相対的に簡略な方法である。
【発明が解決しようとする課題】
【０００４】  しかしながら、ＳＩＭＤアーキテクチャは、システムが多数の相対的に小さいデータ項目グループを処理しなければならないときには非効率となる場合がある。例えば、三角形などの小さいグラフィックプリミティブ用のグラフィック表示画面に関係するデータを処理するＳＩＭＤアレイの場合、アレイの相対的に少ない処理要素だけが、プリミティブに関係するデータを処理するためにイネーブルされるだろう。この場合では、大きな割合の処理要素は、データがある特定のグループに処理されている間、未使用のまま残ってよい。
【０００５】  したがって、この問題を克服する、あるいは緩和することができるシステムを作成することが望ましい。
【課題を解決するための手段】
【０００６】  本発明のある態様に従って、処理要素のＳＩＭＤ（単一命令複数データ）アレイを備えるデータ処理装置が備えられ、処理要素は、複数の処理ブロックに作動可能に分割され、処理ブロックはデータ項目のそれぞれのグループを処理するように作動可能である。
【０００７】  本発明の別の態様に従って、共通した受信された命令に従ってそれぞれのデータ項目を処理するように作動可能な処理要素のアレイを備えるデータ処理装置が提供され、処理要素は、少なくとも１つの処理要素を有する複数の処理ブロックに分割され、該処理ブロックはデータ項目のそれぞれのグループを処理するように作動可能である。
【０００８】  本発明の多様な追加の態様とは、添付クレームによって例証される。
【発明を実施するための形態】
【０００９】  以下に記述されるデータ処理システムは、画面での表示のためにグラフィック画像を作成するためのグラフィックデータ処理システムである。しかしながら、この実施形態は純粋に例示的であり、グラフィックデータを処理するためにここに記述されている技法およびアーキテクチャは、ビデオデータなどのその他のデータ型に等しく適用可能である。このシステムは、言うまでもなく、その他の信号および／またはデータ処理技法およびシステムにも適用可能である。
【００１０】  システムの概要が示され、システムの多様な機能上のユニットの簡略な説明が続くだろう。それから、グラフィック処理方法が例によって説明され、後に機能ユニットの詳細な説明が続く。
【００１１】  概要
図１は、グラフィックデータ処理システム３を示すシステムレベルのブロック図である。システム３は、インタフェース２を介して、パーソナルコンピュータまたはワークステーションなどのホストシステム（図示せず）と接続する。このようなシステムは、制御目的のために従属（ｅｍｂｅｄｄｅｄ）プロセッサユニット（ＥＰＵ）を具備することができる。例えば、特定のグラフィックスシステム３は、グラフィックプロセッサの全体的な機能を制御するため、およびホストシステムと接続するための従属処理ユニット（ＥＰＵ）８を含む。システムは、ビデオ出カインタフェース１４を介して表示画面に出力するためにグラフィックデータを処理する処理コア１０を含む。ローカルメモリ１２が、グラフィックスシステム３のために提供される。
【００１２】  このようなデータ処理は、動作のためにホストシステムに接続できるか、あるいは特定のホストシステムを必要とせず、スタンドアロン処理システムを提供することができる。このような用途の例は、デジタルテレビ信号およびデジタルインターネット信号を受信し、復号するための「セットトップボックス」を含む。
【００１３】  図２、図３、および図４は、詳細にグラフィック処理システムを示す。ある特定の例では、グラフィックスシステムは、高度グラフィックポート（ＡＧＰ）またはＰＣＩインタフェース２を介してホストシステムに接続する。ＰＣＩインタフェースおよびＡＧＩ２は周知である。
【００１４】  ホストシステムは、例えば、ＰＣ９９仕様パーソナルコンピュータ、またはワークステーションなどの任意の型のコンピュータシステムであってよい。
【００１５】  ＡＧＰ２は、グラフィックスシステムからホストシステムメモリへ高帯域幅パスを提供する。これが、通常は、グラフィックスシステムと関連付けられたローカルメモリより大きいホストシステムメモリ内に大きなテクスチャデータベースを保持できるようにする。ＡＧＰは、また、グラフィックスシステム上の線形アドレス空間とホストシステムメモリ内の数多くの潜在的に散乱したメモリブロックの間でメモリを写像するための機構も提供する。この機構は、周知であるように、グラフィックスアドレス再写像テーブル（ＧＡＲＴ）によって実行される。
【００１６】  後述されるグラフィックスシステムは、好ましくは、図１に示されている機能の全てを提供する単一集積回路として実現される。しかしながら、システムが、複数の異なる構成要素を載せる別個の回路カード、またはホストのマザーボードの上に備えられる別個のチップセットとして提供されるか、あるいはホスト中央演算処理ユニット（ＣＰＵ）と、あるいはこれらの実現またはそれ以外の実現の任意の適切な組み合わせで統合することができることが容易に明らかとなるだろう。
【００１７】  グラフィックスシステムは、専用のバスシステムを経由するデータの転送のために互いに接続されている、複数の機能上のユニットを含む。該バスシステムは、好ましくは１次バス４および２次バス６を含む。１次バスは、待ち時間非許容（ｉｎｔｏｌｅｒａｎｔ）ユニットの接続のために使用され、２次バスは待ち時間許容ユニットの接続のために使用される。バスアーキテクチャは、好ましくは、出願人の同時係続英国特許出願、特にＧＢ第９８２０４３０．８号に詳細に説明される通りである。任意の数の１次バスおよび２次バスが、システム内のバスアーキテクチャの中に提供できることが容易に理解されるだろう。図２に示されている特定のシステムは、２つの２次バスを含む。
【００１８】  おもに図２および図３を参照すると、１次バス４へのアクセスは、１次アービタ４１によって制御され、２次バス６へのアクセスは、1対の２次アービタ６１によって制御される。好ましくは、全てのデータ転送は、それぞれ３２バイトのパケット単位である。２次バス６は、それぞれのインタフェースユニット（ＳＩＰ）６２によって１次バス４と接続される。
【００１９】  補助制御バス７は、制御信号をシステム内の多様なユニットに通信できるようにするために具備される。
【００２０】  ＡＧＰ／ＰＣＩインタフェースは、２次バス６を経由してグラフィックスシステムに接続される。このインタフェースは、示されている例では、２次バスの任意の選択に、両方の２次バス６に接続することができる。グラフィックスシステムは、グラフィックスシステムの動作を制御するため、およびホストシステムと通信するために使用される従属処理ユニット（ＥＰＵ）８も含む。ホストシステムは、ＡＧＰ／ＰＣＩ２内のダイレクトホストアクセスインタフェース９を介してＥＰＵ８への直接的なアクセスを有する。ＥＰＵは、バスインタフェースユニット（ＥＰＵ  ＦＢＩ）９０を介して１次バス４に接続される。
【００２１】  ローカルメモリシステム１２もまた、１次バスに接続されている。ローカルメモリシステム１２は、ローカルメモリ自体と通信するために使用される多くの、この例では４つのメモリインタフェースユニット１２１を含む。ローカルメモリは、グラフィックスシステムが使用するための多様な情報を記憶するために使用される。
【００２２】  システムは、表示画面（図示せず）にグラフィックスシステムを接続するために必要とされるハードウェア、およびビデオデータを含んでもよいデータ交換のためのその他のユニットを備える、ビデオインタフェースユニット１４も含む。ビデオインタフェースユニットは、バスインタフェースユニット（ＦＢＩ）を介して２次バス６に接続される。
【００２３】  システムのグラフィック処理機能は、処理コア１０によって提供される。該コア１０は、データの転送のために２次バス６に、および命令の転送のために１次バス４に接続される。以下にさらに詳細に説明されるように、２次バス接続はコアバスインタフェース（コアＦＢＩ）１０７およびビンナー（ｂｉｎｎｅｒ）バスインタフェース（Ｂｉｎｎｅｒ  ＦＢＩ）１１１によって行われ、１次バス接続は、スレッドマネージャバスインタフェース（スレッドマネージャＦＢＩ）１０３によって行われる。
【００２４】  以下にさに詳細に説明されるように、処理コア１０は、多くの制御ユニット、スレッドマネージャ１０２、アレイコントローラ１０４、チャネルコントローラ１０８、ブロックごとのビニング（binning）ユニット１０６９、およびマイクロコード記憶ユニット１０５を含む。これらの制御ユニットは、グラフィック処理自体を実行する多くの処理ブロック１０６の動作を制御する。
【００２５】  図３に示される例の中では、処理コア１０には８つの処理ブロック１０６が備えられる。任意の数の処理ブロックが、このアーキテクチャを使用してグラフィックスシステムで提供できることが容易に理解されるだろう。
【００２６】  処理コア
図５は、処理コアをさらに詳細に示す。スレッドマネージャ１０２は、ＥＰＵ８から制御信号を受信するために接続される。制御信号は、いつ命令がフェッチされるべきか、および命令がどこで見つけられるべきかに関して、スレッドマネージャに知らせる。スレッドマネージャ１０２は、これらの命令をアレイコントローラ１０４に、およびチャネルコントローラ１０８に提供するために接続される。アレイコントローラおよびチャネルコントローラ１０４と１０８は、受信された命令に依存する処理ブロック１０６に制御信号を転送するために接続される。
【００２７】  各処理ブロック１０６は、プロセッサ要素（ＰＥ）のアレイ１０６１および数式評価器（ＭＥＥ）１０６２を備える。さらに詳細に以下に記述されるように、ＭＥＥ係数フィードバックのためのパス１０６４が、入出力チャネル１０６７でのように、ＰＥメモリから提供される。それぞれの処理ブロックは、ビニングユニット１０６９、ユニット１０６８およびチャネルコントローラ１０８からの命令を受けて入出力チャネルへ、および入出力チャネルからのデータ転送を制御するための転送エンジン１０６９を含む。
【００２８】  プロセッサ要素のアレイ１０６１は、単一命令複数データ（ＳＩＭＤ）処理構造を提供する。アレイ１０６１内の各ＰＥには、関係する該ＰＥに特殊なデータを処理するために使用される、同じ命令が供給される。
【００２９】  各処理要素（ＰＥ）１０６１は、アレイコントローラから受信される命令を実行するためのプロセッサユニット１０６１ａ、プロセッサユニット１０６１ａが使用するためのデータを記憶するためのＰＥメモリユニット１０６１ｃ、およびデータがそれを通してプロセッサユニット１０６１ａとＰＥメモリユニット１０６１ｃの間で転送されるＰＥレジスタファイル１０６１ｂを含む。ＰＥレジスタファイル１０６１ｂはまた、プロセッサユニット１０６１ａによって処理されているデータを一時的に記憶するためにもプロセッサユニット１０６１ａによって使用される。
【００３０】  多数のプロセッサ要素を提供すると、シリコンユニット内の素子の製造用の大きなダイサイズが生じることがある。したがって、素子に対する欠陥領域の影響を削減することが望ましい。したがって、システムは、好ましくは、あるダイ領域に欠陥があると、別の領域をその代わりに使用することができるように冗長なＰＥが備える。
【００３１】  特に、データを処理するために使用される処理要素のグループのために、追加の冗長処理要素を製造することができる。ある特定の例では、処理要素は、３２ＰＥの「パネル」で提供される。パネルごとに冗長なＰＥが提供され、その結果パネルのＰＥの中の１つにおける欠陥は、データの処理のために冗長なＰＥを使用することによって克服することができる。これは、さらに詳細に以下に記述されるだろう。
【００３２】  スレッドマネージャ
処理要素のアレイは、命令ストリームで一連の命令を実行するために制御される。処理ブロック１０６用のこのような命令ストリームは「スレッド」として知られている。各スレッドは、１つまたは複数のタスクを実行するために協調して動作する。用語「マルチスレッド」は、単一のタスクを実行するために複数のスレッドを使用することを指すが、用語「マルチタスキング」が、複数のタスクを同時に実行するための複数のスレッドを使用することを指す。これらの命令ストリームまたはスレッドを管理するのがスレッドマネージャ１０２である。
【００３３】  このようなデータ処理アーキテクチャで複数のスレッドを提供する複数の理由がある。処理要素アレイは、現在のアクティブスレッドが停止するときに別のスレッドを処理することによって、アクティブに保つことができる。スレッドは、必要に応じて任意のタスクに割り当てることができる。例えば、データをメモリへ、およびメモリから転送するためのデータＩ／Ｏ動作を処理するために複数のスレッドを割り当てることによって、これらの動作は、処理動作とＩ／Ｏ動作を重複してさらに効率よく実行することができる。メモリＩ／Ｏ動作の待ち時間は、さまざまなスレッドの使用によってシステムから効果的にマスクすることができる。
【００３４】  加えて、システムは外部イベントに対しさらに高速な応答時間を有し得る。異なる外部イベントで待機するために特定のスレッドを割り当て、その結果イベントが発生すると、それは即座に処理できる。
【００３５】  スレッドマネージャ１０２は、図６にさらに詳細に示され、スレッドごとにフェッチされた命令を記憶するためのキャッシュメモリユニット１０２４を備える。キャッシュユニット１０２４は、スレッドごとに１つづつ、一連の先入れ先出し（ＦＩＦＯ）バッファによって置換できる。スレッドマネージャは、命令フェッチユニット１０２３、スレッドスケジューラ１０２５、スレッドプロセッサ１０２６、セマフォコントローラ１０２８およびステータスブロック１０３０も含む。
【００３６】  スレッド用の命令は、ローカルメモリまたはＥＰＵ８からフェッチユニット１０２３によってフェッチされ、接続論理回路を介してキャッシュメモリ１０２４に供給される。
【００３７】  スレッドは、互いを基準にして優先順位を割り当てられる。言うまでもなく、ここに記述されている例は、８つのスレッドを有しているが、任意の数のスレッドがこのようにして制御できる。任意の特定のある瞬間に、各スレッドは、数多くのタスクの任意の１つに割り当てられてよい。例えば、スレッドゼロは、通受のシステム制御に割り当てられてよく、スレッド１は２Ｄ（２次元）活動を実行するために割り当てられ、スレッド２から７は（頂点、プリミティブまたはラスタリングの計算などの）３Ｄ活動を実行するために割り当てられる。
【００３８】  図６に示されている例では、スレッドマネージャは、スレッドごとに１つのスレッドプロセッサ１０２６を含む。スレッドプロセッサ１０２６は、同時にアクティブなプログラムスレッドの処理を維持するためにスレッドマネージャからのコア命令の発行を制御し、その結果、処理ブロック１６の各々は、可能な限り多くの時間、アクティブとなることができる。この特定の例では、同じ命令ストリームが、システム内の処理ブロックの全てに供給される。
【００３９】  スレッドの数がスレッドプロセッサの数を超え、その結果各スレッドプロセッサは、複数のスレッドの制御を処理する。しかしながら、スレッドプロセッサをスレッドごとに提供すると、アクティブスレッドを変更するとき、コンテキスト切替えの必要性が削減され、それによりメモリアクセスを削減し、したがって動作の速度を加速する。
【００４０】  セマフォコントローラ１０２８は、他の１つとスレッドを同期させるために動作する。
【００４１】  スレッドマネージャ１０２内では、ステータスブロック１０３０は、スレッドの各ステータス情報１０３６を受け取る。ステータス情報は、ステータスブロック１０３０によってスレッドスケジューラ１０２５に転送される。ステータス情報は、どのスレッドが任意の一時点でアクティブであるべきかを判断するためにスレッドスケジューラ１０２５によって使用される。
【００４２】  スレッドマネージャ１０２によって発行されるコア命令１０３２は、アレイコントローラ１０４およびチャネルコントローラ１０８に送信される（図５）。
【００４３】  アレイコントローラ
アレイコントローラ１０４は、処理ブロック１０６の動作を命令し、図７にさらに詳細に示される。
【００４４】  アレイコントローラ１０４は、スレッドマネージャから命令を受け取るために接続されている命令ランチャ（ｌａｕｎｃｈｅｒ）１０４１を備える。命令ランチャ１０４１は、さらに特殊な命令情報を命令ランチャに提供する、命令テーブル１０４２に索引を付ける。
【００４５】  追加命令情報に基づき、命令ランチャは、命令情報をＰＥ命令シーケンサ１０４４またはロード／記憶コントローラ１０４５のどちらかに命令する。ＰＥ命令シーケンサは、データ処理に関係する命令情報を受け取り、ロード／記憶コントローラは、データ転送動作に関係する情報を受け取る。
【００４６】  ＰＥ命令シーケンサ１０４４は、ＰＥマイクロコード命令を処理アレイ内のＰＥに転送するための、ＰＥマイクロコード記憶ユニット１０５に索引を付けるために受け取られた命令情報を使用する。
【００４７】  アレイコントローラは、特定のアクティブ命令によってＰＥレジスタの使用に関する情報を記憶するために使用されるスコアボードユニット１０４６も含む。スコアボードユニット１０４６は、ＰＥ命令シーケンサ１０４４およびロード／記憶コントローラ１０４５それぞれによって伝送される命令によるレジスタの使用に関する情報を提供できるように機能上分割される。
【００４８】  一般的な言葉では、ＰＥ命令シーケンサ１０４４は、プロセッサユニット１０６１ａ内のデータ処理を含む命令を処理する。ロード／記憶コントローラ１０４５は、他方、プロセッサユニット１０６１ａおよびＰＥメモリユニット１０６１ｃのレジスタ間でのデータ転送を含む命令を処理する。ロード／記憶コントローラ１０４５を、さらに詳細に後述する。
【００４９】  命令ランチャ１０４１およびスコアボードユニット１０４６は、ＰＥ命令シーケンサ１０４４とロード／記憶コントローラ１０４５の間で並列動作を達成する一方で、連続命令実行の出現を維持する。
【００５０】  スレッドマネージャ１０２から発行される残りのコア命令１０３２は、チャネルコントローラ１０８に送られる。これが、ＰＥメモリユニットと外部メモリ（ＡＧＰまたはＰＣＩ空間でのローカルメモリまたはシステムメモリのどちらか）間のデータ転送を制御する。
【００５１】  チャネルコントローラ
チャネルコントローラ１０８は、アレイコントローラ１０４による命令の実行に関して非同期で動作する。これが、計算および外部Ｉ／Ｏを同時に実行し、可能な限り重複できるようにする。計算（ＰＥ）動作は、さらに詳細に以下に説明されるように、スレッドマネージャのセマフォによってＩ／Ｏ動作と同期される。
【００５２】  チャネルコントローラ１０８は、それぞれの処理ブロック１０６と関連付けられているビニングユニット１０６８も制御する。これは、チャネルコントローラ命令によって達成される。
【００５３】  図８は、チャネルコントローラの動作の中心部にあり、以下にさらに詳細に記述されるチャネルコントローラの命令発行ステート機械を示す。
【００５４】  各ビニングユニット１０６９（図５）は、その関連付けられた処理ブロック１０６のＩ／Ｏチャネルに接続される。データは、一般的には、領域に基づいた処理のために正しい順序でホストシステムによって提供されないため、ビニングユニット１０６９の目的とは、領域ごとにプリミティブデータを並べ替えることである。
【００５５】  ビニングユニット１０６８は、処理要素から並べ替えプロセスを削除し、それによりデータ処理のためにＰＥを解放する、ハードウェアで実現された領域分類システム（図９に図示されている）を提供する。
【００５６】  メモリアクセス統合
単一のメモリ、またはその他のアドレス指定されたデバイスへのアクセスを要求する大多数の要素を有するコンピュータシステムにおいては、記憶ユニットへのアクセスは要素ごとに連続して実行される場合に処理速度のかなりの減速がある場合がある。
【００５７】  前述されたグラフィックスシステムは、このようなシステムの一例である。大多数のプロセッサ要素があり、その各システムのローカルメモリ内のデータへのアクセスを必要とする。メモリアクセスを必要とする要素の数が、任意のある時点に行うことができるメモリアクセス数を超えるため、ローカルメモリおよびシステムメモリに対するアクセスは、連続した動作を含む。このようにして、要素ごとのメモリアクセスの実行は、個々に、処理ブロックの動作の速度の劣化を引き起こすだろう。
【００５８】  この問題のシステムの処理速度に対する影響を削減するために、図１、図２、図３、および図４のシステムは、メモリアクセス統合機能を含む。
【００５９】  メモリアクセス統合は、図１５と図１６に関しても後述される。しかしながら、一般的には、メモリに対するアクセスを必要とする処理要素は、これが、表示フラグまたはマークビットを設定することにより当てはまることを示す。それから、第１のこのようにマークされたＰＥ、およびそれがアクセスを必要とするメモリアドレスが処理ブロックの処理要素の全てに伝送される。アドレスは、対応するトランザクションＩＤとともに伝送される。アクセスを必要とする（つまり、表示フラグセットを有する）それらの処理要素は、伝送されたアドレスを、それらがアクセスを必要とするアドレスと比較し、比較が同じアドレスにアクセスしなければならないことを示す場合には、それらの処理要素はそのメモリアクセスのためのトランザクションＩＤを登録し、表示フラグをクリアする。
【００６０】  トランザクションＩＤが処理ブロックに戻されると、処理要素は、データを回復するために、記憶されたトランザクションＩＤを入信トランザクションＩＤと比較する。
【００６１】  単にアクセスされたアドレス情報を記憶する代わりにトランザクションＩＤを使用すると、複数のメモリアクセスを搬送し、それから任意の順序で戻すことができる。このようなデータを回復する「ファイアアンドフォーゲット（ｆｉｒｅ  ａｎｄ  ｆｏｒｇｅｔ）」方法は、プロセッサが処理ステップを続行する前にデータが戻るのを待機しなくてもよいため、プロセッサ時間を自由にすることができる。さらに、トランザクションＩＤを使用すると、データ回復トランザクションを特定するために処理要素によって記憶されなければならない情報量も削減される。アドレス情報は、通常、トランザクションＩＤ情報より大きなサイズである。
【００６２】  好ましくは、各メモリアドレスが、ＰＥがアクセスを必要とするより多くのデータを記憶することができる。このようにして、複数のＰＥは、それらが同じデータへのアクセスを必要としなくても、同じメモリアドレスへのアクセスを必要とすることがある。この機構が、階層統合技法を提供することによって、さらにシステムによって必要とされるメモリアクセス数を削減することができる。例えば、各メモリアドレスは、データの４つのクワタ詰めバイトを記憶してよく、それぞれのＰＥが、任意の１回のアクセス時に１つのクワタ詰めバイトを必要とする。
【００６３】  この技法は、同じメモリアドレスの異なる部分に対する書込みアクセスを必要とするそれらのＰＥのためのメモリ書込みアクセス統合も可能にすることができる。
【００６４】  このようにして、システムは、処理ブロックに必要とされるメモリブロック数を削減し、したがって処理ブロックの動作速度を加速することができる。
【００６５】  表示フラグは、データをメモリに書き込むための別の技法でも使用できる。このような技法では、メモリ信号に書き込まれるデータを有するＰＥを設定することによるこの事実。データは、基本アドレスで開始し、順番にそれらのＰＥのそれぞれのメモリアドレスに書き込まれ、メモリ内に所定のスペーシングで階段状に並べられる。例えば、ステップサイズが１に設定される場合には、連続アドレスが、フラグ付きのＰＥからのデータとともに書き込まれる。
【００６６】  処理ブロック
処理ブロック１０６の１つは、図１０にさらに詳細に示される。処理ブロック１０６は、それぞれのデータ項目で並列に動作するが、同じ命令（ＳＩＭＤ）を実行するように配列されているプロセッサ要素１０６１のアレイを含む。各プロセッサ要素１０６１は、プロセッサユニット１０６１ａ、ＰＥレジスタファイル１０６１ｂ、およびＰＥメモリユニット１０６１ｃを含む。ＰＥメモリユニット１０６３ｃは、プロセッサユニット１０６１ａによる処理のためのデータ項目を記憶するために使用される。各プロセッサユニット１０６１ａは、ＰＥレジスタファイル１０６１ｂを介して、そのＰＥメモリユニット１０６１ｃに、およびそのＰＥメモリユニット１０６１ｃからデータを転送できる。プロセッサユニット１０６１ａは、処理中のデータを記憶するためにＰＥレジスタファイル１０６１ｂも使用する。プロセッサユニット１０６１ａとメモリユニット１０６１ｃ間でのデータ項目の転送は、アレイコントローラ１０４によって制御される。
【００６７】  処理要素の各々に、数式評価器（ＭＥＥ）１０６２から入力されるデータが提供される。ＭＥＥは、ＰＥの各々に関して数式を評価するために動作する。数式は、関係する特定のデータ処理用途に応じて、１次式、双１次式、３次式、２次式、またはさらに複雑な式である場合がある。
【００６８】  数式評価器の１つの特定の例が、１次式評価器（ＬＥＥ）である。ＬＥＥは、以下の双１次式
ａｘｉ＋ｂｙｊ＋ｃ
を、ｘｉとｙｊの値の範囲に関して評価するための既知の装置である。
【００６９】  ＬＥＥは、米国特許番号第４，５９０，４６５号に詳細に記述されている。ＬＥＥは、双１次式を評価するための係数値ａ、ｂ、およびｃを供給され、ｘ１とｙ１の異なる値に対応する出力の範囲を作成する。各処理要素１０６１は、ある特定の（ｘ１、ｙ１）組を表し、ＬＥＥはプロセッサ要素ごとに双１次式の特定の値を生じる。
【００７０】  例えば、双１次式は、表示されなければならない三角形の１つの辺の境界となる線を画定する。それから、１次式評価器は、プロセッサ要素に対し、プロセッサ要素がそのためにデータを処理しているピクセルが線上にあるのか、関係する線の一方の側にあるのか、それとも他方の側にあるのかどうかを示すために値を生じる。それから、グラフィックデータの追加の処理が続行できる。
【００７１】  数式評価器１０６２には、フィードバックバッファ（ＦＢＢ）１０６８から、または処理ブロックの外部にあるソースから係数が与えられる（イメデェート（immediates）として知られている）。該フィードバックバッファ１０６８は、ＰＥレジスタファイル１０６１ｂから、またはＰＥメモリユニット１０６１ｃから係数を供給される。
【００７２】  バス構造１０６４は、ＦＢＢ１０６８にプロセッサ要素（レジスタファイルまたはメモリユニット）からデータを転送するために使用される。各ＰＥは、それが係数データをＭＥＥに供給する必要があるかどうかを判断するために制御される。
【００７３】  一例では、（一度に）１つのＰＥだけがフィードバックバッファＦＢＢ１０６８にデータを転送するために（イネーブルされる）。ＦＢＢは、ＭＥＥ１０６２に送られるデータを待ち行列に入れる。別の例では、複数のＰＥが同時にＦＢＢにデータを転送することができるため、データの転送の処理は、ＭＥＥフィードバックバス構造１０６４に依存するだろう。例えば、バスは、複数のデータが書き込まれる場合に、データの論理積がＭＥＥ１０６２に供給されるように、集約論理和となれるだろう。
【００７４】  ＭＥＥオペランドフィードバックパスは、該ａ係数およびｂ係数をゼロに設定し、ｃ係数として通信されるデータを供給することによって、あるプロセッサ要素から関係するブロック内の他の全てにデータを通信するために効果的に使用することができる。それから、ＭＥＥ結果の全ては、係数ｃに等しくなり、このようにして他のプロセッサ要素にデータを転送するだろう。
【００７５】  本システムにおいては、処理ブロック１０６は、互いから別個に式評価器のための演算符号（命令）およびオペランド（データ項目）を与えられる。過去には、命令およびデータは、単一命令ストリームで与えられた。特にオペランドがアレイ自体の中で作成されるときに、処理速度の減速を生じることのあるこのストリームは、処理中に作成されなければならない。
【００７６】  しかしながら、本システムでは、演算符号がオペランドから分離されるため、演算符号ｓおよびオペランドは、さまざまなソースによって作成することができ、オペランドがＭＥＥ１０６２によって実行されなければならないときにだけ結合される。
【００７７】  グラフィックデータ処理
図１１は、図１から図１０のシステムを使用するグラフィックデータ処理方法での簡略化されたステップを示す。ホストシステムは、グラフィックスシステムによって処理され、表示されるプリミティブグラフィック画像の頂点に関するデータを作成する。それから、データは、頂点データのブロックとして、あるいはそれはホストシステムによってグラフィックスシステムに対して作成されるため、頂点ごとにどちらかで転送される。
【００７８】  データは、各ＰＥが１つの頂点のためのデータを含むように、グラフィックスシステムのＰＥの中にロードされる。それから、各ＰＥは、線の最後、または三角形のような２次元形状の一部となるプリミティブの頂点を表す。
【００７９】  それから、受信されたデータは、ホストシステム基準空間から必要とされる画面空間へそれを変換するために処理される。例えば、３次元ジオメトリ、ビュー、照明および陰影その他は、選ばれるビューポイントに応じてデータを生じさせるために実行される。
【００８０】  それから、各ＰＥは、それが線、三角形またはさらに複雑な多角形であるならば、各ＰＥがグラフィックプリミティブに相当する頂点データの少なくとも１つの集合を有するように、その頂点データをその隣接するＰＥにコピーする。それから、データはＰＥに基づいてプリミティブの上に編成される。
【００８１】  それから、プリミティブデータは、それを領域ごとに並べ替えることができるために、ＰＥからローカルメモリに出力される。これは、さらに詳細に後述されるように、図５のビニングユニット１０６９によって実行される。ビニングユニット１０６９は、データが、通常は、領域ベースの処理のための正しい順序でホストシステムによって提供されないため、領域ごとにプリミティブデータを並べ替える。
【００８２】  ビニングユニット１０６８は、処理要素から並べ替えプロセスを削除し、それによってデータ処理のためにＰＥを解放するハードウェアで実現される領域並べ替えシステムを提供する。
【００８３】  プリミティブデータは全てローカルメモリに書き込まれ、各プリミティブは１つのエントリを有する。ある特定のプリミティブに対するデータが書き込まれると、その範囲が領域の定義と比較される。各領域内で発生するプリミティブに関する情報は、ローカルメモリに記憶される。プリミティブの少なくとも一部がその中で発生する領域ごとに、参照は、プリミティブデータが記憶されるローカルメモリの一部に記憶される。このようにして、プリミティブデータの各集合は、一度記憶されればよい。
【００８４】  プリミティブ情報がいったんローカルメモリ内に記憶されると、それは個々のＰＥに読み戻される。しかしながら、この段階で、ある処理ブロック内のＰＥの全てが、単一の領域内で発生するそれぞれのプリミティブに関するデータを含む。この点から、指定された処理ブロックが、表示の単一領域に関連付けられたデータの上で動作する。
【００８５】  それから、各ＰＥは、代わりに、ピクセルデータ内への処理のためにＭＥＥにそのプリミティブに関するそのデータを転送する。例えば、ＰＥは、三角形プリミティブの１つの辺を構成する線を画定するＭＥＥに係数データを供給するだろう。それから、ＭＥＥは係数に基づいてピクセル値の全てを評価し、ピクセルが線の上に出現するのか、線の下に出現するのか、あるいは線上に出現するのかを示すピクセルごとの結果を生じる。三角形の場合、これは３回実行され、その結果、ピクセルが三角形内で発生するのか、それともその外側で発生するのかが判断できる。それから、各ＰＥは、それぞれのピクセルに付いてのデータも含む（つまり、データはＰＥ単位でピクセルに記憶される）。
【００８６】  いったん各ピクセルが、関係する三角形（プリミティブ）の外側、あるいは内側にあると判断されると、プリミティブのための処理は、プリミティブの内側に発生するそれらのピクセル上だけで実行することができる。処理ブロック内のＰＥの残りは、そのプリミティブが処理されるまで、処理にさらに加わらない。
【００８７】  前述された機能ユニットの詳細な説明
スレッドマネージャ
図６に関して前述されたように、スレッドごとにフェッチされた命令を記憶するためのキャッシュメモリユニット１０２４を備える、スレッドマネージャ１０２に関する詳細な説明がここで示される。キャッシュユニット１０２４は、スレッドごとに１つづつ、一連の先入れ先出し（ＦＩＦＯ）バッファによって置換できる。また、スレッドマネージャは、命令フェッチユニット１０２３、スレッドスケジューラ１０２５、スレッドプロセッサ１０２６、セマフォコントローラ１０２８、およびステータスブロック１０３０も含む。
【００８８】  スレッドのための命令は、ローカル外部メモリ１０３から、またはフェッチユニット１０２３によってＥＰＵ８からフェッチされ、接続論理を介してキャッシュメモリ１０２４に供給される。
【００８９】  指定されたときに、１つのスレッドだけが実行中であり、スレッド間で多重化する時間のスケジューリングは、プログラム実行の動的な条件によって決定される。このスケジューリングは、スレッドマネージャ１０２内でスレッドスケジューラによって実行され、それが、各プロセッサブロック１０６が可能な限り多くビジーで保たれることを確実にする。あるスレッドから別のスレッドへの切替えは、状態保存復元オーバヘッドを必要とする。したがって、スレッドの優先順位は、スレッド切替え数を削減し、それによって関連付けられたオーバヘッドを削減するために使用される。
【００９０】  コアスレッドマネージャ１０２によって発行されるコア命令は、２つの制御ユニット、アレイコントローラ１０４、またはチャネルコントローラ１０８の内の１つに送信される。
【００９１】  どのスレッドがアクティブとなる必要があるのかの決定
スレッドスケジューラは、実行時、以下のスケジューリングトリガの１つが発生すると必ず、どのスレッドがアクティブとならなければならないのかを計算し直す。
【００９２】  現在アクティブなスレッドより高い優先順位が設定されるスレッドは準備完了であるか、あるいは
スレッドは（準備完了ではなく）、影響を受けやすい（ＹＩＥＬＤＩＮＧ）。
【００９３】  スレッドスケジューラは、それぞれのスレッドが、それが準備完了なのか、あるいは影響を受けやすいのかのステータスをスレッドスケジューラに報告し直し、スケジューラステータスレジスタとして知られているレジスタ内で調べられるため、これを決定することができる。
【００９４】  前記を決定する際には、スレッドは、それが
−命令キャッシュ失敗で待機中でない限り
−ゼロセマフォで待機中でない限り
−ビジー実行ユニットで待機中でない限り、あるいは
−ＨＡＬＴ（停止）命令で待機中でない限り、
つねに準備完了であると見なされる。
【００９５】  スレッドが、例えばそれがメモリアクセスを必要とするために、動作を停止すると、それは「譲歩する（ｙｉｅｌｄｉｎｇ）」または「譲歩しない（ｎｏｔ  ｙｉｅｌｄｉｎｇ）」である場合がある。スレッドが譲歩する場合には、別のスレッドが準備完了しているならば、その他のスレッドがアクティブになることができる。スレッドが影響を受けやすくない場合には、その他のスレッドは、準備完了であるとしても、アクティブになるのを妨げられる。スレッドは、例えば、そのスレッドがただ動作中に短い休止を必要とする場合には譲歩しない。この技法が、特に高い優先順位のスレッドが単に瞬間的に休止するときに、アクティブスレッド間で不必要にスワップする必要性を回避する。
【００９６】  スケジューリングトリガが前述されたように発生する場合、スケジューラは有効となり、以下を実行する。第１に、それはアクティブスレッドが実行するのを停止し、あらゆるセマフォ減分が伝搬するのを待機する。
【００９７】  過去にアクティブなスレッドが譲歩する場合、スケジューラは最高の優先順位の準備完了スレッド、あるいは（これが別の即座のスケジューリングトリガを引き起こすため）スレッドが準備完了していない場合には最低の優先順位スレッドを活性化する。
【００９８】  過去にアクティブだったスレッドが譲歩しない場合、スケジューラは、過去にアクティブだったスレッドより高い優先順位を有する準備完了である最高の優先順位のスレッドを活性化する。このようなスレッドがない場合には、スケジューラは、過去にアクティブだったスレッドを再活性化する（それは、そのスレッドが準備完了になっていない場合、別のスケジューリングトリガを引き起こすだろう）。
【００９９】  スレッドスケジューラは、ＥＰＵインタフェースを通してディスエーブルすることが出きる。スケジューラがディスエーブルされると、ＥＰＵはスレッドの活性化を制御することができる。例えば、ＥＰＵはアクティブスレッドを起動、停止し、アクティブスレッドポインタを特定のスレッドに設定し、アクティブスレッドを単一で進むことができるだろう。
【０１００】  スレッドマネージャ１０２は、スレッドマネージャ命令またはセマフォ命令を復号するだけである。加えて、各スレッドは、図１２に図示されているように、専用のスレッドプロセッサ１０２６を有する。該スレッドプロセッサ１０２６は、その動作の理解を助けるために複数の部分に分けることができる。
【０１０１】  各スレッドプロセッサは、バイト論理演算ユニット５４０、述語論理演算ユニット５５０、分岐ユニット５２０、命令キャッシュ５３０、命令アセンブリ５１０、およびイネーブルユニット５００を備える。
【０１０２】  スレッドプロセッサ１０２６の目的は、（ループおよび条件付き分岐などの）スレッドのために実行される高水準フロー制御を可能にし、アレイコントローラ１０４およびチャネルコントローラ１０８に対して発行される命令をアセンブルすることである。
【０１０３】  イネーブルユニット５００は、前記の本文に概略されるように、スレッドが準備完了しているかどうかを決定するために使用される。
【０１０４】  命令キャッシュ５３０は、分岐ユニット５２０からの命令のためにアドレスを受け取り、それらをキャッシュ５３０１からフェッチする。起動中、ＥＰＵは、分岐ユニット内でプログラムカウンタをプログラムすることができる。キャッシュ５３０１が命令を含まない場合、キャッシュ失敗が信号で知らされ、ローカルメモリからの命令フェッチが起動される。失敗がない場合には、命令は、命令レジスタ５３０２にラッチされる。
【０１０５】  分岐加算器５２０は、次の命令のアドレスを制御する。イベントの通常の過程では、それは、最後のアドレスを増分し、このようにして連続してメモリ内の命令の中を進む。しかしながら、分岐が要求されると、それはカレントアドレスにオフセット（正または負）を追加することによって、あるいはメモリ内の絶対アドレスでカレントアドレスを置換することによって新しいアドレスを計算する。スレッドプロセッサが停止されると、ＰＣ０レジスタ５２０１は、ＰＣ１レジスタ５２０２は、すでに変更されているため、要求された前回のアドレスを提供する。
【０１０６】  バイト論理演算ユニット５４０は、スレッドプロセッサ１０２内に含まれる１６ビットレジスタで数学演算を実行するための機構を提供する。プログラマは、スレッドプロセッサ汎用レジスタ５４０２で論理演算を加算、減算、および実行するために、スレッドマネージャ命令を使用することができ、それによりループを書き込むことができるようにする。情報は、バイト論理演算ユニット５４０および命令アセンブラ５１０を使用することによって、汎用レジスタからアレイコントローラ１０４に渡すこともできる。
【０１０７】  述語論理演算ユニット５５０は、１６個の１ビット述語レジスタ５５０１を含む。これらは、真または偽の条件を表す。これらの述語のいくつかは、前回のバイト論理演算ユニット演算の繰上げ、オーバフロー、負、最上位ビットのステータスを示す。残りの述語は、（ループ終了のための）分岐に条件を設けるために使用され、アレイ内の「全イネーブルレジスタオフ」（ＡＥＯ）を示すアレイコントローラ１０４からステータス情報を受け取ることができる。
【０１０８】  命令アセンブラ５１０は、チャネルコントローラ１０８およびアレイコントローラ１０４などの多様なコントローラのための命令を組み立てる。大部分の命令は、修正されず、単にそれぞれの制御ユニットに渡されるだけである。しかしながら、時々、多様な命令でのフィールドは、汎用レジスタのコンテンツで置換されることがある。命令アセンブラ５１０は、関連コントローラに命令を渡す前に、これを実行する。命令アセンブラ５１０は、スレッドマネージャ１０２内のイネーブルユニット５００、およびスケジューラに送信される譲歩ステータス、待機ステータス、および制御信号ステータスも計算する。
【０１０９】  セマフォコントローラ
スレッドの同期および他のリソースへのアクセスの制御は、セマフォコントローラ１０２８によって提供される。
【０１１０】  セマフォは、共通リソースへのアクセスを制御することによって、スレッド間の同期を達成するために使用される。リソースがスレッドによって使用中である場合には、対応するセマフォは、これを他のスレッドに示し、その結果リソースはその他のスレッドには使用できなくなる。セマフォは、関係するリソースへのアクセスを待ち行列に入れるために使用できる。
【０１１１】  ある特定の例では、セマフォコントローラ１０２８は、セマフォがどのリソースに関係するのかに依存して４つのグループに分割される合計８０個のセマフォを使用する。
【０１１２】  セマフォカウントおよびオーバフロー
セマフォは、８ビットの符号なしカウントを有する。しかしながら、ｍｓｂ（ビット７）は、オーバフロービットとして使用され、このようにして絶対に設定されてはならない。任意のセマフォのビット７が設定されると必ず、スレッドマネージャステータスレジスタ内のセマフォオーバフローフラグがセットされる。対応する割込みイネーブルが設定されると、ＥＰＵは割り込まれる。セマフォオーバフローフラグは、ＥＰＵによってクリアされるまで設定されたままとなる。
【０１１３】  セマフォ動作
以下の動作は、セマフォごとに提供される。
【０１１４】  事前設定：スレッドは、セマフォ値を事前設定することができる。スレッドは、セマフォに未決の信号がないことが知られているときにだけ、事前設定命令を発行しなければならない。
【０１１５】  待機：スレッドは、待機命令を発行することによってセマフォで待機動作を実行できる。セマフォがゼロ以外である場合、セマフォは減分される。それがゼロである場合、スレッドは休止され、待機命令を発行するのを待機する。
【０１１６】  信号：セマフォは増分される。この動作はスレッド、ＰＥシーケンサ、ロード／記憶ユニット、またはチャネルコントローラによって実行できる。しかしながら、一般的には、セマフォは、後述されるように、これらの内の１つによって信号で知らせることができる。
【０１１７】  ＥＰＵ８は、任意の時点でスレッドセマフォカウントを読書きすることができる。一般的には、コアは、ＥＰＵがその他のセマフォ値にアクセスすると、命令を実行していてはならない。
【０１１８】  セマフォグループ
セマフォは、それらが、どの実行ユニットによって信号で知らされるのかに応じて４つのグループに分けられる。
▲１▼グループｉｄ
▲２▼グループ内のセマフォ数
▲３▼セマフォグループ名
▲４▼グループ内のセマフォが知らされる信号
において、
▲１▼０  ▲２▼３２  ▲３▼スレッド      ▲４▼スレッドとＥＰＵ
▲１▼１  ▲２▼１６  ▲３▼チャネル      ▲４▼チャネルコントローラ
▲１▼２  ▲２▼１６  ▲３▼ロード／記憶  ▲４▼ロード／記憶ユニット
▲１▼３  ▲２▼１６  ▲３▼ＰＥ          ▲４▼ＰＥシーケンサ
である。
ＥＰＵは、コアが凍結されると、全てのセマフォ値を読書きできる。加えて、ＥＰＵは、以下に示すように、任意のときにスレッドセマフォを事前設定、増分および減分することができる。
増分：ＥＰＵは、その増分レジスタを書き込むことによってセマフォを原子的に増分できる（原子動作とは、周知であるように、他の動作によって割り込むことができない動作である）。
減分：ＥＰＵは、その減分レジスタを読み取ることによってセマフォを原子的に減分できる。セマフォが、減分の前にゼロ以外である場合、読み取りは真に戻る。それ以外の場合、読み取りは偽に戻り、セマフォはゼロで残される。
【０１１９】  各スレッドセマフォは、別個にイネーブルされたゼロ以外の割込みを有する。この割込みがイネーブルされると、セマフォは、ゼロ以外のときにＥＰＵに割り込む。ＥＰＵは、典型的には、セマフォ減分から偽を受け取った後に、この割込みをイネーブルするだろう。割込みを受け取ると、減分を再び試みることが好ましい。
【０１２０】  アレイコントローラ
ここで、図７に示されるように、アレイコントローラ１０４に関する詳細な説明が示される。アレイコントローラ１０４は、処理ブロック１０６の動作を命令する。アレイコントローラ１０４は、スレッドマネージャから命令を受け取るために接続されている命令ランチャ１０４１を備える。命令ランチャ１０４１は、追加の特定の命令情報を命令ランチャに提供する命令テーブル１０４２に索引を付ける。
【０１２１】  追加命令情報に基づいて、命令ランチャは、命令情報を、ＰＥ命令シーケンサ１０４４またはロード／記憶コントローラ１０４５のどちらかに向ける。ＰＥ命令シーケンサは、データ処理に関する命令情報を受け取り、ロード／記憶コントローラは、データ転送動作に関する情報を受け取る。
【０１２２】  ＰＥ命令シーケンサ１０４４は、ＰＥマイクロコード命令を処理アレイに転送するための、ＰＥマイクロコード記憶ユニット１０５に索引を付けるために受け取った命令情報を使用する。
【０１２３】  アレイコントローラは、特定のアクティブな命令によるＰＥレジスタの使用に関する情報を記憶するために使用されるスコアボードユニット１０４６も含む。スコアボードユニット１０４６は、それぞれＰＥ命令シーケンサ１０４４およびロード／記憶ユニット制御装置１０４５によって、伝送される命令によってレジスタの使用に関する情報を与えるために機能上分割される。
【０１２４】  命令ランチャ１０４１およびスコアボードユニット１０４６は、ＰＥ命令シーケンサ１０４４とロード／記憶コントローラ１０４５の間の並列動作を達成する一方で、シリアル命令実行の出現を維持する。
【０１２５】  スレッドマネージャ１０２から発行される残りのコア命令１０３２は、チャネルコントローラ１０８に送られる。これが、ＰＥメモリユニットと外部メモリ（ＡＧＰまたはＰＣ空間内のローカルメモリまたはシステムメモリのどちらか）の間でのデータの転送を制御する。
【０１２６】  連続命令実行の出現を維持するために、ＰＥ命令シーケンサまたはロード／記憶コントローラは、その命令が、過去に起動され、依然として実行中の命令によって、それぞれロード／記憶コントローラおよびＰＥ命令シーケンサからロックされるＰＥレジスタにアクセスするときに、命令の実行を機能停止にする。この機構は、命令の起動は遅延しない。命令の実行は、ロックが命令実行中に遭遇されるときだけ機能停止にされる。
【０１２７】  機能停止を引き起こすＰＥレジスタアクセスは以下の通りである。
【０１２８】  ロックされたレジスタへのアクセス
（ロード／記憶のためのイネーブルとして使用される）イネーブルスタックへの書込み
（ロード／記憶のための索引が付けられたアドレスとして使用される）Ｐレジスタへの書込み（図６）
（ＭＥＥフィードバック用のイネーブルとして使用される）Ｖレジスタへの書込み（図６）
命令ランチヤ１０４１は、命令がアクセスするのがどのレジスタかを決定し、命令が起動されるとこれらのレジスタをロックする。命令が完了すると、レジスタはアンロックされる。ロード／記憶命令にとって、アクセスされたレジスタを決定することは率直である。これは、アクセスされたレジスタが命令で直接的に符号化されるためである。ＰＥ命令の場合、タスクは、アクセスされたレジスタの集合がマイクロコードに依存するため、さらに複雑である。この問題は、命令によってアクセスされる４つのオペランドのバイト長さを示す、命令テーブル１０４２をアドレス指定するためにＰＥ命令の９つのビットを使用することによって解決される。
【０１２９】  命令テーブル１０４２は、命令がイネーブルスタックを修正するのか、Ｐレジスタを修正するのか、またはＶレジスタを修正するのかも決定する。さらに、それは、命令のためのマイクロコード開始アドレスも含む。
【０１３０】  ＰＥ命令が起動されると、命令テーブル１０４２は、アクセスされたレジスタの集合を決定するためにアクセスされる。これらのレジスタは、スコアボード１０４６内で、その命令によってロックされているとしてマーキングされる。命令が完了すると、レジスタはアンロックされる。ロード／記憶命令は、それらが、ＰＥ命令シーケンサ１０４４によってロックされるレジスタにアクセスする、またはレジスタを使用すると機能停止にされる。
【０１３１】  ロード／記憶命令が起動されると、その命令によってロードまたは記憶される全てのレジスタファイルレジスタ（Ｒ３１−Ｒ０）がロックされる。レジスタは、命令が完了するとアンロックされる。ＰＥ命令は、それらがロード／記憶コントローラによってロックされるレジスタにアクセスすると機能停止される。
【０１３２】  Ｐレジスタへの書込みは、以下の通りにロード／記憶ユニットの実行を機能停止する（Ｖレジスタおよびイネーブルスタックは類似している）。ＰＥ命令が起動されると、それは、命令テーブルルックアップが、命令がＰレジスタを修正することを示す場合にＰレジスタをロックする。Ｐレジスタは、命令が完了するまでロックされたままである。ロード／記憶命令は、ロード／記憶命令の間接ビットがセットされる場合、Ｐレジスタがロックされる間、機能停止する。ロード／記憶命令は、ロード／記憶命令がフィードバックバッファを書き込む場合に、Ｖレジスタがロックされる間、機能停止する。ロード／記憶命令は、ロード／記憶命令の条件ビットがセットされる場合、イネーブルスタックがロックされる間、機能停止する。
【０１３３】  前述されたように、命令テーブル１０４２は、奥行きが５１２ワードで、幅が６４ビットの小さいメモリ（ＲＡＭ）であってよい。テーブルは、命令開始アドレスおよび型を決定するためにＰＥ命令の命令インデックスフィールドによってアドレス指定される。テーブルは、アドレスロード命令およびデータ付帯演算ロード命令で書き込まれ、ＥＰＵバス上でＩアドレスおよびＩデータレジスタを介して読み取られる。
【０１３４】  ロード／記憶コントローラ
ロード／記憶コントローラ１０４５の詳細な説明がここに示される。
【０１３５】  ある特定の例では、ＰＥメモリサイクルは、名目上、ＰＥクロック速度の４分の１であるが、ＰＥクロック速度の６分の１などの任意の所望の速度に連動することができる。メモリは、幅１２８ビット（１ページ）であり、ＰＥレジスタファイルに対するクワタ詰めバイト（３２ビット）幅のインタフェースを有する。このレジスタファイルインタフェースは、メモリサイクル速度の４倍で動作するため、レジスタファイルインタフェースは完全なメモリ速度で実行する。
【０１３６】  ロード／記憶コントローラ命令は、それらが命令ランチヤ１０４１によって、またはリフレッシュまたはＩ／Ｏのためにスチールされるサイクルによって機能停止しない限り、１メモリサイクル（名目上４ＰＥサイクル）で実行する。
【０１３７】  各ロード／記憶命令は、単一メモリページの一部または全てを転送する。単一ロード／記憶命令は複数のページにアクセスする。
【０１３８】  ロード／記憶ユニット制御装置によって実行されるメモリ動作
ロード／記憶コントローラ１０４５は、ＰＥメモリ１０６３上で以下の動作を実行する。
【０１３９】  ＰＥメモリ１０６３からＰＥレジスタファイルへロードし、記憶する。
【０１４０】  ＰＥメモリ１０６３からＭＥＥフィードバックバッファへ読み取る。
【０１４１】  ＰＥメモリからＰＥメモリにコピーする。
【０１４２】  ＰＥメモリリフレッシュ
Ｉ／Ｏチャネル転送
ＰＥメモリからＰＥレジスタファイルへのロードおよび記憶
ロード命令および記憶命令は、単一メモリページとレジスタファイルの４つのクワタ詰めバイトの間で示されるバイト数を、以下の通りに転送する。
【０１４３】  メモリアクセスは、示されたメモリバイトアドレスで（アドレス操作を適用後、以下を参照）開始し、示されたバイト数の間進行し、ページの最後（バイト１５）からページの最初（バイト０）まで送り込む。
【０１４４】  レジスタファイルアクセスは、レジスタファイルの４つのクワタ詰めバイトに制約される。アクセスは示されたレジスタで開始し、４つのクワタ詰めバイトを通って進んでから、アクセスされた第１のクワタ詰めバイトのバイト０に送り込む。
【０１４５】  いったん転送が起動されると、それは１メモリサイクル内で実行する。
【０１４６】  ＰＥメモリからＬＥＥフィードバックバッファへの読み取り
メモリページの全てまたは一部は、ＭＥＥフィードバックバッファにコピーされてよい。ページアドレスは、メモリベースレジスタ機構（以下を参照）で修正できる。ページの各クワタ詰めバイトは、ＭＥＥフィードバックバッファのＡ部分、Ｂ部分、またはＣ部分の任意のサブセットにコピーすることができ、フィードバックバッファプッシュは、それぞれのクワタ詰めバイトの後に使用できる。
【０１４７】  サイクル優先順位
メモリリフレッシュは、他の全てのメモリ動作に対して優先順位を有する。ロード／記憶対Ｉ／Ｏチャネルの優先順位は、ステータスレジスタビットで選択される。
【０１４８】  リフレッシュ
ＰＥメモリは動的であり、リフレッシュされなければならない。これは、全てのページがリフレッシュ期間のたびに読み取られることを保証することによって、ソフトウェア内で達成されてよい。しかしながら、好ましい方法は、アーキテクチャ内でのハードウェアリフレッシュを含むことである。
【０１４９】  アドレス操作
ロード／記憶コントローラ１０４５によって使用されているメモリアドレスは、以下の２つの機構のどちらか、または両方で操作する命ことができる。
【０１５０】  メモリベースレジスタ（ＭＢＲ）
メモリベースレジスタは、命令の中のあるビットにより条件が設けられる、適切な命令によって指定されるページアドレスにオプションで追加される。
【０１５１】  各スレッドは、アレイコントローラの中に自身のＭＢＲを有する。スレッドは、自らのＭＢＲに付帯演算命令をロードする。ＭＢＲは、ＥＰＵバス上で読み取ることができる。
【０１５２】  アドレス索引付け
命令の索引ビットが設定されると、命令のメモリのクワタ詰めバイトアドレスの低い５つのビットが、ＰＥごとに、ＰＥのＰレジスタの低い５つのビットと論理和される。
【０１５３】  チャネルコントローラ
チャネルコントローラ１０８に関する詳細な説明を以下に続ける。前述されたように、チャネルコントローラは、外部メモリとＰＥメモリの間でデータの転送を制御する。各処理ブロック１０６では、転送エンジンが、ブロックＩ／Ｏレジスタとバスアーキテクチャ間で、直接メモリアクセスＤＭＡ転送を実行する。チャネル命令に応じて、データ転送はビニングユニット１０６９を通過するか、あるいは直接的に外部メモリへ／外部メモリから移動する。
【０１５４】  チャネルコントローラ１０８は、３つの根本的な部分に分割される命令セットの上で動作する。
【０１５５】  外部メモリからＰＥメモリにデータを転送する読み取り命令
ＰＥメモリから外部メモリにデータを転送する書込み命令
チャネルおよびビニングユニット内でレジスタ値を操作する付帯演算命令
スレッドマネージャ１０２からの命令は、低優先順位、高優先順位およびビンナー命令に押し込まれる。各ＦＩＦＯが、スレッドマネージャ１０２に送信される自身の「完全」表示を有し、その結果、完全命令ＦＩＦＯでブロックされたスレッドは、別のスレッドが、いっぱいではない命令ＦＩＦＯの中に命令を押し込むのを妨げないだろう。
【０１５６】  図８は、チャネルコントローラ１０８の動作を制御する命令ステート機械を示す。
【０１５７】  全ての命令は、アイドル状態１０８１から起動される。最高優先順位準備完了命令が起動され、そこでは命令の迅速さは、事前に設定された規則に従って決定される。
【０１５８】  チャネル命令には３つの優先順位がある。アドレス指定ストライド（Ｓｔｒｉｄｅｄ）命令は、高優先順位または低優先順位として指定できる。ビニング命令は、つねに非常に高い優先順位として処理される。低い方の優先順位命令は、高い方の優先順位命令によって割り込まれ、あるいは先取りされてよい。転送命令が先取りされると、ＰＥページレジスタのコンテンツは、それらが出現したＰＥメモリページに返される。それから、それらは、高い方の優先順位命令が完了したそれ以降のときに再起動することができる。
【０１５９】  アドレス指定された命令とは、ＰＥメモリと、あらゆるＰＥが、それが読み取るまたは書き込むことを希望するデータの外部メモリアドレスを指定する外部メモリの間でのデータ転送である。
【０１６０】  データ転送は、統合プロセスの管理下にあり、その結果、例えば、それぞれが32バイトパケットアドレスの異なるバイトに書き込む４つのＰＥが、32バイトの単一メモリアクセスを生じ、その任意の部分集合は、外部メモリに書き込まれる有効なデータを含んでよい。また、同じパケットアドレスからデータを読み取ることを希望する任意の数のＰＥは、外部メモリへの単一アクセスの中にそのアクセスを統合させる。
【０１６１】  書込みアドレス指定命令においては、各ＰＥが、それが書き込まれなければならない外部メモリアドレスとともに８バイトのデータ、およびバイトイネーブルとして役立つ８ビットを供給する。同じパケットアドレスにデータを書き込むことを希望する任意の数のＰＥは、そのアクセスを外部メモリへの単一アクセスに統合させる。
【０１６２】  読み取りアドレス指定命令においては、各ＰＥは、それが読み取ることを希望するデータのアドレスを供給し、１６バイトのデータ（メモリパケットの２分の１）がＰＥに送達して戻される。
【０１６３】  「ストライド（Ｓｔｒｉｄｅｄ）」メモリアクセスとは、ＰＥメモリと、各ＰＥデータの外部メモリアドレスが転送エンジンによって生成される外部メモリの間でのデータ転送である。アドレスは、所定のステップサイズでベースレジスタから一命令つつ実行され、その結果選択されたＰＥは、間隔をあけて配置された外部メモリアドレスへ送信または外部メモリアドレスから受信する。例えば、ステップサイズが１に設定される場合には、選択されたＰＥは連続メモリアドレスにアクセスする。これは、ＰＥが、アドレス情報のためにそのいくらかを使用する代わりに、その全てのＩ／Ｏページレジスタデータを使用できるという点で「アドレス指定」転送に優る優位点を有する。転送のためのベースアドレスは、チャネルコントローラ命令とともに指定、またはＥＰＵによって書き込むことができる。
【０１６４】  書込みストライド（Ｓｔｒｉｄｅｄ）命令の場合、それぞれのＰＥが１６バイトのデータを出力する。２つのＰＥからのデータが、１つの３２バイトのデータパケットに組み込まれ、転送エンジンによって生成される外部メモリアドレスに書き込まれる。その結果、パケットは、増分するアドレスに書き込まれる。オプションでは、命令の中で、それぞれのＰＥのデータが書き込まれた外部アドレスは、ＰＥ  Ｉ／Ｏページレジスタに戻すことができる。
【０１６５】  潜在的な読み取りストライド命令の場合、各ＰＥは、その結果として、転送エンジンの制御下で一命令つつ実行されたアドレスから１６バイトのデータを受信する。
【０１６６】  ビニング命令は、ＰＥメモリと、データが、ブロックＩ／Ｏバスと外部メモリへのシステムバス間の各コアブロックのビニングユニットを通って流れる外部メモリの間のデータ転送に関する。ビニングユニットは、特殊命令で設定される数多くの制御レジスタを備える。それは、外部メモリに書き込まれる、または外部メモリから読み出される全てのデータの外部メモリアドレスを生成する。それは、それらが該当する領域の中へのビニングプリミティブのサポート用、および外部メモリに保持される複数のビンリスト（BINリスト）をマージするための論理回路を含む。それは、また、外部メモリ内のビンリストの管理も実行する。
【０１６７】  ＰＥとビニングユニット間のデータフローは、ＦＩＦＯ内でバッファに入れられる。
ＢＩＮＮＩＮＧ機能
前述されたように、各処理ブロック１０６は、ブロックＩ／Ｏバスとシステムバス６の間で取り付けられている、関連付けられたビニングユニット１０６９を有する。ビニングユニットは、外部メモリ内のビンリストのプリミティブポインタの読み取りおよび書込みに対する特殊なサポートを提供する。
【０１６８】  ビニングプロセスは、大部分のホストシステムの要件のためにジオメトリフェーズとラスタ化フェーズの間でプリミティブ命令を維持しなければならない。両方のフェーズともブロック並列であるため、任意のブロックとビンのいずれかの間、および任意のビンと任意のブロックの間でデータを転送するための機構がある必要がある。これは、ジオメトリデータを処理している処理ブロック１０６ごとに１つ、領域ごとに複数のビンリストを作成することによって実現される。これにより、ジオメトリ出力フェーズがブロック並列モードで進行できるようになる。それから、ラスタフェーズ中に、各領域は、ただ１つの処理ブロック１０６によって処理され、その領域のためのメモリ内の複数のビンリストのマージ並べ替えが実行される。
【０１６９】  ビニングユニット１０６９は、ポインタを扱うだけである。プリミティブデータ自体は、通常のチャネル書込み動作を使用してメモリに書き込むことができる。それは、ビンナーハードウェアがいったん各ＰＥにプリミティブポインタを提供すると、通常のチャネル読み取り動作を使用して読み取ることもできる。
【０１７０】  どのくらい多くのプリミティブが各ビンに書き込まれるのかに関するレコードが保たれ、その結果、領域はブロック並列ラスタ化のために類似したサイズのグループに並べ替えることができる。加えて、プリミティブ「属性」フラグは領域ごとに記録される。これは、領域内のあらゆるプリミティブの数多くの画定されたフラグのビット単位の「論理和」を調べることによって、ラスタ化および領域ごとの陰影コードの最適化を可能にする。このようにして、類似した処理を必要とする領域は、処理時間の縮小を生じる並列処理のために分類することができる。
【０１７１】  ＰＥアレイ１０６１がプリミティブのためのバウンディングボックスを計算した後に、ビンナーハードウェアがＰＥアレイ１０６１からｂｉｎｉｔｉｚａｔｉｏｎプロセスをオフロードし、それを純粋なＩ／Ｏ動作に変換する。これにより、それを、ジオメトリデータの処理の次のバッチなどの追加のデータ処理と重複できるようになる。
【０１７２】  書込み−ジオメトリパスの最後でプリミティブポインタを書き込むと、ＰＥはポインタ、フラグ、およびチャネル上のプリミティブのためのバウンディングボックス情報を出力する。ビニングユニット１０６９は、ポインタを、そのプリミティブのためのバウンディングボックスに含まれるあらゆる領域のビンリストに付加する。それは、その領域のためのプリミティブカウントおよび属性フラグも更新する。ビンナーは、その処理ブロック１０６専用のビンリストを維持する責任があり、ビンリストの状態は複数のジオメトリパス全体で保存される。
【０１７３】  読み取り−ビニングユニット１０６９は、ある特定の領域のために、要求するＰＥごとに１つ、命令されたプリミティブポインタを処理ブロック１０６に供給する。それはその領域の複数のビンリストを横断し、マージ並べ替えは、元のプリミティブ命令を復元するためである。ビンリスト状態は、複数のラスタ化パス全体で保存される。
【０１７４】  ビニングメモリ組織
ビンリストは、リストデータをメモリに出力することによって、外部メモリ内で作成される。ビンリストは、メモリ内のビンのコンテンツの場所を示す。このようなリスト構造の保守は、ポインタアレイの形を取る追加の記憶ユニットを必要とする。ビンナーハードウェアは、メモリ内のこれらの構造に直接的にアクセスする。
【０１７５】  ビニングハードウェア
ビニングハードウェアは、図９に詳細に示されており、ＰＥアレイ１０６１が、プリミティブポインタを外部メモリに対して読書きできるようにするために必要とされるｂｉｎｎｉｔｉｚａｔｉｏｎプロセスに関係する計算を処理する責任を負う。
【０１７６】  命令デコーダ１１０１は、チャネルコントローラ１０８から命令を受け取り、ステート機械をトリガして動作させる。ステート機械１１０２は、プリミティブポインタを外部メモリから読み取る、または外部メモリに書き込むなどのある特定の機能を実行するためにビニングユニットの他の部分を配列する論理回路である。ステート機械１１０２は、複数の通信中のステート機械として実現されてよい。ビニングユニットの他の全ての部分への制御信号は、図示しない。
【０１７７】  ｂｉｎｎｉｔｉｚａｔｉｏｎ機能は、現在のビニングコンテキスト、つまり外部メモリ内のビンリストの場所、次にラスタ化する領域、動作モード等を定める内蔵レジスタ１１０３の集合に従ってビニングユニットによって実行される。この「状態」レジスタ１１０３の集合は、チャネルコントローラ１０８、ブロックＩ／Ｏバス、およびＥＰＵ８に複数移植（ｍｕｌｔｉｐｌｅ  ｐｏｒｔｅｄ）される（つまり、同時に使用できる数多くのポートを有している）。
【０１７８】  ブロックＩ／Ｏバスとビニングユニット１０６９自体の間には、ビニングユニット１０６９の一部と見なされるデータバッファＦＩＦＯ１１０４がある。データバッファ１１０４の目的とは、ＰＥ  Ｉ／Ｏページレジスタとビニングユニット１０６９の間で流れるデータをバッファに入れ、ビニングユニット１０６９の不確定のタイミングを円滑にすることである。データは、バッファの奥行きに依存するサイズのバーストで、ビニングユニット１０６９に／へ転送される。ビニングユニット１０６９は、このバッファの状態をブロック制御論理の残りに提示し、全てのビニングユニットバッファ１１０４のステータスを見ることによって、チャネルコントローラ１０８は、効率的にビニングユニット１０６８に対するデータ転送バーストを予定することができる。
【０１７９】  各ブロックのビニングユニット１０６９は、ＥＰＵ８への専用のレジスタセットインタフェース１１０５を有する。ＥＰＵ８は、インタフェース１１０５を介して、ビニングユニット１０６９タスクの次に示すセットを実行する。
【０１８０】  初期化
ビンリストメモリの割当て
コンテキスト切替え時のビニング状態の保存および復元
ビニングユニット１０６９がＢｉｎｎｅｒ書込み命令を実行しているとき、それはビンリストの作成のために割り当てられる未知の量のメモリを必要とする。それは、このメモリにＥＰＵ８から一度に一部分を要求し、それを必要としているどのビンリストにもそれを割り当てる。ビンナーユニット１０６８は、３２バイトの小さなチャンク（部分）をビンリストに割り当てるが、これは、それがこのレベルで割り当てられなければならないのであれば、不寛容にＥＰＵをロードするだろう。代わりに、ＥＰＵは、それが適切であると決定するどのようなサイズ（例えば、６４ｋＢｙｔｅｓであるが、３２バイトの任意の便利な倍数）であれデータの大きな部分を提供し、ビンナーユニット１０６８はこれを、チャンク発生器１１０６を使用して個々のチャンクに分割する。ＥＰＵからの大量のデータの転送は、ＥＰＵにとってさらに効率的であり、ビニングユニット１０６９の少量のデータの処理は、ビニングユニット１０６９にとってより効率的である。
【０１８１】  ポインタ書込み中、ＰＥからのプリミティブデータは、レジスタセット１１０７の中に入れられ、必要に応じてデータ論理回路１１１２に渡される。
【０１８２】  Ｙステッパ１１０８は、ｙ軸領域座標を、ｂｉｎｉｔｉｚａｔｉｏｎプロセスの一部としてポインタ書込み中にプリミティブバウンディングボックス全体で一命令ずつ実行するために使用される。それは、等式比較器付きのカウンタとレジスタの組を備える。
【０１８３】  Ｘステッパ１１０９は、Ｘ軸領域座標を、ｂｉｎｉｔｉｚａｔｉｏｎプロセスの一部としてポインタ書込み中にプリミティブバウンディングボックス全体で一命令ずつ実行するために使用される。
【０１８４】  それは、等式比較器付きのカウンタとレジスタの対も備える。しかしながら、Ｘステッパは、Ｙステッパ１１０８の値のたびに値の同じシーケンスも実行しなければならないため、カウンタは、初期値を記憶する余分なレジスタからロードおよび再ロードされる。
【０１８５】  ポインタ読み取りプロセス中に領域のブロックビンリストをマージするために、専用のハードウェアセクション１１１０が提供される。プリミティブがビニングプロセスを通して命令できるように、バッチｉｄコードがビンリストに追加される。ホストはジオメトリが正しい順序で戻されることを必要とするため、バッチｉｄコードはジオメトリ順序付けに関係する。ステート機械１１０２の制御下で、ブロックカウンタ１１１７に補助され、ビニングユニット１０６９は、どのビンリストが最低のバッチＩＤを有するのかを評価し、そのリストからのポインタ読み取りを命令する。
【０１８６】  追加バッチＩＤがそのリスト内で遭遇されると、あるいはＮＵＬＬ終止プログラムが遭遇されると、ブロック選択は評価し直される。ブロックカウンタ１１１７は、それが（ビンリスト選択ユニット１１１０に関連して）処理する次のビンリストを評価しているときに、ステート機械１１０２にループカウンタを提供する。
【０１８７】  データ論理回路ユニット１１１２は、ビニングユニット１０６９のデータ処理ブロックである。それは、ポインタを増分し、属性フラグをマージし、データキャッシュ１１１５を介した外部メモリへの書込みのために異なるデータ型をフォーマットすることができる。
【０１８８】  領域番号ユニット１１１６は、Ｘ／Ｙステッパ１１０８／１１０９から出力されたＸ領域座標およびＹ領域座標から線形領域番号を計算する。この数は、データ論理ユニット１１１２および状態レジスタ１１０３の出力とともに、ビンリストアレイエントリのためのメモリアドレスを計算するために、アドレス計算ユニット１１１３によって使用される。
【０１８９】  データキャッシュ１１１５は、外部メモリバスから全てのメモリ参照を減結合するために具備される。それは、外部メモリ帯域幅を削減するため、およびデータが到着するのを待機することにより引き起こされるだろう機能停止時間を短縮するため、ビニングユニットメモリアクセスのアドレスコヒーレンスを利用する。
【０１９０】  データキャッシュ１１１５は、アドレスタグセクション１１１４を有する。これは、任意の特定の外部メモリアクセスがデータキャッシュの中でヒットなのか、あるいは失敗なのかを、ビニングユニット１０６９に示す。失敗の時、ビニングユニット１０６９は、必要とされるデータパケットがメモリからフェッチされるまで機能停止される。
【０１９１】  処理要素
図１４は、図５および図１０に図示されている処理要素の一部を形成する、プロセッサユニット１０６１ａおよびＰＥレジスタファイル１０６１ｂを示す。ＰＥ１０６１は、マルチプレクサ２１０および２１２（ＡおよびＢ）を介して（Ｒ、Ｓ、ＶおよびＰと示される）８ビットレジスタ２０２、２０４、２０６，２０８のブロックからデータ値を受け取るために接続される論理演算ユニット（ＡＬＵ）２１４を含む。
【０１９２】  ＰＥとその関連付けられたＰＥメモリ間でデータをバッファに入れるため、およびプロセッサユニット１０６１ａがその上で処理しているデータを一時的に記憶するために動作するＰＥレジスタファイル１０６１ｂ。
【０１９３】  ＲＳＶＰレジスタ２０２、２０４、２０６、２０８は、ＡＬＵ２１４にオペランドを供給するために動作する。Ａマルチプレクサ２１０は、ＲレジスタおよびＳレジスタからデータ値を受け取るため、それらのレジスタ値のどれがＡＬＵ２１４に供給されるのかを制御する。Ｂマルチプレクサ２１２は、ＶレジスタとＰレジスタから、およびＭＥＥ１０６２からもデータ値を受け取るために接続されるため、それらの値のどれがＡＬＵに供給される必要があるのかを制御する。
【０１９４】  プロセッサユニット１０６１ａは、さらに、Ｓレジスタ、ＶレジスタおよびＰレジスタから出力されるデータ上で左シフトまたは右シフトを実行できるシフタ２００を含む。
【０１９５】  Ｒレジスタは、その過去の値を保持することができるか、あるいはレジスタファイルからバイト、またはＡＬＵの結果をロードできる。ＡＬＵ結果は幅１０バイトであるため、Ｒレジスタは、ブース乗算ステップのために、最初の８ビット（ビット７から０）、またはビット９から２を受け取ることができる。ブース増加は、１クロックサイクル内で増加結果を提供する周知の方法である。
【０１９６】  Ｓレジスタは、その過去の値を保持することができるか、あるいはその過去の値のシフトされたバージョンをロードできる。Ｓレジスタは、ＡＬＵ結果、レジスタファイルから１ビット、または（ブース乗算ステップのための）Ｓレジスタの過去の値の高い６ビットと連結されたＡＬＵからの低い２ビットもロードすることができる。
【０１９７】  ＶレジスタおよびＰレジスタは、ともにＡＬＵ結果、またはレジスタファイルからのバイトの両方をロードできる。ＶレジスタのＬＳＢは、ＭＥＥフィードバック転送に関与しているプロセッサ要素の集合を決定するために使用される。Ｐレジスタの５つの低いビットは、メモリアクセス内のメモリアドレスを修正するために使用される。
【０１９８】  レジスタのいずれかがＡＬＵ２４にデータを提供することができるため、４つのレジスタＲ、Ｓ、ＶおよびＰを使用することにより、システムには、過去に既知のシステムに優る改善された性能が提供される。さらに、レジスタのいずれかは、システムの汎用性を高め、浮動少数点動作にさらに優れたサポートを提供する、ＰＥレジスタファイル１０６１ｂからのデータをロードすることもできる。Ｒレジスタ入力は絶対にシフトされないため、Ｒレジスタは、浮動少数点数の指数を記憶し、修正するために使用できる。
【０１９９】  ＡＬＵ２１４は、アレイコントローラ（図示せず）から命令を受け取り、その出力をＰＥレジスタファイル１０６１ｂに供給する。ＰＥレジスタファイル１０６１ｂは、ＰＥが即座に使用するためにデータを記憶するために使用され、例えば、レジスタファイル１０６１ｂは、長さ１６ビットの１６のワードを記憶できる。
【０２００】  レジスタファイルに書き込まれるデータは、書込みポートを介して転送され、レジスタファイルから読み取られるデータは読み取りポートを介して転送される。データは、ロード／記憶コントローラの制御下でのロード／記憶ポートを介してＰＥメモリのレジスタファイルに、およびレジスタファイルから転送される。
【０２０１】  ＰＥレジスタファイル１０６１ｂは、数多くの方法で、その書込みポートを通して記憶されるデータを受け取ることができる。つまり、１６ビット値は要素の左隣または右隣を形成するプロセッサ要素から受け取ることができるか、１６ビット値はステータス／イネーブルレジスタから受け取ることができるか、あるいは８ビット値がＡＬＵ結果から受け取ることができる。ＡＬＵ結果がレジスタファイルに供給されるケースでは、８ビット値は、関係するレジスタファイルエントリの高バイトと低バイトの両方にコピーされる。
【０２０２】  書込みポートは、データのソースに基づいて制御され、通常、イネーブルスタックのコンテンツを介して制御される。イネーブルスタックコンテンツに関係なく、レジスタファイル書込みを強制することができる。
【０２０３】  プロセッサユニット１０６１ａは、ＡＬＵ２１４がいつデータをプロセスできるのかを決定するために使用されるイネーブルスタックも含む。イネーブルスタックは、ＡＬＵがそれに供給されるデータに関して動作できるかどうかを示す８つのイネーブルビットを提供する。好ましい例では、ＡＬＵ２１４は、全ての８ビットが論理１に設定される場合にだけ動作するだろう。イネーブルビットのスタックは、ＡＬＵがネスト化された条件付き命令を実行する必要があるときに特に有効である。このようなネスト化された命令は、ＩＦ、ＥＬＳＥ、ＥＮＤＩＦ命令シーケンスで最も頻繁に発生する傾向がある。
複数ビットのイネーブルスタックをハードウェア内で提供することにより、ソフトウェアが、ＡＬＵがネスト化された命令シーケンスを処理しているときに、単一イネーブルビットのコンテンツを保存し、ロードする必要性を取り除くことができる。
【０２０４】  ＰＥレジスタファイル１６１ｂの読み取りポートおよび書込みポートは、１６ビットデータワードを、隣接するＰＥの少なくとも１つのＰＥレジスタファイルにコピーできるようにする。
【０２０５】  ロード動作および記憶動作は、アレイコントローラからマイクロコード化されたＡＬＵ命令と並列に発行することができる。ＰＥレジスタファイル１０６１ｂは、ＡＬＵがその中で直接的にメモリデバイスにアクセスした過去のシステムに優るいくつかの性能の優位点を提供する。ＰＥレジスタファイル１０６１ｂは、メモリに対するプロセッサ要素より高速のアクセスを頻繁に使用されるデータ値に与えるか、あるいはメモリからメモリアーキテクチャが提供することができる。加えて、データが、さらに処理速度およびプログラミングの柔軟性を補助するレジスタファイル内で並べられる順序に対する制約はない。
【０２０６】  図１５は、処理要素、およびその要素へのデータ入力回線と出力回線を示すブロック図である。過去に記述されるように、処理要素は、プロセッサユニット１０６１ａ、ＰＥレジスタファイル１０６１ｂ、およびＰＥメモリユニット１０６１ｃを含む。メモリユニット１０６１ｃは、好ましくは、１６バイトから成る１２８ページを記憶することができる。代わりに、その他のメモリ構成がＰＥメモリユニットに使用できるだろう。データ項目は、メモリ読み取りデータ回線およびメモリ書込みデータ回線１０７８と１０７９経由でＰＥレジスタファイル１０６１ｂとＰＥメモリユニット１０６１ｃの間で転送できる。
【０２０７】  加えて、データは、プロセッサ要素の中から、および実際には、その中に要素が位置するプロセッサブロックの中から、ブロックＩ／Ｏデータアウトバス１０６７ｄを経由して転送でき、バス１０６７ｃ内のブロックＩ／Ｏデータを経由してプロセッサブロックの中に転送できる。アドレストランザクションＩＤおよびデータトランザクションＩＤ情報は、バス１０６７ａと１０６７ｂを経由してプロセッサブロックに転送できる。ＭＥＥフィードバックデータは、ＰＥメモリユニット１０６１ｃまたはＰＥレジスタファイル１０６１ｂから、ＭＥＥフィードバックデータアウトガス１０６４を経由して、ＭＥＥフィードバックバッファ（図示せず）に転送される。
【０２０８】  図１６は、ブロックＩ／Ｏインタフェースをさらに詳細に示す。ＰＥメモリ読み取りおよび書込みデータバス１０７８と１０７９は、レジスタと処理装置とメモリユニットの間でデータを転送するために、ブロックＩ／Ｏレジスタファイル１０７１と接続する。処理要素から読み出されるデータは、ブロックＩ／Ｏレジスタファイル１０７１からブロックＩ／Ｏデータアウトバス１０６７ｃの上に出力され、関係する処理要素の中に読み込まれるデータは、バス１０６７ｄ内のブロックＩ／ＯからブロックＩ／Ｏレジスタファイル１０７１に入力される。
【０２０９】  メモリへのアクセスを必要とする処理要素は、表示フラグまたはマークビットを設定することによってこれが当てはまることを示す。それから、第１のこのようなマーキングされたＰＥが選択され、それがアクセスを必要とするメモリアドレスは、処理ブロックの処理要素の全てに伝送される。アドレスは、対応するトランザクションＩＤとともに伝送される。アクセスを必要とする（つまり、表示フラグセットを有する）それらの処理要素は、伝送されたアドレスを彼らがアクセスを必要とするアドレスと比較し、比較が、同じアドレスがアクセスされなければならないことを示す場合には、それらの処理要素はそのメモリアクセスのトランザクションＩＤを登録し、表示フラグをクリアする。
【０２１０】  それから、（選択されたＰＥを含む）メモリへのアクセスを必要とするそれら全てのＰＥは、必要とされるアドレスを、アドレス比較ユニット１０７３を経由してブロックＩ／Ｏインバス１０６７ｄで伝送されるアドレスと比較する。アドレス比較の結果が、選択されたアドレスが使用のために必要とされることを証明する場合には、バイトマスクが外され、関係するメモリアクセスのためのトランザクションＩＤがトランザクションＩＤレジスタ１０７５の中に記憶される。アドレストランザクションＩＤは、アドレストランザクションＩＤバス１０６７ａで供給される。後に、同じトランザクションＩＤを搬送する必須データが、ブロックＩ／Ｏデータインバス１０６７ｄに沿って戻った。同時に、またはデータが戻される直前に、トランザクションＩＤは、データトランザクションＩＤバス１０６７ｂに沿って戻され、プロセッサ要素の全てが、戻されたデータトランザクションＩＤを、比較器１０７６によってトランザクションＩＤレジスタ１０７５に記憶されるトランザクションＩＤと比較する。比較が、戻されたトランザクションＩＤが記憶されているトランザクションＩＤに同等であることを示すと、ブロックＩ／Ｏデータインバス１０６７ｄで到着するデータは、ＰＥレジスタファイル１０６１ｂの中に入力される。トランザクションＩＤが処理ブロックに戻されると、処理要素は、データを回復するために、記憶されているトランザクションＩＤを入信トランザクションＩＤに比較する。
【０２１１】  単にアクセスされたアドレス情報を記憶する代わりにトランザクションＩＤを使用することによって、複数のメモリアクセスを搬送してから、任意の順序で戻すことができるようになる。
【０２１２】  ブース増加は、図１７にさらに詳細に図示されているＢマルチプレクサ２１２を使用して達成される。Ｂマルチプレクサ２１２は、ＶレジスタとＰレジスタから、およびＭＥＥ１６０２から入力２３０を受け取る。Ｂマルチプレクサ２１２はブース再コード化テーブル２１８およびシフトコンプリメントユニット２２０を含む。ブース再コード化テーブル２１８は、Ｓレジスタの２つの最下位ビットから、およびブースレジスタ（Ｓレジスタ（ｓ  ｒｅｇ）およびブースレジスタ（Ｂｏｏｔｈｒｅｇ））から入力２２４、２２６を受け取る。Ｂｏｏｔｈ再コード化は、これらの入力に基づき、ブース再コード化テーブルがこれらのビットを、シフトコンプリメントユニット２２０に送られる、シフトビット、トランスポートビットおよびインバート制御ビットに変換する。シフトコンプリメントユニット２２０は、シフト動作、トランスポート動作、およびインバート動作を、Ｖレジスタのコンテンツに適用する。シフト動作はＶレジスタを左に１ビットシフトし、０でシフトし、トランスポートビットおよびインバートビットが、考えられるシフトされた結果をトランスポートさせる、インバートさせる、またはゼロにさせる、あるいはそれらの組み合わせを引き起こす。
【０２１３】  図１８は、図１６に図示されているプロセッサ要素のＡＬＵ２１４のブロック図を示す。ＡＬＵ２１４は、ＡマルチプレクサおよびＢマルチプレクサ２１０と２１２から１０ビットの入力２３４を受け取り、ＢｏｏｔｈＣａｒｒｙＩｎレジスタとＣａｒｒｙＲｅｇレジスタから入力２４４と２４６も受け取る。ＡＬＵ２４は、制御ユニットから命令も受け取る。ＡＬＵ２１４は、桁上げ伝搬ユニット２３６、桁上げ生成ユニット２３８、および桁上げ選択ユニット２４２を含む。ＡＬＵは、ＡＬＵ結果出力を判断するための排他的論理和（ＸＯＲ）ゲート２５０も含む。ＣａｒｒｙＣｈａｉｎユニット２４０は、桁上げ伝搬ユニット２３６および桁上げ生成ユニット２３８から入力を受け取り、結果をＸＯＲゲート２５０に出力する。
【０２１４】  ＡＬＵ２１４内の多様なユニットは、制御ユニットによって発行される命令を実行するために動作する。
【図面の簡単な説明】
【図１】  グラフィックデータ処理システムを示すブロック図である。
【図２】  図１のグラフィックデータ処理システムを示すさらに詳細なブロック図である。
【図３】  図１のグラフィックデータ処理システムを示すさらに詳細なブロック図である。
【図４】  図１のグラフィックデータ処理システムを示すさらに詳細なブロック図である。
【図５】  図３のシステムの処理コアのブロック図である。
【図６】  図５のシステムのスレッドマネージャのブロック図である。
【図７】  図５のシステムのアレイコントローラのブロック図である。
【図８】  図５のチャネルコントローラの命令発行ステート機械のブロック図である。
【図９】  図５のシステムのビニングユニットのブロック図である。
【図１０】  図５のシステムの処理ブロックのブロック図である。
【図１１】  図１から図１０のシステムを使用するデータ処理を示すフローチャートである。
【図１２】  図６のスレッドマネージャのスレッドプロセッサのさらに詳細なブロック図である。
【図１３】  図６のスレッドマネージャのスレッドプロセッサのさらに詳細なブロック図である。
【図１４】  図１０の処理ブロックのプロセッサユニットのブロック図である。
【図１５】  処理要素インタフェースを示すブロック図である。
【図１６】  ブロックＩ／Ｏインタフェースを示すブロック図である。
【図１７】  図１４のプロセッサユニットの一部のブロック図である。
【図１８】  図１４のプロセッサユニットの別の部分のブロック図である。
【図１】
0005285828.tif 000002
【図２】
0005285828.tif 000003
【図３】
0005285828.tif 000004
【図４】
0005285828.tif 000005
【図５】
0005285828.tif 000006
【図６】
0005285828.tif 000007
【図７】
0005285828.tif 000008
【図８】
0005285828.tif 000009
【図９】
0005285828.tif 000010
【図１０】
0005285828.tif 000011
【図１１】
0005285828.tif 000012
【図１２】
0005285828.tif 000013
【図１３】
0005285828.tif 000014
【図１４】
0005285828.tif 000015
【図１５】
0005285828.tif 000016
【図１６】
0005285828.tif 000017
【図１７】
0005285828.tif 000018
【図１８】
0005285828.tif 000019