JP2008525887A - スレッドプロセッサにおける多重クライアントへのバッファの動的割り当て - Google Patents

スレッドプロセッサにおける多重クライアントへのバッファの動的割り当て Download PDF

Info

Publication number
JP2008525887A
JP2008525887A JP2007548204A JP2007548204A JP2008525887A JP 2008525887 A JP2008525887 A JP 2008525887A JP 2007548204 A JP2007548204 A JP 2007548204A JP 2007548204 A JP2007548204 A JP 2007548204A JP 2008525887 A JP2008525887 A JP 2008525887A
Authority
JP
Japan
Prior art keywords
address
memory
scoreboard
fence
new
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.)
Granted
Application number
JP2007548204A
Other languages
English (en)
Other versions
JP2008525887A5 (ja
JP4787844B2 (ja
Inventor
ピアッツァ、トマス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of JP2008525887A publication Critical patent/JP2008525887A/ja
Publication of JP2008525887A5 publication Critical patent/JP2008525887A5/ja
Application granted granted Critical
Publication of JP4787844B2 publication Critical patent/JP4787844B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/21Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
    • G11C11/34Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
    • G11C11/40Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Storage Device Security (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Logic Circuits (AREA)

Abstract

方法は、第1パイプラインの第1セットの関数間にメモリのアドレス範囲を分配することを含む。第1パイプラインの第1セットの関数は、アドレス範囲を使用するデータ上で動作する。メモリ内の異なるアドレス範囲が、第1セットの関数がデータのフラッシュをするのを待つことなく、第2パイプラインの第2セットの関数間に再分配される。
【選択図】図1

Description

(関連出願の相互参照)本願は、「スレッドプロセッサにおける多重クライアントへのバッファの動的割り当て」という名称で2004年12月23日に出願された米国仮出願シリアル番号第60/638,427の利益を主張し、そのすべての内容は本明細書に参照として組み込まれる。
請求項に記載の発明の実施例は、一般にメモリの割り当てに関し、詳しくはプロセス間でのメモリの動的割り当てに関する。
データプロセシングにおいては、いくつかのプロセスによる使用のためにメモリが論理的に分割されることがある。例えば4つのプロセスが実行中の場合、メモリは、各プロセスに対応する4つの部分に分割される。プロセスが(例えばパイプラインプロセスの一部として)関連している場合、かかる分割スキームは、各プロセスをメモリの所定最小量に割り当ててデッドロックを防止する。メモリの上記最小限総量の残量はプロセス間で割り当てられ、プロセスによるパフォーマンスがより良好にされる。
いくつかのプロセスがメモリの変更を使用する場合、メモリの割り当てを変更して新たな数のプロセス(上記例の4つのプロセスの代わりに例えば3または5)に対してメモリを最適化することが望ましい。しかし、既存プロセスのいくつかまたはすべては、関連付けられたデータをメモリ内に有し、かかるデータはメモリーの別のプロセスの一部に該当するか、そのプロセスが中断された場合はオーファンとなっている。したがって、典型的には、メモリは、新たな数のプロセス間で再分割される前にフラッシュされ(例えばデータが空にされ)る。いくつかの場合には、インプロセスデータは、メモリから即座に削除/フラッシュされて、新たな分割スキームの下で必要に応じてリロードされる。他の場合には、メモリを再分割する前にプロセスに処理を完了させることによって、インプロセスデータはメモリから暗黙的にフラッシュされる。
しかし、フラッシュのために使用されるスキームにもかかわらず、メモリのフラッシュはプロセスのパフォーマンスに悪影響を与える。分割または割り当ての前にメモリをフラッシュすることは、旧プロセス、新プロセスまたは両者によるデータプロセシングを遅延させる。
本明細書に組み込まれて本明細書の一部をなす添付の図面は、本発明の原理に整合する1つ以上の実施例を示し、記載とともにかかる実施例を説明する。図面は実寸どおりとは限らず、その代わりに本発明の原理を示すことに重点が置かれる。
以下の詳細な説明は添付の図面を参照する。同じまたは類似する要素を特定するために、異なる図面において同じ参照番号が使用される。以下の説明において、請求項に記載の発明の様々な側面の十分な理解を与えるために、具体的な詳細は、特定の構造、アーキテクチャ、インターフェイス、テクニック等のように記載されるが、説明を目的とするものであって限定を目的とするものではない。しかし、本開示の利益を有する当業者にとっては、請求項に記載された本発明の様々な側面が、かかる具体的な詳細から逸脱する他の例で実施できることは明らかであろう。所定の例においては、不必要な詳細で本発明の説明を不明瞭にしないため、周知のデバイス、回路および方法の説明は省略される。
図1は、システム100の例を示す。システム100は、メモリ階層110、スレッドディスパッチャ120、バス130およびプロセシングコア140−1〜140−n(集合的には「プロセシングコア140」)を含む。システム100は、マルチスレッド実行をサポートするマルチプロセシングコア140を含む。いくつかの実施例においては、各プロセシングコア140は1つまたは多数のスレッドをサポートする。単一プロセッサ(例えばコア140−1)に対するマルチスレッディングは、アクティブなスレッドが実行される一方で他のスレッドが非アクティブ状態にあるようにすることによって有効に実行できる。
メモリ階層110は、1つ以上のプロセシングコア140によって実行中に使用されるべきデータおよび命令を格納する。メモリ階層110は、動的ランダムアクセスメモリ(DRAM)、1つ以上のレベルの命令キャッシュ、1つ以上のレベルのデータキャッシュおよび/または1つ以上のレベルの共有命令およびデータキャッシュを含む。
メモリ階層110に接続されるスレッドディスパッチャ120は、新たなスレッドに関連付けられる命令ポインタおよびデータならびに/またはデータポインタ情報を受け取る。スレッドディスパッチャ120は、バス130を介してプロセシングコア140に接続される。スレッドディスパッチャ120は、プロセシングコア140のスレッドリソースを管理する。新たなペンディングスレッドを受け取る際、スレッドディスパッチャ120は1つのプロセシングコア(例えばコア140−3)を選択する。このプロセシングコアは、ペンディングスレッドを実行するべく利用可能なリソースを有しており、選択されたコアへバス130を介してスレッドをディスパッチする。プロセシングコアによる既存スレッドの完了の際、スレッドディスパッチャ120は通知を受け、そのプロセシングコアへのスレッドリソースを将来のスレッドに開放する。
図2はスレッドディスパッチャ120の1つの可能な実施例を示す。スレッドディスパッチャ120は、コマンドパーサ210、いくつかの関数ブロック220−1、220−2、・・・、220−n(集合的には「関数ブロック220」)、高優先バスインターフェイス(HPBI)230、低優先バスインターフェイス(LPBI)240、統合リターンバッファ(URB)250およびディスパッチャ260を含む。
コマンドパーサ210は、所定のコマンドおよび要求を関数ブロック220が処理できるフォーマットに翻訳する。例えば、コマンドパーサ210は、いくつかの関数ブロック220に関連する単一コマンドを、個々の関数ブロック220に送られるいくつかのコマンドおよび/または命令に分解する。
関数ブロック220は、異なる関数を恐らくはパイプラインの態様で実行する。いくつかの実施例においては、関数ブロック220は、1つ以上の頂点シェーダ、テセレータ、ジオメトリシェーダ、クリッパ、セットアップモジュールおよびウィンドワ(windower)のような固定グラフィカル関数を実装する。かかる固定関数のいくつか(例えばいくつかの関数ブロック220)は、任意の所定時間においてアクティブであり、他の関数(例えば他の関数ブロック220)は非アクティブである。アクティブな関数ブロック220の各々は、その出力に対する統合リターンバッファ250の所定の指定部分(例えばアドレスのグループ)を使用する。
図3は、関数ブロック220の1つの可能な実施例を示す。関数ブロック220は、アドレスフェンス310のセット、スコアボード320のセット、アドレス/インデクス計算ユニット330および状態マシン340を含む。
アドレスフェンス310は、アドレスフェンスのピン/ポンセットを含み、各フェンスはトップレジスタおよびボトムレジスタを有する。トップレジスタおよびボトムレジスタは、関数ブロック220がアイテムを格納できる場所であるURB250内にアドレス範囲を画定するアドレスを格納する。本明細書においては、「ポン」は代替セット(例えば「新」セット)を示すのに対して、「ピン」は別のセット(例えば「旧」すなわち以前のセット)を示す。アドレスフェンス310のコンテキストにおいては、トップフェンス値およびボトムフェンス値の初期セットはピンフェンスレジスタに格納され、値の置換セットが到着するとポンフェンスレジスタに格納される。トップ値およびボトム値の別の置換セットが到着するとピンフェンスレジスタに格納され、ポンフェンスは最新の値を有し、というようになる。
スコアボード320はピンスコアボードおよびポンスコアボードを含み、各スコアボードは、追跡記録されたアドレス当たり1ビットをURB250に有する。スコアボードは、その関数ブロック220に対するURB250のエントリの最大予測可能割り当てを十分包含できるほど大きい。このため、所定の関数ブロック220がURB250の20%にのみ割り当てられると、スコアボード320はその量のURB250のエントリ当たり2ビット(ピンおよびポンに対して各1)のサイズになる。
アドレス/インデクス計算ユニット330は、インデクスからアドレスを計算するかまたはその逆を計算するためのロジックを含む。本明細書においては、「インデクス」は、アドレスフェンス310によって確定されたアドレス範囲内の相対位置を示す数(例えば0に始まりアドレスフェンス310のサイズに終わる)を示す。関数ブロック220のアドレスフェンス310内のアドレスに対しては、そのアドレスに対する対応インデクスは、以下のように計算される:インデクス=アドレス−トップ、ここでトップはアドレスフェンス310の上端を示す。同様に、ユニット330は、以下のようにインデクス値からアドレスを計算する:アドレス=トップ+インデクス。アドレス/インデクス計算ユニット330が使用される例を以下に記載する。
状態マシン340は、アドレスフェンス310間の変更に際し、スコアボード320に再割り当てを行う。かかる再割り当てをさらに詳細に以下に記載する。状態マシン340はまた、所定のアドレスを保持すべきか転送すべきかを決定するというような他のアドレスプロセシングも行う。状態マシン340はまた、関数ブロック220のための他の制御関数および/またはブックキーピング関数も行う。
図2に戻ると、関数ブロック220は、2つの双方向バス:HPBI230およびLPBI240によって相互接続される。HPBI230およびLPBI240の各々において、2つのポイント間インターフェイスは各関数ブロック220間に及び、一方は「ノース」に向かい、他方は「サウス」に向かう。例えば、アドレスは、HPBI230および/またはLPBI240のサウス方向のインターフェイスにわたりn番目の関数ブロック220FB[n]から(n+l)番目の関数ブロック220FB[n+l]に送り下げられる。同様に、FB[n+l]は、HPBI230および/またはLPBI240のノース方向のインターフェイスにわたり、FB[n]までアドレスを転送する。関数ブロック220間に所有権を伝えるべく発行されるアドレスはHPBI230で転送される。プロデューサ関数ブロック220に返されるペイロードおよび/またはアドレスを生成するべく発行されるアドレスはLPBIで転送される。
HPBI230およびLPBI240は、いくつかの方法で物理的に実装される。いくつかの実施例においては、2つのインターフェイスは各方向に平行に使用される。いくつかの実施例においては、各方向の1つのインターフェイスはその中に2つの仮想チャネルを備えて使用される。仮想チャネルのメカニズムが実装される場合、例えば、仮想チャネル#1はLPBI240に使用される仮想チャネル#0よりも高い優先順位(例えばHPBI230)となる。いくつかの実施例においては、HPBI230、LPBI240またはその両方はフロー制御される。
URB250は、プロセシングコア140による処理前または処理後に関数ブロック220に関連付けられたデータを保持するように構成される。本明細書の記載では、関数ブロック220によって、それに関連するアドレスフェンス310に基づきURB250は分割共有される。いくつかの実施例においては、URB250は1024以下のエントリを有するが、請求項に記載の発明は必ずしもこの点に限定されるわけではない。
ディスパッチャ260は、バス130を介して関数ブロック220からプロセシングコア140へ、スレッドをディスパッチする。いくつかの実施例においては、ディスパッチャ260は、コア140の中のいずれに特定のスレッドを送るべきかを決定する。いくつかの実施例においては、ディスパッチャ260は、発信側の関数ブロック220によって特定された特定のプロセシングコア250へスレッドを送る。
図1に戻ると、バス130は、メモリ階層110内のいくつかの通信リンク、スレッドディスパッチャ120およびプロセシングコア140を含む。説明の便宜上、バス130は単一のラインとして表されるが、実際にはバス130は、1つ以上の制御バス、データバス等を含む。バス130は、コア140による処理のためにデータをスレッドディスパッチャ120から搬送し、処理済みデータもコア140からスレッドディスパッチャ120および/またはメモリ階層110へ搬送する。
システム100はまた、マルチプロセシングコア140も含む。マルチプロセシングコア140の各々は、関連付けられた制御回路構成を備える実行回路を含む。プロセシングコア140は同一であり、様々な機能性を有する。任意の数のプロセッサコア140−1〜140−nがシステム100に含まれる。いくつかの実施例においては、プロセッサコア140は列状に構成され、各列は関連付けられた列コントローラを有する。
図4は、関数ブロック(FBs)220間にバッファ250内のアドレスを初期的に割り当てるプロセス400を示すフローチャートである。システム100のスタートアップに際し、またはリセットおよび/またはフラッシュの後に、すべてのFBs220内のすべてのスコアボード320がクリアされてトップ/ボトムフェンスレジスタ310は「don't care」状態になると仮定する。スレッドディスパッチャ120内のコマンドストリームから読み取られたデータの第1シーケンスは、FBs220の各々に対するトップ/ボトムフェンス値のリストを含む。
かかるトップ/ボトムフェンス値をFBs220間に分配することから処理が開始される[アクト410]。引き続きいて、かかるトップ/ボトムフェンスレジスタ値はHPBI230によってFBs220を介してパイプライン化される。いくつかの実施例においては、例えば、FB220−1は、第1トップ/ボトムペアをそのアドレスフェンス310に格納し、残りのフェンス値をFB201−2に転送する。FB220−2は、残りの値のトップペアをそのアドレスフェンス310に格納し、その残りをHPBI230によってFB220−3に転送し、というようになる。最後の関数ブロック220−nは最後のトップ/ボトムペアを消費する。
FBs220間に割り当てられるアドレスのリストがコマンドストリーム内に続く[アクト420]。アドレスのリストはHPBI230によって第1FB220−1に入力される。FB220−1は所定のアドレスを見て、それがアドレスフェンス310のそのアドレス範囲内にあるか否かを決定する[アクト430]。
アドレスがFB220−1のアドレスフェンス310内にない場合、アドレスは次のFBに転送される[アクト440]。アドレスがFB220−1の範囲内(または転送された場合は220−2のような別のFBの範囲内)にある場合、FBはアドレスを処理する[アクト450]。
かかるアドレスプロセシングにおいては、FBは関連付けられるインデクス、インデクス=アドレス−ベース、を計算ユニット330を介して計算する。この計算されたインデクス値に対し、ビットはその後そのFBsのピンスコアボード320にセットされる。アクト440およびアクト450の戻り矢印に示されるように、かかるアドレスプロセシングは、すべてのアドレスが所定のFB220に関連付けられるまで続く。
このシーケンス400の最後に、すべてのFBs220はそのピンアドレスフェンス310が有効となり、そのピンスコアボード320は使用を許可されたアドレスに更新される。いくつかの実施例においては、かかるインデクスアドレスはゼロから始まり、シーケンスの最後のアドレスへの増分カウント(0,1,2,...)となるが、請求項に記載の発明はこの点に限定されない。
各スコアボード320にビットがセットされると、これは特定のアドレスが「インフライト」(例えば、別の目的地へ移送中)ではないことを示す。したがって、(特定のアドレスフェンス領域内の)スコアボード320のゼロ(例えば、セットされていないビット)は、特定のアドレスがインフライトであることを示す。インフライトでないアドレスは再要求(reclaim)されて、URB250に向かう予定の新たな出力バッファとして再使用される。それとは対照的に、インフライトのアドレスは、新たな出力バッファの一部として使用されるために再要求されることがない。
プロセス400は、スコアボード320をスタートアップにセットするのにそれほど直接的な方法ではないが、かかるスキームによって、アドレスフェンス310の再分割がスタートアップシーケンスのスキームに類似する。FB220−1の前にあるアドレスを発行せずにかかるアドレスをパイプラインにまく(seed)最適化が可能となる。上記特定のスキーム400を理解の便宜のため説明するが、その詳細は請求項に記載の発明を必ずしも限定するわけではない。
図5は、関数ブロック(FBs)がバッファ250内のアドレスを利用するプロセス500を示すフローチャートである。初期化シーケンス400の後、FB220−1はそのスコアボードの読み取りポインタをゼロにセットする。FB220−1は、コマンドストリーム(例えば、コマンドパーサ210)からタスク(例えば、関数または関数の一部)を受け取る。このタスクに対するバッファリング要件(例えば、URB250内に必要な空間の量)に基づいて、FB220−1は、かかる空間をURB250内に割り当てる[アクト510]。
例えばアクト510において、FB220−1は、タスクのためのURB250内の所望数のエントリ(例えば、ワーキングカウント(WC))とともに、現在のスコアボード読み取りポインタをレジスタ(例えば、ワーキングポインタ(WP))に格納する。図3には明示的に示されてはいないが、いくつかの実施例においては、WPレジスタおよびWCレジスタはスコアボード320に含まれる。FB220−1は、スコアボード320に、そのスコアボード読み取りポインタで始まる「ワーキングカウント」が隣接したものがセットされているか否かをチェックする。それほど多くの隣接したものがスコアボード320にセットされていない場合、FB220−1は、かかる数がセットされるようになるまで待つ。しかし、かかる「ワーキングカウント」空間が利用可能であれば、FB220−1は現在の読み取りポインタのビットをクリアして、スコアボード読み取りポインタを一つ進める。こうしてクリアすることおよび進めることは、タスクのために必要なURB250内のエントリ数(例えば、WCの数)が割り当てられるまで繰り返され、アクト510が完了する。アクト510のその他の実施例が可能であり、上記は主に理解の便宜のために提示される。
スコアボード320内のエントリに対応するURB250内のアドレスは、アドレス計算ユニット330を介してワーキングポインタから以下のように計算される:URBアドレス=WP+トップ、ここでトップはアクティブ(例えば、ピンまたはポン)アドレスフェンス310から得られる。プロセシングコア140が1つ以上のリターンアドレスを要求する場合は、上記計算は複数のリターンアドレスに対して繰り返される。URB250内のかかるリターンアドレスは、タスクのこの部分に対する計算が完了する際に、リターンアドレスとしてプロセシングコア140に発行される[アクト520]。その他のタスク関連情報もまた、アクト520に関連してFB220−1によってプロセシングコア140にディスパッチされる。
すべてのFBs220は、プロセシングコア140へのディスパッチワークの後は、処理後各データがURB250に戻されたときにURB250によって信号が送り返される。
こうして信号を送ることは、データがURB250に書き込まれる際にURB250によって自動的に行われる。例えば、FB220−1は、LPBI240を介してかかる通知を受け取る[アクト530]。
アクト530においてそのデータがバッファ250内にあるという通知を受け取った後、FB220−1は下流の関数ブロック(例えば、FB220−3)がその入力として使用するためのアドレスのリストを生成する[アクト540]。一般には、FB220−nは、次のFB220−(n+x)が消費するためのURB250に関連付けられたアドレス+カウントのリストを生成する。かかるアドレスリストメッセージのフォーマットには、開始URBアドレスおよびワードカウントが含まれる。かかるアドレス(およびワードカウント)は、LPBI240によってFIFO(ファーストイン、ファーストアウト)の形態で近隣の下流関数ブロック(例えばFB220−(n+l))に送られる。FB220−(n+l)がヌル関数(例えば、所定のタスクのために使用されない)場合は、タスク中の次の関数ブロック220、FB220−(n+x)に到達するまで情報が転送される。
FB220−(n+x)が完全なワードカウントのためにURBアドレスによってポイントされたデータを消費した後、送り側のFB220−nのスコアボード320内の対応するエントリは「開放」される。このため、FB220−nは、次のFB220−(n+x)によって消費されるべく送られたアドレスのリストに関連付けられたデータを待つ[アクト550]。本明細書において、「消費される」という語は、当該アドレスがURB250から読み取られたということを示す。しかし留意すべきなのは、かかるアドレスが消費されたとみなされても、別の目的地FB220へはまだインフライトの状態であり得る。例えば、アドレスが、その究極の目的地ではないFB220によって読み取られた場合、それはその目的地へはまだインフライトでありながら消費されたとみなされる。
アドレスが別のFB220によって消費された後、FB220−nはアドレスをそのスコアボード320の開放リスト(free list)に戻す(例えば、それはアドレスを「開放」する)[アクト560]。かかる「開放」エントリは、URB250内の新たなリターンバッファを行うオペレーションにおいて再使用すべく利用可能である。アドレスを開放するために、そのスコアボード320内のインデクスは、計算ユニット330によって以下のように計算される:インデクス=URBアドレス−アクティブトップフェンス。かかるインデクス計算は、この第1アドレスに関連付けられた「カウント」数のすべてに対して行われる。アドレスプラスカウント数のこのような拡張は「微粒化(atomization)」と呼ばれる。例えば、10のアドレスと4のカウントとはアドレス10、11、12および13に微粒化される。次に、インデクスのセットにおける(例えばアドレス+カウントに対する)スコアボード320の特定の値は、以下のようにアドレスが開放されていることを示すようにセットされる:スコアボード[インデクス]=1。
「開放」URBアドレスおよびカウント(例えば、自己生成されるかまたはノース方向またはサウス方向のLPBI240を介して受け取られるかのいずれか)を受け取る際、FB220−nは、アドレスをその現在のアクティブフェンス310のトップ/ボトムペアと比較し、情報を保持するかまたは必要に応じてLPBI240によってそれをノースまたはサウスに転送するかのどちらかを行う[アクト570]。アドレスが(ワードカウントを無視して)そのFB220のトップ/ボトム範囲内にある場合、それはその関数ブロックによって保持される。アドレスが(ワードカウントを無視して)そのFB220のトップ値よりも小さい場合、それはノース方向のLPBI240を介して送り上げられ;FB220のボトム値よりも大きい場合、それはサウス方向のLPBI240を介して送り下ろされる。アクト560における「開放」URB+カウント情報の微粒化後アクト570においてアドレスを送り上げるか下げるかを比較決定することは意図的であり、これによってFBs220のすべてをフラッシュする必要性なしにフェンス310を動的に変更することができる。後に説明するように、これによって、フェンス310が以前の隣接したURB割り当て間を移動することも可能となる。
主にFB220−1に関して説明したが、プロセス500が、FB220−2、FB220−3等のような他の関数ブロックによって同様に行われる。
いくつかの実施例においては、FB220は、同じURB250エントリ(およびワードカウント)を下流のFB220に向けて複数回発行する。例えば、いくつかのFBs220は、URB250のエントリをキャッシュとして使用し、キャッシュヒットは、所定のURBエントリを別のFBによって1回以上読み取られるようにする。したがって、そのURBエントリは著しく多数に及ぶことがある。スコアボード320は、アドレスがインフライトか否かを示し、かかるエントリを、それが複数回消費されるまで「開放」として取り扱うべきではない。
これにより、いくつかの実施例においては、アドレスがスコアボード330内に再投入され得るようになる前に、いくつの「開放」インスタンスが必要とされるのかを追跡記録するべく、所定のFBs220は別々のブックキーピングを保持する。こうした振舞いをするかかる関数ブロック220は、所定のURBエントリが発行されるたびにカウントを行うメカニズム、および所定のURBエントリが「開放」されるたびにカウントを行う補助的なメカニズムを含む。明示的には示されていないが、いくつかの実施例においては、かかるカウントを行うメカニズムは、スコアボード320および/または状態マシン340に含まれる。このカウントを行うメカニズムは、それが発行するベースURBアドレスの追跡記録を保持しさえすればよく、カウントフィールドが同じままであれば、URB250内の関連付けられたエントリのすべて(例えば、アドレス+カウント)を保持する必要はない。
プロセス500がメモリ内のアドレスを利用することを説明してきたが、メモリを関数内に動的に再割り当てすることが以下に説明される。あるポイントでは、FBs220が「状態を変更」してもよい時点(例えば、1つ以上のFBs220が追加されるとき、または所定の関数チェーンすなわちパイプラインから削除されるとき)である。例えば、FBs220(すなわち、頂点シェーダ、次いでテセレータ、次いでクリッピング、セットアップおよびウィンドワ)のパイプライン設定が与えられると、この設定においてURB250の理想的な分割が関数ブロック220に存在すると推定される。新たなパイプライン設定(例えば、頂点シェーダ次いでジオメトリシェーダ次いでクリッパ、セットアップおよびウィンドワ、または頂点シェーダ次いでクリッパ、セットアップおよびウィンドワのようなFBs220の別の設定)に対しては、FBs220の中に異なる理想的なURB250の分割が存在する。典型的には、かかる状態の変更は、FBs220の中にURB250の再分割(例えば、FBs220内でのアドレスフェンスの変更)を含む。
かかる再分割を達成するための一つの方法は、各連続FB220がアドレスフェンスの変更前のデータをフラッシュされるまで待つことである。しかし、かかるスキームの結果、全パイプラインの状態変更が遅れる一方で連続FBs220がフラッシュされる「暗示的フラッシュ」となるだろう。再分割のための別の方法は、1つのFB220からその新しいアドレスフェンスに応じてアドレスの転送を開始することだろう。しかし、かかるスキームは、1つの「サウス方向」チャネルのみが存在する場合およびそれがフロー制御される場合にはデッドロックとなり得る。
いくつかの実施例によれば、状態の変更と新たな状態内での処理を同時に行う間にデッドロックを避けるべく、第1のFB220が下流のFBs220がフラッシュするのを待つことはない。任意のステージのスコアボード320にすべて1が投入される(例えばクリアされる)まで待つこともない。状態変更中の遷移においては旧状態からのアドレスが残るが、FBs220は無分別にアドレスを送り上げおよび送り下げを続けることがない。その代わりに、アドレスはその以前の状態からの通常フローを無分別に完了する一方で、他のアドレスはシステムを介して転送されてそれらを新たな状態にリマップする。後に説明するが、HPBI230は、かかる動的状態変更(例えば、メモリの再分割)をデッドロックなしで容易に行う。
図6は、関数ブロックによるアドレスフェンスの動的変更のプロセス600を示すフローチャートである。チェーンまたはパイプラインの第1関数ブロック(例えばFB220−1)に関して説明するが、プロセス600は、連続するFBs220によって行われてURB250の動的再割り当てを完了する。
処理は、FB220−1がアドレスフェンス値の新たなセットを受け取ることから開始される[アクト610]。かかる新たな値は、アドレスフェンス310のピンまたはポン部分のいずれかに、どちらが現在の動作状態に対するフェンスを現在有するかに応じて格納される。すべてのFBs220に対するトップ/ボトムフェンスの新たなリストは、コマンドストリームによって発行され、FB220−1はそのリストから第1トップ/ボトムセットを取得してそれらをその(例えばポン)アドレスフェンス310に置く。そして、FB220−1はトップ/ボトムフェンスの残りをHPBI230を介して次のFB220(例えばFB220−2)に転送する。
処理が続いて、FB220−1は新たなアドレスフェンスを受け取る前に開始されたプロセシング/ワークを完了する[アクト620]。かかるワークは、まだURB250に戻されていない処理すべきデータを含むが、FB220−1に関連付けられたURB250内(例えばスコアボード320内)のデータを含むわけではない。FB220−1が、その旧状態でまだ動作している間に、その新たなスコアボード(例えばスコアボード320の「ポン」部分)にアドレスを「リタイア」することは容認されない。FB220−1がその旧状態でまだ動作している場合は、所有権を求めて転送されているというタグが付けられていないアドレスはいずれも、FB220−1の現在動作中のフェンスに対してフェンスの比較がされ、旧動作状態に基づいて送り上げ、送り下げまたは保持される必要がある。
FB220−1は、その現在のワークを終了した後、旧状態に割り当てられたエントリに対してゼロで開始するその旧スコアボード320をスキャンする。スコアボード内のかかるエントリの各々に対し、それは、アドレス=スコアボードインデクス+旧トップへのアドレス翻訳を行う。アドレスが新トップ/ボトムフェンス内の場合は、それはインデクス=アドレス−新トップの翻訳を行い、新スコアボード320内のビットをそのインデクスにセットする[アクト630]。
アドレスが新アドレスフェンスのボトム値より下またはトップ値より上の場合は、FB220−1は、HPBI230を介して下流または上流へ、「所有権転送」インジケータとともにアドレスを転送する[アクト640]。なお、トップ値の比較は、トップFB220−1よりも下のFBsに対してのみ関連する。かかる所有権転送インジケータは、このアドレスがFB220−1に送り返されるべきではないことを他のFBs220(例えばFB220−2)に示すが、その代わりに受け側FBの新アドレスフェンスと比較される(および新フェンス内であれば受け側FBの新スコアボード内の対応するエントリをセットする)。アクト630において翻訳されたアドレスまたはアクト640において転送されたアドレスに対しては、FB220−1は、(例えば、それをゼロにセットすることによって)その旧スコアボード320内の対応するエントリをクリアする。図6の破線は、旧スコアボード320に見出されるすべてのエントリに対してアクト620およびアクト640が繰り返されることを示す。
旧スコアボード320が所定のインデクスにおいてゼロを有する(例えば、アドレスがないことを示す)場合、そのインデクスについてアクト630およびアクト640におけるオペレーションは行われない。インデクスは増分を受けて、ゼロを転送する。アドレス計算が行われてエントリが新スコアボード320内にマップされると、FB220は、それを単に転送する代わりに、その新スコアボードエントリに対してゼロを書き込む。なお、旧スコアボード320がスキャンされるとすぐに、FB220−1は、新スコアボードに対してスコアボード読み取りポインタをゼロにリセットし、URB250内のエントリを要求する新たなペイロードを生成するべく隣接する1を探し始める。
アクト630およびアクト640と同時に、アドレスはノース方向LPBI240を介してFB220−1に到達する。かかる到達アドレスは、新フェンス310およびスコアボード320に関するFB220−1によって扱われる[アクト650]。例えば、入ってくるアドレスは新トップ/ボトムフェンス310内にマップされて新スコアボードインデクスに対して参照され、新スコアボードエントリは1にセットされる。アドレスが新フェンス310の範囲外の場合(第1FB220−1の場合はそれがボトム値よりも大きい場合のみがあり得る)、アドレスはHPBI230上のFB220−2(またはパイプライン内の次のFB220のいずれでも)へ「所有権転送」インジケータとともに下へ送り返される。
FB220−1が新たな状態のための第1ワークロードを次のFB220(例えばFB220−2)に送る準備ができている場合、それはサウス方向のLPBI240上で「フリップ状態」メッセージを送る[アクト660]。かかるフリップ状態メッセージはパイプライン内の次のFBにプロセス600を開始するように指示する。アクト650の後に示されているが、いくつかの実施例においてはアクト660はアクト620の直後に行われる。FB220−2がこのメッセージを見て以前の状態のワークで済む場合(例えば、アクト620の完了後)、それは、そのサウス方向LPBI240上での順番で別の「フリップ状態」メッセージを発行する。
誤ったタイミングの状態変更を防ぐためには、FB220−1が、エンジン/パイプラインの残りの準備ができる前に新状態に応じてデータを発行させることを防ぐメカニズムが望ましい。したがって、FB220−1は、最下流のユニット(例えばFB220−n、ここでnはパイプライン内の最後のユニットを示す)から、その新状態になったことを示すなんらかの信号を受け取るまで待つ[アクト670]。いくつかの実施例においては、最下流のFB220−nは、LPBI240を介して受け取った「フリップ状態」で動作する場合、ノース方向のHPBI230を介してFB220−1に確認応答信号を送り返す。
パイプライン内の他のFBs220はすべて、このメッセージを無視する。かかる実施例において、FB220−1は、確認応答パケットが受け取られるまで新状態パケットを発行しない。しかし、他の確認応答および/または遅延のメカニズムも可能かつ考慮される。
そして、FB220−1は新状態のワークの発行を開始する[アクト680]。
ここで、FB220−2のような下流ユニットに対するプロセス600を説明する。FB220−1は、FB220−2がまだ旧状態にある間に状態を変更している。FB220−2が「開放」してその旧フェンス内に該当する任意のアドレスは、必然的にその旧スコアボードに該当する。FB220−2が「開放」してその旧フェンス外に該当する任意のアドレスは、ノース方向LPBI240を使用して上流へ転送される。このことはまた、FB220−2がそのノース方向LPBI240を介して下流ユニット(例えばFB220−3)から受け取る任意のアドレスについても当てはまる。FB220−2は、そのワークを旧状態からディスパッチすることを済ませた場合、アクト630およびアクト640を行う。FB220−2は、その旧スコアボード320をスキャンし、ノース方向またはサウス方向のHPBI230を使用して「所有権転送」セマンティクスとともに必要に応じてアドレスを転送する。プロセス600は、残りのユニット220によって繰り返されて、それらの中にURB250を動的に再割り当てする。
図7は、HPBI230およびLPBI240上の例示的なメッセージフォーマットを示す。メッセージ710は、HPBI230上の(例えば、連続FB220への)サウス方向へのメッセージのフォーマットを示す。メッセージ720は、HPBI230上の(例えば、以前のFB220への)ノース方向へのメッセージのフォーマットを示す。同様に、メッセージ730およびメッセージ740は、各々LPBI240上のサウス方向およびノース方向のメッセージのフォーマットを示す。
なお、メッセージ710−740のURBアドレスのすべては10ビットフィールドとして示されている。このデータ長は、URB250が1024以下のエントリを有していることを仮定しており、アドレスされたメモリのサイズに基づくと異なるかもしれない。これは、再分割されるべきURB250または他のメモリが多少のアドレス空間を必要とする場合には、所望に応じて調整される。
本明細書に記載のように、アドレスフェンスメカニズム310は、各関数ブロック220に組み込まれる。各関数ブロック220は、そのURB250内への出力に対しては、それ自体のフェンス範囲内のアドレスのいずれかを使用する。これらのアドレスは、その後の読み取りおよびさらなる処理を目的として下流の関数220に転送される。その後の読み取りが行われた後、アドレスは、(例えば、アドレスがその関数ブロックのアドレス範囲内にある場合)その関数ブロック220によって保持されるか、(例えば、アドレスがその関数ブロックのアドレス範囲よりも大きい場合)送り下げられるか、または(例えば、アドレスがその関数ブロックのアドレス範囲よりも小さい場合)送り上げられるか、のいずれかとなる。関数ブロック220の状態変更が生じると、アドレスフェンス310は、デッドロックなしにまたは関連付けられたデータの関数ブロック220を完全にフラッシュする必要なしに、動的に再設定される。
1つ以上の実施例の上記記載は例示および説明を与えるが、本発明の範囲を網羅することも、開示の正確な形態に限定することも意図しない。修正例および変形例は上記教示に鑑みて可能であり、本発明の様々な実施例を行うことから得られる。
例えば、本明細書においてメモリの再割り当てスキームは、リターンバッファ250および関数ブロック220に関して記載されてきたが、一般的には計算関数および/またはスレッドによる/に対するメモリ内の動的再割り当てに適用することができる。また、本明細書で説明されたアドレスフェンス310およびスコアボード320によって行われるアドレスソーティング関数およびブックキーピング関数のための他のスキームも可能かつ考慮される。さらに、アドレスフェンス310は、関数ブロック220に対して連続アドレスを仮定するが、所望に応じて、バッファ中の不連続アドレスは、フェンスとは異なる関連付けロジックを備える所定の関数ブロック220に関連付けられてもよい。
さらに、図4から図6に記載のアクトは、図示の順序で行われる必要はないし、必ずしもアクトのすべてが行われる必要もない。また、他のアクトに依存しないアクトは、他のアクトと並列して行われてもよい。さらに、この図のアクトの少なくともいくつかは、命令または命令のグループとして行われてもよく、機械読み取り可能媒体において行われてもよい。
本願の記載に使用された要素、アクトまたは命令はいずれも、明示的に記載されていない限りは本発明に対して決定的または必須のものとして解釈するべきではない。また、本明細書において使用されている冠詞「a」は、1つ以上のアイテムを含むことを意図する。請求項に記載の発明の上記実施に対しては、本発明の要旨および原理から実質的に逸脱することなく変形例および修正例が可能である。本明細書においては、かかるすべての修正例および変形例は、本開示の範囲内に含まれ、以下の請求項によって保護されることを意図する。
システムの例を示す。 図1のシステムの例におけるスレッドディスパッチャを示す。 図2のスレッドディスパッチャにおける関数ブロックを示す。 関数ブロック中のバッファにアドレスを初期的に割り当てるプロセスを示すフローチャートである。 関数ブロックによるバッファ内のアドレス利用プロセスを示すフローチャートである。 関数ブロックによるアドレスフェンスの動的変更プロセスを示すフローチャートである。 メッセージフォーマットの例を示す。

Claims (23)

  1. メモリと、
    前記メモリの割り当て部分である複数の設定可能な関数ブロックと
    を含み、
    前記関数ブロックの各々は、
    前記関数ブロックによって現在使用されるメモリ内の範囲を画定する値を格納するアドレスフェンスユニットと、
    前記現在使用される範囲の利用を追跡記録するスコアボードユニットと
    を含むシステム。
  2. 前記アドレスフェンスユニットは、前記現在使用される範囲に加えて、前記メモリ内の少なくとも1つの範囲のための格納部を含む、請求項1に記載のシステム。
  3. 前記スコアボードユニットは、前記現在使用される範囲に加えて、前記メモリ内の前記少なくとも1つの範囲の利用を追跡記録する格納部を含む、請求項2に記載のシステム。
  4. 前記関数ブロックの各々は、前記アドレスフェンスユニット内の値に基づいて、前記メモリ内のアドレス値と前記スコアボードユニット内のインデクスとの間の翻訳を行う計算ユニットをさらに含む、請求項1に記載のシステム。
  5. 前記関数ブロックの各々は、前記計算ユニットからのインデクスに基づいて、前記スコアボードユニット内の値をセットまたはクリアするロジックをさらに含む、請求項4に記載のシステム。
  6. 前記関数ブロックまたは前記メモリからデータを受け取り、前記データを処理し、および処理済みデータを前記メモリに書き込むべく、1つ以上のプロセッサをさらに含む、請求項1に記載のシステム。
  7. 前記複数の設定可能な関数ブロックに接続する高優先双方向バスと、前記複数の設定可能な関数ブロックに接続する低優先双方向バスとをさらに含む、請求項1に記載のシステム。
  8. 第1パイプラインの第1セットの関数間にメモリ内のアドレス範囲を分配することと、
    前記第1パイプラインの第1セットの関数が、前記アドレス範囲を使用するデータ上で動作することと、
    前記メモリ内の異なるアドレス範囲を、前記第1セットの関数がデータをフラッシュされるのを待つことなしに第2パイプラインの第2セットの関数間に再分配することと
    を含む方法。
  9. 前記分配は、前記第1セットの関数間にアドレスフェンスのセットを分配することを含む、請求項8に記載の方法。
  10. 前記分配は、
    アドレスがアドレスフェンス内にあるか否かを決定することと、
    前記アドレスが前記アドレスフェンス内に該当する場合は前記アドレスを処理することと、
    前記アドレスが前記アドレスフェンス外に該当する場合は前記アドレスを別の関数に転送することと
    を含む、請求項9に記載の方法。
  11. 前記動作は、
    プロセシングタスクに対してメモリ内の空間を割り当てることと、
    前記タスクをプロセッサにディスパッチすることと、
    前記タスクに対応する前記メモリ内のアドレスのリストを次の関数のために生成することと
    を含む、請求項8に記載の方法。
  12. 前記動作は、
    前記アドレスのリストに関連付けられたデータが消費されるまで待つことと、
    前記アドレスのリストをスコアボードに開放すること
    を含む、請求項11に記載の方法。
  13. 前記再分配は、
    前記第2セットの関数間に新セットのアドレスフェンスを分配することと、
    前記アドレスが新アドレスフェンス内に該当する場合はアドレスを旧スコアボードから新スコアボードに翻訳することと、
    前記アドレスが新アドレスフェンス外に該当する場合は前記旧スコアボード内の前記アドレスの所有権を転送することと
    を含む、請求項8に記載の方法。
  14. 前記再分配は、次の関数にメッセージを送り、その新アドレスフェンスに関するその旧スコアボードおよび新スコアボードに対して前記翻訳および前記転送を始めることをさらに含む、請求項13に記載の方法。
  15. 前記再分配が行われた後に前記異なるアドレス範囲を使用して、前記第2パイプライン内の前記第2セットの関数が動作することをさらに含む、請求項8に記載の方法。
  16. アドレスフェンスを使用するいくつかのプロセス間にメモリを分割することと、
    前記いくつかのプロセスが前記メモリを使用し続けている間に、前記いくつかのプロセスの1つから前記いくつかのプロセスの別の1つにメモリ空間を動的に再割り当てすることと
    を含む方法。
  17. 前記動的な再割り当ては、
    新セットのアドレスフェンスを受け取ることと、
    前記アドレスが前記新セットのアドレスフェンス内に該当する場合はアドレスの所有権を維持することと、
    前記アドレスが前記新セットのアドレスフェンス外に該当する場合は前記アドレスの所有権を転送することと
    を含む、請求項16に記載の方法。
  18. 前記所有権を転送することは、前記アドレスを高優先バスによって別のプロセスに送ることを含む、請求項17に記載の方法。
  19. 前記再分配は、次のプロセスにメッセージを送り、その新セットのアドレスフェンスに対応するアドレスに対して前記維持および前記転送を行うことをさらに含む、請求項17に記載の方法。
  20. グラフィカル処理デバイスに以前に割り当てられた量とは異なる量の物理的メモリを、セットの固定関数間に、前記セットの固定関数に関連付けられたデータの完全なフラッシュを行うことなしに割り当てることを含む方法。
  21. 前記セットの固定関数は、前記割り当て中に前記物理的メモリを使用かつアクセスし続ける、請求項20に記載の方法。
  22. 前記割り当ては、前記セットの固定関数において旧セットのアドレスフェンスと新セットのアドレスフェンスとの間で前記メモリ内のアドレスを伝えることを含む、請求項20に記載の方法。
  23. 前記割り当ては、前記新セットのアドレスフェンスに応じて高優先バス上の固定関数間で前記メモリ内のアドレスの所有権を転送する、請求項22に記載の方法。
JP2007548204A 2004-12-23 2005-10-13 スレッドプロセッサにおける多重クライアントへのバッファの動的割り当て Expired - Fee Related JP4787844B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US63842704P 2004-12-23 2004-12-23
US60/638,427 2004-12-23
US11/224,643 2005-09-12
US11/224,643 US7603544B2 (en) 2004-12-23 2005-09-12 Dynamic allocation of a buffer across multiple clients in multi-threaded processor without performing a complete flush of data associated with allocation
PCT/US2005/037624 WO2006071337A1 (en) 2004-12-23 2005-10-13 Dynamic allocation of buffer across multiple clients in a threaded processor

Publications (3)

Publication Number Publication Date
JP2008525887A true JP2008525887A (ja) 2008-07-17
JP2008525887A5 JP2008525887A5 (ja) 2011-02-03
JP4787844B2 JP4787844B2 (ja) 2011-10-05

Family

ID=36084198

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007548204A Expired - Fee Related JP4787844B2 (ja) 2004-12-23 2005-10-13 スレッドプロセッサにおける多重クライアントへのバッファの動的割り当て

Country Status (8)

Country Link
US (3) US7603544B2 (ja)
JP (1) JP4787844B2 (ja)
KR (1) KR100892772B1 (ja)
CN (1) CN1831778B (ja)
DE (1) DE112005003222T5 (ja)
GB (1) GB2436044B (ja)
TW (1) TWI285314B (ja)
WO (1) WO2006071337A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7603544B2 (en) * 2004-12-23 2009-10-13 Intel Corporation Dynamic allocation of a buffer across multiple clients in multi-threaded processor without performing a complete flush of data associated with allocation
US7728841B1 (en) * 2005-12-19 2010-06-01 Nvidia Corporation Coherent shader output for multiple targets
US7844853B2 (en) * 2007-08-07 2010-11-30 International Business Machines Corporation Methods and apparatus for restoring a node state
US8086825B2 (en) * 2007-12-31 2011-12-27 Advanced Micro Devices, Inc. Processing pipeline having stage-specific thread selection and method thereof
US8752018B2 (en) * 2011-06-21 2014-06-10 Nvidia Corporation Emitting coherent output from multiple threads for printf
JP2013191202A (ja) * 2012-02-14 2013-09-26 Ricoh Co Ltd マルチコアプロセッサ
US8904068B2 (en) * 2012-05-09 2014-12-02 Nvidia Corporation Virtual memory structure for coprocessors having memory allocation limitations
CN104424129B (zh) * 2013-08-19 2019-07-26 上海芯豪微电子有限公司 基于指令读缓冲的缓存系统和方法
US10430229B2 (en) * 2015-12-21 2019-10-01 Intel Corporation Multiple-patch SIMD dispatch mode for domain shaders
US10678548B2 (en) * 2018-08-24 2020-06-09 Apple Inc. Pipelined allocation for operand cache
KR102711783B1 (ko) * 2021-07-27 2024-09-30 주식회사 세미파이브 시스템 온 칩에서 기능 블록 간의 데이터 송수신을 위한 인터페이스 방법 및 이를 이용하는 시스템 온 칩

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH022743A (ja) * 1987-12-17 1990-01-08 Peugeot Sa <Psa> 自動車の複数の要素と中央情報処理装置との間で情報を伝送するための情報伝送装置
JPH09269935A (ja) * 1996-01-31 1997-10-14 Toshiba Corp メモリ制御装置、及びメモリ制御方法
JPH1063568A (ja) * 1996-06-28 1998-03-06 Sun Microsyst Inc マルチスレッド環境におけるメモリの割り当て方法及びシステム
JP2000029783A (ja) * 1998-07-15 2000-01-28 Hitachi Ltd プロセッサ及び計算機
JP2003006148A (ja) * 2001-03-07 2003-01-10 Koninkl Philips Electronics Nv 集積回路

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2663540B2 (ja) * 1988-08-05 1997-10-15 三菱電機株式会社 プログラマブル制御装置
US5881264A (en) * 1996-01-31 1999-03-09 Kabushiki Kaisha Toshiba Memory controller and memory control system
SE509499C2 (sv) * 1996-05-03 1999-02-01 Ericsson Telefon Ab L M Metod och anordning för hantering av villkorliga hopp vid instruktionsbehandling i en pipeline-arkitektur
JPH09305418A (ja) * 1996-05-15 1997-11-28 Nec Corp 共有メモリ管理方式
US6658447B2 (en) * 1997-07-08 2003-12-02 Intel Corporation Priority based simultaneous multi-threading
US6070202A (en) 1998-05-11 2000-05-30 Motorola, Inc. Reallocation of pools of fixed size buffers based on metrics collected for maximum number of concurrent requests for each distinct memory size
US6862635B1 (en) * 1998-11-13 2005-03-01 Cray Inc. Synchronization techniques in a multithreaded environment
US6222550B1 (en) 1998-12-17 2001-04-24 Neomagic Corp. Multiple triangle pixel-pipelines with span-range pixel interlock for processing separate non-overlapping triangles for superscalar 3D graphics engine
US6701398B1 (en) * 1999-04-07 2004-03-02 Cradle Technologies, Inc. Global bus synchronous transaction acknowledge with nonresponse detection
US7139899B2 (en) 1999-09-03 2006-11-21 Cisco Technology, Inc. Selected register decode values for pipeline stage register addressing
US6678810B1 (en) 1999-12-30 2004-01-13 Intel Corporation MFENCE and LFENCE micro-architectural implementation method and system
US6539464B1 (en) 2000-04-08 2003-03-25 Radoslav Nenkov Getov Memory allocator for multithread environment
US7401211B2 (en) * 2000-12-29 2008-07-15 Intel Corporation Method for converting pipeline stalls caused by instructions with long latency memory accesses to pipeline flushes in a multithreaded processor
US6708284B2 (en) * 2001-03-30 2004-03-16 Intel Corporation Method and apparatus for improving reliability in microprocessors
US6978360B2 (en) 2001-05-11 2005-12-20 International Business Machines Corporation Scalable processor
CN1183453C (zh) 2001-12-21 2005-01-05 上海贝尔有限公司 一种内存管理系统及其分配方法
GB2392742B (en) * 2002-09-04 2005-10-19 Advanced Risc Mach Ltd Synchronisation between pipelines in a data processing apparatus
US7469407B2 (en) * 2003-04-24 2008-12-23 International Business Machines Corporation Method for resource balancing using dispatch flush in a simultaneous multithread processor
US7213135B2 (en) * 2003-04-24 2007-05-01 International Business Machines Corporation Method using a dispatch flush in a simultaneous multithread processor to resolve exception conditions
US7185167B2 (en) * 2003-06-06 2007-02-27 Microsoft Corporation Heap allocation
US7719540B2 (en) * 2004-03-31 2010-05-18 Intel Corporation Render-cache controller for multithreading, multi-core graphics processor
US7603544B2 (en) * 2004-12-23 2009-10-13 Intel Corporation Dynamic allocation of a buffer across multiple clients in multi-threaded processor without performing a complete flush of data associated with allocation

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH022743A (ja) * 1987-12-17 1990-01-08 Peugeot Sa <Psa> 自動車の複数の要素と中央情報処理装置との間で情報を伝送するための情報伝送装置
JPH09269935A (ja) * 1996-01-31 1997-10-14 Toshiba Corp メモリ制御装置、及びメモリ制御方法
JPH1063568A (ja) * 1996-06-28 1998-03-06 Sun Microsyst Inc マルチスレッド環境におけるメモリの割り当て方法及びシステム
JP2000029783A (ja) * 1998-07-15 2000-01-28 Hitachi Ltd プロセッサ及び計算機
JP2003006148A (ja) * 2001-03-07 2003-01-10 Koninkl Philips Electronics Nv 集積回路

Also Published As

Publication number Publication date
KR20070087666A (ko) 2007-08-28
US8225012B2 (en) 2012-07-17
GB2436044A (en) 2007-09-12
KR100892772B1 (ko) 2009-04-15
WO2006071337A1 (en) 2006-07-06
GB0712505D0 (en) 2007-08-08
GB2436044B (en) 2009-03-18
TW200629065A (en) 2006-08-16
US7603544B2 (en) 2009-10-13
TWI285314B (en) 2007-08-11
US20120272032A1 (en) 2012-10-25
CN1831778A (zh) 2006-09-13
US20060161757A1 (en) 2006-07-20
US20090327641A1 (en) 2009-12-31
US8601177B2 (en) 2013-12-03
DE112005003222T5 (de) 2007-10-31
JP4787844B2 (ja) 2011-10-05
CN1831778B (zh) 2012-11-14

Similar Documents

Publication Publication Date Title
JP4787844B2 (ja) スレッドプロセッサにおける多重クライアントへのバッファの動的割り当て
JP2008525887A5 (ja)
US10095526B2 (en) Technique for improving performance in multi-threaded processing units
US9639466B2 (en) Control mechanism for fine-tuned cache to backing-store synchronization
TWI509519B (zh) 維持公平和秩序的資源管理子系統
TWI489392B (zh) 多個應用程式分享的圖形處理單元
TWI573076B (zh) 訊息訊號中斷之通訊
JP5730126B2 (ja) データ供給装置、キャッシュ装置、データ供給方法、キャッシュ方法およびプログラム
CN102934076A (zh) 指令发行控制装置以及方法
US8166246B2 (en) Chaining multiple smaller store queue entries for more efficient store queue usage
US8566532B2 (en) Management of multipurpose command queues in a multilevel cache hierarchy
US20130185725A1 (en) Scheduling and execution of compute tasks
CN102065073B (zh) 向协议层直接提供数据消息
JP2002287957A (ja) キャッシュのような構造を使用してcpu設計におけるオペランド・アクセス・ステージを高速化するための方法及び装置
CN110035021B (zh) 针对原子数据访问请求进行的资源分配
US10229074B2 (en) Techniques for handling interrupts in a processing unit using interrupt request queues
CN114041126A (zh) 用于直接内存访问的方法及系统
CN116614558A (zh) 具有端到端可靠性和定序协议的收发器系统
US20070180114A1 (en) Methods and apparatus for allocating an object in computer system
KR20070020391A (ko) 스트리밍 id 방법에 의한 dmac 발행 메커니즘

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100615

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100915

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100924

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20101015

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20101022

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20101115

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20101122

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20101207

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110322

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110602

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: 20110628

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110715

R150 Certificate of patent or registration of utility model

Ref document number: 4787844

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20140722

Year of fee payment: 3

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

LAPS Cancellation because of no payment of annual fees