(57)【特許請求の範囲】
【請求項１】
１つのマルチポートメモリーとして機能するように複数のシングルポートメモリーを構成すると共に、複数のメモリーバンクの中にレジスタを割り付ける方法であって、
前記複数のシングルポートメモリーは、複数のスレッドのうちの少なくとも１つによって実行されるオペランドを記憶するためのレジスタを提供し、
前記複数のメモリーバンクのそれぞれは、前記複数のスレッドのうちの少なくとも１つに関連しており、
前記複数のスレッドのうちの第１のスレッドに割り付けられるレジスタの数を決定するステップと、
一組のメモリーバンク内に存在する少なくとも１つのメモリーバンク内のロケーションにおいて前記第１のスレッドに前記数のレジスタを割り付けるステップであって、前記一組のメモリーバンクは、前記複数のシングルポートメモリーからなり、前記複数のシングルポートメモリーは、前記１つのマルチポートメモリーとして機能するように構成された、ステップと、
前記複数のスレッドのうちの前記第２のスレッドに割り付けられるレジスタの数を決定するステップと、
一組のメモリーバンク内に存在する少なくとも１つのメモリーバンク内のロケーションにおいて前記第２のスレッドに前記数のレジスタを割り付けるステップであって、前記一組のメモリーバンクは、前記複数のシングルポートメモリーからなり、前記複数のシングルポートメモリーは、前記１つのマルチポートメモリーとして機能するように構成された、ステップと、
前記一組のメモリーバンク内に存在するレジスタから、第１の収集ユニットへ、前記第２のスレッド内に存在する命令によって指定される第１のオペランドを読み込むステップと、
前記一組のメモリーバンク内に存在するレジスタから、第２の収集ユニットへ、前記第１のスレッド内に存在する前記命令によって指定される第２のオペランドを読み込むステップと、
前記命令、前記第１のオペランド、及び、前記第２のオペランドを、前記第１の収集ユニット及び前記第２の収集ユニットのそれぞれから前記第１のスレッド及び前記第２のスレッドへ実行のためにディスパッチするステップと、
を備え、
前記数のレジスタの割り付けが、割り付け方式に基づくものであり、当該割り付け方式は、厚い割り付け方式、又は、薄い割り付け方式であり、
前記第１のスレッド及び前記第２のスレッドに割り付けられるレジスタの前記数に基づいて前記割り付け方式を決定するステップをさらに備える、方法。
【請求項２】
前記第１のスレッド及び前記第２のスレッドに割り付けられる前記数のレジスタが、いくつかの部分に分割され、それらの部分が、前記一組のメモリーバンク内に存在する２以上のメモリーバンク内に割り付けられる、請求項１に記載の方法。
【請求項３】
前記第１のスレッド及び前記第２のスレッドに割り付けられる前記数のレジスタが、前記一組のメモリーバンク内に存在するただ１つのメモリーバンク内に配置される、請求項１に記載の方法。
【請求項４】
前記割り付け方式をドライバから受け取るステップをさらに備える、請求項１に記載の方法。
【請求項５】
前記第１のスレッド及び前記第２のスレッドが同じ命令を処理するとき、前記第１のスレッド及び前記第２のスレッドが前記一組のメモリーバンクのうちの同一のメモリーバンクからオペランドを読み込まないように、前記第１のスレッド及び前記第２のスレッドのために割り付けられた一組のレジスタ内に存在するレジスタを、それぞれのレジスタを割り当てるための前記第１のスレッド及び前記第２のスレッドに関連する位相値を用いて、少なくとも１つのメモリーバンクに割り当てるステップをさらに備える、請求項１に記載の方法。
【請求項６】
グラフィックスプログラム命令のためのオペランドを複数のシングルポートメモリーへ記憶するための、及び、複数のシングルポートメモリーから出力するためのレジスタファイルユニットであって、
複数のシングルポートメモリーからなる第１のメモリーバンクであって、前記複数のシングルポートメモリーは、１つのマルチポートメモリーとして機能し、第１のスレッドのためのオペランドを記憶するように構成された、第１のメモリーバンクと、
複数のシングルポートメモリーからなる第２のメモリーバンクであって、前記複数のシングルポートメモリーは、１つのマルチポートメモリーとして機能し、第２のスレッドのためのオペランドを記憶するように構成された、第２のメモリーバンクと、
前記第１のスレッドのための前記オペランドを前記第１のメモリーバンクから受け取り、前記第１のスレッドのプログラム命令と前記第１のスレッドの前記プログラム命令によって指定された任意のオペランドとを出力するように構成された第１の収集ユニットと、
前記第２のスレッドのための前記オペランドを前記第２のメモリーバンクから受け取り、前記第２のスレッドのプログラム命令と前記第２のスレッドの前記プログラム命令によって指定された任意のオペランドとを実行のために前記第１のスレッド及び前記第２のスレッドに出力するように構成された第２の収集ユニットと、
を備え、
スレッドを処理するために必要なレジスタの数を決定すると共に、厚い割り付けが使用されるべきか、薄い割り付けが使用されるべきかを決定するためのレジスタアドレスユニットを備え、
前記レジスタアドレスユニットは、前記第１のメモリーバンク及び前記第２のメモリーバンク内において割り付け可能な最初のロケーションを指示するベースポインタを更新するようにさらに構成されている、レジスタファイルユニット。
【請求項７】
前記第１の収集ユニット及び前記第２の収集ユニットのいずれか一方が、スレッドのためのオペランドを前記第１のメモリーバンク及び前記第２のメモリーバンクのいずれか一方から受け取るために、前記第１のメモリーバンク及び前記第２のメモリーバンクを前記第１の収集ユニット及び前記第２の収集ユニットに結合するクロスバユニットをさらに備える、請求項６に記載のレジスタファイルユニット。
【請求項８】
オペランド読み出し要求を前記第１のメモリーバンクに出力するように構成された第１のバンク要求調停ユニットと、
オペランド読み出し要求を前記第２のメモリーバンクに出力するように構成された第２のバンク要求調停ユニットと、
をさらに備える、請求項６に記載のレジスタファイルユニット。
【請求項９】
前記第２の収集ユニットに結合され、かつ、前記第１の収集ユニット及び前記第２の収集ユニットと前記第１のスレッド及び前記第２のスレッドとを調停し、前記第１のスレッドの前記プログラム命令および前記第１のスレッドの前記プログラム命令によって指定された任意のオペランドまたは前記第２のスレッドの前記プログラム命令および前記第２のスレッドの前記プログラム命令によって指定された任意のオペランドを出力するように構成されたディスパッチャーユニットをさらに備える、請求項６に記載のレジスタファイルユニット。
【請求項１０】
前記ディスパッチャーユニットによって出力された任意のプログラム命令を実行するように構成された実行ユニットをさらに備え、前記ディスパッチャーユニットは、当該ディスパッチャーユニットによって前記第１の収集ユニットと前記第２の収集ユニットとの間に確立された優先順位に基づいて、前記実行ユニットにオペランドを出力する、請求項９に記載のレジスタファイルユニット。
【請求項１１】
前記第１の収集ユニットによって出力された任意のプログラム命令を実行するように構成された実行ユニットをさらに備える、請求項９に記載のレジスタファイルユニット。
【請求項１２】
複数の追加のメモリーバンク及び複数の追加の収集ユニットを備え、当該複数の追加のメモリーバンクの数と当該複数の追加の収集ユニットの数は異なり、前記クロスバユニットは、いずれかのメモリーバンクから出力されるオペランドを、前記第１の収集ユニット及び前記第２の収集ユニットのうちのいずれかの入力へルーティングできるように構成されている請求項７に記載のレジスタファイルユニット。
【請求項１３】
前記第１のスレッド及び前記第２のスレッドのそれぞれに割り付けられる前記数のレジスタが、いくつかの部分に分割され、それらの部分が、前記一組のメモリーバンク内に存在する１つのメモリーバンク内に全て割り付けられる、又は、前記一組のメモリーバンク内に存在する全てのメモリーバンクの間で等しく割り付けられ、
前記一組のメモリーバンク内に存在する前記１つのメモリーバンクは、割り付けのために次に利用可能なレジスタを指示するレジスタベースアドレス、割り付け方式、及び、割り付けられる次のレジスタにおけるレジスタベースアドレスを記憶する請求項１に記載の方法。
【請求項１４】
１つ以上のスレッドに割り付けられる前記数のレジスタが、いくつかの部分に分割され、前記レジスタは、厚い割り付け又は薄い割り付けに基づいて割り付けられ、メモリーバンクにおける前記厚い割り付けは、当該メモリーバンクのアドレスの一端から開始され、当該メモリーバンクにおける前記薄い割り付けは、当該メモリーバンクのアドレスの他端から開始される請求項１に記載の方法。
【請求項１５】
前記レジスタアドレスユニットは、次に続くスレッドに割り付けられるオペランドに割り当てられるレジスタが、既に割り付けられたレジスタに対してスキューされるように、必要なレジスタの数を決定した後に位相値を更新するようにさらに構成されている請求項６に記載のレジスタファイルユニット。
【請求項１６】
前記第１の収集ユニット及び前記第２の収集ユニットのそれぞれが、前記第１のスレッド及び前記第２のスレッドのうちの任意のスレッド内の実行すべきプログラム命令のためのオペランドを前記複数のメモリーバンクのうちの２以上のメモリーバンクから収集するように、前記第１のメモリーバンク及び前記第２のメモリーバンクのうちの任意のメモリーバンク内にある前記第１のオペランド及び前記第２のオペランドのうちの任意のオペランドは、クロスバユニットを通して、前記第１の収集ユニット及び前記第２の収集ユニットのうちの任意の収集ユニットに送られることができる請求項１に記載の方法。

【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本発明の１つ以上の態様は、一般的には、データ処理に関し、より詳細には、プログラマブルグラフィックスプロセッサーまたは汎用プロセッサーにおけるマルチポートメモリーをシミュレートするためにシングルポートメモリーを使用することに関する。
【背景技術】
【０００２】
[0002]最近のデータ処理は、２つ以上のオペランドを備える命令を含むプログラム命令を実行するために開発されたシステムおよび方法を含む。オペランドは、プロセッサー内のレジスタに記憶され、プログラムの実行中に、効率的にアクセスされる。乗算および乗算加算のようなある種のプログラム命令は、２つ以上のオペランドを指定する。一般的には、レジスタファイルは、マルチポートメモリーを含み、それによって、それぞれのロケーションが１つのオペランドを記憶する２つ以上のロケーションをシングルクロックサイクルにおいて読み出すことができる。したがって、シングルクロックサイクルにおいて、少なくとも１つのプログラム命令に必要とされるオペランドのすべてを取り込み、そして、実行ユニットに出力することができる。
【０００３】
[0003]シングルポートメモリーと比較すると、マルチポートメモリーは、より大きなダイ面積を必要とし、また、より多くの電力を使用する。しかしながら、マルチポートメモリーとは違って、それぞれのクロックサイクルにおいて、ただ１つのロケーションしか読み出すことができない。したがって、２つ以上のクロックサイクルが、１つのプログラム命令を実行するために必要とされるいくつかのオペランドを取り込むのに必要とされ、マルチポートメモリーと比較した性能を低下させる。
【０００４】
[0004]したがって、より小さいダイ面積およびより少ない電力を用いて、プロセッサー内に存在するマルチポートレジスタファイルの性能優位性を提供することは、望ましいことである。
【発明の概要】
【０００５】
[0005]本発明は、低ポート数メモリーをバンクとして使用してマルチポートメモリーをシミュレートするための新しいシステムおよび方法を含む。メモリーの一部分は、スレッドに関連するデータを記憶するために割り付けられる。スレッドに割り付けられたメモリーの一部分は、ただ１つのバンク内に記憶されてもよく、あるいは、複数のバンク内に記憶されてもよい。ソースオペランドは、１つ以上のバンクから出力されるので、それぞれのバンクに結合された収集ユニットが、プログラム命令を処理するのに必要なソースオペランドを集める。プログラム命令を処理するのに必要なすべてのソースオペランドが集められると、収集ユニットは、ソースオペランドを実行ユニットへ出力する。マルチポートメモリーをシミュレートするために低ポート数メモリーを使用することは、同程度の容量を有するマルチポートメモリーよりも小さいダイ面積しか必要としない。また、マルチポートメモリーをシミュレートするように構成された低ポート数メモリーは、同程度の容量を有するマルチポートメモリーと比較してより少ない所要電力を有する。
【０００６】
[0006]本発明の様々な実施形態は、プロセッサープログラム命令のためのオペランドを記憶するレジスタファイルユニットを含む。レジスタファイルユニットは、第１のスレッドのためのオペランドを記憶するように構成された第１のメモリーバンク、第２のスレッドのためのオペランドを記憶するように構成された第２のメモリーバンク、第１の収集ユニット、および第２の収集ユニットを含む。第１の収集ユニットは、第１のスレッドのためのオペランドを第１のメモリーバンクから受け取り、第１のスレッドのプログラム命令と第１のスレッドのプログラム命令によって指定された任意のオペランドとを出力するように構成される。第２の収集ユニットは、第２のスレッドのためのオペランドを第２のメモリーバンクから受け取り、第２のスレッドのプログラム命令と第２のスレッドのプログラム命令によって指定された任意のオペランドとを出力するように構成される。
【０００７】
[0007]本発明の方法の様々な実施形態は、スレッドに割り付けられるレジスタの数を決定するステップ、およびそのスレッドに上記数のレジスタを、マルチポートメモリーをシミュレートするように構成された一組のメモリーバンク内に存在する少なくとも１つのメモリーバンク内のロケーションに割り付けるステップを含む。
【０００８】
[0008]本発明の様々な実施形態は、プログラム命令のためのオペランドを記憶するためのシステムを含む。そのシステムは、割り付け方式に基づいてスレッドによって使用されるオペランドを記憶するレジスタを割り付ける手段、そのレジスタ内にオペランドを記憶する手段、およびプログラム命令によって指定されるスレッド内に存在する任意のオペランドを集める手段を含む。
【図面の簡単な説明】
【０００９】
【図１】本発明の１つ以上の態様によるそれぞれのコンピュータシステムの例示的な実施形態のブロック図であり、ホストコンピュータおよびグラフィックスサブシステムを含む。
【図２】本発明の１つ以上の態様による図１に示されるプログラマブルグラフィックス処理パイプラインの例示的な実施形態のブロック図である。
【図３】本発明の１つ以上の態様による図２に示されるレジスタファイルユニットの例示的な実施形態のブロック図である。
【図４Ａ】本発明の１つ以上の態様によるスレッドを処理するためにレジスタを割り付ける例示的な実施形態を示す図である。
【図４Ｂ】本発明の１つ以上の態様によるスレッドを処理するためにレジスタを割り付ける他の例示的な実施形態を示す図である。
【図４Ｃ】本発明の１つ以上の態様によるスレッドを処理するためにレジスタを割り付ける他の例示的な実施形態を示す図である。
【図４Ｄ】本発明の１つ以上の態様によるスレッドを処理するためにレジスタを割り付ける他の例示的な実施形態を示す図である。
【図４Ｅ】本発明の１つ以上の態様によるスレッドのためのレジスタを割り当てる例示的な実施形態を示す図である。
【図４Ｆ】本発明の１つ以上の態様によるスレッドのためのレジスタを割り当てる別の例示的な実施形態を示す図である。
【図５】本発明の１つ以上の態様による図２に示されるレジスタファイルユニットの別の例示的な実施形態のブロック図である。
【図６Ａ】本発明の１つ以上の態様によるスレッドを処理するためのレジスタを割り付ける方法の実施形態を示す図である。
【図６Ｂ】本発明の１つ以上の態様によるスレッドを処理するためのレジスタを割り付ける別の方法の実施形態を示す図である。
【図６Ｃ】本発明の１つ以上の態様によるスレッドを処理するためのレジスタを割り付ける別の方法の実施形態を示す図である。
【発明を実施するための形態】
【００１０】
[0009]添付の図面（１つかまたは複数）は、本発明の１つ以上の態様による例示的な実施形態（１つかまたは複数）を示す。しかしながら、添付の図面（１つかまたは複数）は、本発明を図示される実施形態（１つかまたは複数）に限定するものと解釈されるべきではなく、ただ単に説明および理解のためのものである。
【００１１】
[0021]以下の記述においては、本発明をより完全に理解するために、多くの具体的な細部が説明される。しかしながら、当業者には、本発明が１つ以上のそれらの特定の細部を備えることなく実施されてもよいことは明らかなことである。別の例においては、周知の特徴は、本発明を曖昧にしないために、説明されない。
【００１２】
[0022]図１は、参照符号１００によって全体が指示されるコンピューティングシステムを示す図であり、ホストコンピュータ１１０およびグラフィックスサブシステム１７０を含む。コンピューティングシステム１００は、デスクトップコンピュータ、サーバー、ラップトップコンピュータ、パームサイズコンピュータ、タブレットコンピュータ、ゲーム機、携帯情報端末（ＰＤＡ）または携帯電話のような携帯無線端末、コンピュータベースシミュレータなどであってもよい。ホストコンピュータ１１０は、ホストプロセッサー１１４を含み、そのホストプロセッサー１１４は、ホストメモリー１１２と直接にインタフェースをとるためのシステムメモリーコントローラを含んでもよく、あるいは、システムインタフェース１１５を介してホストメモリー１１２と通信してもよい。システムインタフェース１１５は、Ｉ／Ｏ（入力／出力）インタフェースであってもよく、あるいは、ホストメモリー１１２と直接にインタフェースをとるためのシステムメモリーコントローラを含むブリッジデバイスであってもよい。当分野において既知であるシステムインタフェース１１５の例は、Ｉｎｔｅｌ（登録商標）  Ｎｏｒｔｈｂｒｉｄｇｅを含む。
【００１３】
[0023]ホストコンピュータ１１０は、システムインタフェース１１５およびグラフィックスプロセッサー１０５内のグラフィックスインタフェース１１７を介してグラフィックスサブシステム１７０と通信する。グラフィックスインタフェース１１７において受け取られたデータは、フロントエンド１３０に転送されてもよく、あるいは、メモリーコントローラ１２０を介してローカルメモリー１４０に書き込まれてもよい。グラフィックスプロセッサー１０５は、グラフィックスデータおよびプログラム命令を記憶するのにグラフィックスメモリーを使用し、グラフィックスデータは、グラフィックスプロセッサー内に存在するコンポーネントに入力され、あるいはコンポーネントから出力された何らかのデータである。グラフィックスメモリーは、ホストメモリー１１２、ローカルメモリー１４０、グラフィックスプロセッサー１０５内に存在するコンポーネントに結合されたレジスタファイルなどの一部を含んでもよい。
【００１４】
[0024]グラフィックスプロセッサー１０５は、他にもコンポーネントはあるが、特に、ホストコンピュータ１１０からグラフィックスインタフェース１１７を介してコマンドを受け取るフロントエンド１３０を含む。フロントエンド１３０は、コマンドを解釈およびフォーマットし、フォーマットされたコマンドおよびデータをＩＤＸ（インデックスプロセッサー）１３５に出力する。フォーマットされたコマンドのあるものは、メモリーに記憶されたプログラム命令またはグラフィックスデータのロケーションを提供することによってデータの処理を開始するために、プログラマブルグラフィックス処理パイプライン１５０によって使用される。ＩＤＸ１３５、プログラマブルグラフィックス処理パイプライン１５０、およびラスタ演算ユニット１６０は、それぞれ、メモリーコントローラ１２０へのインタフェースを含み、そのインタフェースを介して、メモリー、例えば、ローカルメモリー１４０およびホストメモリー１１２の何らかの組み合わせからプログラム命令およびデータを読み出すことができる。ホストメモリー１１２の一部が、プログラム命令およびデータを記憶するのに使用される場合、グラフィックスプロセッサー１０５によるアクセスの効率を増大させるために、ホストメモリー１１２の一部は、キャッシュされなくてもよい。
【００１５】
[0025]ＩＤＸ１３５は、処理されたデータ、例えば、ラスタ演算ユニットによって書き込まれたデータをメモリーから場合によって読み出し、そして、そのデータ、すなわち、処理されたデータおよびフォーマットされたコマンドをプログラマブルグラフィック処理スパイプライン１５０に出力する。プログラマブルグラフィックス処理パイプライン１５０およびラスタ演算ユニット１６０は、それぞれ、様々な専門的機能を実行するための１つ以上のプログラマブル処理ユニットを含む。これらの機能のいくつかは、テーブルルックアップ、スカラー加算およびベクトル加算、乗算、除算、座標マッピング、ベクトル法線の計算、テッセレーション、導関数の計算、補間などである。プログラマブルグラフィックス処理パイプライン１５０およびラスタ演算ユニット１６０は、それぞれ、データ処理演算がこれらのユニットを介してマルチパスで実行されるように、あるいは、プログラマブルグラフィックス処理パイプライン１５０内においてマルチパスで実行されるように、場合によって構成される。ラスタ演算ユニット１６０は、メモリーコントローラ１２０への書き込みインタフェースを含み、その書き込みインタフェースを介して、データをメモリーに書き込むことができる。
【００１６】
[0026]典型的なインプレメンテーションにおいては、プログラマブルグラフィックス処理パイプライン１５０は、幾何学計算、ラスタライゼーション、およびフラグメント計算を実行する。したがって、プログラマブルグラフィックス処理パイプライン１５０は、サーフェイス、プリミティブ、頂点、フラグメント、画素、サンプル、または、その他の何らかのデータを操作するようにプログラムされる。簡潔に、以下の説明では、サーフェイス、プリミティブ、頂点、画素、フラグメントなどのようなグラフィックスデータに言及するのに「サンプル」という用語を使用する。
【００１７】
[0027]プログラマブルグラフィックス処理パイプライン１５０によって出力されるサンプルは、ラスタ演算ユニット１６０に転送され、そのラスタ演算ユニット１６０は、ステンシル、Ｚテストなどのような、近平面および遠平面クリッピングおよびラスタ演算を場合によって実行し、その結果またはプログラマブルグラフィックス処理パイプライン１５０によって出力されたサンプルをローカルメモリー１４０に保存する。グラフィックスサブシステム１７０によって受け取られたデータが、グラフィックスプロセッサー１０５によって完全に処理されると、グラフィックスサブシステム１７０の出力１８５は、出力コントローラ１８０を用いて提供される。出力コントローラ１８０は、表示装置、ネットワーク、電子制御システム、コンピューティングシステム１００のようなその他のコンピューティングシステム、その他のグラフィックスサブシステム１７０などにデータを供給するように場合によって構成される。あるいは、データは、フィルム記録装置に出力され、あるいは、周辺装置、例えば、ディスクドライブ、テープ、コンパクトディスクなどに書き込まれる。
【００１８】
[0028]図２は、図１のプログラマブルグラフィックス処理パイプライン１５０を示す図である。少なくとも一組のサンプルが、ＩＤＸ１３５によって出力され、プログラマブルグラフィックス処理パイプライン１５０によって受け取られ、そして、少なくとも一組のサンプルは、少なくとも１つのプログラムによって処理され、その少なくとも１つのプログラムは、グラフィックスプログラム命令を含む。プログラムは、１つ以上の組のサンプルを処理してもよい。逆に、一組のサンプルは、連続する１つ以上のプログラムによって処理されてもよい。プログラマブルグラフィックス処理パイプライン１５０のいくつかの実施形態は、フラグメントデータを生成するためのプリミティブデータのラスタライゼーションのような特定の機能を実行するように構成されたさらなるユニットを含む。
【００１９】
[0029]例えば、サーフェイス、プリミティブ、処理されたデータなどのようなサンプルは、ＩＤＸ１３５からプログラマブルグラフィックス処理パイプライン１５０によって受け取られる。サーフェイスは、プリミティブを生成するために、ストリーミングマルチプロセッサー２００によって処理されてもよく、プリミティブは、頂点を生成するために、ストリーミングマルチプロセッサー２００によって処理されてもよく、頂点は、フラグメントを生成するために、ストリーミングマルチプロセッサー２００によって処理されてもよい。本発明の代替の実施形態においては、１つ以上のストリーミングマルチプロセッサー２００が、ホストプロセッサー１１４のような汎用プロセッサー内に含められる。プログラマブルグラフィックス処理パイプライン１５０は、図２に示されるように、１つ以上のストリーミングマルチプロセッサー２００を含む。それぞれのストリーミングマルチプロセッサー２００は、本明細書でさらに詳細に説明される少なくとも１つかまたは複数の実行ユニット２７０を含む。サンプルは、ストリーミングマルチプロセッサー２００のいずれかによって処理されてもよい。ストリーミングマルチプロセッサー２００のいくつかの実施形態においては、読み出しインタフェース（図２には示されない）が、テクスチャーマップのようなグラフィックスデータをローカルメモリー１４０またはホストメモリー１１２からメモリーコントローラ１２０を介して読み出すのに使用される。本明細書でさらに詳細に説明されるように、ストリーミングマルチプロセッサー２００内の処理スレッドが、利用可能である場合、サンプルは、ストリーミングマルチプロセッサー２００によって受け入れられる。
【００２０】
[0030]ストリーミングマルチプロセッサー２００内のスレッド制御ユニット２２０は、サンプルと、サンプルを処理するために実行されるべき一連のプログラム命令へのポインタとを受け取る。スレッド制御ユニット３２０は、処理されるべきそれぞれのサンプルにスレッドを割り当てる。スレッドは、プログラム内の最初の命令のようなプログラム命令へのポインタ（プログラムカウンタ）、スレッド状態情報、およびサンプルの処理中に使用および生成されるオペランドを記憶するための記憶資源を含む。スレッドを処理するのに必要な資源、例えば、オペランドまたはスレッド状態情報を記憶するための記憶資源が、利用できないとき、ストリーミングマルチプロセッサー２００は、処理するためのさらなるサンプルを受け入れない。スレッドに関連するプログラム命令が、実行を完了すれば、スレッドの実行中に受け取られかつ生成されたオペランドを記憶するために割り付けられた記憶資源、例えば、レジスタは、別のスレッドに割り付けることが可能となり、すなわち、その記憶資源は、割り付け解除され、スレッド制御ユニット２２０において、スレッドは、利用可能なものとしてフラグをセットされる。
【００２１】
[0031]スレッド制御ユニット２２０は、オペランドを記憶するのに必要な記憶資源の量を指定する割り付け情報をレジスタアドレスユニット２４０へ出力する。スレッド制御ユニット２２０は、ポインタおよびサンプルを命令ユニット２３０へ出力する。クロックサイクルごとにスレッド制御ユニット２２０から命令ユニット２３０へ出力されてもよいポインタおよびサンプルの数は、本発明の様々な実施形態間で異なっていてもよい。
【００２２】
[0032]命令ユニット２３０は、ローカルメモリー１４０またはホストメモリー１１２からメモリーコントローラ１２０を介してプログラム命令を読み出すために、専用の読み出しインタフェースを使用する。本発明の代替の実施形態においては、ただ１つの命令ユニット２３０が、ストリーミングマルチプロセッサー２００間で共有される。本発明のいくつかの実施形態においては、命令ユニット２３０は、命令キャッシュを含む。
【００２３】
[0033]命令ユニット２３０は、ジャンプ命令、コール命令／リターン命令、または、ブランチ命令のようなデータを処理しない命令を実行する。命令ユニット２３０は、プログラム命令の実行をスケジュールし、アクティブであるすべてのスレッド、すなわち、サンプルに割り当てられたすべてのスレッドを処理するために、プログラム命令をインターリーブする。本発明のいくつかの実施形態においては、命令ユニット２３０は、スレッドに割り付けられたレジスタファイルユニット２５０内のレジスタの特定のロケーション、例えば、レジスタが配置されたバンクを指定する付加的情報を使用せずに、プログラム命令の実行をスケジュールする。
【００２４】
[0034]命令ユニット２３０は、スレッドのためのプログラム命令をスケジュールするとき、固定優先順位またはプログラム可能優先順位を使用するように構成されてもよい。例えば、頂点プログラム命令を処理するために割り付けられたスレッドは、常に、フラグメントプログラム命令を処理するために割り付けられたスレッドよりも高い優先順位を取得してもよい。別の例においては、オペランドを記憶するために多くの数のレジスタを必要とするスレッドは、オペランドを記憶するためにより少ないレジスタを必要とするスレッドよりも高い優先順位を有してもよい。本発明のいくつかの実施形態においては、命令ユニット２３０は、特定のスレッドのためのレジスタの使用率を指示する情報をレジスタファイルユニット２５０から受け取り、それに応じて、命令ユニット２３０は、特定のスレッドの優先順位を調節し、レジスタファイルユニット２５０内にあるレジスタの使用率を減少または増加させる。
【００２５】
[0035]本発明の他の実施形態においては、命令ユニット２３０は、レジスタファイルユニット２５０内にあるレジスタの特定のロケーションを指定する付加的情報を用いて、プログラム命令の実行をスケジュールする。例えば、プログラム命令は、命令の１つ以上のオペランドが記憶されたレジスタファイルユニット２５０内にあるバンクに基づいて、いくつかのグループに事前にソートされる。命令ユニット２３０は、それぞれのグループから１つのプログラム命令をラウンドロビン方式で選択し、クロックサイクルごとに１つ以上のプログラム命令をレジスタアドレスユニット２４０へ出力する。
【００２６】
[0036]命令ユニット２３０は、プログラム命令およびサンプルをレジスタアドレスユニット２４０へ出力する。レジスタアドレスユニット２４０は、図３および図５を参照して説明されるように、それぞれのスレッドによって指定されたオペランドを記憶したレジスタファイルユニット２５０内のレジスタにアクセスする。レジスタアドレスユニット２４０は、それぞれのプログラム命令のための要求を出力する。要求の例は、特定のオペランドのための読み出し要求または特定のオペランドのための書き込み要求を含む。本発明の一実施形態においては、レジスタアドレスユニット２４０は、それぞれのクロックサイクル中に、ただ１つの命令のための要求を出力する。例えば、ロード命令（ＬＤ）の場合には、１つの書き込み要求が、オペランドをレジスタに書き込むために、出力される。同様に、乗算加算（ＭＡＤ）命令の場合には、３つの読み出し要求（ソースオペランドごとに１つの）および１つの書き込み要求（デスティネーションオペランドのための）が出力される。
【００２７】
[0037]レジスタアドレスユニット２４０は、要求、およびそれに対応するプログラム命令、例えば、ＭＡＤをレジスタファイルユニット２５０へ出力する。レジスタファイルユニット２５０は、要求を処理し、レジスタファイルユニット２５０内にあるレジスタへオペランドを読み出し、レジスタファイルユニット２５０内にあるレジスタからオペランドを書き込む。レジスタファイルユニット２５０は、ライトバック競合およびサイクルベース競合を回避するために、要求の処理をスケジュールする。本発明のいくつかの実施形態においては、レジスタファイルユニット２５０は、オペランドの状態を追跡するために、スコアボードユニットを使用し、レジスタに書き込み、オペランドがレジスタからいつ読み出されたかを判定する。
【００２８】
[0038]読み出し要求が処理され、プログラム命令を処理するのに必要なオペランドが、取り込まれると、レジスタファイルユニット２５０は、オペランドのすべてがいつ取り込まれたかを判定し、そして、処理するための１つかまたは複数の実行ユニット２７０へプログラム命令およびオペランドを出力する。１つかまたは複数の実行ユニット２７０は、プログラム命令によって指定されたデスティネーションオペランドに書き込まれるべき処理されたオペランドをレジスタファイルユニット２５０へ戻す。実行パイプライン２４０は、テッセレーション、パースペクティブ補正、補間、シェーディング、ブレンディングなどのような演算を実行するように、プログラム命令によって構成される。処理されたサンプルは、それぞれの実行パイプライン２４０からラスタ演算ユニット１６０へ出力される。本発明のいくつかの実施形態においては、さらなる実行パイプライン２４０が、レジスタファイルユニット２５０およびラスタ演算ユニット１６０に結合される。
【００２９】
[0039]図３は、本発明の１つ以上の態様に基づいた図２に示されるレジスタファイルユニット２５０の例示的な実施形態のブロック図である。本発明の代替の実施形態においては、レジスタファイルユニット２５０は、ホストプロセッサー１１４のような汎用プロセッサー内おいて使用される。レジスタファイルユニット２５０は、２つ以上のメモリーバンク、すなわち、シングルマルチポートメモリーをシミュレートするように構成されたバンク３２０を含む。それぞれのバンク３２０は、オペランドを記憶するように構成されたレジスタの役割をなすいくつかのロケーションを含む。それぞれの収集ユニット３３０は、要求およびそれに対応するプログラム命令をレジスタアドレスユニット２４０から受け取り、そのプログラム命令が収集ユニット３３０に結合された特定の実行ユニット３６５によって実行されるべき命令であるかどうかを判定する。プログラム命令が、収集ユニット３３０に結合された特定の実行ユニット３６５によって実行されるべき命令であれば、収集ユニット３３０は、そのプログラム命令を受け入れ、処理を要求する。本発明のいくつかの実施形態においては、それぞれの実行ユニット３６５は、同一のものであり、優先順位体系が、どの実行ユニット３６５がプログラム命令を実行するかを決定するのに使用される。本発明の代替の実施形態は、命令を最小負荷の実行ユニット３６５に割り当てる。本発明のいくつかの実施形態においては、２つ以上の収集ユニット３３０が、ただ１つの実行ユニット３６５に結合され、優先順位体系が、２つ以上の収集ユニット３３０のどれがオペランドを実行するためのただ１つの実行ユニット３６５に出力するかを選択するのに使用される。
【００３０】
[0040]それぞれの収集ユニット３３０は、受け入れられたプログラム命令のための要求をバンク要求調停ユニット３１０のいずれかに出力する。それぞれのバンク要求調停ユニット３１０は、要求がバンク要求調停ユニット３１０に結合された特定のバンク３２０内のレジスタを読み出すことを必要とするかどうかを判定する。考えられるいくつかのレジスタ割り付けが、図４Ａ、図４Ｂ、図４Ｃ、図４Ｄ、図４Ｅ、および図４Ｆを参照して説明される。それぞれの要求は、１つのバンク要求調停ユニット３１０によってバンク３２０へ出力され、そのバンク３２０において、要求において指定されたオペランドに割り当てられるレジスタが配置される。受け入れられたプログラム命令は、オペランドを集めるように指示された収集ユニット３３０に残る。それぞれのバンク要求調停ユニット３１０は、また、異なる収集ユニット３３０同士を調停し、１クロックサイクル当たり１つの要求を、バンク要求調停ユニット３１０に結合されたバンク３２０へ出力する。
【００３１】
[0041]それぞれのバンク３２０は、バンク要求調停ユニット３１０から要求を受け取るための読み出し要求ポートを含む。それぞれのバンク３２０は、また、１つかまたは複数の実行ユニット２７０から書き込み要求を受け取るための書き込み要求ポートを含み、処理されたデータを、プログラム命令によって指定されたオペランドに割り当てられたデスティネーションレジスタに書き込む。したがって、２つのバンクの低ポート数メモリー（１つの書き込みポートおよび１つの読み出しポート）が、２つの書き込みポートおよび２つの読み出しポートを備えるマルチポートメモリーをシミュレートするのに使用される。本発明のいくつかの実施形態においては、さらなる要求ポートが使用される。本発明の代替の実施形態においては、読み出し要求ポートは、書き込み要求ポートと組み合わせられ、シングルポートメモリーにアクセスする。１クロックサイクル中、それぞれのバンク３２０は、読み出し要求によって指定されたオペランドを対応する収集ユニット３３０へセレクタ３２５を介して出力してもよい。したがって、プログラム命令が、ソースデータのための３つのオペランドを指定する場合、それらが、同じバンク３２０内に存在すれば、少なくとも３つのクロックサイクルが、オペランドを集めるのに必要とされる。それぞれの収集ユニット３３０は、また、バンク３２０の外部にあるレジスタ（図示しない）に記憶された定数および中間データのようなソースデータを集めてもよい。セレクタ３２５は、バンク３２０内に記憶されていないソースデータを入力（図示しない）から受け取る。オペランドのすべてが、収集ユニット３３０によって集められると、プログラム命令は、ディスパッチされる準備ができた状態となる。本発明のいくつかの実施形態においては、１クロックサイクル中に読み出されるオペランドの数を増加させるために、さらなるバンク要求調停ユニット３１０、バンク３２０、セレクタ３２５、および収集ユニット３３０が含められる。本発明の一実施形態においては、セレクタ３２５は省かれ、それぞれのバンク３２０は、収集ユニット３３０に直接に結合される。
【００３２】
[0042]プログラム命令のためのオペランドのすべてが、収集ユニット３３０によって集められると、プログラム命令およびオペランドは、処理のために、収集ユニット３３０によって、収集ユニット３３０に結合された実行ユニット３６５へ出力される。プログラム命令の実行が完了すると、デスティネーションオペランドが、プログラム命令によって指定されていれば、実行ユニット３６５は、書き込み要求をバンク３２０の中の１つへ出力する。１つかまたは複数の実行ユニット２７０は、また、処理されたオペランドをラスタ演算ユニット１６０へ出力してもよい。本発明のいくつかの実施形態においては、それぞれの実行ユニット３６５は、１つよりも多い命令を処理し、１クロックサイクル当たり１つよりも多い命令であるスループットをもたらす。異なる命令の実行は、それらが実行ユニット３６５によって処理されるとき、異なる待ち時間がかかる可能性がある。
【００３３】
[0043]本発明の一実施形態においては、スレッドを処理するためにオペランドを記憶するレジスタは、バンク３２０のようなただ１つのバンク内に割り付けられてもよい。そのような割り付けは、「薄い」割り付け方式と呼ばれる。図４Ａは、本発明の１つ以上の態様に基づいて、スレッドを処理するためのレジスタを４つのバンク内に薄く割り付ける例示的な実施形態である。図４Ａにおいて、スレッドＡを処理するためにオペランドを記憶するレジスタは、バンク０内に割り付けられ、スレッドＢを処理するためにオペランドを記憶するレジスタは、バンク１内に割り付けられ、スレッドＣを処理するためにオペランドを記憶するレジスタは、バンク２内に割り付けられ、そして、スレッドＤを処理するためにオペランドを記憶するレジスタは、バンク３内に割り付けられる。さらなるスレッドを処理するためにオペランドを記憶するレジスタは、バンク０、バンク１、バンク２、および／または、バンク３内に割り付けられてもよい。本発明の代替の実施形態においては、より少ないかまたはより多いバンクが使用される。
【００３４】
[0044]本発明の別の実施形態においては、１つのスレッドを処理するためにオペランドを記憶するレジスタは、４つのバンクのそれぞれの中に割り付けられてもよく、それぞれのバンクは、バンク３２０であってもよい。そのような割り付けは、「厚い」割り付け方式と呼ばれる。図４Ｂは、本発明の１つ以上の態様に基づいて、スレッドを処理するためのレジスタを４つのバンク内に厚く割り付ける例示的な実施形態である。図４Ｂにおいて、スレッドＡを処理するためにオペランドを記憶するレジスタは、バンク０、バンク１、バンク２、およびバンク３内に割り付けられる。スレッドＢ、Ｃ、およびＤを処理するためにオペランドを記憶するレジスタは、同様に、バンク０、バンク１、バンク２、およびバンク３内に割り付けられる。本発明の代替の実施形態においては、より少ないかまたはより多いバンクが使用される。
【００３５】
[0045]本発明のいくつかの実施形態においては、スレッドを処理するためのレジスタは、厚い割り付け方式または薄い割り付け方式のいずれかによる特定の数のレジスタを表現する「バンクカウント」ユニット内に割り付けられる。割り付けのために次に利用可能なレジスタを指示するレジスタベースアドレスは、バンク０内において追跡されてもよく、その他のバンク内における次に利用可能なレジスタは、バンクカウント、割り付け方式、およびレジスタベースアドレスを用いて、決定されてもよい。
【００３６】
[0046]さらなるスレッドを処理するためにオペランドを記憶するレジスタは、厚い割り付けまたは薄い割り付けのいずれかを用いて、バンク０、バンク１、バンク２、および／または、バンク３内に割り付けられてもよい。しかしながら、厚い割り付けおよび薄い割り付けを混合することは、図４Ｃに示されるように、割り付けに利用可能なレジスタを有効に利用できないことになる可能性がある。例えば、スレッドＡのような第１のスレッドが、バンク０内において薄い割り付けを使用し、スレッドＢのような第２のスレッドが、４つのバンクのそれぞれの中において厚い割り付けを使用すると、薄い割り付けを使用する第３のスレッドは、第１のスレッドが完了するまで、待たされることがある。あるいは、本発明のいくつかの実施形態においては、図４Ｄに示されるように、厚い割り付け方式は、それぞれのバンクの最上部から実施されてもよく、また、薄い割り付け方式は、それぞれのバンクの最下部から実施されてもよい。スレッドＡおよびＢは、厚い割り付けを使用し、スレッドＣおよびＤは、薄い割り付けを使用する。割り付けのこの「分割」は、同じ割り付け方式をまとめるのを可能にし、割り付けに利用可能なレジスタをより効率的に利用させる。
【００３７】
[0047]厚い割り付けが、スレッドに使用される場合、それぞれのオペランドに割り当てられたロケーションは、単純に、順次に進められてもよい。図４Ｅは、本発明の１つ以上の態様に基づいて、スレッドにレジスタを順次に割り当てる例示的な実施形態である。例えば、オペランド４００Ａを記憶するために割り当てられたスレッドＡに割り付けられたレジスタは、バンク０内に配置され、それは、オペランド４００Ｂを記憶するために割り当てられたスレッドＢに割り付けられたレジスタの場合にも同様である。スレッドＡおよびスレッドＢが、同じプログラム命令を実行していれば、スレッドＡおよびスレッドＢが、スレッドＡのためのオペランド４００ＡおよびスレッドＢのためのオペランド４００Ｂを読み出すプログラム命令を処理するとき、バンク競合が発生する可能性がある。オペランド４００Ｂおよびオペランド４００Ａが、同じバンク内に記憶されていなければ、バンク競合は回避される可能性がある。
【００３８】
[0048]位相値が、レジスタ割り当て処理中に使用されてもよく、それによって、同じプログラム命令を処理するスレッドは、同じバンク内に存在するレジスタに割り当てられたプログラム命令によって指定されたそれらの対応するオペランドを有することはない。図４Ｆは、本発明の１つ以上の態様に基づいた位相値を用いて、スレッドにレジスタを割り当てる例示的な実施形態である。例えば、オペランド４１０Ａを記憶するために割り当てられたスレッドＡに割り付けられたレジスタは、バンク０内に配置され、オペランド４１０Ｂを記憶するために割り当てられたスレッドＢに割り付けられたレジスタは、バンク１内に配置される。スレッドＡおよびスレッドＢが、同じプログラム命令を実行していれば、スレッドＡおよびスレッドＢが、スレッドＡのためのオペランド４１０ＡおよびスレッドＢのためのオペランド４１０Ｂを読み出すプログラム命令を処理するとき、バンク競合は、発生しない。本発明の代替の実施形態においては、レジスタは、再配置され、それによって、同じプログラム命令を処理するスレッドは、同じバンク内に存在するレジスタに割り当てられたプログラム命令によって指定されたそれらの対応するオペランドを有することはない。例えば、４つのバンクの場合、割り当てられたレジスタ番号の下位２ビットが、レジスタが割り付けられるスレッドに対応する固有の位相値と排他的論理和（ＸＯＲ）をとられてもよい。本発明の代替の方法は、バンクの番号を法とする位相値のモジュロを割り当てられたレジスタの番号に加算することである。
【００３９】
[0049]厚い割り付けが、レジスタに使用される場合、プログラム命令を処理するのに必要な２つ以上のオペランドが、２つ以上の異なるバンク内のレジスタに割り当てられる可能性がある。例えば、スレッドＡのためのプログラム命令が、オペランド４１４Ａおよび４１５Ａを指定するならば、読み出し要求は、一方がバンク０に結合されかつ他方がバンク１に結合された２つの異なる要求キュー３１０にキューイングされる。同様に、オペランド４１４Ａは、バンク０に結合された収集ユニット３３０へ出力され、オペランド４１５Ａは、バンク１に結合された収集ユニット３３０へ出力される。ただ１つの収集ユニット３３０は、プログラム命令ごとのオペランドを集めるので、メカニズムが、異なるバンクと収集ユニット３３０との間でオペランドを転送するのを可能にするために使用される。
【００４０】
[0050]図５は、本発明の１つ以上の態様に基づいた、図２のレジスタファイルユニットの別の例示的な実施形態のブロック図であり、クロスバ５２５および複数のバンク３２０を含み、それぞれのバンク３２０は、バンク要求調停ユニット３１０に結合される。クロスバ５２５は、いずれかのバンク３２０から出力されるオペランドをいずれかの収集ユニット３３０の入力へルーティングできるように構成される。したがって、プログラム命令によって指定されたオペランドのすべては、ただ１つの収集ユニット３３０によって収集されてもよい。図３を参照して説明されたように、それぞれの収集ユニット３３０は、プログラム命令によって指定されたオペランドをいずれかのバンク３２０から集める。クロスバ５２５が使用される場合、スレッドスケジューリングおよびレジスタ割り付け（厚いかまたは薄い）は、バンク３２０の数が収集ユニット３３０の総数に等しい場合よりも効率的に進行することが可能である。
【００４１】
[0051]ディスパッチャーユニット５４０が、一組の収集ユニット３３０と実行ユニットＢ５７５との間に結合される。ディスパッチャーユニット５４０は、プログラム命令およびそれに対応するオペランド、例えば、いくつかの入力を、組の中のそれぞれの収集ユニット３３０から受け取ってもよく、それによって、ディスパッチャーユニット５４０は、組の中の収集ユニット３３０同士を調停する。本発明のいくつかの実施形態においては、ディスパッチャーユニット５４０は、ラウンドロビン方式で調停する。本発明の代替の実施形態においては、組の中のそれぞれの収集ユニット３３０は、対応する優先順位を有し、その優先順位に基づいて、ディスパッチャーユニット５４０は、それぞれの収集ユニット３３０から入力を受け入れる。例えば、一方の収集ユニット３３０は、他方の収集ユニット３３０よりも高い優先順位を有してもよく、プログラム命令およびオペランドを得ることができるならば、ディスパッチャーユニット５４０は、常に、一方の収集ユニット３３０から入力を受け入れる。
【００４２】
[0052]ただ１つの収集ユニット３３０が、実行ユニットＡ５６５に直接に結合される。実行ユニットＡ５６５は、実行ユニットＢ５７５が実行するようには構成されていない特定の命令を実行するように構成されてもよい。したがって、ただ１つの収集ユニット３３０が、実行ユニットＡ５６５によって実行されるプログラム命令（および要求）を受け入れ、一組の収集ユニット３３０は、実行ユニットＢ５７５によって実行されるプログラム命令（および要求）を受け入れる。
【００４３】
[0053]図６Ａは、本発明の１つ以上の態様に基づいて、スレッドを処理するためにレジスタを割り付ける方法の実施形態を示す。ステップ６００において、スレッドのためのレジスタ割り付け要求が、レジスタアドレスユニット２４０によってスレッド制御ユニット２２０から受け取られる。ステップ６０５において、レジスタアドレスユニット２４０は、スレッドを処理するのに必要なレジスタのサイズすなわち数が固定値またはプログラム可能な値Ｘよりも小さいかまたはそれに等しいかどうかを判定する。レジスタアドレスユニット２４０が、サイズがＸよりも大きいと判定すれば、ステップ６１０において、レジスタアドレスユニット２４０は、複数のバンク３２０内にすなわち厚い割り付けでオペランドを記憶するレジスタを割り付ける。ステップ６１５において、レジスタアドレスユニット２４０は、ベースポインタを更新する。ベースポインタは、バンク３２０内において割り付け可能な最初のロケーションを指示する。
【００４４】
[0054]ステップ６２０において、レジスタアドレスユニット２４０は、位相値を更新し、それによって、それに続くスレッドに割り付けられるオペランドに割り当てられるレジスタが、ステップ６１０において割り付けられたレジスタに対してスキューされる。ステップ６２５において、レジスタアドレスユニット２４０は、位相値がＮに等しいかどうかを判定し、ここで、Ｎは、バンク３２０の数である。ステップ６２５において、レジスタアドレスユニット２４０が、位相値はＮに等しいと判定すれば、ステップ６３０において、レジスタアドレスユニット２４０は位相値を０にセットし、ステップ６７０に進む。ステップ６２５において、レジスタアドレスユニット２４０が、位相値はＮに等しくないと判定すれば、レジスタアドレスユニット２４０は、ステップ６７０に進み、割り付け情報をレジスタファイルユニット２５０内の要求配信ユニット３００へ出力する。
【００４５】
[0055]ステップ６０５において、レジスタアドレスユニット２４０が、サイズはＸよりも小さいかまたはＸに等しいと判定すれば、ステップ６３５において、レジスタアドレスユニット２４０は、薄い割り付けに利用可能なバンク３２０がＮ−１であるかどうかを判定する。ステップ６３５において、レジスタアドレスユニット２４０が、割り付け可能なバンク３２０はバンクインジケータによって指定されるようにバンクＮ−１であると判定すれば、ステップ６５０において、レジスタアドレスユニット２４０は、ベースを更新し、割り付け可能な最初のロケーションを指示し、ステップ６４５に進む。ステップ６３５において、レジスタアドレスユニット２４０が、割り付け可能なバンク３２０はバンクＮ−１ではないと判定すれば、ステップ６４０において、レジスタアドレスユニット２４０は、バンクインジケータを１だけインクリメントすることによって、バンクインジケータを更新する。ステップ６４５において、レジスタアドレスユニット２４０は、バンクインジケータによって指示されるただ１つのバンク３２０内にすなわち薄い割り付けでオペランドを記憶するレジスタを割り付け、ステップ６７０に進む。上述したように、ステップ６７０において、レジスタアドレスユニット２４０は、割り付け情報をレジスタファイルユニット２５０内の要求配信ユニット３００へ出力する。
【００４６】
[0056]図６Ｂは、本発明の１つ以上の態様に基づいて、スレッドを処理するためにレジスタを割り付ける別の方法の実施形態を示す。ステップ６００において、レジスタアドレスユニット２４０は、厚いまたは薄い割り付け方式を含むレジスタ割り付け要求を受け取る。本発明のいくつかの実施形態においては、プログラム命令がコンパイルされ、そして、ドライバによってレジスタアドレスユニット２４０に提供されるときに、割り付け方式が決定される。ステップ６０３において、レジスタアドレスユニット２４０は、指定された割り付け方式が薄いかどうかを判定し、もしそうであれば、図６Ａを参照して上述したように、ステップ６１０、６１５、６２０、６２５、６３０、および６７０に進む。ステップ６０３において、レジスタアドレスユニット２４０が、指定された割り付け方式は薄くないと判定すれば、レジスタアドレスユニット２４０は、図６Ａを参照して上述したように、ステップ６３５、６４０、６４５、および６７０に進む。
【００４７】
[0057]図６Ｃは、本発明の１つ以上の態様に基づいて、スレッドを処理するためにレジスタを割り付ける別の方法の実施形態を示す。ステップ６００において、レジスタアドレスユニット２４０は、厚いまたは薄い割り付け方式を含むレジスタ割り付け要求を受け取る。ステップ６０３において、レジスタアドレスユニット２４０は、指定された割り付け方式が薄いかどうかを判定し、もしそうであれば、ステップ６０７において、レジスタアドレスユニット２４０は、バンクインジケータによって指定されるバンク３２０内において、薄い割り付けが適切であるかどうか、すなわち、必要なレジスタの数が利用可能かどうかを判定する。ステップ６０７において、レジスタアドレスユニット２４０が、バンク３２０内において薄い割り付けは適切であると判定すれば、レジスタアドレスユニット２４０は、図６Ａを参照して上述したように、ステップ６３５、６４０、６４５、６５０、および６７０に進む。
【００４８】
[0058]ステップ６０３において、レジスタアドレスユニット２４０が、指定された割り付け方式は薄くないと判定すれば、レジスタアドレスユニット２４０は、図６Ａを参照して上述したように、ステップ６１０、６１５、６２０、６２５、６３０、および６７０に進む。ステップ６０７において、レジスタアドレスユニット２４０が、バンク２３０内において薄い割り付けは適切ではないと判定すれば、レジスタアドレスユニット２４０は、同様に、図６Ａを参照して上述したように、ステップ６１０、６１５、６２０、６２５、６３０、および６７０に進む。
【００４９】
[0059]このように、当業者は、図６Ａ、図６Ｂ、図６Ｃ、または、それらに等価なものの方法ステップを実行するように構成されたどのようなシステムも本発明の範囲内に存在することがわかるはずである。さらに、当業者は、図６Ａ、図６Ｂ、図６Ｃの方法ステップはマルチポートメモリーをシミュレートするために任意の数のバンクを含むレジスタファイルユニットをサポートするように拡張されてもよいことがわかるはずである。
【００５０】
[0060]特定の実施形態を参照して、本発明が先に説明されたが、添付の特許請求の範囲に規定される本発明のより広い精神および範囲を逸脱することなく、様々な修正および変更が、それに対してなされてもよいことは明白なことである。したがって、本明細書でなされた説明および図面は、限定するものではなく、説明するためのものであると考えられるべきである。方法の請求項において記載されるステップは、請求項において明白に規定されない限り、何らかの特定の順序で実行されることを意味するものではない。
【００５１】
[0061]すべての商標は、それらの所有者の個々の財産である。
【図１】
0005422614.tif 000002
【図２】
0005422614.tif 000003
【図３】
0005422614.tif 000004
【図４Ａ】
0005422614.tif 000005
【図４Ｂ】
0005422614.tif 000006
【図４Ｃ】
0005422614.tif 000007
【図４Ｄ】
0005422614.tif 000008
【図４Ｅ】
0005422614.tif 000009
【図４Ｆ】
0005422614.tif 000010
【図５】
0005422614.tif 000011
【図６Ａ】
0005422614.tif 000012
【図６Ｂ】
0005422614.tif 000013
【図６Ｃ】
0005422614.tif 000014