JP5422614B2 - 低ポート数メモリーを用いたマルチポートメモリーのシミュレート - Google Patents

低ポート数メモリーを用いたマルチポートメモリーのシミュレート Download PDF

Info

Publication number
JP5422614B2
JP5422614B2 JP2011154233A JP2011154233A JP5422614B2 JP 5422614 B2 JP5422614 B2 JP 5422614B2 JP 2011154233 A JP2011154233 A JP 2011154233A JP 2011154233 A JP2011154233 A JP 2011154233A JP 5422614 B2 JP5422614 B2 JP 5422614B2
Authority
JP
Japan
Prior art keywords
thread
memory
unit
bank
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2011154233A
Other languages
English (en)
Other versions
JP2011238271A (ja
Inventor
ジョン, エリック リンドホルム,
ミン, ワイ. シウ,
サイモン, エス. モイ,
サミュエル リウ,
ジョン, アール. ニコールズ,
Original Assignee
エヌヴィディア コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エヌヴィディア コーポレイション filed Critical エヌヴィディア コーポレイション
Publication of JP2011238271A publication Critical patent/JP2011238271A/ja
Application granted granted Critical
Publication of JP5422614B2 publication Critical patent/JP5422614B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Memory System (AREA)

Description

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

Claims (16)

  1. 1つのマルチポートメモリーとして機能するように複数のシングルポートメモリーを構成すると共に、複数のメモリーバンクの中にレジスタを割り付ける方法であって、
    前記複数のシングルポートメモリーは、複数のスレッドのうちの少なくとも1つによって実行されるオペランドを記憶するためのレジスタを提供し、
    前記複数のメモリーバンクのそれぞれは、前記複数のスレッドのうちの少なくとも1つに関連しており、
    前記複数のスレッドのうちの第1のスレッドに割り付けられるレジスタの数を決定するステップと、
    組のメモリーバンク内に存在する少なくとも1つのメモリーバンク内のロケーションにおいて前記第1のスレッドに前記数のレジスタを割り付けるステップであって、前記一組のメモリーバンクは、前記複数のシングルポートメモリーからなり、前記複数のシングルポートメモリーは、前記1つのマルチポートメモリーとして機能するように構成された、ステップと、
    前記複数のスレッドのうちの前記第2のスレッドに割り付けられるレジスタの数を決定するステップと、
    組のメモリーバンク内に存在する少なくとも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. 前記割り付け方式をドライバから受け取るステップをさらに備える、請求項に記載の方法。
  5. 前記第1のスレッド及び前記第2のスレッドが同じ命令を処理するとき、前記第1のスレッド及び前記第2のスレッドが前記一組のメモリーバンクのうちの同一のメモリーバンクからオペランドを読み込まないように、前記第1のスレッド及び前記第2のスレッドのために割り付けられた一組のレジスタ内に存在するレジスタを、それぞれのレジスタを割り当てるための前記第1のスレッド及び前記第2のスレッドに関連する位相値を用いて、少なくとも1つのメモリーバンクに割り当てるステップをさらに備える、請求項1に記載の方法。
  6. グラフィックスプログラム命令のためのオペランドを複数のシングルポートメモリーへ記憶するための、及び、複数のシングルポートメモリーから出力するためのレジスタファイルユニットであって、
    数のシングルポートメモリーからなる第1のメモリーバンクであって、前記複数のシングルポートメモリーは、1つのマルチポートメモリーとして機能し、第1のスレッドのためのオペランドを記憶するように構成された、第1のメモリーバンクと、
    数のシングルポートメモリーからなる第2のメモリーバンクであって、前記複数のシングルポートメモリーは、1つのマルチポートメモリーとして機能し、第2のスレッドのためのオペランドを記憶するように構成された、第2のメモリーバンクと、
    前記第1のスレッドのための前記オペランドを前記第1のメモリーバンクから受け取り、前記第1のスレッドのプログラム命令と前記第1のスレッドの前記プログラム命令によって指定された任意のオペランドとを出力するように構成された第1の収集ユニットと、
    前記第2のスレッドのための前記オペランドを前記第2のメモリーバンクから受け取り、前記第2のスレッドのプログラム命令と前記第2のスレッドの前記プログラム命令によって指定された任意のオペランドとを実行のために前記第1のスレッド及び前記第2のスレッドに出力するように構成された第2の収集ユニットと、
    を備え、
    スレッドを処理するために必要なレジスタの数を決定すると共に、厚い割り付けが使用されるべきか、薄い割り付けが使用されるべきかを決定するためのレジスタアドレスユニットを備え、
    前記レジスタアドレスユニットは、前記第1のメモリーバンク及び前記第2のメモリーバンク内において割り付け可能な最初のロケーションを指示するベースポインタを更新するようにさらに構成されている、レジスタファイルユニット。
  7. 前記第1の収集ユニット及び前記第2の収集ユニットのいずれか一方が、スレッドのためのオペランドを前記第1のメモリーバンク及び前記第2のメモリーバンクのいずれか一方から受け取るために、前記第1のメモリーバンク及び前記第2のメモリーバンクを前記第1の収集ユニット及び前記第2の収集ユニットに結合するクロスバユニットをさらに備える、請求項に記載のレジスタファイルユニット。
  8. オペランド読み出し要求を前記第1のメモリーバンクに出力するように構成された第1のバンク要求調停ユニットと、
    オペランド読み出し要求を前記第2のメモリーバンクに出力するように構成された第2のバンク要求調停ユニットと、
    をさらに備える、請求項に記載のレジスタファイルユニット。
  9. 前記第2の収集ユニットに結合され、かつ、前記第1の収集ユニット及び前記第2の収集ユニットと前記第1のスレッド及び前記第2のスレッドとを調停し、前記第1のスレッドの前記プログラム命令および前記第1のスレッドの前記プログラム命令によって指定された任意のオペランドまたは前記第2のスレッドの前記プログラム命令および前記第2のスレッドの前記プログラム命令によって指定された任意のオペランドを出力するように構成されたディスパッチャーユニットをさらに備える、請求項に記載のレジスタファイルユニット。
  10. 前記ディスパッチャーユニットによって出力された任意のプログラム命令を実行するように構成された実行ユニットをさらに備え、前記ディスパッチャーユニットは、当該ディスパッチャーユニットによって前記第1の収集ユニットと前記第2の収集ユニットとの間に確立された優先順位に基づいて、前記実行ユニットにオペランドを出力する、請求項に記載のレジスタファイルユニット。
  11. 前記第1の収集ユニットによって出力された任意のプログラム命令を実行するように構成された実行ユニットをさらに備える、請求項に記載のレジスタファイルユニット。
  12. 複数の追加のメモリーバンク及び複数の追加の収集ユニットを備え、当該複数の追加のメモリーバンクの数と当該複数の追加の収集ユニットの数は異なり、前記クロスバユニットは、いずれかのメモリーバンクから出力されるオペランドを、前記第1の収集ユニット及び前記第2の収集ユニットのうちのいずれかの入力へルーティングできるように構成されている請求項に記載のレジスタファイルユニット。
  13. 前記第1のスレッド及び前記第2のスレッドのそれぞれに割り付けられる前記数のレジスタが、いくつかの部分に分割され、それらの部分が、前記一組のメモリーバンク内に存在する1つのメモリーバンク内に全て割り付けられる、又は、前記一組のメモリーバンク内に存在する全てのメモリーバンクの間で等しく割り付けられ、
    前記一組のメモリーバンク内に存在する前記1つのメモリーバンクは、割り付けのために次に利用可能なレジスタを指示するレジスタベースアドレス、割り付け方式、及び、割り付けられる次のレジスタにおけるレジスタベースアドレスを記憶する請求項1に記載の方法。
  14. 1つ以上のスレッドに割り付けられる前記数のレジスタが、いくつかの部分に分割され、前記レジスタは、厚い割り付け又は薄い割り付けに基づいて割り付けられ、メモリーバンクにおける前記厚い割り付けは、当該メモリーバンクのアドレスの一端から開始され、当該メモリーバンクにおける前記薄い割り付けは、当該メモリーバンクのアドレスの他端から開始される請求項1に記載の方法。
  15. 前記レジスタアドレスユニットは、次に続くスレッドに割り付けられるオペランドに割り当てられるレジスタが、既に割り付けられたレジスタに対してスキューされるように、必要なレジスタの数を決定した後に位相値を更新するようにさらに構成されている請求項に記載のレジスタファイルユニット。
  16. 前記第1の収集ユニット及び前記第2の収集ユニットのそれぞれが、前記第1のスレッド及び前記第2のスレッドのうちの任意のスレッド内の実行すべきプログラム命令のためのオペランドを前記複数のメモリーバンクのうちの2以上のメモリーバンクから収集するように、前記第1のメモリーバンク及び前記第2のメモリーバンクのうちの任意のメモリーバンク内にある前記第1のオペランド及び前記第2のオペランドのうちの任意のオペランドは、クロスバユニットを通して、前記第1の収集ユニット及び前記第2の収集ユニットのうちの任意の収集ユニットに送られることができる請求項1に記載の方法。
JP2011154233A 2004-07-13 2011-07-12 低ポート数メモリーを用いたマルチポートメモリーのシミュレート Active JP5422614B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/889,730 2004-07-13
US10/889,730 US7339592B2 (en) 2004-07-13 2004-07-13 Simulating multiported memories using lower port count memories

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2007521508A Division JP2008507034A (ja) 2004-07-13 2005-07-07 下位ポートカウントメモリーを用いたマルチポートメモリーのシミュレート

Publications (2)

Publication Number Publication Date
JP2011238271A JP2011238271A (ja) 2011-11-24
JP5422614B2 true JP5422614B2 (ja) 2014-02-19

Family

ID=34973122

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2007521508A Pending JP2008507034A (ja) 2004-07-13 2005-07-07 下位ポートカウントメモリーを用いたマルチポートメモリーのシミュレート
JP2011154233A Active JP5422614B2 (ja) 2004-07-13 2011-07-12 低ポート数メモリーを用いたマルチポートメモリーのシミュレート

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2007521508A Pending JP2008507034A (ja) 2004-07-13 2005-07-07 下位ポートカウントメモリーを用いたマルチポートメモリーのシミュレート

Country Status (6)

Country Link
US (2) US7339592B2 (ja)
JP (2) JP2008507034A (ja)
KR (1) KR100862124B1 (ja)
CN (1) CN101014933B (ja)
TW (1) TWI441021B (ja)
WO (1) WO2006017135A2 (ja)

Families Citing this family (78)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7634621B1 (en) * 2004-07-13 2009-12-15 Nvidia Corporation Register file allocation
US7339592B2 (en) 2004-07-13 2008-03-04 Nvidia Corporation Simulating multiported memories using lower port count memories
US7360035B2 (en) 2004-09-01 2008-04-15 International Business Machines Corporation Atomic read/write support in a multi-module memory configuration
US8560795B2 (en) * 2005-06-30 2013-10-15 Imec Memory arrangement for multi-processor systems including a memory queue
US8327115B2 (en) 2006-04-12 2012-12-04 Soft Machines, Inc. Plural matrices of execution units for processing matrices of row dependent instructions in single clock cycle in super or separate mode
US8766995B2 (en) * 2006-04-26 2014-07-01 Qualcomm Incorporated Graphics system with configurable caches
US20070268289A1 (en) * 2006-05-16 2007-11-22 Chun Yu Graphics system with dynamic reposition of depth engine
US8884972B2 (en) * 2006-05-25 2014-11-11 Qualcomm Incorporated Graphics processor with arithmetic and elementary function units
US8869147B2 (en) * 2006-05-31 2014-10-21 Qualcomm Incorporated Multi-threaded processor with deferred thread output control
US8644643B2 (en) 2006-06-14 2014-02-04 Qualcomm Incorporated Convolution filtering in a graphics processor
US8766996B2 (en) * 2006-06-21 2014-07-01 Qualcomm Incorporated Unified virtual addressed register file
EP2523101B1 (en) 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US8725991B2 (en) 2007-09-12 2014-05-13 Qualcomm Incorporated Register file system and method for pipelined processing
US7945764B2 (en) * 2008-01-11 2011-05-17 International Business Machines Corporation Processing unit incorporating multirate execution unit
US20090189896A1 (en) * 2008-01-25 2009-07-30 Via Technologies, Inc. Graphics Processor having Unified Shader Unit
KR101102930B1 (ko) * 2008-10-31 2012-01-10 한국전자통신연구원 로봇용 소프트웨어 컴포넌트 장치 및 이를 이용한 쓰레드 처리 방법
US8689217B2 (en) 2008-10-31 2014-04-01 Electronics And Telecommunications Research Institute System and method for thread processing robot software components responsive to periodic, dedicated, and passive modes
US8370557B2 (en) * 2008-12-19 2013-02-05 Intel Corporation Pseudo dual-port SRAM and a shared memory switch using multiple memory banks and a sideband memory
US8386808B2 (en) * 2008-12-22 2013-02-26 Intel Corporation Adaptive power budget allocation between multiple components in a computing system
US8458446B2 (en) * 2009-09-30 2013-06-04 Oracle America, Inc. Accessing a multibank register file using a thread identifier
KR20110103256A (ko) * 2010-03-12 2011-09-20 삼성전자주식회사 다중 입출력 오퍼레이션 지원 프로세서 및 그 방법
US8832671B1 (en) * 2010-07-07 2014-09-09 Nvidia Corporation Conflict-free register allocation
US8555035B1 (en) 2010-07-07 2013-10-08 Nvidia Corporation Conflict-free register allocation using a multi-bank register file with input operand alignment
US20120066471A1 (en) * 2010-09-14 2012-03-15 Advanced Micro Devices, Inc. Allocation of memory buffers based on preferred memory performance
US20120066444A1 (en) * 2010-09-14 2012-03-15 Advanced Micro Devices, Inc. Resolution Enhancement of Video Stream Based on Spatial and Temporal Correlation
KR101685247B1 (ko) 2010-09-17 2016-12-09 소프트 머신즈, 인크. 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측
US8787368B2 (en) * 2010-12-07 2014-07-22 Advanced Micro Devices, Inc. Crossbar switch with primary and secondary pickers
CN108376097B (zh) 2011-03-25 2022-04-15 英特尔公司 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段
EP2689327B1 (en) 2011-03-25 2021-07-28 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
KR101966712B1 (ko) 2011-03-25 2019-04-09 인텔 코포레이션 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
US20120254589A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian System, apparatus, and method for aligning registers
KR101639853B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 자원들 및 상호접속 구조들의 비집중 할당
CN103649931B (zh) * 2011-05-20 2016-10-12 索夫特机械公司 用于支持由多个引擎执行指令序列的互连结构
US8819379B2 (en) 2011-11-15 2014-08-26 Memory Technologies Llc Allocating memory based on performance ranking
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
WO2013077876A1 (en) 2011-11-22 2013-05-30 Soft Machines, Inc. A microprocessor accelerated code optimizer
US8639882B2 (en) * 2011-12-14 2014-01-28 Nvidia Corporation Methods and apparatus for source operand collector caching
US9626191B2 (en) * 2011-12-22 2017-04-18 Nvidia Corporation Shaped register file reads
US9606808B2 (en) * 2012-01-11 2017-03-28 Nvidia Corporation Method and system for resolving thread divergences
US9158683B2 (en) 2012-08-09 2015-10-13 Texas Instruments Incorporated Multiport memory emulation using single-port memory devices
US9489316B2 (en) * 2013-03-15 2016-11-08 Freescale Semiconductor, Inc. Method and device implementing execute-only memory protection
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
WO2014151043A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for emulating a guest centralized flag architecture by using a native distributed flag architecture
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
WO2014151018A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for executing multithreaded instructions grouped onto blocks
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9508112B2 (en) * 2013-07-31 2016-11-29 Apple Inc. Multi-threaded GPU pipeline
US9377968B2 (en) 2013-11-13 2016-06-28 Sandisk Technologies Llc Method and system for using templates to communicate with non-volatile memory
US9430411B2 (en) 2013-11-13 2016-08-30 Sandisk Technologies Llc Method and system for communicating with non-volatile memory
US9390033B2 (en) 2013-11-13 2016-07-12 Sandisk Technologies Llc Method and system for communicating with non-volatile memory via multiple data paths
KR20150056373A (ko) * 2013-11-15 2015-05-26 삼성전자주식회사 순차적 수행 방식의 멀티스레드 프로세싱 장치 및 방법
US9201636B2 (en) 2013-11-21 2015-12-01 National Tsing Hua University Method for divergence analysis of pointer-based program
US9141291B2 (en) 2013-11-26 2015-09-22 Sandisk Technologies Inc. Adaptive context disbursement for improved performance in non-volatile memory systems
US9437172B2 (en) * 2014-08-19 2016-09-06 Apple Inc. High-speed low-power access to register files
KR102357863B1 (ko) * 2014-12-15 2022-02-04 삼성전자주식회사 메모리 접근 방법 및 장치
GB2540971B (en) 2015-07-31 2018-03-14 Advanced Risc Mach Ltd Graphics processing systems
US10089115B2 (en) * 2016-07-07 2018-10-02 Intel Corporation Apparatus to optimize GPU thread shared local memory access
US9747106B1 (en) 2016-09-30 2017-08-29 International Business Machines Corporation Allocating multiple operand data areas of a computer instruction within a program buffer
CN110326021A (zh) * 2017-04-01 2019-10-11 英特尔公司 用于图形处理器上的加速计算的执行单元共享混合技术
US10521880B2 (en) * 2017-04-17 2019-12-31 Intel Corporation Adaptive compute size per workload
US10417734B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10417731B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10467724B1 (en) * 2018-02-14 2019-11-05 Apple Inc. Fast determination of workgroup batches from multi-dimensional kernels
US11068305B2 (en) * 2018-05-07 2021-07-20 Micron Technology, Inc. System call management in a user-mode, multi-threaded, self-scheduling processor
CN111459543B (zh) * 2019-01-21 2022-09-13 上海登临科技有限公司 一种管理寄存器文件单元的方法
KR102201352B1 (ko) * 2019-04-03 2021-01-08 연세대학교 산학협력단 스핀 전달 토크 랜덤 액세스 메모리 기반의 계층적 레지스터 파일 장치
US12020075B2 (en) 2020-09-11 2024-06-25 Apple Inc. Compute kernel parsing with limits in one or more dimensions with iterating through workgroups in the one or more dimensions for execution
US12020064B2 (en) * 2020-10-20 2024-06-25 Micron Technology, Inc. Rescheduling a failed memory request in a processor
US20220197649A1 (en) * 2020-12-22 2022-06-23 Advanced Micro Devices, Inc. General purpose register hierarchy system and method
CN115129369A (zh) * 2021-03-26 2022-09-30 上海阵量智能科技有限公司 命令分发方法、命令分发器、芯片以及电子设备
CN115934102B (zh) * 2022-12-29 2023-12-12 格兰菲智能科技有限公司 通用寄存器动态分配方法、装置、计算机设备和存储介质

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US41228A (en) * 1864-01-12 Improved refrigerating dish-cover
US80512A (en) * 1868-07-28 John shellabergeb
US163699A (en) * 1875-05-25 Improvement in ruffling attachments for sewing-machines
US12603A (en) * 1855-03-27 Improvement in seed-planters
US103990A (en) * 1870-06-07 Improvement in liquid-meters
US4532589A (en) * 1981-12-02 1985-07-30 Hitachi, Ltd. Digital data processor with two operation units
JPS61269773A (ja) * 1985-05-24 1986-11-29 Fujitsu Ltd ベクトル命令実行制御方式
JP2545789B2 (ja) * 1986-04-14 1996-10-23 株式会社日立製作所 情報処理装置
US4964042A (en) * 1988-08-12 1990-10-16 Harris Corporation Static dataflow computer with a plurality of control structures simultaneously and continuously monitoring first and second communication channels
JPH0331937A (ja) * 1989-06-29 1991-02-12 Mitsubishi Electric Corp マイクロプロセッサ
US6091430A (en) * 1993-03-31 2000-07-18 International Business Machines Corporation Simultaneous high resolution display within multiple virtual DOS applications in a data processing system
JPH06332721A (ja) * 1993-05-24 1994-12-02 Hitachi Ltd レジスタの使用方法
SG75756A1 (en) * 1994-02-28 2000-10-24 Intel Corp Method and apparatus for avoiding writeback conflicts between execution units sharing a common writeback path
US6154826A (en) * 1994-11-16 2000-11-28 University Of Virginia Patent Foundation Method and device for maximizing memory system bandwidth by accessing data in a dynamically determined order
US5701426A (en) * 1995-03-31 1997-12-23 Bull Information Systems Inc. Data processing system and method using cache miss address prediction and forced LRU status in a cache memory to improve cache hit ratio
US5644780A (en) * 1995-06-02 1997-07-01 International Business Machines Corporation Multiple port high speed register file with interleaved write ports for use with very long instruction word (vlin) and n-way superscaler processors
US6167486A (en) * 1996-11-18 2000-12-26 Nec Electronics, Inc. Parallel access virtual channel memory system with cacheable channels
JP3087696B2 (ja) * 1997-07-25 2000-09-11 日本電気株式会社 分散メモリ型マルチプロセッサ・システム制御方法およびコンピュータ読み取り可能な記録媒体
US5913049A (en) * 1997-07-31 1999-06-15 Texas Instruments Incorporated Multi-stream complex instruction set microprocessor
JPH11184674A (ja) * 1997-12-24 1999-07-09 Fujitsu Ltd レジスタファイル
US6092175A (en) * 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
US6317820B1 (en) 1998-06-05 2001-11-13 Texas Instruments Incorporated Dual-mode VLIW architecture providing a software-controlled varying mix of instruction-level and task-level parallelism
JP3880739B2 (ja) * 1999-02-25 2007-02-14 三菱電機株式会社 オペレーティングシステムの処理方式及びオペレーティングシステムの処理方法
US6438557B1 (en) * 1999-06-23 2002-08-20 Ericsson Inc. System and method for performing context switching and rescheduling of a processor
JP2001167084A (ja) * 1999-12-08 2001-06-22 Nec Kofu Ltd ベクトル演算処理装置及びベクトルデータ移送方法
US7120783B2 (en) * 1999-12-22 2006-10-10 Ubicom, Inc. System and method for reading and writing a thread state in a multithreaded central processing unit
US6615340B1 (en) * 2000-03-22 2003-09-02 Wilmot, Ii Richard Byron Extended operand management indicator structure and method
US20020103990A1 (en) * 2001-02-01 2002-08-01 Hanan Potash Programmed load precession machine
US7487505B2 (en) * 2001-08-27 2009-02-03 Intel Corporation Multithreaded microprocessor with register allocation based on number of active threads
US6795889B2 (en) * 2002-01-09 2004-09-21 International Business Machines Corporation Method and apparatus for multi-path data storage and retrieval
JP3727887B2 (ja) * 2002-02-19 2005-12-21 富士通株式会社 マルチスレッドプロセッサにおける共有レジスタファイル制御方式
US6833831B2 (en) * 2002-02-26 2004-12-21 Sun Microsystems, Inc. Synchronizing data streams in a graphics processor
US7398374B2 (en) * 2002-02-27 2008-07-08 Hewlett-Packard Development Company, L.P. Multi-cluster processor for processing instructions of one or more instruction threads
CN1647030A (zh) * 2002-04-10 2005-07-27 皇家飞利浦电子股份有限公司 数据处理系统
US7336283B2 (en) * 2002-10-24 2008-02-26 Hewlett-Packard Development Company, L.P. Efficient hardware A-buffer using three-dimensional allocation of fragment memory
JP2004178427A (ja) * 2002-11-28 2004-06-24 Toshiba Microelectronics Corp 中央処理装置
US7376954B2 (en) * 2003-08-28 2008-05-20 Mips Technologies, Inc. Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US7339592B2 (en) 2004-07-13 2008-03-04 Nvidia Corporation Simulating multiported memories using lower port count memories

Also Published As

Publication number Publication date
JP2011238271A (ja) 2011-11-24
US7834881B2 (en) 2010-11-16
US20060012603A1 (en) 2006-01-19
JP2008507034A (ja) 2008-03-06
US20080109611A1 (en) 2008-05-08
KR100862124B1 (ko) 2008-10-09
KR20070030327A (ko) 2007-03-15
WO2006017135A2 (en) 2006-02-16
WO2006017135A3 (en) 2006-10-05
TW200613980A (en) 2006-05-01
CN101014933B (zh) 2011-07-27
CN101014933A (zh) 2007-08-08
TWI441021B (zh) 2014-06-11
US7339592B2 (en) 2008-03-04

Similar Documents

Publication Publication Date Title
JP5422614B2 (ja) 低ポート数メモリーを用いたマルチポートメモリーのシミュレート
US7634621B1 (en) Register file allocation
US7533237B1 (en) Off-chip memory allocation for a unified shader
US7852346B1 (en) Programmable graphics processor for generalized texturing
US7038685B1 (en) Programmable graphics processor for multithreaded execution of programs
TWI423162B (zh) 在繪圖處理單元中處理資料的無死結管線化方法與處理器群組
US10217184B2 (en) Programmable graphics processor for multithreaded execution of programs
US10255228B2 (en) System and method for performing shaped memory access operations
US8407443B1 (en) Off-chip out of order memory allocation for a unified shader
US9069609B2 (en) Scheduling and execution of compute tasks
BRPI0807951B1 (pt) Processador de multimídia multi-encadeado sob demanda
US9304775B1 (en) Dispatching of instructions for execution by heterogeneous processing engines
US8441495B1 (en) Compression tag state interlock
US8578387B1 (en) Dynamic load balancing of instructions for execution by heterogeneous processing engines
US9715413B2 (en) Execution state analysis for assigning tasks to streaming multiprocessors
US8405665B2 (en) Programmable graphics processor for multithreaded execution of programs
US8860737B2 (en) Programmable graphics processor for multithreaded execution of programs
US20110066813A1 (en) Method And System For Local Data Sharing
CN112559403A (zh) 一种处理器及其中的中断控制器
US20240272791A1 (en) Automatic Data Layout for Operation Chains
CN117891607A (zh) 一种跨层级资源共享方法、装置、设备和存储介质
CN117667210A (zh) 指令控制装置、方法、处理器、芯片和板卡

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110818

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130319

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130619

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130624

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130704

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131029

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131125

R150 Certificate of patent or registration of utility model

Ref document number: 5422614

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250