低ポート数メモリーを用いたマルチポートメモリーのシミュレート
【課題】低ポート数メモリーをバンクとして使用してマルチポートメモリーをシミュレートする。
【解決手段】メモリーの一部分は、スレッドに関連するデータを記憶するために割り付けられる。スレッドに割り付けられたメモリーの一部分は、ただ1つのバンク内に記憶されてもよく、あるいは、複数のバンク内に記憶されてもよい。ソースオペランドは、1つ以上のバンクから出力されるので、それぞれのバンクに結合された収集ユニットが、プログラム命令を処理するのに必要なソースオペランドを集める。プログラム命令を処理するのに必要なすべてのソースオペランドが集められると、収集ユニットは、ソースオペランドを実行ユニットへ出力する。
【解決手段】メモリーの一部分は、スレッドに関連するデータを記憶するために割り付けられる。スレッドに割り付けられたメモリーの一部分は、ただ1つのバンク内に記憶されてもよく、あるいは、複数のバンク内に記憶されてもよい。ソースオペランドは、1つ以上のバンクから出力されるので、それぞれのバンクに結合された収集ユニットが、プログラム命令を処理するのに必要なソースオペランドを集める。プログラム命令を処理するのに必要なすべてのソースオペランドが集められると、収集ユニットは、ソースオペランドを実行ユニットへ出力する。
【発明の詳細な説明】
【技術分野】
【0001】
[0001]本発明の1つ以上の態様は、一般的には、データ処理に関し、より詳細には、プログラマブルグラフィックスプロセッサーまたは汎用プロセッサーにおけるマルチポートメモリーをシミュレートするためにシングルポートメモリーを使用することに関する。
【背景技術】
【0002】
[0002]最近のデータ処理は、2つ以上のオペランドを備える命令を含むプログラム命令を実行するために開発されたシステムおよび方法を含む。オペランドは、プロセッサー内のレジスタに記憶され、プログラムの実行中に、効率的にアクセスされる。乗算および乗算加算のようなある種のプログラム命令は、2つ以上のオペランドを指定する。一般的には、レジスタファイルは、マルチポートメモリーを含み、それによって、それぞれのロケーションが1つのオペランドを記憶する2つ以上のロケーションをシングルクロックサイクルにおいて読み出すことができる。したがって、シングルクロックサイクルにおいて、少なくとも1つのプログラム命令に必要とされるオペランドのすべてを取り込み、そして、実行ユニットに出力することができる。
【0003】
[0003]シングルポートメモリーと比較すると、マルチポートメモリーは、より大きなダイ面積を必要とし、また、より多くの電力を使用する。しかしながら、マルチポートメモリーとは違って、それぞれのクロックサイクルにおいて、ただ1つのロケーションしか読み出すことができない。したがって、2つ以上のクロックサイクルが、1つのプログラム命令を実行するために必要とされるいくつかのオペランドを取り込むのに必要とされ、マルチポートメモリーと比較した性能を低下させる。
【0004】
[0004]したがって、より小さいダイ面積およびより少ない電力を用いて、プロセッサー内に存在するマルチポートレジスタファイルの性能優位性を提供することは、望ましいことである。
【発明の概要】
【0005】
[0005]本発明は、低ポート数メモリーをバンクとして使用してマルチポートメモリーをシミュレートするための新しいシステムおよび方法を含む。メモリーの一部分は、スレッドに関連するデータを記憶するために割り付けられる。スレッドに割り付けられたメモリーの一部分は、ただ1つのバンク内に記憶されてもよく、あるいは、複数のバンク内に記憶されてもよい。ソースオペランドは、1つ以上のバンクから出力されるので、それぞれのバンクに結合された収集ユニットが、プログラム命令を処理するのに必要なソースオペランドを集める。プログラム命令を処理するのに必要なすべてのソースオペランドが集められると、収集ユニットは、ソースオペランドを実行ユニットへ出力する。マルチポートメモリーをシミュレートするために低ポート数メモリーを使用することは、同程度の容量を有するマルチポートメモリーよりも小さいダイ面積しか必要としない。また、マルチポートメモリーをシミュレートするように構成された低ポート数メモリーは、同程度の容量を有するマルチポートメモリーと比較してより少ない所要電力を有する。
【0006】
[0006]本発明の様々な実施形態は、プロセッサープログラム命令のためのオペランドを記憶するレジスタファイルユニットを含む。レジスタファイルユニットは、第1のスレッドのためのオペランドを記憶するように構成された第1のメモリーバンク、第2のスレッドのためのオペランドを記憶するように構成された第2のメモリーバンク、第1の収集ユニット、および第2の収集ユニットを含む。第1の収集ユニットは、第1のスレッドのためのオペランドを第1のメモリーバンクから受け取り、第1のスレッドのプログラム命令と第1のスレッドのプログラム命令によって指定された任意のオペランドとを出力するように構成される。第2の収集ユニットは、第2のスレッドのためのオペランドを第2のメモリーバンクから受け取り、第2のスレッドのプログラム命令と第2のスレッドのプログラム命令によって指定された任意のオペランドとを出力するように構成される。
【0007】
[0007]本発明の方法の様々な実施形態は、スレッドに割り付けられるレジスタの数を決定するステップ、およびそのスレッドに上記数のレジスタを、マルチポートメモリーをシミュレートするように構成された一組のメモリーバンク内に存在する少なくとも1つのメモリーバンク内のロケーションに割り付けるステップを含む。
【0008】
[0008]本発明の様々な実施形態は、プログラム命令のためのオペランドを記憶するためのシステムを含む。そのシステムは、割り付け方式に基づいてスレッドによって使用されるオペランドを記憶するレジスタを割り付ける手段、そのレジスタ内にオペランドを記憶する手段、およびプログラム命令によって指定されるスレッド内に存在する任意のオペランドを集める手段を含む。
【図面の簡単な説明】
【0009】
【図1】本発明の1つ以上の態様によるそれぞれのコンピュータシステムの例示的な実施形態のブロック図であり、ホストコンピュータおよびグラフィックスサブシステムを含む。
【図2】本発明の1つ以上の態様による図1に示されるプログラマブルグラフィックス処理パイプラインの例示的な実施形態のブロック図である。
【図3】本発明の1つ以上の態様による図2に示されるレジスタファイルユニットの例示的な実施形態のブロック図である。
【図4A】本発明の1つ以上の態様によるスレッドを処理するためにレジスタを割り付ける例示的な実施形態を示す図である。
【図4B】本発明の1つ以上の態様によるスレッドを処理するためにレジスタを割り付ける他の例示的な実施形態を示す図である。
【図4C】本発明の1つ以上の態様によるスレッドを処理するためにレジスタを割り付ける他の例示的な実施形態を示す図である。
【図4D】本発明の1つ以上の態様によるスレッドを処理するためにレジスタを割り付ける他の例示的な実施形態を示す図である。
【図4E】本発明の1つ以上の態様によるスレッドのためのレジスタを割り当てる例示的な実施形態を示す図である。
【図4F】本発明の1つ以上の態様によるスレッドのためのレジスタを割り当てる別の例示的な実施形態を示す図である。
【図5】本発明の1つ以上の態様による図2に示されるレジスタファイルユニットの別の例示的な実施形態のブロック図である。
【図6A】本発明の1つ以上の態様によるスレッドを処理するためのレジスタを割り付ける方法の実施形態を示す図である。
【図6B】本発明の1つ以上の態様によるスレッドを処理するためのレジスタを割り付ける別の方法の実施形態を示す図である。
【図6C】本発明の1つ以上の態様によるスレッドを処理するためのレジスタを割り付ける別の方法の実施形態を示す図である。
【発明を実施するための形態】
【0010】
[0009]添付の図面(1つかまたは複数)は、本発明の1つ以上の態様による例示的な実施形態(1つかまたは複数)を示す。しかしながら、添付の図面(1つかまたは複数)は、本発明を図示される実施形態(1つかまたは複数)に限定するものと解釈されるべきではなく、ただ単に説明および理解のためのものである。
【0011】
[0021]以下の記述においては、本発明をより完全に理解するために、多くの具体的な細部が説明される。しかしながら、当業者には、本発明が1つ以上のそれらの特定の細部を備えることなく実施されてもよいことは明らかなことである。別の例においては、周知の特徴は、本発明を曖昧にしないために、説明されない。
【0012】
[0022]図1は、参照符号100によって全体が指示されるコンピューティングシステムを示す図であり、ホストコンピュータ110およびグラフィックスサブシステム170を含む。コンピューティングシステム100は、デスクトップコンピュータ、サーバー、ラップトップコンピュータ、パームサイズコンピュータ、タブレットコンピュータ、ゲーム機、携帯情報端末(PDA)または携帯電話のような携帯無線端末、コンピュータベースシミュレータなどであってもよい。ホストコンピュータ110は、ホストプロセッサー114を含み、そのホストプロセッサー114は、ホストメモリー112と直接にインタフェースをとるためのシステムメモリーコントローラを含んでもよく、あるいは、システムインタフェース115を介してホストメモリー112と通信してもよい。システムインタフェース115は、I/O(入力/出力)インタフェースであってもよく、あるいは、ホストメモリー112と直接にインタフェースをとるためのシステムメモリーコントローラを含むブリッジデバイスであってもよい。当分野において既知であるシステムインタフェース115の例は、Intel(登録商標) Northbridgeを含む。
【0013】
[0023]ホストコンピュータ110は、システムインタフェース115およびグラフィックスプロセッサー105内のグラフィックスインタフェース117を介してグラフィックスサブシステム170と通信する。グラフィックスインタフェース117において受け取られたデータは、フロントエンド130に転送されてもよく、あるいは、メモリーコントローラ120を介してローカルメモリー140に書き込まれてもよい。グラフィックスプロセッサー105は、グラフィックスデータおよびプログラム命令を記憶するのにグラフィックスメモリーを使用し、グラフィックスデータは、グラフィックスプロセッサー内に存在するコンポーネントに入力され、あるいはコンポーネントから出力された何らかのデータである。グラフィックスメモリーは、ホストメモリー112、ローカルメモリー140、グラフィックスプロセッサー105内に存在するコンポーネントに結合されたレジスタファイルなどの一部を含んでもよい。
【0014】
[0024]グラフィックスプロセッサー105は、他にもコンポーネントはあるが、特に、ホストコンピュータ110からグラフィックスインタフェース117を介してコマンドを受け取るフロントエンド130を含む。フロントエンド130は、コマンドを解釈およびフォーマットし、フォーマットされたコマンドおよびデータをIDX(インデックスプロセッサー)135に出力する。フォーマットされたコマンドのあるものは、メモリーに記憶されたプログラム命令またはグラフィックスデータのロケーションを提供することによってデータの処理を開始するために、プログラマブルグラフィックス処理パイプライン150によって使用される。IDX135、プログラマブルグラフィックス処理パイプライン150、およびラスタ演算ユニット160は、それぞれ、メモリーコントローラ120へのインタフェースを含み、そのインタフェースを介して、メモリー、例えば、ローカルメモリー140およびホストメモリー112の何らかの組み合わせからプログラム命令およびデータを読み出すことができる。ホストメモリー112の一部が、プログラム命令およびデータを記憶するのに使用される場合、グラフィックスプロセッサー105によるアクセスの効率を増大させるために、ホストメモリー112の一部は、キャッシュされなくてもよい。
【0015】
[0025]IDX135は、処理されたデータ、例えば、ラスタ演算ユニットによって書き込まれたデータをメモリーから場合によって読み出し、そして、そのデータ、すなわち、処理されたデータおよびフォーマットされたコマンドをプログラマブルグラフィック処理スパイプライン150に出力する。プログラマブルグラフィックス処理パイプライン150およびラスタ演算ユニット160は、それぞれ、様々な専門的機能を実行するための1つ以上のプログラマブル処理ユニットを含む。これらの機能のいくつかは、テーブルルックアップ、スカラー加算およびベクトル加算、乗算、除算、座標マッピング、ベクトル法線の計算、テッセレーション、導関数の計算、補間などである。プログラマブルグラフィックス処理パイプライン150およびラスタ演算ユニット160は、それぞれ、データ処理演算がこれらのユニットを介してマルチパスで実行されるように、あるいは、プログラマブルグラフィックス処理パイプライン150内においてマルチパスで実行されるように、場合によって構成される。ラスタ演算ユニット160は、メモリーコントローラ120への書き込みインタフェースを含み、その書き込みインタフェースを介して、データをメモリーに書き込むことができる。
【0016】
[0026]典型的なインプレメンテーションにおいては、プログラマブルグラフィックス処理パイプライン150は、幾何学計算、ラスタライゼーション、およびフラグメント計算を実行する。したがって、プログラマブルグラフィックス処理パイプライン150は、サーフェイス、プリミティブ、頂点、フラグメント、画素、サンプル、または、その他の何らかのデータを操作するようにプログラムされる。簡潔に、以下の説明では、サーフェイス、プリミティブ、頂点、画素、フラグメントなどのようなグラフィックスデータに言及するのに「サンプル」という用語を使用する。
【0017】
[0027]プログラマブルグラフィックス処理パイプライン150によって出力されるサンプルは、ラスタ演算ユニット160に転送され、そのラスタ演算ユニット160は、ステンシル、Zテストなどのような、近平面および遠平面クリッピングおよびラスタ演算を場合によって実行し、その結果またはプログラマブルグラフィックス処理パイプライン150によって出力されたサンプルをローカルメモリー140に保存する。グラフィックスサブシステム170によって受け取られたデータが、グラフィックスプロセッサー105によって完全に処理されると、グラフィックスサブシステム170の出力185は、出力コントローラ180を用いて提供される。出力コントローラ180は、表示装置、ネットワーク、電子制御システム、コンピューティングシステム100のようなその他のコンピューティングシステム、その他のグラフィックスサブシステム170などにデータを供給するように場合によって構成される。あるいは、データは、フィルム記録装置に出力され、あるいは、周辺装置、例えば、ディスクドライブ、テープ、コンパクトディスクなどに書き込まれる。
【0018】
[0028]図2は、図1のプログラマブルグラフィックス処理パイプライン150を示す図である。少なくとも一組のサンプルが、IDX135によって出力され、プログラマブルグラフィックス処理パイプライン150によって受け取られ、そして、少なくとも一組のサンプルは、少なくとも1つのプログラムによって処理され、その少なくとも1つのプログラムは、グラフィックスプログラム命令を含む。プログラムは、1つ以上の組のサンプルを処理してもよい。逆に、一組のサンプルは、連続する1つ以上のプログラムによって処理されてもよい。プログラマブルグラフィックス処理パイプライン150のいくつかの実施形態は、フラグメントデータを生成するためのプリミティブデータのラスタライゼーションのような特定の機能を実行するように構成されたさらなるユニットを含む。
【0019】
[0029]例えば、サーフェイス、プリミティブ、処理されたデータなどのようなサンプルは、IDX135からプログラマブルグラフィックス処理パイプライン150によって受け取られる。サーフェイスは、プリミティブを生成するために、ストリーミングマルチプロセッサー200によって処理されてもよく、プリミティブは、頂点を生成するために、ストリーミングマルチプロセッサー200によって処理されてもよく、頂点は、フラグメントを生成するために、ストリーミングマルチプロセッサー200によって処理されてもよい。本発明の代替の実施形態においては、1つ以上のストリーミングマルチプロセッサー200が、ホストプロセッサー114のような汎用プロセッサー内に含められる。プログラマブルグラフィックス処理パイプライン150は、図2に示されるように、1つ以上のストリーミングマルチプロセッサー200を含む。それぞれのストリーミングマルチプロセッサー200は、本明細書でさらに詳細に説明される少なくとも1つかまたは複数の実行ユニット270を含む。サンプルは、ストリーミングマルチプロセッサー200のいずれかによって処理されてもよい。ストリーミングマルチプロセッサー200のいくつかの実施形態においては、読み出しインタフェース(図2には示されない)が、テクスチャーマップのようなグラフィックスデータをローカルメモリー140またはホストメモリー112からメモリーコントローラ120を介して読み出すのに使用される。本明細書でさらに詳細に説明されるように、ストリーミングマルチプロセッサー200内の処理スレッドが、利用可能である場合、サンプルは、ストリーミングマルチプロセッサー200によって受け入れられる。
【0020】
[0030]ストリーミングマルチプロセッサー200内のスレッド制御ユニット220は、サンプルと、サンプルを処理するために実行されるべき一連のプログラム命令へのポインタとを受け取る。スレッド制御ユニット320は、処理されるべきそれぞれのサンプルにスレッドを割り当てる。スレッドは、プログラム内の最初の命令のようなプログラム命令へのポインタ(プログラムカウンタ)、スレッド状態情報、およびサンプルの処理中に使用および生成されるオペランドを記憶するための記憶資源を含む。スレッドを処理するのに必要な資源、例えば、オペランドまたはスレッド状態情報を記憶するための記憶資源が、利用できないとき、ストリーミングマルチプロセッサー200は、処理するためのさらなるサンプルを受け入れない。スレッドに関連するプログラム命令が、実行を完了すれば、スレッドの実行中に受け取られかつ生成されたオペランドを記憶するために割り付けられた記憶資源、例えば、レジスタは、別のスレッドに割り付けることが可能となり、すなわち、その記憶資源は、割り付け解除され、スレッド制御ユニット220において、スレッドは、利用可能なものとしてフラグをセットされる。
【0021】
[0031]スレッド制御ユニット220は、オペランドを記憶するのに必要な記憶資源の量を指定する割り付け情報をレジスタアドレスユニット240へ出力する。スレッド制御ユニット220は、ポインタおよびサンプルを命令ユニット230へ出力する。クロックサイクルごとにスレッド制御ユニット220から命令ユニット230へ出力されてもよいポインタおよびサンプルの数は、本発明の様々な実施形態間で異なっていてもよい。
【0022】
[0032]命令ユニット230は、ローカルメモリー140またはホストメモリー112からメモリーコントローラ120を介してプログラム命令を読み出すために、専用の読み出しインタフェースを使用する。本発明の代替の実施形態においては、ただ1つの命令ユニット230が、ストリーミングマルチプロセッサー200間で共有される。本発明のいくつかの実施形態においては、命令ユニット230は、命令キャッシュを含む。
【0023】
[0033]命令ユニット230は、ジャンプ命令、コール命令/リターン命令、または、ブランチ命令のようなデータを処理しない命令を実行する。命令ユニット230は、プログラム命令の実行をスケジュールし、アクティブであるすべてのスレッド、すなわち、サンプルに割り当てられたすべてのスレッドを処理するために、プログラム命令をインターリーブする。本発明のいくつかの実施形態においては、命令ユニット230は、スレッドに割り付けられたレジスタファイルユニット250内のレジスタの特定のロケーション、例えば、レジスタが配置されたバンクを指定する付加的情報を使用せずに、プログラム命令の実行をスケジュールする。
【0024】
[0034]命令ユニット230は、スレッドのためのプログラム命令をスケジュールするとき、固定優先順位またはプログラム可能優先順位を使用するように構成されてもよい。例えば、頂点プログラム命令を処理するために割り付けられたスレッドは、常に、フラグメントプログラム命令を処理するために割り付けられたスレッドよりも高い優先順位を取得してもよい。別の例においては、オペランドを記憶するために多くの数のレジスタを必要とするスレッドは、オペランドを記憶するためにより少ないレジスタを必要とするスレッドよりも高い優先順位を有してもよい。本発明のいくつかの実施形態においては、命令ユニット230は、特定のスレッドのためのレジスタの使用率を指示する情報をレジスタファイルユニット250から受け取り、それに応じて、命令ユニット230は、特定のスレッドの優先順位を調節し、レジスタファイルユニット250内にあるレジスタの使用率を減少または増加させる。
【0025】
[0035]本発明の他の実施形態においては、命令ユニット230は、レジスタファイルユニット250内にあるレジスタの特定のロケーションを指定する付加的情報を用いて、プログラム命令の実行をスケジュールする。例えば、プログラム命令は、命令の1つ以上のオペランドが記憶されたレジスタファイルユニット250内にあるバンクに基づいて、いくつかのグループに事前にソートされる。命令ユニット230は、それぞれのグループから1つのプログラム命令をラウンドロビン方式で選択し、クロックサイクルごとに1つ以上のプログラム命令をレジスタアドレスユニット240へ出力する。
【0026】
[0036]命令ユニット230は、プログラム命令およびサンプルをレジスタアドレスユニット240へ出力する。レジスタアドレスユニット240は、図3および図5を参照して説明されるように、それぞれのスレッドによって指定されたオペランドを記憶したレジスタファイルユニット250内のレジスタにアクセスする。レジスタアドレスユニット240は、それぞれのプログラム命令のための要求を出力する。要求の例は、特定のオペランドのための読み出し要求または特定のオペランドのための書き込み要求を含む。本発明の一実施形態においては、レジスタアドレスユニット240は、それぞれのクロックサイクル中に、ただ1つの命令のための要求を出力する。例えば、ロード命令(LD)の場合には、1つの書き込み要求が、オペランドをレジスタに書き込むために、出力される。同様に、乗算加算(MAD)命令の場合には、3つの読み出し要求(ソースオペランドごとに1つの)および1つの書き込み要求(デスティネーションオペランドのための)が出力される。
【0027】
[0037]レジスタアドレスユニット240は、要求、およびそれに対応するプログラム命令、例えば、MADをレジスタファイルユニット250へ出力する。レジスタファイルユニット250は、要求を処理し、レジスタファイルユニット250内にあるレジスタへオペランドを読み出し、レジスタファイルユニット250内にあるレジスタからオペランドを書き込む。レジスタファイルユニット250は、ライトバック競合およびサイクルベース競合を回避するために、要求の処理をスケジュールする。本発明のいくつかの実施形態においては、レジスタファイルユニット250は、オペランドの状態を追跡するために、スコアボードユニットを使用し、レジスタに書き込み、オペランドがレジスタからいつ読み出されたかを判定する。
【0028】
[0038]読み出し要求が処理され、プログラム命令を処理するのに必要なオペランドが、取り込まれると、レジスタファイルユニット250は、オペランドのすべてがいつ取り込まれたかを判定し、そして、処理するための1つかまたは複数の実行ユニット270へプログラム命令およびオペランドを出力する。1つかまたは複数の実行ユニット270は、プログラム命令によって指定されたデスティネーションオペランドに書き込まれるべき処理されたオペランドをレジスタファイルユニット250へ戻す。実行パイプライン240は、テッセレーション、パースペクティブ補正、補間、シェーディング、ブレンディングなどのような演算を実行するように、プログラム命令によって構成される。処理されたサンプルは、それぞれの実行パイプライン240からラスタ演算ユニット160へ出力される。本発明のいくつかの実施形態においては、さらなる実行パイプライン240が、レジスタファイルユニット250およびラスタ演算ユニット160に結合される。
【0029】
[0039]図3は、本発明の1つ以上の態様に基づいた図2に示されるレジスタファイルユニット250の例示的な実施形態のブロック図である。本発明の代替の実施形態においては、レジスタファイルユニット250は、ホストプロセッサー114のような汎用プロセッサー内おいて使用される。レジスタファイルユニット250は、2つ以上のメモリーバンク、すなわち、シングルマルチポートメモリーをシミュレートするように構成されたバンク320を含む。それぞれのバンク320は、オペランドを記憶するように構成されたレジスタの役割をなすいくつかのロケーションを含む。それぞれの収集ユニット330は、要求およびそれに対応するプログラム命令をレジスタアドレスユニット240から受け取り、そのプログラム命令が収集ユニット330に結合された特定の実行ユニット365によって実行されるべき命令であるかどうかを判定する。プログラム命令が、収集ユニット330に結合された特定の実行ユニット365によって実行されるべき命令であれば、収集ユニット330は、そのプログラム命令を受け入れ、処理を要求する。本発明のいくつかの実施形態においては、それぞれの実行ユニット365は、同一のものであり、優先順位体系が、どの実行ユニット365がプログラム命令を実行するかを決定するのに使用される。本発明の代替の実施形態は、命令を最小負荷の実行ユニット365に割り当てる。本発明のいくつかの実施形態においては、2つ以上の収集ユニット330が、ただ1つの実行ユニット365に結合され、優先順位体系が、2つ以上の収集ユニット330のどれがオペランドを実行するためのただ1つの実行ユニット365に出力するかを選択するのに使用される。
【0030】
[0040]それぞれの収集ユニット330は、受け入れられたプログラム命令のための要求をバンク要求調停ユニット310のいずれかに出力する。それぞれのバンク要求調停ユニット310は、要求がバンク要求調停ユニット310に結合された特定のバンク320内のレジスタを読み出すことを必要とするかどうかを判定する。考えられるいくつかのレジスタ割り付けが、図4A、図4B、図4C、図4D、図4E、および図4Fを参照して説明される。それぞれの要求は、1つのバンク要求調停ユニット310によってバンク320へ出力され、そのバンク320において、要求において指定されたオペランドに割り当てられるレジスタが配置される。受け入れられたプログラム命令は、オペランドを集めるように指示された収集ユニット330に残る。それぞれのバンク要求調停ユニット310は、また、異なる収集ユニット330同士を調停し、1クロックサイクル当たり1つの要求を、バンク要求調停ユニット310に結合されたバンク320へ出力する。
【0031】
[0041]それぞれのバンク320は、バンク要求調停ユニット310から要求を受け取るための読み出し要求ポートを含む。それぞれのバンク320は、また、1つかまたは複数の実行ユニット270から書き込み要求を受け取るための書き込み要求ポートを含み、処理されたデータを、プログラム命令によって指定されたオペランドに割り当てられたデスティネーションレジスタに書き込む。したがって、2つのバンクの低ポート数メモリー(1つの書き込みポートおよび1つの読み出しポート)が、2つの書き込みポートおよび2つの読み出しポートを備えるマルチポートメモリーをシミュレートするのに使用される。本発明のいくつかの実施形態においては、さらなる要求ポートが使用される。本発明の代替の実施形態においては、読み出し要求ポートは、書き込み要求ポートと組み合わせられ、シングルポートメモリーにアクセスする。1クロックサイクル中、それぞれのバンク320は、読み出し要求によって指定されたオペランドを対応する収集ユニット330へセレクタ325を介して出力してもよい。したがって、プログラム命令が、ソースデータのための3つのオペランドを指定する場合、それらが、同じバンク320内に存在すれば、少なくとも3つのクロックサイクルが、オペランドを集めるのに必要とされる。それぞれの収集ユニット330は、また、バンク320の外部にあるレジスタ(図示しない)に記憶された定数および中間データのようなソースデータを集めてもよい。セレクタ325は、バンク320内に記憶されていないソースデータを入力(図示しない)から受け取る。オペランドのすべてが、収集ユニット330によって集められると、プログラム命令は、ディスパッチされる準備ができた状態となる。本発明のいくつかの実施形態においては、1クロックサイクル中に読み出されるオペランドの数を増加させるために、さらなるバンク要求調停ユニット310、バンク320、セレクタ325、および収集ユニット330が含められる。本発明の一実施形態においては、セレクタ325は省かれ、それぞれのバンク320は、収集ユニット330に直接に結合される。
【0032】
[0042]プログラム命令のためのオペランドのすべてが、収集ユニット330によって集められると、プログラム命令およびオペランドは、処理のために、収集ユニット330によって、収集ユニット330に結合された実行ユニット365へ出力される。プログラム命令の実行が完了すると、デスティネーションオペランドが、プログラム命令によって指定されていれば、実行ユニット365は、書き込み要求をバンク320の中の1つへ出力する。1つかまたは複数の実行ユニット270は、また、処理されたオペランドをラスタ演算ユニット160へ出力してもよい。本発明のいくつかの実施形態においては、それぞれの実行ユニット365は、1つよりも多い命令を処理し、1クロックサイクル当たり1つよりも多い命令であるスループットをもたらす。異なる命令の実行は、それらが実行ユニット365によって処理されるとき、異なる待ち時間がかかる可能性がある。
【0033】
[0043]本発明の一実施形態においては、スレッドを処理するためにオペランドを記憶するレジスタは、バンク320のようなただ1つのバンク内に割り付けられてもよい。そのような割り付けは、「薄い」割り付け方式と呼ばれる。図4Aは、本発明の1つ以上の態様に基づいて、スレッドを処理するためのレジスタを4つのバンク内に薄く割り付ける例示的な実施形態である。図4Aにおいて、スレッドAを処理するためにオペランドを記憶するレジスタは、バンク0内に割り付けられ、スレッドBを処理するためにオペランドを記憶するレジスタは、バンク1内に割り付けられ、スレッドCを処理するためにオペランドを記憶するレジスタは、バンク2内に割り付けられ、そして、スレッドDを処理するためにオペランドを記憶するレジスタは、バンク3内に割り付けられる。さらなるスレッドを処理するためにオペランドを記憶するレジスタは、バンク0、バンク1、バンク2、および/または、バンク3内に割り付けられてもよい。本発明の代替の実施形態においては、より少ないかまたはより多いバンクが使用される。
【0034】
[0044]本発明の別の実施形態においては、1つのスレッドを処理するためにオペランドを記憶するレジスタは、4つのバンクのそれぞれの中に割り付けられてもよく、それぞれのバンクは、バンク320であってもよい。そのような割り付けは、「厚い」割り付け方式と呼ばれる。図4Bは、本発明の1つ以上の態様に基づいて、スレッドを処理するためのレジスタを4つのバンク内に厚く割り付ける例示的な実施形態である。図4Bにおいて、スレッドAを処理するためにオペランドを記憶するレジスタは、バンク0、バンク1、バンク2、およびバンク3内に割り付けられる。スレッドB、C、およびDを処理するためにオペランドを記憶するレジスタは、同様に、バンク0、バンク1、バンク2、およびバンク3内に割り付けられる。本発明の代替の実施形態においては、より少ないかまたはより多いバンクが使用される。
【0035】
[0045]本発明のいくつかの実施形態においては、スレッドを処理するためのレジスタは、厚い割り付け方式または薄い割り付け方式のいずれかによる特定の数のレジスタを表現する「バンクカウント」ユニット内に割り付けられる。割り付けのために次に利用可能なレジスタを指示するレジスタベースアドレスは、バンク0内において追跡されてもよく、その他のバンク内における次に利用可能なレジスタは、バンクカウント、割り付け方式、およびレジスタベースアドレスを用いて、決定されてもよい。
【0036】
[0046]さらなるスレッドを処理するためにオペランドを記憶するレジスタは、厚い割り付けまたは薄い割り付けのいずれかを用いて、バンク0、バンク1、バンク2、および/または、バンク3内に割り付けられてもよい。しかしながら、厚い割り付けおよび薄い割り付けを混合することは、図4Cに示されるように、割り付けに利用可能なレジスタを有効に利用できないことになる可能性がある。例えば、スレッドAのような第1のスレッドが、バンク0内において薄い割り付けを使用し、スレッドBのような第2のスレッドが、4つのバンクのそれぞれの中において厚い割り付けを使用すると、薄い割り付けを使用する第3のスレッドは、第1のスレッドが完了するまで、待たされることがある。あるいは、本発明のいくつかの実施形態においては、図4Dに示されるように、厚い割り付け方式は、それぞれのバンクの最上部から実施されてもよく、また、薄い割り付け方式は、それぞれのバンクの最下部から実施されてもよい。スレッドAおよびBは、厚い割り付けを使用し、スレッドCおよびDは、薄い割り付けを使用する。割り付けのこの「分割」は、同じ割り付け方式をまとめるのを可能にし、割り付けに利用可能なレジスタをより効率的に利用させる。
【0037】
[0047]厚い割り付けが、スレッドに使用される場合、それぞれのオペランドに割り当てられたロケーションは、単純に、順次に進められてもよい。図4Eは、本発明の1つ以上の態様に基づいて、スレッドにレジスタを順次に割り当てる例示的な実施形態である。例えば、オペランド400Aを記憶するために割り当てられたスレッドAに割り付けられたレジスタは、バンク0内に配置され、それは、オペランド400Bを記憶するために割り当てられたスレッドBに割り付けられたレジスタの場合にも同様である。スレッドAおよびスレッドBが、同じプログラム命令を実行していれば、スレッドAおよびスレッドBが、スレッドAのためのオペランド400AおよびスレッドBのためのオペランド400Bを読み出すプログラム命令を処理するとき、バンク競合が発生する可能性がある。オペランド400Bおよびオペランド400Aが、同じバンク内に記憶されていなければ、バンク競合は回避される可能性がある。
【0038】
[0048]位相値が、レジスタ割り当て処理中に使用されてもよく、それによって、同じプログラム命令を処理するスレッドは、同じバンク内に存在するレジスタに割り当てられたプログラム命令によって指定されたそれらの対応するオペランドを有することはない。図4Fは、本発明の1つ以上の態様に基づいた位相値を用いて、スレッドにレジスタを割り当てる例示的な実施形態である。例えば、オペランド410Aを記憶するために割り当てられたスレッドAに割り付けられたレジスタは、バンク0内に配置され、オペランド410Bを記憶するために割り当てられたスレッドBに割り付けられたレジスタは、バンク1内に配置される。スレッドAおよびスレッドBが、同じプログラム命令を実行していれば、スレッドAおよびスレッドBが、スレッドAのためのオペランド410AおよびスレッドBのためのオペランド410Bを読み出すプログラム命令を処理するとき、バンク競合は、発生しない。本発明の代替の実施形態においては、レジスタは、再配置され、それによって、同じプログラム命令を処理するスレッドは、同じバンク内に存在するレジスタに割り当てられたプログラム命令によって指定されたそれらの対応するオペランドを有することはない。例えば、4つのバンクの場合、割り当てられたレジスタ番号の下位2ビットが、レジスタが割り付けられるスレッドに対応する固有の位相値と排他的論理和(XOR)をとられてもよい。本発明の代替の方法は、バンクの番号を法とする位相値のモジュロを割り当てられたレジスタの番号に加算することである。
【0039】
[0049]厚い割り付けが、レジスタに使用される場合、プログラム命令を処理するのに必要な2つ以上のオペランドが、2つ以上の異なるバンク内のレジスタに割り当てられる可能性がある。例えば、スレッドAのためのプログラム命令が、オペランド414Aおよび415Aを指定するならば、読み出し要求は、一方がバンク0に結合されかつ他方がバンク1に結合された2つの異なる要求キュー310にキューイングされる。同様に、オペランド414Aは、バンク0に結合された収集ユニット330へ出力され、オペランド415Aは、バンク1に結合された収集ユニット330へ出力される。ただ1つの収集ユニット330は、プログラム命令ごとのオペランドを集めるので、メカニズムが、異なるバンクと収集ユニット330との間でオペランドを転送するのを可能にするために使用される。
【0040】
[0050]図5は、本発明の1つ以上の態様に基づいた、図2のレジスタファイルユニットの別の例示的な実施形態のブロック図であり、クロスバ525および複数のバンク320を含み、それぞれのバンク320は、バンク要求調停ユニット310に結合される。クロスバ525は、いずれかのバンク320から出力されるオペランドをいずれかの収集ユニット330の入力へルーティングできるように構成される。したがって、プログラム命令によって指定されたオペランドのすべては、ただ1つの収集ユニット330によって収集されてもよい。図3を参照して説明されたように、それぞれの収集ユニット330は、プログラム命令によって指定されたオペランドをいずれかのバンク320から集める。クロスバ525が使用される場合、スレッドスケジューリングおよびレジスタ割り付け(厚いかまたは薄い)は、バンク320の数が収集ユニット330の総数に等しい場合よりも効率的に進行することが可能である。
【0041】
[0051]ディスパッチャーユニット540が、一組の収集ユニット330と実行ユニットB575との間に結合される。ディスパッチャーユニット540は、プログラム命令およびそれに対応するオペランド、例えば、いくつかの入力を、組の中のそれぞれの収集ユニット330から受け取ってもよく、それによって、ディスパッチャーユニット540は、組の中の収集ユニット330同士を調停する。本発明のいくつかの実施形態においては、ディスパッチャーユニット540は、ラウンドロビン方式で調停する。本発明の代替の実施形態においては、組の中のそれぞれの収集ユニット330は、対応する優先順位を有し、その優先順位に基づいて、ディスパッチャーユニット540は、それぞれの収集ユニット330から入力を受け入れる。例えば、一方の収集ユニット330は、他方の収集ユニット330よりも高い優先順位を有してもよく、プログラム命令およびオペランドを得ることができるならば、ディスパッチャーユニット540は、常に、一方の収集ユニット330から入力を受け入れる。
【0042】
[0052]ただ1つの収集ユニット330が、実行ユニットA565に直接に結合される。実行ユニットA565は、実行ユニットB575が実行するようには構成されていない特定の命令を実行するように構成されてもよい。したがって、ただ1つの収集ユニット330が、実行ユニットA565によって実行されるプログラム命令(および要求)を受け入れ、一組の収集ユニット330は、実行ユニットB575によって実行されるプログラム命令(および要求)を受け入れる。
【0043】
[0053]図6Aは、本発明の1つ以上の態様に基づいて、スレッドを処理するためにレジスタを割り付ける方法の実施形態を示す。ステップ600において、スレッドのためのレジスタ割り付け要求が、レジスタアドレスユニット240によってスレッド制御ユニット220から受け取られる。ステップ605において、レジスタアドレスユニット240は、スレッドを処理するのに必要なレジスタのサイズすなわち数が固定値またはプログラム可能な値Xよりも小さいかまたはそれに等しいかどうかを判定する。レジスタアドレスユニット240が、サイズがXよりも大きいと判定すれば、ステップ610において、レジスタアドレスユニット240は、複数のバンク320内にすなわち厚い割り付けでオペランドを記憶するレジスタを割り付ける。ステップ615において、レジスタアドレスユニット240は、ベースポインタを更新する。ベースポインタは、バンク320内において割り付け可能な最初のロケーションを指示する。
【0044】
[0054]ステップ620において、レジスタアドレスユニット240は、位相値を更新し、それによって、それに続くスレッドに割り付けられるオペランドに割り当てられるレジスタが、ステップ610において割り付けられたレジスタに対してスキューされる。ステップ625において、レジスタアドレスユニット240は、位相値がNに等しいかどうかを判定し、ここで、Nは、バンク320の数である。ステップ625において、レジスタアドレスユニット240が、位相値はNに等しいと判定すれば、ステップ630において、レジスタアドレスユニット240は位相値を0にセットし、ステップ670に進む。ステップ625において、レジスタアドレスユニット240が、位相値はNに等しくないと判定すれば、レジスタアドレスユニット240は、ステップ670に進み、割り付け情報をレジスタファイルユニット250内の要求配信ユニット300へ出力する。
【0045】
[0055]ステップ605において、レジスタアドレスユニット240が、サイズはXよりも小さいかまたはXに等しいと判定すれば、ステップ635において、レジスタアドレスユニット240は、薄い割り付けに利用可能なバンク320がN−1であるかどうかを判定する。ステップ635において、レジスタアドレスユニット240が、割り付け可能なバンク320はバンクインジケータによって指定されるようにバンクN−1であると判定すれば、ステップ650において、レジスタアドレスユニット240は、ベースを更新し、割り付け可能な最初のロケーションを指示し、ステップ645に進む。ステップ635において、レジスタアドレスユニット240が、割り付け可能なバンク320はバンクN−1ではないと判定すれば、ステップ640において、レジスタアドレスユニット240は、バンクインジケータを1だけインクリメントすることによって、バンクインジケータを更新する。ステップ645において、レジスタアドレスユニット240は、バンクインジケータによって指示されるただ1つのバンク320内にすなわち薄い割り付けでオペランドを記憶するレジスタを割り付け、ステップ670に進む。上述したように、ステップ670において、レジスタアドレスユニット240は、割り付け情報をレジスタファイルユニット250内の要求配信ユニット300へ出力する。
【0046】
[0056]図6Bは、本発明の1つ以上の態様に基づいて、スレッドを処理するためにレジスタを割り付ける別の方法の実施形態を示す。ステップ600において、レジスタアドレスユニット240は、厚いまたは薄い割り付け方式を含むレジスタ割り付け要求を受け取る。本発明のいくつかの実施形態においては、プログラム命令がコンパイルされ、そして、ドライバによってレジスタアドレスユニット240に提供されるときに、割り付け方式が決定される。ステップ603において、レジスタアドレスユニット240は、指定された割り付け方式が薄いかどうかを判定し、もしそうであれば、図6Aを参照して上述したように、ステップ610、615、620、625、630、および670に進む。ステップ603において、レジスタアドレスユニット240が、指定された割り付け方式は薄くないと判定すれば、レジスタアドレスユニット240は、図6Aを参照して上述したように、ステップ635、640、645、および670に進む。
【0047】
[0057]図6Cは、本発明の1つ以上の態様に基づいて、スレッドを処理するためにレジスタを割り付ける別の方法の実施形態を示す。ステップ600において、レジスタアドレスユニット240は、厚いまたは薄い割り付け方式を含むレジスタ割り付け要求を受け取る。ステップ603において、レジスタアドレスユニット240は、指定された割り付け方式が薄いかどうかを判定し、もしそうであれば、ステップ607において、レジスタアドレスユニット240は、バンクインジケータによって指定されるバンク320内において、薄い割り付けが適切であるかどうか、すなわち、必要なレジスタの数が利用可能かどうかを判定する。ステップ607において、レジスタアドレスユニット240が、バンク320内において薄い割り付けは適切であると判定すれば、レジスタアドレスユニット240は、図6Aを参照して上述したように、ステップ635、640、645、650、および670に進む。
【0048】
[0058]ステップ603において、レジスタアドレスユニット240が、指定された割り付け方式は薄くないと判定すれば、レジスタアドレスユニット240は、図6Aを参照して上述したように、ステップ610、615、620、625、630、および670に進む。ステップ607において、レジスタアドレスユニット240が、バンク230内において薄い割り付けは適切ではないと判定すれば、レジスタアドレスユニット240は、同様に、図6Aを参照して上述したように、ステップ610、615、620、625、630、および670に進む。
【0049】
[0059]このように、当業者は、図6A、図6B、図6C、または、それらに等価なものの方法ステップを実行するように構成されたどのようなシステムも本発明の範囲内に存在することがわかるはずである。さらに、当業者は、図6A、図6B、図6Cの方法ステップはマルチポートメモリーをシミュレートするために任意の数のバンクを含むレジスタファイルユニットをサポートするように拡張されてもよいことがわかるはずである。
【0050】
[0060]特定の実施形態を参照して、本発明が先に説明されたが、添付の特許請求の範囲に規定される本発明のより広い精神および範囲を逸脱することなく、様々な修正および変更が、それに対してなされてもよいことは明白なことである。したがって、本明細書でなされた説明および図面は、限定するものではなく、説明するためのものであると考えられるべきである。方法の請求項において記載されるステップは、請求項において明白に規定されない限り、何らかの特定の順序で実行されることを意味するものではない。
【0051】
[0061]すべての商標は、それらの所有者の個々の財産である。
【技術分野】
【0001】
[0001]本発明の1つ以上の態様は、一般的には、データ処理に関し、より詳細には、プログラマブルグラフィックスプロセッサーまたは汎用プロセッサーにおけるマルチポートメモリーをシミュレートするためにシングルポートメモリーを使用することに関する。
【背景技術】
【0002】
[0002]最近のデータ処理は、2つ以上のオペランドを備える命令を含むプログラム命令を実行するために開発されたシステムおよび方法を含む。オペランドは、プロセッサー内のレジスタに記憶され、プログラムの実行中に、効率的にアクセスされる。乗算および乗算加算のようなある種のプログラム命令は、2つ以上のオペランドを指定する。一般的には、レジスタファイルは、マルチポートメモリーを含み、それによって、それぞれのロケーションが1つのオペランドを記憶する2つ以上のロケーションをシングルクロックサイクルにおいて読み出すことができる。したがって、シングルクロックサイクルにおいて、少なくとも1つのプログラム命令に必要とされるオペランドのすべてを取り込み、そして、実行ユニットに出力することができる。
【0003】
[0003]シングルポートメモリーと比較すると、マルチポートメモリーは、より大きなダイ面積を必要とし、また、より多くの電力を使用する。しかしながら、マルチポートメモリーとは違って、それぞれのクロックサイクルにおいて、ただ1つのロケーションしか読み出すことができない。したがって、2つ以上のクロックサイクルが、1つのプログラム命令を実行するために必要とされるいくつかのオペランドを取り込むのに必要とされ、マルチポートメモリーと比較した性能を低下させる。
【0004】
[0004]したがって、より小さいダイ面積およびより少ない電力を用いて、プロセッサー内に存在するマルチポートレジスタファイルの性能優位性を提供することは、望ましいことである。
【発明の概要】
【0005】
[0005]本発明は、低ポート数メモリーをバンクとして使用してマルチポートメモリーをシミュレートするための新しいシステムおよび方法を含む。メモリーの一部分は、スレッドに関連するデータを記憶するために割り付けられる。スレッドに割り付けられたメモリーの一部分は、ただ1つのバンク内に記憶されてもよく、あるいは、複数のバンク内に記憶されてもよい。ソースオペランドは、1つ以上のバンクから出力されるので、それぞれのバンクに結合された収集ユニットが、プログラム命令を処理するのに必要なソースオペランドを集める。プログラム命令を処理するのに必要なすべてのソースオペランドが集められると、収集ユニットは、ソースオペランドを実行ユニットへ出力する。マルチポートメモリーをシミュレートするために低ポート数メモリーを使用することは、同程度の容量を有するマルチポートメモリーよりも小さいダイ面積しか必要としない。また、マルチポートメモリーをシミュレートするように構成された低ポート数メモリーは、同程度の容量を有するマルチポートメモリーと比較してより少ない所要電力を有する。
【0006】
[0006]本発明の様々な実施形態は、プロセッサープログラム命令のためのオペランドを記憶するレジスタファイルユニットを含む。レジスタファイルユニットは、第1のスレッドのためのオペランドを記憶するように構成された第1のメモリーバンク、第2のスレッドのためのオペランドを記憶するように構成された第2のメモリーバンク、第1の収集ユニット、および第2の収集ユニットを含む。第1の収集ユニットは、第1のスレッドのためのオペランドを第1のメモリーバンクから受け取り、第1のスレッドのプログラム命令と第1のスレッドのプログラム命令によって指定された任意のオペランドとを出力するように構成される。第2の収集ユニットは、第2のスレッドのためのオペランドを第2のメモリーバンクから受け取り、第2のスレッドのプログラム命令と第2のスレッドのプログラム命令によって指定された任意のオペランドとを出力するように構成される。
【0007】
[0007]本発明の方法の様々な実施形態は、スレッドに割り付けられるレジスタの数を決定するステップ、およびそのスレッドに上記数のレジスタを、マルチポートメモリーをシミュレートするように構成された一組のメモリーバンク内に存在する少なくとも1つのメモリーバンク内のロケーションに割り付けるステップを含む。
【0008】
[0008]本発明の様々な実施形態は、プログラム命令のためのオペランドを記憶するためのシステムを含む。そのシステムは、割り付け方式に基づいてスレッドによって使用されるオペランドを記憶するレジスタを割り付ける手段、そのレジスタ内にオペランドを記憶する手段、およびプログラム命令によって指定されるスレッド内に存在する任意のオペランドを集める手段を含む。
【図面の簡単な説明】
【0009】
【図1】本発明の1つ以上の態様によるそれぞれのコンピュータシステムの例示的な実施形態のブロック図であり、ホストコンピュータおよびグラフィックスサブシステムを含む。
【図2】本発明の1つ以上の態様による図1に示されるプログラマブルグラフィックス処理パイプラインの例示的な実施形態のブロック図である。
【図3】本発明の1つ以上の態様による図2に示されるレジスタファイルユニットの例示的な実施形態のブロック図である。
【図4A】本発明の1つ以上の態様によるスレッドを処理するためにレジスタを割り付ける例示的な実施形態を示す図である。
【図4B】本発明の1つ以上の態様によるスレッドを処理するためにレジスタを割り付ける他の例示的な実施形態を示す図である。
【図4C】本発明の1つ以上の態様によるスレッドを処理するためにレジスタを割り付ける他の例示的な実施形態を示す図である。
【図4D】本発明の1つ以上の態様によるスレッドを処理するためにレジスタを割り付ける他の例示的な実施形態を示す図である。
【図4E】本発明の1つ以上の態様によるスレッドのためのレジスタを割り当てる例示的な実施形態を示す図である。
【図4F】本発明の1つ以上の態様によるスレッドのためのレジスタを割り当てる別の例示的な実施形態を示す図である。
【図5】本発明の1つ以上の態様による図2に示されるレジスタファイルユニットの別の例示的な実施形態のブロック図である。
【図6A】本発明の1つ以上の態様によるスレッドを処理するためのレジスタを割り付ける方法の実施形態を示す図である。
【図6B】本発明の1つ以上の態様によるスレッドを処理するためのレジスタを割り付ける別の方法の実施形態を示す図である。
【図6C】本発明の1つ以上の態様によるスレッドを処理するためのレジスタを割り付ける別の方法の実施形態を示す図である。
【発明を実施するための形態】
【0010】
[0009]添付の図面(1つかまたは複数)は、本発明の1つ以上の態様による例示的な実施形態(1つかまたは複数)を示す。しかしながら、添付の図面(1つかまたは複数)は、本発明を図示される実施形態(1つかまたは複数)に限定するものと解釈されるべきではなく、ただ単に説明および理解のためのものである。
【0011】
[0021]以下の記述においては、本発明をより完全に理解するために、多くの具体的な細部が説明される。しかしながら、当業者には、本発明が1つ以上のそれらの特定の細部を備えることなく実施されてもよいことは明らかなことである。別の例においては、周知の特徴は、本発明を曖昧にしないために、説明されない。
【0012】
[0022]図1は、参照符号100によって全体が指示されるコンピューティングシステムを示す図であり、ホストコンピュータ110およびグラフィックスサブシステム170を含む。コンピューティングシステム100は、デスクトップコンピュータ、サーバー、ラップトップコンピュータ、パームサイズコンピュータ、タブレットコンピュータ、ゲーム機、携帯情報端末(PDA)または携帯電話のような携帯無線端末、コンピュータベースシミュレータなどであってもよい。ホストコンピュータ110は、ホストプロセッサー114を含み、そのホストプロセッサー114は、ホストメモリー112と直接にインタフェースをとるためのシステムメモリーコントローラを含んでもよく、あるいは、システムインタフェース115を介してホストメモリー112と通信してもよい。システムインタフェース115は、I/O(入力/出力)インタフェースであってもよく、あるいは、ホストメモリー112と直接にインタフェースをとるためのシステムメモリーコントローラを含むブリッジデバイスであってもよい。当分野において既知であるシステムインタフェース115の例は、Intel(登録商標) Northbridgeを含む。
【0013】
[0023]ホストコンピュータ110は、システムインタフェース115およびグラフィックスプロセッサー105内のグラフィックスインタフェース117を介してグラフィックスサブシステム170と通信する。グラフィックスインタフェース117において受け取られたデータは、フロントエンド130に転送されてもよく、あるいは、メモリーコントローラ120を介してローカルメモリー140に書き込まれてもよい。グラフィックスプロセッサー105は、グラフィックスデータおよびプログラム命令を記憶するのにグラフィックスメモリーを使用し、グラフィックスデータは、グラフィックスプロセッサー内に存在するコンポーネントに入力され、あるいはコンポーネントから出力された何らかのデータである。グラフィックスメモリーは、ホストメモリー112、ローカルメモリー140、グラフィックスプロセッサー105内に存在するコンポーネントに結合されたレジスタファイルなどの一部を含んでもよい。
【0014】
[0024]グラフィックスプロセッサー105は、他にもコンポーネントはあるが、特に、ホストコンピュータ110からグラフィックスインタフェース117を介してコマンドを受け取るフロントエンド130を含む。フロントエンド130は、コマンドを解釈およびフォーマットし、フォーマットされたコマンドおよびデータをIDX(インデックスプロセッサー)135に出力する。フォーマットされたコマンドのあるものは、メモリーに記憶されたプログラム命令またはグラフィックスデータのロケーションを提供することによってデータの処理を開始するために、プログラマブルグラフィックス処理パイプライン150によって使用される。IDX135、プログラマブルグラフィックス処理パイプライン150、およびラスタ演算ユニット160は、それぞれ、メモリーコントローラ120へのインタフェースを含み、そのインタフェースを介して、メモリー、例えば、ローカルメモリー140およびホストメモリー112の何らかの組み合わせからプログラム命令およびデータを読み出すことができる。ホストメモリー112の一部が、プログラム命令およびデータを記憶するのに使用される場合、グラフィックスプロセッサー105によるアクセスの効率を増大させるために、ホストメモリー112の一部は、キャッシュされなくてもよい。
【0015】
[0025]IDX135は、処理されたデータ、例えば、ラスタ演算ユニットによって書き込まれたデータをメモリーから場合によって読み出し、そして、そのデータ、すなわち、処理されたデータおよびフォーマットされたコマンドをプログラマブルグラフィック処理スパイプライン150に出力する。プログラマブルグラフィックス処理パイプライン150およびラスタ演算ユニット160は、それぞれ、様々な専門的機能を実行するための1つ以上のプログラマブル処理ユニットを含む。これらの機能のいくつかは、テーブルルックアップ、スカラー加算およびベクトル加算、乗算、除算、座標マッピング、ベクトル法線の計算、テッセレーション、導関数の計算、補間などである。プログラマブルグラフィックス処理パイプライン150およびラスタ演算ユニット160は、それぞれ、データ処理演算がこれらのユニットを介してマルチパスで実行されるように、あるいは、プログラマブルグラフィックス処理パイプライン150内においてマルチパスで実行されるように、場合によって構成される。ラスタ演算ユニット160は、メモリーコントローラ120への書き込みインタフェースを含み、その書き込みインタフェースを介して、データをメモリーに書き込むことができる。
【0016】
[0026]典型的なインプレメンテーションにおいては、プログラマブルグラフィックス処理パイプライン150は、幾何学計算、ラスタライゼーション、およびフラグメント計算を実行する。したがって、プログラマブルグラフィックス処理パイプライン150は、サーフェイス、プリミティブ、頂点、フラグメント、画素、サンプル、または、その他の何らかのデータを操作するようにプログラムされる。簡潔に、以下の説明では、サーフェイス、プリミティブ、頂点、画素、フラグメントなどのようなグラフィックスデータに言及するのに「サンプル」という用語を使用する。
【0017】
[0027]プログラマブルグラフィックス処理パイプライン150によって出力されるサンプルは、ラスタ演算ユニット160に転送され、そのラスタ演算ユニット160は、ステンシル、Zテストなどのような、近平面および遠平面クリッピングおよびラスタ演算を場合によって実行し、その結果またはプログラマブルグラフィックス処理パイプライン150によって出力されたサンプルをローカルメモリー140に保存する。グラフィックスサブシステム170によって受け取られたデータが、グラフィックスプロセッサー105によって完全に処理されると、グラフィックスサブシステム170の出力185は、出力コントローラ180を用いて提供される。出力コントローラ180は、表示装置、ネットワーク、電子制御システム、コンピューティングシステム100のようなその他のコンピューティングシステム、その他のグラフィックスサブシステム170などにデータを供給するように場合によって構成される。あるいは、データは、フィルム記録装置に出力され、あるいは、周辺装置、例えば、ディスクドライブ、テープ、コンパクトディスクなどに書き込まれる。
【0018】
[0028]図2は、図1のプログラマブルグラフィックス処理パイプライン150を示す図である。少なくとも一組のサンプルが、IDX135によって出力され、プログラマブルグラフィックス処理パイプライン150によって受け取られ、そして、少なくとも一組のサンプルは、少なくとも1つのプログラムによって処理され、その少なくとも1つのプログラムは、グラフィックスプログラム命令を含む。プログラムは、1つ以上の組のサンプルを処理してもよい。逆に、一組のサンプルは、連続する1つ以上のプログラムによって処理されてもよい。プログラマブルグラフィックス処理パイプライン150のいくつかの実施形態は、フラグメントデータを生成するためのプリミティブデータのラスタライゼーションのような特定の機能を実行するように構成されたさらなるユニットを含む。
【0019】
[0029]例えば、サーフェイス、プリミティブ、処理されたデータなどのようなサンプルは、IDX135からプログラマブルグラフィックス処理パイプライン150によって受け取られる。サーフェイスは、プリミティブを生成するために、ストリーミングマルチプロセッサー200によって処理されてもよく、プリミティブは、頂点を生成するために、ストリーミングマルチプロセッサー200によって処理されてもよく、頂点は、フラグメントを生成するために、ストリーミングマルチプロセッサー200によって処理されてもよい。本発明の代替の実施形態においては、1つ以上のストリーミングマルチプロセッサー200が、ホストプロセッサー114のような汎用プロセッサー内に含められる。プログラマブルグラフィックス処理パイプライン150は、図2に示されるように、1つ以上のストリーミングマルチプロセッサー200を含む。それぞれのストリーミングマルチプロセッサー200は、本明細書でさらに詳細に説明される少なくとも1つかまたは複数の実行ユニット270を含む。サンプルは、ストリーミングマルチプロセッサー200のいずれかによって処理されてもよい。ストリーミングマルチプロセッサー200のいくつかの実施形態においては、読み出しインタフェース(図2には示されない)が、テクスチャーマップのようなグラフィックスデータをローカルメモリー140またはホストメモリー112からメモリーコントローラ120を介して読み出すのに使用される。本明細書でさらに詳細に説明されるように、ストリーミングマルチプロセッサー200内の処理スレッドが、利用可能である場合、サンプルは、ストリーミングマルチプロセッサー200によって受け入れられる。
【0020】
[0030]ストリーミングマルチプロセッサー200内のスレッド制御ユニット220は、サンプルと、サンプルを処理するために実行されるべき一連のプログラム命令へのポインタとを受け取る。スレッド制御ユニット320は、処理されるべきそれぞれのサンプルにスレッドを割り当てる。スレッドは、プログラム内の最初の命令のようなプログラム命令へのポインタ(プログラムカウンタ)、スレッド状態情報、およびサンプルの処理中に使用および生成されるオペランドを記憶するための記憶資源を含む。スレッドを処理するのに必要な資源、例えば、オペランドまたはスレッド状態情報を記憶するための記憶資源が、利用できないとき、ストリーミングマルチプロセッサー200は、処理するためのさらなるサンプルを受け入れない。スレッドに関連するプログラム命令が、実行を完了すれば、スレッドの実行中に受け取られかつ生成されたオペランドを記憶するために割り付けられた記憶資源、例えば、レジスタは、別のスレッドに割り付けることが可能となり、すなわち、その記憶資源は、割り付け解除され、スレッド制御ユニット220において、スレッドは、利用可能なものとしてフラグをセットされる。
【0021】
[0031]スレッド制御ユニット220は、オペランドを記憶するのに必要な記憶資源の量を指定する割り付け情報をレジスタアドレスユニット240へ出力する。スレッド制御ユニット220は、ポインタおよびサンプルを命令ユニット230へ出力する。クロックサイクルごとにスレッド制御ユニット220から命令ユニット230へ出力されてもよいポインタおよびサンプルの数は、本発明の様々な実施形態間で異なっていてもよい。
【0022】
[0032]命令ユニット230は、ローカルメモリー140またはホストメモリー112からメモリーコントローラ120を介してプログラム命令を読み出すために、専用の読み出しインタフェースを使用する。本発明の代替の実施形態においては、ただ1つの命令ユニット230が、ストリーミングマルチプロセッサー200間で共有される。本発明のいくつかの実施形態においては、命令ユニット230は、命令キャッシュを含む。
【0023】
[0033]命令ユニット230は、ジャンプ命令、コール命令/リターン命令、または、ブランチ命令のようなデータを処理しない命令を実行する。命令ユニット230は、プログラム命令の実行をスケジュールし、アクティブであるすべてのスレッド、すなわち、サンプルに割り当てられたすべてのスレッドを処理するために、プログラム命令をインターリーブする。本発明のいくつかの実施形態においては、命令ユニット230は、スレッドに割り付けられたレジスタファイルユニット250内のレジスタの特定のロケーション、例えば、レジスタが配置されたバンクを指定する付加的情報を使用せずに、プログラム命令の実行をスケジュールする。
【0024】
[0034]命令ユニット230は、スレッドのためのプログラム命令をスケジュールするとき、固定優先順位またはプログラム可能優先順位を使用するように構成されてもよい。例えば、頂点プログラム命令を処理するために割り付けられたスレッドは、常に、フラグメントプログラム命令を処理するために割り付けられたスレッドよりも高い優先順位を取得してもよい。別の例においては、オペランドを記憶するために多くの数のレジスタを必要とするスレッドは、オペランドを記憶するためにより少ないレジスタを必要とするスレッドよりも高い優先順位を有してもよい。本発明のいくつかの実施形態においては、命令ユニット230は、特定のスレッドのためのレジスタの使用率を指示する情報をレジスタファイルユニット250から受け取り、それに応じて、命令ユニット230は、特定のスレッドの優先順位を調節し、レジスタファイルユニット250内にあるレジスタの使用率を減少または増加させる。
【0025】
[0035]本発明の他の実施形態においては、命令ユニット230は、レジスタファイルユニット250内にあるレジスタの特定のロケーションを指定する付加的情報を用いて、プログラム命令の実行をスケジュールする。例えば、プログラム命令は、命令の1つ以上のオペランドが記憶されたレジスタファイルユニット250内にあるバンクに基づいて、いくつかのグループに事前にソートされる。命令ユニット230は、それぞれのグループから1つのプログラム命令をラウンドロビン方式で選択し、クロックサイクルごとに1つ以上のプログラム命令をレジスタアドレスユニット240へ出力する。
【0026】
[0036]命令ユニット230は、プログラム命令およびサンプルをレジスタアドレスユニット240へ出力する。レジスタアドレスユニット240は、図3および図5を参照して説明されるように、それぞれのスレッドによって指定されたオペランドを記憶したレジスタファイルユニット250内のレジスタにアクセスする。レジスタアドレスユニット240は、それぞれのプログラム命令のための要求を出力する。要求の例は、特定のオペランドのための読み出し要求または特定のオペランドのための書き込み要求を含む。本発明の一実施形態においては、レジスタアドレスユニット240は、それぞれのクロックサイクル中に、ただ1つの命令のための要求を出力する。例えば、ロード命令(LD)の場合には、1つの書き込み要求が、オペランドをレジスタに書き込むために、出力される。同様に、乗算加算(MAD)命令の場合には、3つの読み出し要求(ソースオペランドごとに1つの)および1つの書き込み要求(デスティネーションオペランドのための)が出力される。
【0027】
[0037]レジスタアドレスユニット240は、要求、およびそれに対応するプログラム命令、例えば、MADをレジスタファイルユニット250へ出力する。レジスタファイルユニット250は、要求を処理し、レジスタファイルユニット250内にあるレジスタへオペランドを読み出し、レジスタファイルユニット250内にあるレジスタからオペランドを書き込む。レジスタファイルユニット250は、ライトバック競合およびサイクルベース競合を回避するために、要求の処理をスケジュールする。本発明のいくつかの実施形態においては、レジスタファイルユニット250は、オペランドの状態を追跡するために、スコアボードユニットを使用し、レジスタに書き込み、オペランドがレジスタからいつ読み出されたかを判定する。
【0028】
[0038]読み出し要求が処理され、プログラム命令を処理するのに必要なオペランドが、取り込まれると、レジスタファイルユニット250は、オペランドのすべてがいつ取り込まれたかを判定し、そして、処理するための1つかまたは複数の実行ユニット270へプログラム命令およびオペランドを出力する。1つかまたは複数の実行ユニット270は、プログラム命令によって指定されたデスティネーションオペランドに書き込まれるべき処理されたオペランドをレジスタファイルユニット250へ戻す。実行パイプライン240は、テッセレーション、パースペクティブ補正、補間、シェーディング、ブレンディングなどのような演算を実行するように、プログラム命令によって構成される。処理されたサンプルは、それぞれの実行パイプライン240からラスタ演算ユニット160へ出力される。本発明のいくつかの実施形態においては、さらなる実行パイプライン240が、レジスタファイルユニット250およびラスタ演算ユニット160に結合される。
【0029】
[0039]図3は、本発明の1つ以上の態様に基づいた図2に示されるレジスタファイルユニット250の例示的な実施形態のブロック図である。本発明の代替の実施形態においては、レジスタファイルユニット250は、ホストプロセッサー114のような汎用プロセッサー内おいて使用される。レジスタファイルユニット250は、2つ以上のメモリーバンク、すなわち、シングルマルチポートメモリーをシミュレートするように構成されたバンク320を含む。それぞれのバンク320は、オペランドを記憶するように構成されたレジスタの役割をなすいくつかのロケーションを含む。それぞれの収集ユニット330は、要求およびそれに対応するプログラム命令をレジスタアドレスユニット240から受け取り、そのプログラム命令が収集ユニット330に結合された特定の実行ユニット365によって実行されるべき命令であるかどうかを判定する。プログラム命令が、収集ユニット330に結合された特定の実行ユニット365によって実行されるべき命令であれば、収集ユニット330は、そのプログラム命令を受け入れ、処理を要求する。本発明のいくつかの実施形態においては、それぞれの実行ユニット365は、同一のものであり、優先順位体系が、どの実行ユニット365がプログラム命令を実行するかを決定するのに使用される。本発明の代替の実施形態は、命令を最小負荷の実行ユニット365に割り当てる。本発明のいくつかの実施形態においては、2つ以上の収集ユニット330が、ただ1つの実行ユニット365に結合され、優先順位体系が、2つ以上の収集ユニット330のどれがオペランドを実行するためのただ1つの実行ユニット365に出力するかを選択するのに使用される。
【0030】
[0040]それぞれの収集ユニット330は、受け入れられたプログラム命令のための要求をバンク要求調停ユニット310のいずれかに出力する。それぞれのバンク要求調停ユニット310は、要求がバンク要求調停ユニット310に結合された特定のバンク320内のレジスタを読み出すことを必要とするかどうかを判定する。考えられるいくつかのレジスタ割り付けが、図4A、図4B、図4C、図4D、図4E、および図4Fを参照して説明される。それぞれの要求は、1つのバンク要求調停ユニット310によってバンク320へ出力され、そのバンク320において、要求において指定されたオペランドに割り当てられるレジスタが配置される。受け入れられたプログラム命令は、オペランドを集めるように指示された収集ユニット330に残る。それぞれのバンク要求調停ユニット310は、また、異なる収集ユニット330同士を調停し、1クロックサイクル当たり1つの要求を、バンク要求調停ユニット310に結合されたバンク320へ出力する。
【0031】
[0041]それぞれのバンク320は、バンク要求調停ユニット310から要求を受け取るための読み出し要求ポートを含む。それぞれのバンク320は、また、1つかまたは複数の実行ユニット270から書き込み要求を受け取るための書き込み要求ポートを含み、処理されたデータを、プログラム命令によって指定されたオペランドに割り当てられたデスティネーションレジスタに書き込む。したがって、2つのバンクの低ポート数メモリー(1つの書き込みポートおよび1つの読み出しポート)が、2つの書き込みポートおよび2つの読み出しポートを備えるマルチポートメモリーをシミュレートするのに使用される。本発明のいくつかの実施形態においては、さらなる要求ポートが使用される。本発明の代替の実施形態においては、読み出し要求ポートは、書き込み要求ポートと組み合わせられ、シングルポートメモリーにアクセスする。1クロックサイクル中、それぞれのバンク320は、読み出し要求によって指定されたオペランドを対応する収集ユニット330へセレクタ325を介して出力してもよい。したがって、プログラム命令が、ソースデータのための3つのオペランドを指定する場合、それらが、同じバンク320内に存在すれば、少なくとも3つのクロックサイクルが、オペランドを集めるのに必要とされる。それぞれの収集ユニット330は、また、バンク320の外部にあるレジスタ(図示しない)に記憶された定数および中間データのようなソースデータを集めてもよい。セレクタ325は、バンク320内に記憶されていないソースデータを入力(図示しない)から受け取る。オペランドのすべてが、収集ユニット330によって集められると、プログラム命令は、ディスパッチされる準備ができた状態となる。本発明のいくつかの実施形態においては、1クロックサイクル中に読み出されるオペランドの数を増加させるために、さらなるバンク要求調停ユニット310、バンク320、セレクタ325、および収集ユニット330が含められる。本発明の一実施形態においては、セレクタ325は省かれ、それぞれのバンク320は、収集ユニット330に直接に結合される。
【0032】
[0042]プログラム命令のためのオペランドのすべてが、収集ユニット330によって集められると、プログラム命令およびオペランドは、処理のために、収集ユニット330によって、収集ユニット330に結合された実行ユニット365へ出力される。プログラム命令の実行が完了すると、デスティネーションオペランドが、プログラム命令によって指定されていれば、実行ユニット365は、書き込み要求をバンク320の中の1つへ出力する。1つかまたは複数の実行ユニット270は、また、処理されたオペランドをラスタ演算ユニット160へ出力してもよい。本発明のいくつかの実施形態においては、それぞれの実行ユニット365は、1つよりも多い命令を処理し、1クロックサイクル当たり1つよりも多い命令であるスループットをもたらす。異なる命令の実行は、それらが実行ユニット365によって処理されるとき、異なる待ち時間がかかる可能性がある。
【0033】
[0043]本発明の一実施形態においては、スレッドを処理するためにオペランドを記憶するレジスタは、バンク320のようなただ1つのバンク内に割り付けられてもよい。そのような割り付けは、「薄い」割り付け方式と呼ばれる。図4Aは、本発明の1つ以上の態様に基づいて、スレッドを処理するためのレジスタを4つのバンク内に薄く割り付ける例示的な実施形態である。図4Aにおいて、スレッドAを処理するためにオペランドを記憶するレジスタは、バンク0内に割り付けられ、スレッドBを処理するためにオペランドを記憶するレジスタは、バンク1内に割り付けられ、スレッドCを処理するためにオペランドを記憶するレジスタは、バンク2内に割り付けられ、そして、スレッドDを処理するためにオペランドを記憶するレジスタは、バンク3内に割り付けられる。さらなるスレッドを処理するためにオペランドを記憶するレジスタは、バンク0、バンク1、バンク2、および/または、バンク3内に割り付けられてもよい。本発明の代替の実施形態においては、より少ないかまたはより多いバンクが使用される。
【0034】
[0044]本発明の別の実施形態においては、1つのスレッドを処理するためにオペランドを記憶するレジスタは、4つのバンクのそれぞれの中に割り付けられてもよく、それぞれのバンクは、バンク320であってもよい。そのような割り付けは、「厚い」割り付け方式と呼ばれる。図4Bは、本発明の1つ以上の態様に基づいて、スレッドを処理するためのレジスタを4つのバンク内に厚く割り付ける例示的な実施形態である。図4Bにおいて、スレッドAを処理するためにオペランドを記憶するレジスタは、バンク0、バンク1、バンク2、およびバンク3内に割り付けられる。スレッドB、C、およびDを処理するためにオペランドを記憶するレジスタは、同様に、バンク0、バンク1、バンク2、およびバンク3内に割り付けられる。本発明の代替の実施形態においては、より少ないかまたはより多いバンクが使用される。
【0035】
[0045]本発明のいくつかの実施形態においては、スレッドを処理するためのレジスタは、厚い割り付け方式または薄い割り付け方式のいずれかによる特定の数のレジスタを表現する「バンクカウント」ユニット内に割り付けられる。割り付けのために次に利用可能なレジスタを指示するレジスタベースアドレスは、バンク0内において追跡されてもよく、その他のバンク内における次に利用可能なレジスタは、バンクカウント、割り付け方式、およびレジスタベースアドレスを用いて、決定されてもよい。
【0036】
[0046]さらなるスレッドを処理するためにオペランドを記憶するレジスタは、厚い割り付けまたは薄い割り付けのいずれかを用いて、バンク0、バンク1、バンク2、および/または、バンク3内に割り付けられてもよい。しかしながら、厚い割り付けおよび薄い割り付けを混合することは、図4Cに示されるように、割り付けに利用可能なレジスタを有効に利用できないことになる可能性がある。例えば、スレッドAのような第1のスレッドが、バンク0内において薄い割り付けを使用し、スレッドBのような第2のスレッドが、4つのバンクのそれぞれの中において厚い割り付けを使用すると、薄い割り付けを使用する第3のスレッドは、第1のスレッドが完了するまで、待たされることがある。あるいは、本発明のいくつかの実施形態においては、図4Dに示されるように、厚い割り付け方式は、それぞれのバンクの最上部から実施されてもよく、また、薄い割り付け方式は、それぞれのバンクの最下部から実施されてもよい。スレッドAおよびBは、厚い割り付けを使用し、スレッドCおよびDは、薄い割り付けを使用する。割り付けのこの「分割」は、同じ割り付け方式をまとめるのを可能にし、割り付けに利用可能なレジスタをより効率的に利用させる。
【0037】
[0047]厚い割り付けが、スレッドに使用される場合、それぞれのオペランドに割り当てられたロケーションは、単純に、順次に進められてもよい。図4Eは、本発明の1つ以上の態様に基づいて、スレッドにレジスタを順次に割り当てる例示的な実施形態である。例えば、オペランド400Aを記憶するために割り当てられたスレッドAに割り付けられたレジスタは、バンク0内に配置され、それは、オペランド400Bを記憶するために割り当てられたスレッドBに割り付けられたレジスタの場合にも同様である。スレッドAおよびスレッドBが、同じプログラム命令を実行していれば、スレッドAおよびスレッドBが、スレッドAのためのオペランド400AおよびスレッドBのためのオペランド400Bを読み出すプログラム命令を処理するとき、バンク競合が発生する可能性がある。オペランド400Bおよびオペランド400Aが、同じバンク内に記憶されていなければ、バンク競合は回避される可能性がある。
【0038】
[0048]位相値が、レジスタ割り当て処理中に使用されてもよく、それによって、同じプログラム命令を処理するスレッドは、同じバンク内に存在するレジスタに割り当てられたプログラム命令によって指定されたそれらの対応するオペランドを有することはない。図4Fは、本発明の1つ以上の態様に基づいた位相値を用いて、スレッドにレジスタを割り当てる例示的な実施形態である。例えば、オペランド410Aを記憶するために割り当てられたスレッドAに割り付けられたレジスタは、バンク0内に配置され、オペランド410Bを記憶するために割り当てられたスレッドBに割り付けられたレジスタは、バンク1内に配置される。スレッドAおよびスレッドBが、同じプログラム命令を実行していれば、スレッドAおよびスレッドBが、スレッドAのためのオペランド410AおよびスレッドBのためのオペランド410Bを読み出すプログラム命令を処理するとき、バンク競合は、発生しない。本発明の代替の実施形態においては、レジスタは、再配置され、それによって、同じプログラム命令を処理するスレッドは、同じバンク内に存在するレジスタに割り当てられたプログラム命令によって指定されたそれらの対応するオペランドを有することはない。例えば、4つのバンクの場合、割り当てられたレジスタ番号の下位2ビットが、レジスタが割り付けられるスレッドに対応する固有の位相値と排他的論理和(XOR)をとられてもよい。本発明の代替の方法は、バンクの番号を法とする位相値のモジュロを割り当てられたレジスタの番号に加算することである。
【0039】
[0049]厚い割り付けが、レジスタに使用される場合、プログラム命令を処理するのに必要な2つ以上のオペランドが、2つ以上の異なるバンク内のレジスタに割り当てられる可能性がある。例えば、スレッドAのためのプログラム命令が、オペランド414Aおよび415Aを指定するならば、読み出し要求は、一方がバンク0に結合されかつ他方がバンク1に結合された2つの異なる要求キュー310にキューイングされる。同様に、オペランド414Aは、バンク0に結合された収集ユニット330へ出力され、オペランド415Aは、バンク1に結合された収集ユニット330へ出力される。ただ1つの収集ユニット330は、プログラム命令ごとのオペランドを集めるので、メカニズムが、異なるバンクと収集ユニット330との間でオペランドを転送するのを可能にするために使用される。
【0040】
[0050]図5は、本発明の1つ以上の態様に基づいた、図2のレジスタファイルユニットの別の例示的な実施形態のブロック図であり、クロスバ525および複数のバンク320を含み、それぞれのバンク320は、バンク要求調停ユニット310に結合される。クロスバ525は、いずれかのバンク320から出力されるオペランドをいずれかの収集ユニット330の入力へルーティングできるように構成される。したがって、プログラム命令によって指定されたオペランドのすべては、ただ1つの収集ユニット330によって収集されてもよい。図3を参照して説明されたように、それぞれの収集ユニット330は、プログラム命令によって指定されたオペランドをいずれかのバンク320から集める。クロスバ525が使用される場合、スレッドスケジューリングおよびレジスタ割り付け(厚いかまたは薄い)は、バンク320の数が収集ユニット330の総数に等しい場合よりも効率的に進行することが可能である。
【0041】
[0051]ディスパッチャーユニット540が、一組の収集ユニット330と実行ユニットB575との間に結合される。ディスパッチャーユニット540は、プログラム命令およびそれに対応するオペランド、例えば、いくつかの入力を、組の中のそれぞれの収集ユニット330から受け取ってもよく、それによって、ディスパッチャーユニット540は、組の中の収集ユニット330同士を調停する。本発明のいくつかの実施形態においては、ディスパッチャーユニット540は、ラウンドロビン方式で調停する。本発明の代替の実施形態においては、組の中のそれぞれの収集ユニット330は、対応する優先順位を有し、その優先順位に基づいて、ディスパッチャーユニット540は、それぞれの収集ユニット330から入力を受け入れる。例えば、一方の収集ユニット330は、他方の収集ユニット330よりも高い優先順位を有してもよく、プログラム命令およびオペランドを得ることができるならば、ディスパッチャーユニット540は、常に、一方の収集ユニット330から入力を受け入れる。
【0042】
[0052]ただ1つの収集ユニット330が、実行ユニットA565に直接に結合される。実行ユニットA565は、実行ユニットB575が実行するようには構成されていない特定の命令を実行するように構成されてもよい。したがって、ただ1つの収集ユニット330が、実行ユニットA565によって実行されるプログラム命令(および要求)を受け入れ、一組の収集ユニット330は、実行ユニットB575によって実行されるプログラム命令(および要求)を受け入れる。
【0043】
[0053]図6Aは、本発明の1つ以上の態様に基づいて、スレッドを処理するためにレジスタを割り付ける方法の実施形態を示す。ステップ600において、スレッドのためのレジスタ割り付け要求が、レジスタアドレスユニット240によってスレッド制御ユニット220から受け取られる。ステップ605において、レジスタアドレスユニット240は、スレッドを処理するのに必要なレジスタのサイズすなわち数が固定値またはプログラム可能な値Xよりも小さいかまたはそれに等しいかどうかを判定する。レジスタアドレスユニット240が、サイズがXよりも大きいと判定すれば、ステップ610において、レジスタアドレスユニット240は、複数のバンク320内にすなわち厚い割り付けでオペランドを記憶するレジスタを割り付ける。ステップ615において、レジスタアドレスユニット240は、ベースポインタを更新する。ベースポインタは、バンク320内において割り付け可能な最初のロケーションを指示する。
【0044】
[0054]ステップ620において、レジスタアドレスユニット240は、位相値を更新し、それによって、それに続くスレッドに割り付けられるオペランドに割り当てられるレジスタが、ステップ610において割り付けられたレジスタに対してスキューされる。ステップ625において、レジスタアドレスユニット240は、位相値がNに等しいかどうかを判定し、ここで、Nは、バンク320の数である。ステップ625において、レジスタアドレスユニット240が、位相値はNに等しいと判定すれば、ステップ630において、レジスタアドレスユニット240は位相値を0にセットし、ステップ670に進む。ステップ625において、レジスタアドレスユニット240が、位相値はNに等しくないと判定すれば、レジスタアドレスユニット240は、ステップ670に進み、割り付け情報をレジスタファイルユニット250内の要求配信ユニット300へ出力する。
【0045】
[0055]ステップ605において、レジスタアドレスユニット240が、サイズはXよりも小さいかまたはXに等しいと判定すれば、ステップ635において、レジスタアドレスユニット240は、薄い割り付けに利用可能なバンク320がN−1であるかどうかを判定する。ステップ635において、レジスタアドレスユニット240が、割り付け可能なバンク320はバンクインジケータによって指定されるようにバンクN−1であると判定すれば、ステップ650において、レジスタアドレスユニット240は、ベースを更新し、割り付け可能な最初のロケーションを指示し、ステップ645に進む。ステップ635において、レジスタアドレスユニット240が、割り付け可能なバンク320はバンクN−1ではないと判定すれば、ステップ640において、レジスタアドレスユニット240は、バンクインジケータを1だけインクリメントすることによって、バンクインジケータを更新する。ステップ645において、レジスタアドレスユニット240は、バンクインジケータによって指示されるただ1つのバンク320内にすなわち薄い割り付けでオペランドを記憶するレジスタを割り付け、ステップ670に進む。上述したように、ステップ670において、レジスタアドレスユニット240は、割り付け情報をレジスタファイルユニット250内の要求配信ユニット300へ出力する。
【0046】
[0056]図6Bは、本発明の1つ以上の態様に基づいて、スレッドを処理するためにレジスタを割り付ける別の方法の実施形態を示す。ステップ600において、レジスタアドレスユニット240は、厚いまたは薄い割り付け方式を含むレジスタ割り付け要求を受け取る。本発明のいくつかの実施形態においては、プログラム命令がコンパイルされ、そして、ドライバによってレジスタアドレスユニット240に提供されるときに、割り付け方式が決定される。ステップ603において、レジスタアドレスユニット240は、指定された割り付け方式が薄いかどうかを判定し、もしそうであれば、図6Aを参照して上述したように、ステップ610、615、620、625、630、および670に進む。ステップ603において、レジスタアドレスユニット240が、指定された割り付け方式は薄くないと判定すれば、レジスタアドレスユニット240は、図6Aを参照して上述したように、ステップ635、640、645、および670に進む。
【0047】
[0057]図6Cは、本発明の1つ以上の態様に基づいて、スレッドを処理するためにレジスタを割り付ける別の方法の実施形態を示す。ステップ600において、レジスタアドレスユニット240は、厚いまたは薄い割り付け方式を含むレジスタ割り付け要求を受け取る。ステップ603において、レジスタアドレスユニット240は、指定された割り付け方式が薄いかどうかを判定し、もしそうであれば、ステップ607において、レジスタアドレスユニット240は、バンクインジケータによって指定されるバンク320内において、薄い割り付けが適切であるかどうか、すなわち、必要なレジスタの数が利用可能かどうかを判定する。ステップ607において、レジスタアドレスユニット240が、バンク320内において薄い割り付けは適切であると判定すれば、レジスタアドレスユニット240は、図6Aを参照して上述したように、ステップ635、640、645、650、および670に進む。
【0048】
[0058]ステップ603において、レジスタアドレスユニット240が、指定された割り付け方式は薄くないと判定すれば、レジスタアドレスユニット240は、図6Aを参照して上述したように、ステップ610、615、620、625、630、および670に進む。ステップ607において、レジスタアドレスユニット240が、バンク230内において薄い割り付けは適切ではないと判定すれば、レジスタアドレスユニット240は、同様に、図6Aを参照して上述したように、ステップ610、615、620、625、630、および670に進む。
【0049】
[0059]このように、当業者は、図6A、図6B、図6C、または、それらに等価なものの方法ステップを実行するように構成されたどのようなシステムも本発明の範囲内に存在することがわかるはずである。さらに、当業者は、図6A、図6B、図6Cの方法ステップはマルチポートメモリーをシミュレートするために任意の数のバンクを含むレジスタファイルユニットをサポートするように拡張されてもよいことがわかるはずである。
【0050】
[0060]特定の実施形態を参照して、本発明が先に説明されたが、添付の特許請求の範囲に規定される本発明のより広い精神および範囲を逸脱することなく、様々な修正および変更が、それに対してなされてもよいことは明白なことである。したがって、本明細書でなされた説明および図面は、限定するものではなく、説明するためのものであると考えられるべきである。方法の請求項において記載されるステップは、請求項において明白に規定されない限り、何らかの特定の順序で実行されることを意味するものではない。
【0051】
[0061]すべての商標は、それらの所有者の個々の財産である。
【特許請求の範囲】
【請求項1】
1つのマルチポートメモリーとして機能するように複数のシングルポートメモリーを構成すると共に、複数のメモリーバンクの中にレジスタを割り付ける方法であって、
前記複数のシングルポートメモリーは、複数のスレッドのうちの少なくとも1つによって実行されるオペランドを記憶するためのレジスタを提供し、
前記複数のメモリーバンクのそれぞれは、前記複数のスレッドのうちの少なくとも1つに関連しており、
前記複数のスレッドのうちの第1のスレッドに割り付けられるレジスタの数を決定するステップと、
前記1つのマルチポートメモリーとして機能するように構成された一組のメモリーバンク内に存在する少なくとも1つのメモリーバンク内のロケーションにおいて前記第1のスレッドに前記数のレジスタを割り付けるステップと、
前記複数のスレッドのうちの前記第2のスレッドに割り付けられるレジスタの数を決定するステップと、
前記1つのマルチポートメモリーとして機能するように構成された一組のメモリーバンク内に存在する少なくとも1つのメモリーバンク内のロケーションにおいて前記第2のスレッドに前記数のレジスタを割り付けるステップと、
前記一組のメモリーバンク内に存在するレジスタから、第1の収集ユニットへ、前記第2のスレッド内に存在する命令によって指定される第1のオペランドを読み込むステップと、
前記一組のメモリーバンク内に存在するレジスタから、第2の収集ユニットへ、前記第1のスレッド内に存在する前記命令によって指定される第2のオペランドを読み込むステップと、
前記命令、前記第1のオペランド、及び、前記第2のオペランドを、前記第1の収集ユニット及び前記第2の収集ユニットのそれぞれから前記第1のスレッド及び前記第2のスレッドへ実行のためにディスパッチするステップと、
を備える方法。
【請求項2】
前記第1のスレッド及び前記第2のスレッドに割り付けられる前記数のレジスタが、いくつかの部分に分割され、それらの部分が、前記一組のメモリーバンク内に存在する2以上のメモリーバンク内に割り付けられる、請求項1に記載の方法。
【請求項3】
前記第1のスレッド及び前記第2のスレッドに割り付けられる前記数のレジスタが、前記一組のメモリーバンク内に存在するただ1つのメモリーバンク内に配置される、請求項1に記載の方法。
【請求項4】
前記数のレジスタの割り付けが、割り付け方式に基づくものであり、当該割り付け方式は、厚い割り付け方式、又は、薄い割り付け方式である、請求項1に記載の方法。
【請求項5】
前記第1のスレッド及び前記第2のスレッドに割り付けられるレジスタの前記数に基づいて前記割り付け方式を決定するステップをさらに備える、請求項4に記載の方法。
【請求項6】
前記割り付け方式をドライバから受け取るステップをさらに備える、請求項4に記載の方法。
【請求項7】
前記第1のスレッド及び前記第2のスレッドが同じ命令を処理するとき、前記第1のスレッド及び前記第2のスレッドが前記一組のメモリーバンクのうちの同一のメモリーバンクからオペランドを読み込まないように、前記第1のスレッド及び前記第2のスレッドのために割り付けられた一組のレジスタ内に存在するレジスタを、それぞれのレジスタを割り当てるための前記第1のスレッド及び前記第2のスレッドに関連する位相値を用いて、少なくとも1つのメモリーバンクに割り当てるステップをさらに備える、請求項1に記載の方法。
【請求項8】
グラフィックスプログラム命令のためのオペランドを複数のシングルポートメモリーへ記憶するための、及び、複数のシングルポートメモリーから出力するためのレジスタファイルユニットであって、
1つのマルチポートメモリーとして機能し、第1のスレッドのためのオペランドを記憶するように構成された複数のシングルポートメモリーからなる第1のメモリーバンクと、
1つのマルチポートメモリーとして機能し、第2のスレッドのためのオペランドを記憶するように構成された複数のシングルポートメモリーからなる第2のメモリーバンクと、
前記第1のスレッドのための前記オペランドを前記第1のメモリーバンクから受け取り、前記第1のスレッドのプログラム命令と前記第1のスレッドの前記プログラム命令によって指定された任意のオペランドとを出力するように構成された第1の収集ユニットと、
前記第2のスレッドのための前記オペランドを前記第2のメモリーバンクから受け取り、前記第2のスレッドのプログラム命令と前記第2のスレッドの前記プログラム命令によって指定された任意のオペランドとを実行のために前記第1のスレッド及び前記第2のスレッドに出力するように構成された第2の収集ユニットと、
を備える、レジスタファイルユニット。
【請求項9】
前記第1の収集ユニット及び前記第2の収集ユニットのいずれか一方が、スレッドのためのオペランドを前記第1のメモリーバンク及び前記第2のメモリーバンクのいずれか一方から受け取るために、前記第1のメモリーバンク及び前記第2のメモリーバンクを前記第1の収集ユニット及び前記第2の収集ユニットに結合するクロスバユニットをさらに備える、請求項8に記載のレジスタファイルユニット。
【請求項10】
オペランド読み出し要求を前記第1のメモリーバンクに出力するように構成された第1のバンク要求調停ユニットと、
オペランド読み出し要求を前記第2のメモリーバンクに出力するように構成された第2のバンク要求調停ユニットと、
をさらに備える、請求項8に記載のレジスタファイルユニット。
【請求項11】
前記第2の収集ユニットに結合され、かつ、前記第1の収集ユニット及び前記第2の収集ユニットと前記第1のスレッド及び前記第2のスレッドとを調停し、前記第1のスレッドの前記プログラム命令および前記第1のスレッドの前記プログラム命令によって指定された任意のオペランドまたは前記第2のスレッドの前記プログラム命令および前記第2のスレッドの前記プログラム命令によって指定された任意のオペランドを出力するように構成されたディスパッチャーユニットをさらに備える、請求項8に記載のレジスタファイルユニット。
【請求項12】
前記ディスパッチャーユニットによって出力された任意のプログラム命令を実行するように構成された実行ユニットをさらに備え、前記ディスパッチャーユニットは、当該ディスパッチャーユニットによって前記第1の収集ユニットと前記第2の収集ユニットとの間に確立された優先順位に基づいて、前記実行ユニットにオペランドを出力する、請求項11に記載のレジスタファイルユニット。
【請求項13】
前記第1の収集ユニットによって出力された任意のプログラム命令を実行するように構成された実行ユニットをさらに備える、請求項11に記載のレジスタファイルユニット。
【請求項14】
複数の追加のメモリーバンク及び複数の追加の収集ユニットを備え、当該複数の追加のメモリーバンクの数と当該複数の追加の収集ユニットの数は異なり、前記クロスバユニットは、いずれかのメモリーバンクから出力されるオペランドを、前記第1の収集ユニット及び前記第2の収集ユニットのうちのいずれかの入力へルーティングできるように構成されている請求項9に記載のレジスタファイルユニット。
【請求項15】
前記第1のスレッド及び前記第2のスレッドのそれぞれに割り付けられる前記数のレジスタが、いくつかの部分に分割され、それらの部分が、前記一組のメモリーバンク内に存在する1つのメモリーバンク内に全て割り付けられる、又は、前記一組のメモリーバンク内に存在する全てのメモリーバンクの間で等しく割り付けられ、
前記一組のメモリーバンク内に存在する前記1つのメモリーバンクは、割り付けのために次に利用可能なレジスタを指示するレジスタベースアドレス、割り付け方式、及び、割り付けられる次のレジスタにおけるレジスタベースアドレスを記憶する請求項1に記載の方法。
【請求項16】
1つ以上のスレッドに割り付けられる前記数のレジスタが、いくつかの部分に分割され、前記レジスタは、厚い割り付け又は薄い割り付けに基づいて割り付けられ、メモリーバンクにおける前記厚い割り付けは、当該メモリーバンクのアドレスの一端から開始され、当該メモリーバンクにおける前記薄い割り付けは、当該メモリーバンクのアドレスの他端から開始される請求項1に記載の方法。
【請求項17】
スレッドを処理するために必要なレジスタの数を決定すると共に、厚い割り付けが使用されるべきか、薄い割り付けが使用されるべきかを決定するためのレジスタアドレスユニットを備え、
前記レジスタアドレスユニットは、前記第1のメモリーバンク及び前記第2のメモリーバンク内において割り付け可能な最初のロケーションを指示するベースポインタを更新するようにさらに構成されている請求項8に記載のレジスタファイルユニット。
【請求項18】
前記レジスタアドレスユニットは、次に続くスレッドに割り付けられるオペランドに割り当てられるレジスタが、既に割り付けられたレジスタに対してスキューされるように、必要なレジスタの数を決定した後に位相値を更新するようにさらに構成されている請求項17に記載のレジスタファイルユニット。
【請求項19】
前記第1の収集ユニット及び前記第2の収集ユニットのそれぞれが、前記第1のスレッド及び前記第2のスレッドのうちの任意のスレッド内の実行すべきプログラム命令のためのオペランドを前記複数のメモリーバンクのうちの2以上のメモリーバンクから収集するように、前記第1のメモリーバンク及び前記第2のメモリーバンクのうちの任意のメモリーバンク内にある前記第1のオペランド及び前記第2のオペランドのうちの任意のオペランドは、クロスバユニットを通して、前記第1の収集ユニット及び前記第2の収集ユニットのうちの任意の収集ユニットに送られることができる請求項1に記載の方法。
【請求項1】
1つのマルチポートメモリーとして機能するように複数のシングルポートメモリーを構成すると共に、複数のメモリーバンクの中にレジスタを割り付ける方法であって、
前記複数のシングルポートメモリーは、複数のスレッドのうちの少なくとも1つによって実行されるオペランドを記憶するためのレジスタを提供し、
前記複数のメモリーバンクのそれぞれは、前記複数のスレッドのうちの少なくとも1つに関連しており、
前記複数のスレッドのうちの第1のスレッドに割り付けられるレジスタの数を決定するステップと、
前記1つのマルチポートメモリーとして機能するように構成された一組のメモリーバンク内に存在する少なくとも1つのメモリーバンク内のロケーションにおいて前記第1のスレッドに前記数のレジスタを割り付けるステップと、
前記複数のスレッドのうちの前記第2のスレッドに割り付けられるレジスタの数を決定するステップと、
前記1つのマルチポートメモリーとして機能するように構成された一組のメモリーバンク内に存在する少なくとも1つのメモリーバンク内のロケーションにおいて前記第2のスレッドに前記数のレジスタを割り付けるステップと、
前記一組のメモリーバンク内に存在するレジスタから、第1の収集ユニットへ、前記第2のスレッド内に存在する命令によって指定される第1のオペランドを読み込むステップと、
前記一組のメモリーバンク内に存在するレジスタから、第2の収集ユニットへ、前記第1のスレッド内に存在する前記命令によって指定される第2のオペランドを読み込むステップと、
前記命令、前記第1のオペランド、及び、前記第2のオペランドを、前記第1の収集ユニット及び前記第2の収集ユニットのそれぞれから前記第1のスレッド及び前記第2のスレッドへ実行のためにディスパッチするステップと、
を備える方法。
【請求項2】
前記第1のスレッド及び前記第2のスレッドに割り付けられる前記数のレジスタが、いくつかの部分に分割され、それらの部分が、前記一組のメモリーバンク内に存在する2以上のメモリーバンク内に割り付けられる、請求項1に記載の方法。
【請求項3】
前記第1のスレッド及び前記第2のスレッドに割り付けられる前記数のレジスタが、前記一組のメモリーバンク内に存在するただ1つのメモリーバンク内に配置される、請求項1に記載の方法。
【請求項4】
前記数のレジスタの割り付けが、割り付け方式に基づくものであり、当該割り付け方式は、厚い割り付け方式、又は、薄い割り付け方式である、請求項1に記載の方法。
【請求項5】
前記第1のスレッド及び前記第2のスレッドに割り付けられるレジスタの前記数に基づいて前記割り付け方式を決定するステップをさらに備える、請求項4に記載の方法。
【請求項6】
前記割り付け方式をドライバから受け取るステップをさらに備える、請求項4に記載の方法。
【請求項7】
前記第1のスレッド及び前記第2のスレッドが同じ命令を処理するとき、前記第1のスレッド及び前記第2のスレッドが前記一組のメモリーバンクのうちの同一のメモリーバンクからオペランドを読み込まないように、前記第1のスレッド及び前記第2のスレッドのために割り付けられた一組のレジスタ内に存在するレジスタを、それぞれのレジスタを割り当てるための前記第1のスレッド及び前記第2のスレッドに関連する位相値を用いて、少なくとも1つのメモリーバンクに割り当てるステップをさらに備える、請求項1に記載の方法。
【請求項8】
グラフィックスプログラム命令のためのオペランドを複数のシングルポートメモリーへ記憶するための、及び、複数のシングルポートメモリーから出力するためのレジスタファイルユニットであって、
1つのマルチポートメモリーとして機能し、第1のスレッドのためのオペランドを記憶するように構成された複数のシングルポートメモリーからなる第1のメモリーバンクと、
1つのマルチポートメモリーとして機能し、第2のスレッドのためのオペランドを記憶するように構成された複数のシングルポートメモリーからなる第2のメモリーバンクと、
前記第1のスレッドのための前記オペランドを前記第1のメモリーバンクから受け取り、前記第1のスレッドのプログラム命令と前記第1のスレッドの前記プログラム命令によって指定された任意のオペランドとを出力するように構成された第1の収集ユニットと、
前記第2のスレッドのための前記オペランドを前記第2のメモリーバンクから受け取り、前記第2のスレッドのプログラム命令と前記第2のスレッドの前記プログラム命令によって指定された任意のオペランドとを実行のために前記第1のスレッド及び前記第2のスレッドに出力するように構成された第2の収集ユニットと、
を備える、レジスタファイルユニット。
【請求項9】
前記第1の収集ユニット及び前記第2の収集ユニットのいずれか一方が、スレッドのためのオペランドを前記第1のメモリーバンク及び前記第2のメモリーバンクのいずれか一方から受け取るために、前記第1のメモリーバンク及び前記第2のメモリーバンクを前記第1の収集ユニット及び前記第2の収集ユニットに結合するクロスバユニットをさらに備える、請求項8に記載のレジスタファイルユニット。
【請求項10】
オペランド読み出し要求を前記第1のメモリーバンクに出力するように構成された第1のバンク要求調停ユニットと、
オペランド読み出し要求を前記第2のメモリーバンクに出力するように構成された第2のバンク要求調停ユニットと、
をさらに備える、請求項8に記載のレジスタファイルユニット。
【請求項11】
前記第2の収集ユニットに結合され、かつ、前記第1の収集ユニット及び前記第2の収集ユニットと前記第1のスレッド及び前記第2のスレッドとを調停し、前記第1のスレッドの前記プログラム命令および前記第1のスレッドの前記プログラム命令によって指定された任意のオペランドまたは前記第2のスレッドの前記プログラム命令および前記第2のスレッドの前記プログラム命令によって指定された任意のオペランドを出力するように構成されたディスパッチャーユニットをさらに備える、請求項8に記載のレジスタファイルユニット。
【請求項12】
前記ディスパッチャーユニットによって出力された任意のプログラム命令を実行するように構成された実行ユニットをさらに備え、前記ディスパッチャーユニットは、当該ディスパッチャーユニットによって前記第1の収集ユニットと前記第2の収集ユニットとの間に確立された優先順位に基づいて、前記実行ユニットにオペランドを出力する、請求項11に記載のレジスタファイルユニット。
【請求項13】
前記第1の収集ユニットによって出力された任意のプログラム命令を実行するように構成された実行ユニットをさらに備える、請求項11に記載のレジスタファイルユニット。
【請求項14】
複数の追加のメモリーバンク及び複数の追加の収集ユニットを備え、当該複数の追加のメモリーバンクの数と当該複数の追加の収集ユニットの数は異なり、前記クロスバユニットは、いずれかのメモリーバンクから出力されるオペランドを、前記第1の収集ユニット及び前記第2の収集ユニットのうちのいずれかの入力へルーティングできるように構成されている請求項9に記載のレジスタファイルユニット。
【請求項15】
前記第1のスレッド及び前記第2のスレッドのそれぞれに割り付けられる前記数のレジスタが、いくつかの部分に分割され、それらの部分が、前記一組のメモリーバンク内に存在する1つのメモリーバンク内に全て割り付けられる、又は、前記一組のメモリーバンク内に存在する全てのメモリーバンクの間で等しく割り付けられ、
前記一組のメモリーバンク内に存在する前記1つのメモリーバンクは、割り付けのために次に利用可能なレジスタを指示するレジスタベースアドレス、割り付け方式、及び、割り付けられる次のレジスタにおけるレジスタベースアドレスを記憶する請求項1に記載の方法。
【請求項16】
1つ以上のスレッドに割り付けられる前記数のレジスタが、いくつかの部分に分割され、前記レジスタは、厚い割り付け又は薄い割り付けに基づいて割り付けられ、メモリーバンクにおける前記厚い割り付けは、当該メモリーバンクのアドレスの一端から開始され、当該メモリーバンクにおける前記薄い割り付けは、当該メモリーバンクのアドレスの他端から開始される請求項1に記載の方法。
【請求項17】
スレッドを処理するために必要なレジスタの数を決定すると共に、厚い割り付けが使用されるべきか、薄い割り付けが使用されるべきかを決定するためのレジスタアドレスユニットを備え、
前記レジスタアドレスユニットは、前記第1のメモリーバンク及び前記第2のメモリーバンク内において割り付け可能な最初のロケーションを指示するベースポインタを更新するようにさらに構成されている請求項8に記載のレジスタファイルユニット。
【請求項18】
前記レジスタアドレスユニットは、次に続くスレッドに割り付けられるオペランドに割り当てられるレジスタが、既に割り付けられたレジスタに対してスキューされるように、必要なレジスタの数を決定した後に位相値を更新するようにさらに構成されている請求項17に記載のレジスタファイルユニット。
【請求項19】
前記第1の収集ユニット及び前記第2の収集ユニットのそれぞれが、前記第1のスレッド及び前記第2のスレッドのうちの任意のスレッド内の実行すべきプログラム命令のためのオペランドを前記複数のメモリーバンクのうちの2以上のメモリーバンクから収集するように、前記第1のメモリーバンク及び前記第2のメモリーバンクのうちの任意のメモリーバンク内にある前記第1のオペランド及び前記第2のオペランドのうちの任意のオペランドは、クロスバユニットを通して、前記第1の収集ユニット及び前記第2の収集ユニットのうちの任意の収集ユニットに送られることができる請求項1に記載の方法。
【図1】
【図2】
【図3】
【図4A】
【図4B】
【図4C】
【図4D】
【図4E】
【図4F】
【図5】
【図6A】
【図6B】
【図6C】
【図2】
【図3】
【図4A】
【図4B】
【図4C】
【図4D】
【図4E】
【図4F】
【図5】
【図6A】
【図6B】
【図6C】
【公開番号】特開2011−238271(P2011−238271A)
【公開日】平成23年11月24日(2011.11.24)
【国際特許分類】
【外国語出願】
【出願番号】特願2011−154233(P2011−154233)
【出願日】平成23年7月12日(2011.7.12)
【分割の表示】特願2007−521508(P2007−521508)の分割
【原出願日】平成17年7月7日(2005.7.7)
【出願人】(501261300)エヌヴィディア コーポレイション (166)
【Fターム(参考)】
【公開日】平成23年11月24日(2011.11.24)
【国際特許分類】
【出願番号】特願2011−154233(P2011−154233)
【出願日】平成23年7月12日(2011.7.12)
【分割の表示】特願2007−521508(P2007−521508)の分割
【原出願日】平成17年7月7日(2005.7.7)
【出願人】(501261300)エヌヴィディア コーポレイション (166)
【Fターム(参考)】
[ Back to top ]