JP2005182825A - マルチスレッド式マイクロプロセッサのスレッドにまたがるアウト・オブ・オーダー命令ディスパッチ - Google Patents

マルチスレッド式マイクロプロセッサのスレッドにまたがるアウト・オブ・オーダー命令ディスパッチ Download PDF

Info

Publication number
JP2005182825A
JP2005182825A JP2004367833A JP2004367833A JP2005182825A JP 2005182825 A JP2005182825 A JP 2005182825A JP 2004367833 A JP2004367833 A JP 2004367833A JP 2004367833 A JP2004367833 A JP 2004367833A JP 2005182825 A JP2005182825 A JP 2005182825A
Authority
JP
Japan
Prior art keywords
instruction
thread
threads
circuit
buffer
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.)
Pending
Application number
JP2004367833A
Other languages
English (en)
Other versions
JP2005182825A5 (ja
Inventor
Simon S Moy
サイモン・エス・モイ
John E Lindholm
ジョン・エリック・リンドホルム
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.)
Nvidia Corp
Original Assignee
Nvidia 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 Nvidia Corp filed Critical Nvidia Corp
Publication of JP2005182825A publication Critical patent/JP2005182825A/ja
Publication of JP2005182825A5 publication Critical patent/JP2005182825A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/3802Instruction prefetching
    • 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
    • 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)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】チップ面積の実質的な増加を必要としない、実行パイプライン内のバブルの発生を効果的かつ効率的に減らす実行コア・アーキテクチャを提供すること。
【解決手段】グラフィックス・プロセッサなどのマルチスレッド式マイクロプロセッサの命令ディスパッチがスレッドの間の順序によって制限されない。命令は、スレッドのそれぞれからの命令を記憶する命令バッファにフェッチされる。ディスパッチ回路はバッファ内のどの命令が実行の準備ができているかどうかを判定し、準備ができた命令を実行のために発行する。あるスレッドからの命令を、別のスレッドからの命令の前に、どちらの命令が最初にバッファにフェッチされたかに無関係に発行する。特定のスレッドからの命令が発行されろと、フェッチ回路は、そのスレッドからの次の命令によって、使用可能なバッファ充てんする。
【選択図】図1

Description

本発明は、一般にマルチスレッド式マイクロプロセッサに関し、詳細には、スレッドの間の順序に無関係に、マルチスレッド式マイクロプロセッサで実行される命令のディスパッチに関する。
ビデオ・ゲーム創作者、シミュレーション作成者、その他のプログラム設計者の必要を満たすために、洗練されたグラフィックス・コプロセッサが、さまざまなコンピュータ・システム用に開発されてきた。これらのプロセッサは、一般に、汎用中央処理装置または他のマスタ・プロセッサの制御の下で動作するが、通常は、標準的なラスタベースのディスプレイ・デバイスで表示できる画像の画素への、シーン・データの変換を実行するように最適化されている。一般的な構成で、グラフィックス・プロセッサは、「ジオメトリ・データ」を与えられ、このジオメトリ・データには、通常は、レンダリングされるシーン内のオブジェクトを表すプリミティブ(たとえば、線、三角形、または他の多角形)の組と、テクスチャ、ライティング・モデルなどの追加データが含まれる。グラフィックス・プロセッサは、ジオメトリ・データに対してモデリング変換、視点変換、透視変換、ライティング変換、その他の類似する変換を実行する(このステージを、しばしば「バーテックス」処理と称する)。これらの変換の後に、「画素」処理が開始される。画素処理中に、ジオメトリ・データがラスタ・データに変換され、このラスタ・データには、一般に、可視区域に対応するアレイ内の各サンプル位置のカラー値やその他の情報が含まれており、テクスチャ・ブレンディングやダウンフィルタリング(ディスプレイ・デバイスの画素の数に対応するようにサンプル位置の数を減らすこと)を含むさらなる変換を、ラスタ・データに適用する。最終的な結果が、ディスプレイ・デバイスに供給できるカラー値の組である。
滑らかなアニメーションとリアルタイム応答を提供するために、グラフィックス・プロセッサは、一般に、新しいフレームの画素データに関するオペレーションを約30Hzの最低速度で完了しなければならない。画像が、より現実的(より多くのプリミティブ、より詳細なテクスチャなど)になるにつれて、グラフィックス・プロセッサに対する性能の要求が高まる。
これらの要求を満たすために、一部の既存グラフィックス・プロセッサは、並列性を利用するマルチスレッド式アーキテクチャを実装している。一例として、バーテックス処理中に、同一のオペレーションが、通常はバーテックスごとに実行され、同様に、画素処理中に、同一のオペレーションが、サンプル位置または画素位置ごとに実行される。さまざまなバーテックス(または画素)に対するオペレーションは、他のバーテックス(画素)に対するオペレーションと独立になる傾向があり、したがって、各バーテックス(画素)を、共通のプログラムを実行する別々のスレッドとして処理することができる。共通のプログラムは、グラフィックス・プロセッサの実行コア内の実行ユニットに命令のシーケンスを供給し、所与の時に、異なるスレッドが、プログラム・シーケンスの異なる点にある可能性がある。命令の実行時間(本明細書ではレイテンシと称する)は、1クロック・サイクルより長い場合があるので、実行ユニットは、一般に、パイプライン化された形で実施され、その結果、第2の命令が、終了していない命令の実行から生じるデータを必要としない限り、第2の命令を、前のすべての命令が完了する前に発行できるようになる。
そのようなプロセッサでは、実行コアが、一般に、異なるアクティブ・スレッドについて実行される命令をラウンドロビン式にフェッチし(すなわち、第1スレッドからの1つの命令、次に第2スレッドからの命令、など)各フェッチされた命令を発行制御回路に順次提示するように設計されている。発行制御回路は、ソース・データが使用可能になり、実行ユニットの準備ができるまで、フェッチされた命令を保持し、その後、実行ユニットに発行する。スレッドは独立なので、ラウンドロビン発行によって、命令がまだ実行中の命令の結果に依存する可能性が減る。したがって、あるスレッドの命令のレイテンシを、別のスレッドからの命令のフェッチと発行によって隠蔽することができる。たとえば、通常の命令は、20クロック・サイクルのレイテンシを有する可能性があるが、これは、コアが20個のスレッドをサポートするならば、隠蔽することができる。
しかし、ラウンドロビン発行は必ずしもレイテンシを隠蔽しない。たとえば、画素処理プログラムに、システム・メモリからテクスチャ・データをフェッチする命令が含まれることが多い。そのような命令は、非常に長いレイテンシ(たとえば、100クロック・サイクル以上)を有する場合がある。テクスチャ・フェッチ命令が、第1スレッドについて発行された後に、発行制御回路は、テクスチャ・データを要求する第1スレッドからの命令に来るまで、命令(テクスチャ・フェッチ命令に依存しない第1スレッドからの後続命令を含む)の発行を継続することができる。テクスチャ・データを要求する第1スレッドからの命令は、テクスチャ・フェッチ命令が完了するまで発行することができない。したがって、発行制御回路は、命令の発行を停止し、テクスチャ・フェッチ命令の完了を待ち、その後に命令の発行を再開する。したがって、実行パイプラインに「バブル」が生じる可能性があり、これは、実行ユニットのアイドル時間、さらにはプロセッサ内の非効率性につながる。
この非効率性を減らす1つの形が、コアによって並列に実行できるスレッドの数を増やすことによるものである。しかし、これは、各スレッドが追加の回路を必要とするので、高価な解決策である。たとえば、この並列設計で発生する頻繁なスレッド切替に対処するために、各スレッドに、一般に、それ自体の専用のデータ・レジスタの組を用意する。スレッドの数を増やすことによって、必要なレジスタの数が増え、これによって、プロセッサ・チップのコスト、設計の複雑さ、全体的なチップ面積が大幅に増える可能性がある。複数スレッドをサポートする他の回路や、各スレッドのプログラム・カウンタを維持するたとえばプログラム・カウンタ制御ロジックも、スレッドの数が増えるに連れて、より複雑になり、より多くの面積を消費する。
したがって、チップ面積の実質的な増加を必要としない、実行パイプライン内のバブルの発生を効果的かつ効率的に減らす実行コア・アーキテクチャを提供することが望ましい。
本発明の実施態様は、スレッドの間の順序によって制約されない形でマルチスレッド式マイクロプロセッサ(グラフィックス・プロセッサなど)で命令をディスパッチするシステムと方法を提供する。命令が、スレッドのそれぞれからの命令を記憶するように構成された命令バッファにフェッチされる。ディスパッチ回路が、命令バッファのどの命令が実行の準備ができているかを判定し、準備のできた命令を発行することができ、任意の1つのスレッドからの命令を、別のスレッドからの命令の前に、どちらの命令が先にバッファにフェッチされたかに無関係に、発行することができる。特定のスレッドからの命令が発行されたならば、フェッチ回路は、そのスレッドからの次の命令によって、使用可能なバッファ・ロケーションを充てんすることができる。
本発明の態様によれば、各スレッドに命令のシーケンスが含まれる、複数のスレッドの並列処理のために構成されたマイクロプロセッサが提供される。このマイクロプロセッサには、実行モジュール、命令バッファ、フェッチ回路、およびディスパッチ回路が含まれる。実行モジュールは、すべてのスレッドの命令を実行するように構成される。命令バッファには、スレッドのそれぞれの1つに関連する複数のストレージ・ロケーションが含まれている。フェッチ回路は、命令バッファ内の関連するストレージ・ロケーションが使用可能であるかどうかに少なくとも部分的に基づいてスレッドの1つを選択し、スレッドの選択された1つのシーケンス内の次の命令を、命令バッファにフェッチするように構成される。ディスパッチ回路は、命令バッファに記憶された命令のどれが実行の準備ができているかを判定し、実行ユニットに発行するために、準備のできている命令の1つを選択するように構成される。フェッチ回路は、第1の順序で命令バッファに命令をフェッチすることができ、ディスパッチ回路は、第1の順序と異なる第2の順序で準備のできた命令を選択することができる。
いくつかの実施態様で、マイクロプロセッサに、命令を記憶するように構成された命令キャッシュも含まれ、フェッチ回路を、さらに、プログラム・カウンタ値を含む要求を命令キャッシュに送ることによって次の命令をフェッチするように構成することができる。フェッチ回路に、プログラム・カウンタ・ロジック、選択論理回路、アービトレーション回路を含めることができる。プログラム・カウンタ・ロジックは、スレッドのそれぞれの候補プログラム・カウンタ値を生成するように構成される。選択論理回路は、命令バッファ内のストレージ・ロケーションのどれが使用可能であるかの判定に少なくとも部分的に基づいてスレッドの1つを選択するように構成され、選択論理回路は、さらに、対応する選択信号を供給するように構成される。アービトレーション回路は、選択信号を受け取り、選択されたスレッドに対応する候補プログラム・カウンタ値を命令キャッシュに送るように構成される。もう1つの実施態様では、スレッドに、第1スレッド・タイプを有するスレッドの第1グループと、第2スレッド・タイプを有するスレッドの第2グループを含めることができる。選択論理回路を、さらに、各スレッドのそれぞれのスレッド・タイプに少なくとも部分的に基づいてスレッドの1つを選択するように構成することができる。
他の実施態様で、マイクロプロセッサに、実行モジュールによって生成される結果データを含む、スレッドのそれぞれのデータを記憶するように構成されたレジスタ・ファイルも含めることができる。ディスパッチ回路に、スコアボード回路、スケジューラ回路、イシュア回路が含まれる。スコアボード回路は、命令バッファとレジスタ・ファイルに結合され、命令バッファ内の命令ごとにレディ信号を生成するように構成され、各命令のレディ信号は、命令のソース・オペランドがレジスタ・ファイルに存在するかどうかに少なくとも部分的に基づいてアサートされるかアサートされない。スケジューラ回路は、スコアボードと命令バッファに結合され、レディ信号がアサートされている命令バッファ内の命令の1つを次に発行される命令として選択し、対応する許可信号を命令バッファに送るように構成される。イシュア回路は、命令バッファに結合され、命令バッファは、さらに、許可信号に応答して、スケジューラ回路によって選択された命令をイシュア回路に送るように構成される。イシュア回路は、選択された命令のソース・オペランドをレジスタ・ファイルから収集し、選択された命令とソース・オペランドを実行モジュールに転送するように構成される。もう1つの実施態様では、スケジューラ回路が、さらに、各命令が命令バッファに記憶されていた時間の長さに少なくとも部分的に基づいて、次に発行される命令を選択するように構成される。
本発明のもう1つの態様によれば、複数スレッドの並列実行のために構成されたマイクロプロセッサ内で命令を処理する方法が提供される。スレッドの第1の1つからの第1命令が、スレッドのそれぞれからの命令を記憶するように構成された命令バッファにフェッチされる。その後、複数のスレッドの第2の1つからの第2命令が、命令バッファにフェッチされる。第1命令と第2命令の1つまたは複数が、実行の準備ができているかどうかが判定され、第1命令と第2命令のうちの準備のできた1つが実行のために発行される。第2命令は、第2命令が実行の準備ができており、第1命令が実行の準備ができていない場合に、第1命令を選択する前に選択される。
以下の詳細な説明は、添付図面と共に、本発明の性質および長所のよりよい理解を提供する。
本発明の実施形態は、マルチスレッド式マイクロプロセッサ(たとえばグラフィックス・プロセッサ)でスレッド順序に依存しない命令ディスパッチを可能にするシステムと方法を提供する。命令は、スレッドのそれぞれからの命令を記憶するように構成された命令バッファにフェッチされる。ディスパッチ回路が、命令バッファ内のどの命令が実行の準備ができているかを判定し、準備ができている命令をどれでも発行することができ、あるスレッドからの命令を、別のスレッドからの命令の前に、どちらの命令がバッファに先にフェッチされたかに無関係に発行することができる。特定のスレッドからの命令が発行されたならば、フェッチ回路が、そのスレッドからの次の命令によって使用可能なバッファ・ロケーションを充てんする。その結果、ブロックされたスレッドに起因する実行パイプラインのアイドル時間を減らすことができる。たとえば、スレッドの1つがブロックされる(次の命令が、完了していない命令に依存するので)場合に、プロセッサは、その時間中に、他のスレッドのいずれかからの任意の個数の命令の発行を継続することができる。
図1は、本発明の実施形態によるコンピュータ・システム100のブロック図である。コンピュータ・システム100には、バス106を介して通信する中央処理装置(CPU)102とシステム・メモリ104が含まれる。ユーザ入力が、バス106に結合された1つまたは複数のユーザ入力デバイス108(たとえば、キーボード、マウス)から受け取られる。視覚出力が、システム・バス106に結合されたグラフィックス処理サブシステム112の制御下で動作する画素ベースのディスプレイ・デバイス110(たとえば、普通のCRTまたはLCDベースのモニタ)に供給される。システム・ディスク128および、1つまたは複数の取外し可能ストレージ・デバイス129(たとえば、フロッピ・ディスク・ドライブ、コンパクト・ディスク(CD)ドライブ、および/またはDVDドライブ)などの他のコンポーネントも、システム・バス106に結合させることができる。システム・バス106は、PCI(Peripheral Component Interconnect)、AGP(Accelerated Graphics Port)および/またはPCI−Express(PCI−E)を含むさまざまなバス・プロトコルの1つまたは複数を使用して実装することができ、普通のノース・ブリッジとサウス・ブリッジ(図示せず)などの適切な「ブリッジ」チップを設けて、さまざまなコンポーネントおよび/またはバスを相互接続することができる。
グラフィックス処理サブシステム112には、グラフィックス処理ユニット(GPU)114、グラフィックス・メモリ116、スキャンアウト制御ロジック120が含まれ、スキャンアウト制御ロジック120を、たとえばプログラマブル・プロセッサおよび/または特定用途向け集積回路(ASIC)などの1つまたは複数の集積回路デバイスを使用して実装することができる。GPU 114を、システム・バス106を介して供給されるグラフィックス・データからの画素データの生成、画素データの記憶や更新のためのグラフィックス・メモリ116との相互作用など、さまざまなタスクを実行するように構成することができる。GPU 114の関連する特徴を、下でさらに説明する。
スキャンアウト制御ロジック120は、グラフィックス・メモリ116(または、いくつかの実施形態で、システム・メモリ104)からデータを読み取り、表示されるデータをディスプレイ・デバイス110に転送する。一実施形態で、スキャンアウトは、一定のリフレッシュ・レート(たとえば80Hz)で行われる。そのリフレッシュ・レートは、ユーザ選択可能パラメータとすることができる。スキャンアウト制御ロジック120は、特定のディスプレイ・ハードウェアに関するカラー値の調整、画素データを、たとえばグラフィックス・メモリ116、システム・メモリ104、または別のデータ・ソース(図示せず)から得られるビデオ画像、カーソル・オーバーレイ画像または類似物と組み合わせることによるコンポジット・スクリーン画像の生成、ディジタル画素データのディスプレイ・デバイス用のアナログ信号への変換など、他のオペレーションを実行することもできる。グラフィックス処理サブシステム112の特定の構成が、本発明にクリティカルでないことを理解されたい。
システム100のオペレーション中に、CPU 102は、オペレーティング・システム(OS)プログラム、アプリケーション・プログラム、グラフィックス処理サブシステム112のドライバ・プログラムなど、さまざまなプログラムを実行する。これらのプログラムは、一般に従来の設計を有するものでよい。たとえば、グラフィックス・ドライバ・プログラムは、グラフィックス処理サブシステム112との通信に、OpenGL、Microsoft DirectX、またはD3Dなどの1つまたは複数の標準的なアプリケーション・プログラム・インターフェース(API)を実現することができ、任意の数または組合せのAPIをサポートすることができ、いくつかの実施形態で、別々のドライバ・プログラムを提供して、異なるAPIを実現することができる。適切なAPI機能呼出しを呼び出すことによって、オペレーティング・システム・プログラムおよび/またはアプリケーション・プログラムが、システム・バス106を介してグラフィックス処理サブシステム112にグラフィックス・データまたは画素データを転送し、GPU 114のさまざまなレンダリング機能を呼び出すようにグラフィックス・ドライバ・プログラムに指示する。API機能呼出しに応答してグラフィックス・ドライバ・プログラムによってグラフィックス処理サブシステム112に送られる特定のコマンドおよび/またはデータは、GPU 114の実施形態に応じて変わる可能性があり、グラフィックス・ドライバ・プログラムは、オペレーティング・システムまたはアプリケーション・プログラムによって制御されない追加機能性(たとえば、特殊なビジュアル・エフェクト)を実現するコマンドおよび/またはデータを送ることもできる。
本発明の実施形態によれば、GPU 114は、多数のスレッドの並列処理用に構成され、各スレッドは、処理命令の独立のシーケンスに対応する。GPU 114は、任意の所与の時に、スレッドの任意の1つからの次の命令を実行することができる。
たとえば、画像の各バーテックスを別々のスレッドを使用して処理することができ、並列スレッドが、画像の異なるデータに対して同一の処理プログラムを実行し、所与の時に、スレッドの異なる1つがプログラムの異なる点にいることができる。いくつかの実施形態で、複数のスレッド・タイプがある場合があり、1タイプのすべてのスレッドが同一の処理プログラムを実行し、異なるタイプのスレッドが異なる処理プログラムを実行する。たとえば、その処理プログラムにジオメトリ変換とライティング変換が含まれる「バーテックス」スレッド・タイプと、その処理プログラムにテクスチャ・ブレンディングとオーバーサンプリングされたデータのダウンフィルタリングが含まれる「画素」スレッド・タイプがあってもよい。
図1の実施形態では、GPU 114に、複数の独立の実行コア118が含まれ、実行コア118のそれぞれは、複数のスレッド(図示せず)から受け取る命令を処理するように構成される。GPU 114によってサポートされる並列スレッドの最大個数は、コア118の個数に、1コアあたりのスレッドの数をかけたものであり、たとえば、一実施形態で、8つのコア118があり、各コアが16個までのスレッドをサポートし、合計128個の並列に実行されるスレッドがある。コアの数とスレッドの数は変更することができ、たとえば、それぞれが24個のスレッドをサポートする8つのコア(合計192個のスレッド)を設けることができ、それぞれが24個のスレッドをサポートする10個のコア(合計240個のスレッド)を設けることもできる。
各実行コア118に、命令キャッシュ132、命令フェッチ回路136、バッファ138、ディスパッチ回路140、実行ユニットの組(図示せず)を含む実行モジュール142、レジスタ・ファイル144が含まれる。命令キャッシュ(Icache)132は、一般に普通の設計とすることができ、たとえばグラフィックス・メモリ116から入手される実行可能命令を記憶する。Icache 132内の各命令は、プログラム・カウンタ(PC)値を使用して識別することができる。フェッチ回路136は、実行コア118によって処理されるすべてのスレッドに関する命令をIcache 132からフェッチし、各スレッド内のシーケンシャル・プログラムの順序を維持し、フェッチされた命令をバッファ138に供給する。各クロック・サイクルに、ディスパッチ回路140は、実行モジュール142に発行される命令をバッファ138から選択する。
一実施形態で、バッファ138は、スレッドごとに少なくとも1つの命令を記憶し、各スレッドのシーケンシャル・プログラム順序を維持するように構成される。各クロック・サイクルに、ディスパッチ回路140は、実行のためにバッファ138から命令の1つを選択し、ソース・オペランドをレジスタ・ファイル144から入手し、命令とオペランドを、実行のために実行モジュール142に転送する。ディスパッチ回路140は、有利なことに、バッファ138内のどの命令が、レジスタ・ファイル144で使用可能なソース・オペランドを有するかに基づいて、次に実行される命令を選択し、どのスレッドが選択された命令のソースであるかに無関係に命令を選択することができる。フェッチ回路136は、バッファ138を監視し、特定のスレッドの命令がバッファ138から発行された後に、そのスレッドの次の命令をフェッチする。その結果、所与のクロック・サイクルに、アクティブ・スレッドのほとんどまたはすべてからの命令を、バッファ138内で使用可能にすることができ、ディスパッチ回路140が、どのスレッドが最後に選択されたか無関係に、任意のスレッドからの命令を選択することができる。フェッチ回路136、バッファ138、ディスパッチ回路140の具体的な実施形態を下で説明する。
実行モジュール142は、一般に、普通の設計とすることができ、実行モジュール142に、任意の個数の個々の実行ユニットを含めることができる。実行ユニットの一部またはすべてを、当技術分野で既知のように、単一命令複数データ(SIMD)動作用に構成することができる。実行モジュール142は、命令とそのソース・オペランドをディスパッチ回路140から受け取り、命令に従ってソース・オペランドを処理し、結果データをレジスタ・ファイル144に記憶する。レジスタ・ファイル144には、実行コア118によって処理されるスレッドごとに別々のレジスタの組が含まれるのが望ましく、これによって、あるスレッドから別のスレッドに切り替える時に、レジスタとの間でデータをスワップする必要がなくなる。レジスタ・ファイル144に書き込まれるデータは、後続命令のソース・オペランドとして使用可能になる。命令は、性質において異なる可能性があり、命令には、任意の個数のソース・オペランドと任意の量および/または種類の結果データを含めることができる。
各命令は、一般に、それに関連するあるレイテンシを有する。すなわち、実行モジュール142の実行ユニットは、命令を処理し、結果データをレジスタ・ファイル144に書き込むのに、ある数のクロック・サイクル(1つまたは複数になる場合がある)を必要とする。異なる命令は異なるレイテンシを有する。たとえば、単純なベクトル加算演算は、1つまたは2つのクロック・サイクルだけで完了するが、テクスチャ・フェッチオペレーションは、多数のサイクル(たとえば100以上)を必要とする。実行モジュール142の実行ユニットは、レイテンシにかかわらずに各クロック・サイクルに命令をディスパッチできるようにするパイプライン式アーキテクチャで実装されるのが望ましく、そのようなアーキテクチャは、当技術分野で既知である。実行ユニットの異なる1つ(またはグループ)を、当技術分野で既知のように特定の命令の処理に特に適合させることができ、ディスパッチ回路140は、特定の命令を処理するために、実行モジュール142内の実行ユニットの適切な1つ(またはグループ)を選択することができる。
スレッドの命令は、そのスレッドの他の命令に対するデータ依存性を有する場合がある。すなわち、ある命令が、そのソース・オペランドとして前の命令の結果データを使用する場合がある。データ依存性を有する命令は、それが依存する命令からの結果データがレジスタ・ファイル144で使用可能になるまで実行することができない。そのようなデータ依存性を有する命令が、特定のスレッドの次の命令である場合に、そのスレッドはブロックされる。本発明の実施形態によれば、ディスパッチ回路140は、ブロックされたスレッドのブロックが解除されるのを待つのではなく、ブロックされたスレッドを検出し、異なるスレッド(ブロックされていなければどのスレッドにもすることができる)の次の命令を、次に発行するためにバッファ138から選択する。この形で、1スレッド内のレイテンシを、別のスレッドを実行することによって隠蔽することができ、その結果、GPU 114の効率が改善される。
実行コア118の他に、GPU 114に、システム・バス106を介して受け取られるコマンドを受け取り、これに応答する回路など、図1に示されていない他の特徴も含めることができ、そのような回路を、適宜、実行コア118内でスレッドを開始し、かつ/または終了するように構成することができる。さまざまな制御レジスタ、状況レジスタ、データ・キャッシュ、それらの類似物を、グローバルに、コアごとに、またはスレッドごとの基礎で設けることができる。そのような特徴は、当技術分野で既知であり、詳細な説明は、本発明の理解に重要ではないので省略する。
本明細書に記載のシステムが、例示的であり、変形形態や修正形態が可能であることを理解されたい。グラフィックス・プロセッサを、適切な技術、たとえば1つまたは複数の集積回路デバイスを使用して実装することができる。グラフィックス・プロセッサを、拡張カード(1つまたは複数のそのようなプロセッサを含めることができる)に取り付けるか、システム・チップセット(たとえばノース・ブリッジ・チップ)に統合することができる。グラフィックス処理サブシステムに、任意の量の専用グラフィックス・メモリを含めることができ(一部の実施形態は、専用グラフィックス・メモリを有しないことができる)、システム・メモリや専用グラフィックス・メモリを任意の組合せで使用することができる。
グラフィックス・プロセッサ内の実行コアの数は実装依存であり、最適の選択は、一般に、性能とコストの間のトレードオフに依存する。各実行コアは、1つまたは複数のスレッド・タイプの並列オペレーションをサポートすることができ、複数のコアが設けられる場合に、同一プロセッサ内の異なるコアを同一にまたは異なって構成することができる。コアは、実行ユニットを共用しない独立サブプロセッサとして実装されるのが有利であり、所与のスレッドが1つのコア内で実行される。
所与のコア内のスレッドの数も、特定の実施形態と隠蔽されるレイテンシの量に従って変更することができる。これに関して、いくつかの実施形態で、命令順序付けも使用して、あるレイテンシを隠蔽できることに留意されたい。たとえば、当技術分野で既知のように、グラフィックス・プロセッサ・コード用のコンパイラは、データを作成する第1命令と、そのデータを消費する第2命令がある場合に、第1命令によって作成されるデータを消費しない1つまたは複数の他の命令を、第1命令と第2命令の間に配置するように、プログラムの命令を配置するように最適化することができる。これによって、第1命令が実行されつつある間にスレッドの実行を継続できる。当技術分野では、長いレイテンシを有する命令について、通常、そのレイテンシを隠蔽するのに十分な独立の命令を、作成側と消費側の間に配置することが実用的でないことも既知である。コアごとのスレッドの数を判定する際に、そのような最適化の可用性(またはその欠如)を考慮することができ、たとえば、1つのコアによってサポートされるスレッドの数は、命令の最大レイテンシと、最大レイテンシの命令とその第1の依存命令との間にコンパイラが供給することを期待できる命令の平均(あるいは最小または最大)個数とに基づいて判断することができる。
実行コアの命令キャッシュは、スレッドの間で共用することができ、あるいは、スレッドの間で物理的にまたは論理的に分割することができる。さらに、コアが複数のスレッド・タイプをサポートする場合に、命令キャッシュに、各スレッド・タイプに対応する物理的および/または論理的分割を含めることができ、各分割を、さらに、望みに応じて、そのタイプの個々のスレッドの間で副分割する(またはしない)ことができる。
実行コアのレジスタ・ファイルに、スレッドごとのレジスタの組を含のが有利であり、実行コアのレジスタ・ファイルは、任意の個数の読取ポートおよび/または書込ポートを有することができる。さらに、物理的におよび/または論理的に別々のレジスタ・ファイルを異なるスレッドのために用意することができる。
フェッチ回路136、バッファ138、ディスパッチ回路140の構成も変更することができ、具体的な例を以下説明する。図2は、本発明の実施形態による実行コア118のフェッチ回路136とバッファ138の単純化されたブロック図である。この実施形態では、実行コア118が、スレッドの最大個数(N)までを並列に処理するように構成されるが、任意の所与の時に、N個のスレッドの一部またはすべてが、アイドルまたはインアクティブである可能性があることを理解されたい。
フェッチ回路136に、複数(N)のプログラム・カウンタ・ロジック・ブロック202と、選択論理回路206によって制御されるアービトレーション・ユニット204が含まれる(本明細書では、類似する物体の複数のインスタンスが、物体を識別する符号と、必要な場合にインスタンスを識別する括弧の中の番号によって示される)。
各プログラム・カウンタ・ロジック・ブロック202は、N個のスレッドのそれぞれの1つの次のシーケンシャル命令のプログラム・カウンタ(PC)値を生成する。プログラム・カウンタ・ロジック・ブロック202は、プログラム・カウンタを更新する一般的な普通の設計とすることができ、増分カウンタ、分岐検出ロジック、本発明にクリティカルでない他の特徴を含めることができる。
PCロジック・ブロック202によって生成されるPC値は、アービトレーション・ユニット204に提示され、アービトレーション・ユニット204は、選択論理回路206(下で説明する)によって供給される選択信号SELiに応答して、スレッドの1つ(本明細書では参照のためにスレッドiと示す)からのPC信号PCi(0≦i≦n−1)を選択する。選択された信号PCiは、Icache 132に送られ、Icache 132は、対応する命令をバッファ138に返し、対応するスレッドの識別子(i)がバッファ138に送られる。
バッファ138には、N個のストレージ・ロケーション208(たとえばレジスタを使用して実施することができる)が含まれ、その1つが、N個のスレッドのそれぞれに対応し、バッファ138には、N個の有効ビット(レジスタごとに1つ)を記憶するように構成されたアレイ210が含まれる。バッファ138は、Icache 132から命令(INST)を受け取り、かつアービトレーション・ユニット204から対応するスレッドのスレッド識別子(i)を受け取り、命令INSTをスレッドiに対応するロケーション208の1つに向ける。命令が記憶される時に、アレイ210内の対応する有効ビットに、論理真(たとえば「1」)がセットされる。
バッファ138は、ディスパッチ回路140が、ストレージ・ロケーション208の1つから、発行される命令を選択でき、その結果、異なるスレッドからの命令を任意の順序で発行できるように構成されることが望ましい。ディスパッチ回路140は、下で説明する。ここでは、特定のスレッドの命令が発行される時に、アレイ210の対応する有効ビットに、論理偽(たとえば「0」)がセットされることに留意されたい。本明細書で使用する「有効なスレッド」は、ストレージ・ロケーション208に有効な命令を有するスレッドであり、「無効なスレッド」は、そうでないスレッドである。
図2からわかるように、選択論理回路206は、バッファ138からアレイ210の有効ビットを受け取る。命令がフェッチされるスレッドiを選択する際に、選択論理回路206が各スレッドの有効性または無効性を使用する。たとえば、選択論理回路206を、有効なスレッドだけを選択するように構成することができ、複数のスレッドが無効である場合に、選択論理回路206は最も長く無効であったスレッドを選択することができ、あるいは、スレッドの間の優先順位ランキングに基づいてスレッドを選択することができ、この優先順位ランキングは、あるクロック・サイクルと次のクロック・サイクルの間で変化する。
選択論理回路206に、たとえば1つのスレッドが不釣り合いにリソースを消費しないようにするために、特定のスレッドを選択できる頻度を制限するルールも含めることができる。たとえば、あるルールによって、所与のスレッドが、最後に選択されてから少なくともMクロック・サイクルが経過しなければ再選択の資格がないものとすることができ、このMは、ある固定された数である(たとえば、プロセッサの構成可能なパラメータとして確立することができる)。そのようなルールが実装されると、どのスレッドも選択ルールを満足しないクロック・サイクルが生じる可能性がある(たとえば、唯一の無効なスレッドが、Mサイクル前以内に選択された)。その場合に、アービトレーション・ユニット204は、そのクロック・サイクルについてPCi値をIcache 132に送らないことができ、次のPCi値は、満足なスレッドが見つかった時の後続サイクル中に送られる。そのような実施形態の1つで、クロック・サイクルごとに1つのスレッドが選択されると、Mに、所与の時にアクティブであると期待されるスレッドの最小個数を超えない値がセットされ、これによって、スレッドが選択されないクロック・サイクルの可能性が減る。
図3は、本発明の実施形態による、スレッド選択ルールを実現する選択論理回路300の単純化されたブロック図である。選択論理回路300には、優先順位エンコーダ302とフェーズ(またはトークン)カウンタ304が含まれる。各スレッドの有効(valid)信号は、それぞれのインバータ306によって反転させられ、結果の/valid信号が、優先順位エンコーダ302に供給される。優先順位エンコーダ302は、普通のディジタル論理回路を使用して実装することができるが、/valid信号がアサートされている最高優先順位のスレッド(すなわち、最高優先順位の無効なスレッド)を選択する。スレッドの間の優先順位ランキングは、フェーズ・カウンタ304によって供給される制御信号(CTL)に基づいて決定される。フェーズ・カウンタ304は、各クロック・サイクルに増分されるmodulo Nカウンタであり、制御信号CTLは、フェーズ・カウンタ304の現在の値に対応する。この実施形態では、制御信号CTLによって、最高優先順位スレッドのスレッド番号が決定され、優先順位エンコーダ302は、残りのスレッドを、スレッド番号のNを法とする剰余の昇順(または降順)でランキングする。
フェーズ・カウンタ304は、各クロック・サイクルに増分されるので、スレッドの優先順位ランキングは、異なるクロック・サイクルについて異なる。たとえば、最初のクロック・サイクル中に、現在スレッド・カウンタ304は値0を有し、優先順位エンコーダ302はスレッド0に最高の優先順位を与える。言い換えると、最初のクロック・サイクル中に、スレッド0が無効である場合に、優先順位エンコーダ302は、スレッド0を選択するSELi信号の状態を生成する。スレッド0が有効である場合に、スレッド1が次に検討される。無効なスレッドが見つかるか、スレッドの最大個数(N以下とすることができる)が検討されるまで、これが行われる。次のクロック・サイクル中に、現在スレッド・カウンタ304は、値1を有し、優先順位エンコーダ302は、スレッド1に最高の優先順位を与え、スレッド1が有効である場合にスレッド2に最高の優先順位を与え、以下同様である。
スレッドが無効になったならば、そのスレッドは、次の命令がフェッチされるまで無効のままになる。したがって、選択論理回路300は、所与のクロック・サイクルに、最も長い間無効であったスレッドが選択されることを保証しないが、無効になったスレッドのすべてが、無効になってからNクロック・サイクル以内に選択されることを理解されたい。いくつかの実施形態で、優先順位エンコーダ302がクロック・サイクル中に検討するスレッドの最大個数Cをスレッドの総数Nより小さい数に制限することができる。これによって、あるスレッドが、連続するクロック・サイクルに選択されなくなり、スレッドを再選択できるようになる前のクロック・サイクルの最小数をCの値を調整することによって制御することができる(いくつかの実施形態で、Cを、システムの構成可能なパラメータとすることができる)。
本明細書に記載の選択論理回路と選択ルールは例示的であり、変形形態や修正形態が可能であることを理解されたい。本明細書に記載のさまざまな回路コンポーネントは、普通のディジタル論理回路の設計と技術を使用して実現することができる。異なる論理回路を実装して、異なる選択ルールをサポートすることもできる。たとえば、クロック・サイクルごとに複数の命令をフェッチできる実施形態では、優先順位エンコーダを、クロック・サイクルごとに複数のスレッドを選択するように構成することができる。さらに、優先順位エンコーダ以外のデバイスを、選択される無効なスレッドの判定に使用することができる。たとえば、選択論理回路が、有効ビットの1つの論理真状態と論理偽状態の間の推移が検出される時に更新される、「最も以前に有効であった」ビット・フィールドを維持することができる。もう1つの実施形態では、カウンタまたは類似する回路を使用して、スレッドが無効になってからの経過時間および/またはスレッドが最後に選択されてからの経過時間を判定することができ、このカウンタ値に作用する比較ロジックを設けて、最も以前に有効であったスレッドを識別することができる。
さらに、選択ロジックに、選択時と対応する命令がバッファ138に現れた時の間にスレッドの選択を抑止する追加回路を含めることができる。たとえば、Icacheミスの場合に、主命令ストア(または2次キャッシュ)から命令を取り出し、バッファ138に供給するのに複数のサイクルを要する場合がある。いくつかの実施形態で、たとえば、スレッド内の命令がバッファ138に供給されないようにし、かつ/またはプログラム順から外れて発行されないようにするために、この期間中のそのスレッドの再選択を抑止することが望ましい場合がある。フェッチ回路136が、ラウンド・ロビン式にスレッドを選択しないので、Icacheミスに出会ったスレッドの命令のフェッチが抑止されている間に、他のスレッドからの命令をバッファ138にフェッチし続け、発行し続けることができることに留意されたい。したがって、本明細書に記載のいくつかの実施形態では、Icacheミスの場合のパイプライン・バブルおよび非効率性が回避される。
複数のスレッド・タイプがサポートされる場合に、選択ロジックは、望みに応じてスレッド・タイプを考慮に入れるかそうしないことができる。たとえば、図2に示された実施形態では、スレッド・タイプに関する情報が選択論理回路206に供給されない。図4は、スレッド・タイプを考慮に入れる、本発明の代替実施形態によるフェッチ回路400のブロック図である。この実施形態では、実行コアが、第1タイプ(「A」)のK個までのスレッドと、第2タイプ(「B」)のN−K個までのスレッドを含めることができるN個のスレッドもサポートする。
タイプAアービトレーション・ユニット402は、アクティブなタイプAスレッド(参照のために0からK−1までの番号を付す)からのプログラム・カウンタ信号を受け取り、タイプBアービトレーション・ユニット404は、アクティブなタイプBスレッド(参照のためにK〜N−1までの番号を付す)からのプログラム・カウンタ信号を受け取る。タイプAアービトレーション・ユニット402は、選択論理回路406からの選択信号に応答してタイプAスレッドの1つを選択し、タイプBアービトレーション・ユニット404は、選択論理回路408からの選択信号に応答してタイプBスレッドの1つを選択する。一実施形態で、選択論理回路406、408のそれぞれの構成は、一般に、図3に関して上で説明したものに類似し、その結果、各選択論理回路406、408が、最も長い間無効であったそれぞれのタイプのスレッドを選択するが、他の構成と選択ルールも使用できることを理解されたい。上で説明したように、選択ルールに応じて、アービトレーション・ユニット402、404の1つ(または両方)がスレッドを選択しないクロック・サイクルが存在する場合がある。
選択論理回路406、408からの選択信号に応答して、タイプAアービトレーション・ユニット402とタイプBアービトレーション・ユニット404は、それぞれの選択されたプログラム・カウンタ値(PCa、PCb)をグローバル・アービトレーション・ユニット410に供給する。アービトレーション・ユニット402、404は、選択されたそれぞれのスレッド(a、b)も識別する。グローバル・アービトレーション・ユニット410は、スレッド・タイプ優先順位回路412によって生成されるタイプ選択信号(A/B)に応答して、PCaとPCbの間で選択する。
スレッド・タイプ優先順位回路412は、スレッド・タイプAとBの間の所望の相対優先順位を定義するために、さまざまな形で構成することができる。一実施形態で、スレッド・タイプ優先順位回路412を、交番するクロック・サイクルにPCaとPCbを選択することによって、両方に等しい優先順位を与えるように構成することができる。もう1つの実施形態で、スレッド・タイプ優先順位回路412が、2つの候補スレッドのうちで最も以前に有効であったものを選択することができる。
もう1つの実施形態で、スレッド・タイプ優先順位回路412は、静的または動的な「重要性」判断基準に基づいて、一方または他方のスレッド・タイプに優先順位を与える。さまざまな判断基準を使用することができる。たとえば、スレッド・タイプが、画素スレッドとバーテックス・スレッドに対応する場合に、バーテックス・スレッドに優先順位を与えることが望ましいことがある(たとえば、関連するバーテックス・スレッドの処理が完了するまで、ある画素スレッドを開始できない場合があるので)。したがって、1つの選択ルールを、必ず画素スレッドよりもバーテックス・スレッドを選択することとすることができる。もう1つの選択ルールは、ある数のバーテックスとその後のある数の画素の反復シーケンスとして定義することができる(たとえば、2バーテックスと1画素、3バーテックスと2画素、または、より一般的に、任意の整数νおよびρについて、νバーテックスとその後のρ画素)。重要性は、動的に定義することもでき、たとえば、現在アクティブであるか現在処理を待っているバーテックス・スレッドおよび/または画素スレッドの数に依存することができる。スレッド・タイプ優先順位回路412の選択ルールは、特定のシステム実施形態に関する最適化をサポートするように、構成可能にすることができる。
グローバル・アービトレーション・ユニット410は、実質的に上で説明したように、タイプ選択信号A/Bに基づいてPCaとPCbの間で選択し、選択されたプログラム・カウンタ値(PCi)をIcache 132に供給する。いくつかの実施形態で、タイプ選択信号A/Bは、時々、タイプ固有アービタ402(404)によってスレッド・タイプA(B)が選択されないクロック・サイクル中にスレッド・タイプA(またはB)を指定することができる。グローバル・アービトレーション・ユニット110を、この場合にPCb(PCa)を選択するか、スレッドを選択しない(すなわち、PCiをIcache 132に送らない)ように構成することができる。
本明細書に記載のフェッチ回路とバッファは例示的であり、変形形態や修正形態が可能であることを理解されたい。異なるスレッド(または異なるスレッド・タイプ)が、物理的にまたは論理的に別々の命令キャッシュを有する場合に、フェッチ回路を、選択されたPC値を適切なキャッシュに向けるように構成することができ、あるいは、適切なキャッシュを選択するのに使用できるスレッド(またはスレッド・タイプ)識別子を供給するように構成することができる。バッファは、たとえばスレッドごとにFIFOレジスタを設けることによってスレッドごとに複数の命令のストレージを提供することができ、フェッチ回路は、FIFOのそれぞれの無効なまたは未使用のエントリの数に基づいて、次にフェッチされるスレッドを選択することができる。
いくつかの実施形態で、フェッチ回路は、命令発行の前に、特定のレベルまでバッファを事前に充てんする必要がない。その代わりに、バッファは、データ依存性や同様のものに起因して命令発行がクロック・サイクルをスキップする時に、自然に充てんされるようにすることができる。フェッチ回路のスレッド選択ロジックは、スレッドの命令を記憶する空間がバッファ内に存在する時に限ってスレッドを選択するように構成され、これによって、バッファ・オーバーフローが回避される。
図5は、本発明の実施形態によるディスパッチ回路140の単純化されたブロック図である。ディスパッチ回路140に、スコアボード回路502、スケジューラ504、発行回路(またはイシュア)506が含まれる。スコアボード回路502は、一般に普通の設計とすることができ、バッファ138内の(有効な)命令のそれぞれを読み取る。命令ごとに、スコアボード回路502は、レジスタ・ファイル144を検査して、ソース・オペランドが使用可能であるかどうかを判定する。スコアボード回路502は、バッファ138内のどの命令が実行の準備ができているかどうか、すなわち、ソース・オペランドがレジスタ・ファイル144で使用可能であるかどうかを示すレディ信号の組(スレッドごとに1ビット)を生成する。スケジューラ504は、スコアボード回路502からレディ(ready)信号を受け取り、かつバッファ138から有効(valid)信号を受け取り、次にディスパッチされる命令を選択する。選択された命令がイシュア506にディスパッチされ、イシュア506は、実行モジュール142に転送することによって命令を発行する。たとえば、ソース・オペランドと結果データの適切なレジスタの選択をするために、選択された命令が属するスレッドのスレッド識別子も、イシュア506および/または実行モジュール142に転送することができる。
スケジューラ504は、スレッドの間の順序に基づく制約が少しだけまたはない状態で、バッファ138内の準備ができた命令の間で選択するように構成される。たとえば、スケジューラ504は、スレッドがいつ最後に選択されたかに無関係に、最も長い間待っている(有効な)、バッファ138内の準備ができた命令を選択することができる。
図6は、バッファ138からディスパッチされるスレッドを選択する、スケジューラ504に含めることができる選択論理回路600の単純化されたブロック図である。選択論理回路600には、優先順位エンコーダ602とフェーズ(またはトークン)カウンタ604が含まれる。各スレッドの有効(valid)信号およびレディ(ready)信号が、それぞれのAND回路606への入力として供給される。優先順位エンコーダ602は、AND回路606からの出力信号すなわち、バッファ138内のスレッドの命令が有効であり、実行の準備ができている時にアサートされる、スレッドごとの信号を受け取る(いくつかの実施形態で、スレッドのレディ信号は、スレッドが無効である時にアサートされず、したがって、AND回路606を省略することができる)。優先順位エンコーダ602は、普通のディジタル論理回路を使用して実装することができるが、レディ信号および有効信号の両方がアサートされている最高優先順位のスレッド(すなわち、最高優先順位の準備ができているスレッド)を選択する。ここで、スレッドの間の優先順位ランキングは、フェーズ・カウンタ604によって供給される制御信号(CTL2)に基づいて決定される。フェーズ・カウンタ604は、クロック・サイクルごとに増分されるmodulo Nカウンタであり、制御信号CTL2はカウンタ604の現在の値に対応する。この実施形態では、制御信号CTL2によって、最高優先順位のスレッドのスレッド番号が決定され、優先順位エンコーダ602は、残りのスレッドを、スレッド番号のNを法とする剰余の昇順(または降順)でランキングする。フェーズ・カウンタ604は、図3の現在スレッド・カウンタ304と同一のフェーズを有することができ(両方のカウンタを、望まれる場合に同一のカウンタとして実施することができる)、あるいは、異なるフェーズを有することができる。
優先順位エンコーダ602のオペレーションは、図3の優先順位エンコーダ302について上で説明したものに類似し、フェーズ・カウンタ604が、各クロック・サイクルに増分されるので、スレッドの優先順位ランキングは異なるクロック・サイクルについて異なる。たとえば、最初のクロック・サイクル中に、現在スレッド・カウンタ604は値0を有し、優先順位エンコーダ602はスレッド0に最高の優先順位を与え(すなわち、スレッド0の準備ができている場合にスレッド0を選択する)、スレッド0の準備ができていない場合にはスレッド1に与え、以下、準備ができているスレッドが見つかるか、スレッドの最大個数を検討するまで継続する。次のクロック・サイクル中に、現在スレッド・カウンタ604は値1を有し、優先順位エンコーダ602は、スレッド1に最高優先順位を与え、スレッド1の準備ができていない場合にはスレッド2に、以下同様である。
スレッドの準備ができたならば、そのスレッドは、その命令がディスパッチされるまで準備ができたままになる。したがって、選択論理回路600は、所与のクロック・サイクルに、最も長い間準備ができていたスレッドが選択されることを保証しないが、準備のできた(かつ有効な)スレッドが、準備ができてからNクロック以内に選択されることを理解されたい。いくつかの実施形態で、連続するクロック・サイクル中に同一のスレッドが選択されないようにすることが望ましい場合がある。したがって、優先順位エンコーダ602があるクロック・サイクル中に検討するスレッドの最大個数を、スレッドの総数Nより小さい数に制限することができる(この最大個数は、システムの構成可能パラメータとすることができる)。
本明細書に記載の選択論理回路と選択ルールが例示的であり、変形形態や修正形態が可能であることを理解されたい。本明細書に記載のさまざまな回路コンポーネントは、普通のディジタル論理回路の設計と技術を使用して実現することができる。異なる論理回路を実装して、異なる選択ルールをサポートすることもできる。たとえば、スーパースカラ実施形態(クロック・サイクルごとに複数の命令をフェッチできる)では、クロック・サイクルごとに複数の命令を選択するように選択ロジックを構成することができる。さらに、優先順位エンコーダ以外のデバイスを、選択される準備のできているスレッドの判定に使用することができる。たとえば、選択論理回路が、有効ビットの1つの論理真状態と論理偽状態の間の推移が検出される時に更新される、「最も以前に有効であった」ビット・フィールドを維持することができる。このビット・フィールドは、最も長い間有効であった準備ができている命令を選択するのに使用することができる。もう1つの実施形態では、カウンタを使用して、スレッドが有効になって(または準備ができて)からの経過時間および/またはスレッドが最後に選択されてからの経過時間を判定することができ、このカウンタ値に作用する比較ロジックを設けて、最も長い間有効であったスレッドを識別することができる。
もう1つの実施形態では、他の種類の選択ルールを実施することができる。たとえば、選択を、部分的にスレッド・タイプに基づくものとすることができる(たとえば、図4に示した上のものに類似する選択回路を使用して)。選択を、実行されるオペレーションのタイプに部分的に基づくものとすることもできる(たとえば、MULTIPLY演算、CALLオペレーション、ADD演算などに異なる優先順位を与える)。さらに、選択で、実行モジュールの状態を考慮に入れることができる。そのような実施形態の1つで、実行モジュール142に、特殊化された実行ユニット(または実行パイプラン)が含まれ、異なるオペレーションが異なる実行ユニットに向けられ、たとえば、浮動小数点算術を実行する実行ユニットと、整数算術を実行する別の実行ユニットを設けることができる。あるスレッドの準備ができている命令が必要とする実行ユニットが使用中である場合に、異なるスレッドからの命令を選択することができる。たとえば、所与の時に、浮動小数点パイプラインが使用中であり、整数パイプラインが空いていると仮定する。準備ができている整数算術命令を有するスレッドに、浮動小数点命令を有するスレッドより高い優先順位を与えることができる。
もう一度図5を参照すると、スケジューラ504からの許可(grant)信号に応答して、バッファ138内の要求された命令がイシュア506にディスパッチされる。一実施形態では、イシュア506に、オペランド・コレクタ508とバッファ510が含まれる。バッファ510は、ディスパッチされた命令を受け取り、オペランド・コレクタ508は、バッファ510内の命令のソース・オペランドをレジスタ・ファイル144から収集する。レジスタ・ファイル144の構成に応じて、ソース・オペランドの収集が、複数のクロック・サイクルを必要とする場合があり、オペランド・コレクタ508が、特定のレジスタ・ファイル構成に対する効率的なオペランド収集のためにレジスタ・ファイル・アクセスを最適化するさまざまな技法を実装することができ、そのような技法の例は、当技術分野で既知である。
バッファ510は、命令の他のオペランドを収集している間に、収集されたオペランドを、その命令と一緒に記憶するように構成される。いくつかの実施形態では、イシュア506は、オペランドが収集されるや否や、実行モジュール142に命令を発行するように構成される。イシュア506は、ディスパッチされた順序で命令を発行する必要がない。たとえば、バッファ510内の命令を、ディスパッチされた順序に対応するシーケンスで記憶することができ、各クロック・サイクルに、イシュア506が、すべてのオペランドを有する命令が見つかるまでシーケンスをステップする(最も以前にディスパッチされた命令から始めて)ことによって、オペランドを有する最も古い命令を選択することができる。この命令が発行され、シーケンスでその後ろの命令が前にシフトされる。新たにディスパッチされた命令はシーケンスの末尾に追加される。このシーケンスを、たとえば、バッファ510内の物理的ストレージ・ロケーションの順序付きの組によって維持することができ、この場合に、前の命令が除去される時に、命令が異なる位置にシフトされる。
一実施形態で、イシュア506にディスパッチされた命令は、実行モジュール142に発行されるまでバッファ138に留まる。ディスパッチの後に、命令が、有効だが準備ができていない状態で維持される(たとえば、ディスパッチされた命令の有効ビット210を、命令が発行されるまで論理真状態にとどめることができる)。イシュア506がディスパッチ順と異なる順序で命令を発行できる実施形態では、その構成が、同一スレッドからの複数の命令がバッファ510に同時に存在することを回避するのに役立つ可能性があり、これによって、スレッド内の命令の順序が維持されることを理解されたい。
他の実施形態で、イシュア506がオペランド収集を実行しない。たとえば、イシュア506は、命令が受け取られる時に実行モジュール142(またはその特定の実行ユニット)に命令を発行し、適切なソース・オペランドを実行モジュール142(またはその特定の実行ユニット)に供給するようにレジスタ・ファイル144に知らせることができる。この実施形態では、オペランド・コレクタ508とバッファ510を省略することができる。イシュア506の特定の構成が、本発明の理解にクリティカルでないことを理解されたい。
本明細書に記載のディスパッチ回路が例示的であり、変形形態や修正形態が可能であることを理解されたい。スケジューラ回路に関して本明細書に記載のさまざまな論理回路を、普通のディジタル論理回路の設計と技術を使用して実現することができる。異なる論理回路を実装して、異なる選択ルールをサポートすることもできる。スケジューラに、たとえばスレッドを発行のために再選択できる前の最小サイクル数などの追加の選択ルールおよび/またはあるスレッド・タイプに別のスレッド・タイプに対する優先順位を与えるなどの異なる選択ルールを実施するさまざまな種類の論理回路も含めることができる。そのようなルールは、フェッチ回路のスレッド選択に関して上で説明したものに類似する論理回路および技法を使用して実施することができる。
本発明を、特定の実施形態に関して説明したが、当業者は、多数の修正が可能であることを理解するであろう。たとえば、本明細書に記載の実施形態は、スカラ(すなわち、クロック・サイクルごとに1つ)命令発行用に構成されているが、代替実施形態では、スーパースカラ(すなわち、クロック・サイクルごとに複数)命令発行をサポートすることができる。スーパースカラ実施形態では、所与のクロック・サイクルに発行される命令を、所望の組合せでさまざまなスレッドから引き出すことができる(たとえば、いくつかの実施形態で、クロック・サイクルごとにスレッドあたり1命令に発行を制限することができ、他の実施形態で、同一クロック・サイクルに同一のスレッドから複数の命令を発行可能にすることができる)。スーパースカラ(またはスカラ)実施形態では、フェッチ回路を修正して、クロック・サイクルごとに複数の命令をフェッチすることもできる。したがって、本発明に、各サイクルに、任意の数(F)の命令をフェッチし、任意の数の命令(P)を発行する実施形態が含まれる。ここで、数F、Pを、望みの形で複数のスレッドの間に割り振ることができることを理解されたい。本発明の実施形態は、非同期式プロセッサでの使用に適合することもできる。
さらに、望まれる場合に、たとえば「アクティブ・ウィンドウ」内の準備ができた命令の発行を可能にする汎用プロセッサからのアウトオブオーダー技法を適合させることによって、スレッド内のアウトオブオーダー命令発行を実施することができる。
本明細書に記載の実行コアは、実行ユニットの特定の個数または構成に制限されない。たとえば、複数の実行ユニットが、所与の命令の処理のために協力することができ、異なる実行ユニットが、異なる命令(または異なるデータを有する同一の命令)を並列に受け取ることができる。実行ユニットは、固定のまたは可変のレイテンシを有する命令を処理することができ、すべてのクロック・サイクルに、より一般的にはある固定された個数のクロック・サイクルからなるインターバルに、新しい命令を受け入れるためにパイプライン化することができる。
上で注記したように、任意の個数のスレッドと任意の個数のスレッド・タイプをサポートすることができ、各スレッド・タイプは、実行される命令のプログラムされたシーケンスに対応する。プログラム命令は、グラフィックス・プロセッサまたは他のグラフィックス処理サブシステム・コンポーネントの不揮発性メモリに記憶された組み込み命令、システム初期化時および/またはランタイムにグラフィックス・ドライバ・プログラムによって供給される命令、および/またはアプリケーション供給のプログラム・コード(たとえば、プログラマブル・シェーダの場合)を含むさまざまな形で供給することができる。プログラムは、適切な高水準言語(たとえば、C、Cg、または類似物)で作成し、そのプログラミング言語と、プログラムが実行されるグラフィックス・プロセッサとのための適切なコンパイラを使用してコンパイルすることができる。入力命令の、実行ユニットとの互換性を有する異なるフォーマット(または異なる命令セット)への変換は、実行コア内、グラフィックス・プロセッサの他のコンポーネント内、またはコンピュータ・システム内の他の場所で提供することができる。
本明細書に記載のグラフィックス・プロセッサは、汎用デスクトップ・コンピュータ、ラップトップ・コンピュータ、および/またはタブレット・コンピュータ、携帯情報端末(PDA)、携帯電話などのさまざまなハンドヘルド・デバイス、ビデオ・ゲーム機などの専用コンピュータ・システム、および類似物を含むさまざまなコンピューティング・デバイスでコプロセッサとして実装することができる。
本発明を、グラフィックス・プロセッサに関して説明したが、本明細書に記載のシステムと方法を、他のマルチスレッド式マイクロプロセッサでも実現できることを理解されたい。
したがって、本発明を、特定の実施形態に関して説明したが、本発明が、請求項の範囲に含まれるすべての修正形態および同等物を含むことが意図されていることを理解されたい。
本発明の実施形態によるコンピュータ・システムを示す単純化された高水準ブロック図である。 本発明の実施形態による命令フェッチ回路および命令バッファを示す単純化されたブロック図である。 本発明の実施形態による、フェッチされる命令を選択する選択論理回路を示す単純化されたブロック図である。 本発明の代替実施形態による命令フェッチ回路を示す単純化されたブロック図である。 本発明の実施形態による命令ディスパッチ回路を示す単純化されたブロック図である。 本発明の実施形態による、発行される命令を選択する選択ロジックを示す単純化されたブロック図である。
符号の説明
132 命令キャッシュ、 136 命令フェッチ回路、138 バッファ、140 ディスパッチ回路、202 プログラム・カウンタ・ロジック・ブロック、204 アービトレーション・ユニット、206 選択論理回路、208 ストレージ・ロケーション、210 アレイ

Claims (24)

  1. 複数のスレッドの並列処理のために構成されたマイクロプロセッサであって、各スレッドが命令のシーケンスを含み、
    前記複数のスレッドのすべてに関する命令を実行するように構成された実行モジュールと、
    それぞれが前記複数のスレッドのそれぞれの1つに関連する複数のストレージ・ロケーションを含む命令バッファと、
    前記命令バッファの前記関連するストレージ・ロケーションが使用可能であるかどうかに少なくとも部分的に基づいて前記複数のスレッドの1つを選択し、前記複数のスレッドの前記選択された1つの前記シーケンス内の次の命令を前記命令バッファにフェッチするように構成されたフェッチ回路と、
    前記命令バッファの前記記憶された命令のうちのどれが、実行の準備ができているかを判定し、実行モジュールに発行される準備のできている命令の1つを選択するように構成されたディスパッチ回路と
    を含むマイクロプロセッサ。
  2. 前記フェッチ回路が、第1の順序で前記命令バッファに命令をフェッチし、前記ディスパッチ回路が、前記第1の順序と異なる第2の順序で準備ができている命令を選択する請求項1に記載のマイクロプロセッサ。
  3. 命令を記憶するように構成された命令キャッシュをさらに含み、前記フェッチ回路が、さらに、プログラム・カウンタ値を含む要求を前記命令キャッシュに送ることによって次の命令をフェッチするように構成される請求項1に記載のマイクロプロセッサ。
  4. 前記フェッチ回路が
    前記複数のスレッドのそれぞれの候補プログラム・カウンタ値を生成するように構成されたプログラム・カウンタ・ロジックと、
    前記命令バッファの前記ストレージ・ロケーションのどれが使用可能であるかの判定に少なくとも部分的に基づいて前記複数のスレッドの1つを選択するように構成された選択論理回路であって、さらに、対応する選択信号を供給するように構成される選択論理回路と、
    前記選択信号を受け取り、前記選択されたスレッドに対応する前記候補プログラム・カウンタ値を前記命令キャッシュに送るアービトレーション回路と
    を含む請求項3に記載のマイクロプロセッサ。
  5. 前記選択論理回路が、
    優先順位制御信号に基づいて決定される、前記スレッドの間の優先順位ランキングに従って、前記複数のスレッドのうちで、前記命令バッファ内に命令を有しない1つを選択するように構成された優先順位エンコーダと、
    前記優先順位制御信号を生成するように構成されたフェーズ・カウンタと
    を含み、異なる時間に、前記優先順位制御信号が、前記スレッドの異なる1つに異なる優先順位ランキングを与える請求項4に記載のマイクロプロセッサ。
  6. 前記選択論理回路が、さらに、第1スレッドの選択の前の発生から最小時間が経過した後に限って、前記第1スレッドを選択するように構成される請求項4に記載のマイクロプロセッサ。
  7. 前記複数のスレッドが、第1スレッド・タイプを有するスレッドの第1グループと、第2スレッド・タイプを有するスレッドの第2グループを有し、前記選択論理回路が、さらに、各前記複数のスレッドのそれぞれのスレッド・タイプに少なくとも部分的に基づいて、前記複数のスレッドの1つを選択するように構成される請求項4に記載のマイクロプロセッサ。
  8. 前記選択論理回路が、さらに、前記第1スレッド・タイプを有する第1候補スレッドと前記第2スレッド・タイプを有する第2候補スレッドを選択し、前記それぞれのスレッド・タイプに基づいて前記第1候補スレッドと前記第2候補スレッドとの間で選択するように構成される請求項7に記載のマイクロプロセッサ。
  9. 前記実行モジュールによって生成される結果データを含む、前記複数のスレッドのそれぞれのデータを保持するように構成されたレジスタ・ファイルをさらに含む請求項1に記載のマイクロプロセッサ。
  10. 前記ディスパッチ回路が、
    前記命令バッファと前記レジスタ・ファイルに結合され、前記命令バッファ内の各命令のレディ信号を生成するように構成されたスコアボード回路であって、各命令のレディ信号が、前記命令のソース・オペランドが前記レジスタ・ファイルに存在するかどうかに少なくとも部分的に基づいてアサートされるか、またはアサートされない、スコアボード回路と、
    前記スコアボード回路と前記命令バッファに結合されたスケジューラ回路であって、前記レディ信号がアサートされている前記命令バッファ内の前記命令の1つを、次に発行される命令として選択し、対応する許可信号を前記命令バッファに送るように構成されるスケジューラ回路と、
    前記命令バッファに結合されたイシュア回路であって、前記命令バッファが、さらに、前記許可信号に応答して、前記スケジューラ回路によって選択された前記命令を前記イシュア回路に送るように構成され、前記イシュア回路が、前記選択された命令の前記ソース・オペランドを前記レジスタ・ファイルから収集し、前記選択された命令と前記ソース・オペランドを前記実行モジュールに転送するように構成される、イシュア回路と
    を含む請求項9に記載のマイクロプロセッサ。
  11. 前記スケジューラ回路が、さらに、各命令が前記命令バッファに記憶されていた時間の長さに少なくとも部分的に基づいて、次に発行される命令を選択するように構成される請求項10に記載のマイクロプロセッサ。
  12. 前記スケジューラ回路が、
    前記レディ信号がアサートされている前記命令バッファ内の命令を有する、前記複数のスレッドのうちの1つを選択するように構成された優先順位エンコーダであって、前記スレッドの前記1つが、前記スレッドの間での優先順位ランキングに従って選択され、前記優先順位ランキングが優先順位制御信号に基づいて決定される、優先順位エンコーダと、
    前記優先順位制御信号を生成するように構成されたフェーズ・カウンタと
    を含み、異なる時間に、前記優先順位制御信号が、前記スレッドの異なる1つに異なる優先順位ランキングを与える請求項10に記載のマイクロプロセッサ。
  13. 前記複数のスレッドが、第1スレッド・タイプを有するスレッドの第1グループと第2スレッド・タイプを有するスレッドの第2グループを含み、前記スケジューラ回路が、さらに、各前記複数のスレッドのそれぞれのスレッド・タイプに少なくとも部分的に基づいて前記複数のスレッドの1つを選択するように構成される請求項10に記載のマイクロプロセッサ。
  14. 前記スケジューラ回路が、さらに、各前記スレッドの前記それぞれの命令に関連する動作の間の相対優先順位に少なくとも部分的に基づいて、前記複数のスレッドの1つを選択するように構成される請求項10に記載のマイクロプロセッサ。
  15. 前記実行モジュールが複数の実行パイプを含み、前記スケジューラ回路が、さらに、前記複数の実行パイプのどれが使用中でないかの判定に少なくとも部分的に基づいて前記複数のスレッドの1つを選択するように構成される請求項10に記載のマイクロプロセッサ。
  16. それぞれが命令のシーケンスを含む複数のスレッドを並列処理するように構成されたマイクロプロセッサで命令を処理する方法であって、
    前記複数のスレッドのそれぞれからの命令を記憶するように構成された命令バッファに、前記複数のスレッドの第1の1つからの第1命令をフェッチするステップと、
    その後、前記命令バッファに、前記複数のスレッドの第2の1つからの第2命令をフェッチするステップと、
    前記第1命令と前記第2命令のうちの1つまたは複数が実行の準備ができているかどうかを判定するステップと、
    実行のために前記第1命令と前記第2命令の準備ができている1つを発行するステップと
    を含み、前記第2命令が実行の準備ができており、前記第1命令が実行の準備ができていない場合に、前記第1命令を発行する前に、前記第2命令が発行される方法。
  17. 発行の前記動作の後に、前記発行された命令が前記第1スレッドまたは前記第2スレッドのどちらのためにフェッチされたかを判定する動作と、
    前記発行された命令に対応する前記スレッド内の次の命令である第3命令を、前記命令バッファにフェッチする動作と
    をさらに含む請求項16に記載の方法。
  18. 前記第1命令をフェッチする前記動作が、
    前記複数のスレッドのそれぞれから候補プログラム・カウンタ値を受け取る動作と、
    前記複数のスレッドのそれぞれに優先順位ランキングを割り当てる動作であって、前記優先順位ランキングが、異なる時間に異なる動作と、
    前記第1スレッドが、命令が前記命令バッファに記憶されていない最高優先順位のスレッドである場合に、前記複数のスレッドの中から前記第1スレッドを選択する動作と
    を含み、前記第1命令が、前記第1スレッドの選択に応答してフェッチされる請求項16に記載の方法。
  19. 前記第1スレッドの選択の前の発生からの経過時間が最小時間未満である場合に、前記第1スレッドの選択の前記動作を抑止する動作をさらに含む請求項18に記載の方法。
  20. 前記複数のスレッドが、第1スレッド・タイプを有するスレッドの第1グループと第2スレッド・タイプを有するスレッドの第2グループを含み、前記第1スレッドが、スレッドの前記第1グループの1つであり、前記第1命令をフェッチする前記動作が、
    前記複数のスレッドのそれぞれから候補プログラム・カウンタ値を受け取る動作と、
    スレッドの前記第1グループのそれぞれに優先順位ランキングを割り当てる動作であって、前記優先順位ランキングが、異なる時間に異なる動作と、
    前記第1スレッドが、命令が前記命令バッファに記憶されていない前記第1グループの最高優先順位のスレッドである場合に、スレッドの前記第1グループの中から前記第1スレッドを選択する動作と、
    スレッドの前記第2グループの中から第3スレッドを選択する動作と、
    前記第1スレッドと前記第3スレッドのそれぞれのスレッド・タイプに少なくとも部分的に基づいて、前記第1スレッドと前記第3スレッドの1つを選択する動作と
    を含み、選択する前記動作が、前記第1スレッドを選択することになった場合に、前記第1命令がフェッチされる請求項16に記載の方法。
  21. 判定する前記動作が、
    前記第1命令のソース・オペランドが使用可能であるかどうかを判定する動作と、
    前記第2命令のソース・オペランドが使用可能であるかどうかを判定する動作と
    を含む請求項16に記載の方法。
  22. 異なる時間に異なる優先順位ランキングを、前記複数のスレッドのそれぞれに割り当てること
    をさらに含み、前記第1命令と前記第2命令の両方が、実行の準備ができている場合に、前記第1命令と前記第2命令の準備のできている1つを選択する前記動作が、前記第1スレッドと前記第2スレッドのどちらがより高い優先順位を有するかを判定する動作を含む請求項16に記載の方法。
  23. 前記第1スレッドが、第1スレッド・タイプを有し、前記第2スレッドが、第2スレッド・タイプを有し、前記第1命令と前記第2命令の両方が実行の準備ができている場合に、前記第1命令の準備ができている1つを選択する前記動作が、それぞれのスレッド・タイプに少なくとも部分的に基づいて前記第1命令と前記第2命令との間で選択することを含む請求項16に記載の方法。
  24. 複数の実行コアを含むグラフィックス・プロセッサと、
    前記グラフィックス・プロセッサに結合されたグラフィックス・メモリと
    を含むグラフィックス処理システムであって、
    前記複数の実行コアのそれぞれが、
    複数のスレッドのすべてに関する命令を実行するように構成された実行モジュールと、
    前記複数のスレッドのそれぞれの1つに関連する複数のストレージ・ロケーションを含む命令バッファと、
    前記命令バッファ内の前記関連するストレージ・ロケーションが使用可能であるかどうかに少なくとも部分的に基づいて前記複数のスレッドの1つを選択し、前記複数のスレッドの前記選択された1つのシーケンス内の次の命令を前記命令バッファにフェッチするように構成されたフェッチ回路と、
    前記命令バッファ内の前記記憶された命令のどれが実行の準備ができているかを判定し、前記実行モジュールに発行される、前記準備のできている命令の1つを選択するように構成されたディスパッチ回路と
    を含む、グラフィックス処理システム。
JP2004367833A 2003-12-18 2004-12-20 マルチスレッド式マイクロプロセッサのスレッドにまたがるアウト・オブ・オーダー命令ディスパッチ Pending JP2005182825A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/742,514 US7310722B2 (en) 2003-12-18 2003-12-18 Across-thread out of order instruction dispatch in a multithreaded graphics processor

Publications (2)

Publication Number Publication Date
JP2005182825A true JP2005182825A (ja) 2005-07-07
JP2005182825A5 JP2005182825A5 (ja) 2007-12-27

Family

ID=34620632

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004367833A Pending JP2005182825A (ja) 2003-12-18 2004-12-20 マルチスレッド式マイクロプロセッサのスレッドにまたがるアウト・オブ・オーダー命令ディスパッチ

Country Status (6)

Country Link
US (3) US7310722B2 (ja)
EP (1) EP1555610B1 (ja)
JP (1) JP2005182825A (ja)
DE (1) DE602004026819D1 (ja)
SG (1) SG112989A1 (ja)
TW (1) TWI425418B (ja)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100810017B1 (ko) 2005-11-30 2008-03-07 인터내셔널 비지네스 머신즈 코포레이션 서로 다른 스레드에 대한 비대칭 하드웨어 멀티스레딩지원을 갖는 디지털 데이터 처리 장치
JP2009512917A (ja) * 2005-09-26 2009-03-26 イマジネイション テクノロジーズ リミテッド スケーラブルなマルチスレッド型メディア処理アーキテクチャ
JP2011505633A (ja) * 2007-11-30 2011-02-24 クゥアルコム・インコーポレイテッド グラフィックスシステムにおいて2次プロセッサを使用するための方法及びシステム
KR20120058605A (ko) * 2009-09-03 2012-06-07 어드밴스드 마이크로 디바이시즈, 인코포레이티드 Gpu 워크의 하드웨어 기반 스케쥴링
JP2013196300A (ja) * 2012-03-19 2013-09-30 Fujitsu Ltd 試験方法、試験装置及びプログラム
JP2013537993A (ja) * 2010-09-20 2013-10-07 クゥアルコム・インコーポレイテッド マルチプルプロセッサ計算プラットフォームにおけるプロセッサ間通信技法
JP2013250988A (ja) * 2013-07-22 2013-12-12 Panasonic Corp マルチスレッドプロセッサ
JP2014504416A (ja) * 2010-12-15 2014-02-20 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 組み合わせたcpu/gpuアーキテクチャシステムにおけるデバイスの発見およびトポロジーのレポーティング
WO2015155894A1 (ja) 2014-04-11 2015-10-15 株式会社Murakumo プロセッサーおよび方法
KR20220026117A (ko) * 2020-08-25 2022-03-04 주식회사 엔씨소프트 게시판 서비스 제공 장치 및 방법, 게시판 서비스 요청 장치 및 방법

Families Citing this family (195)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9849372B2 (en) * 2012-09-28 2017-12-26 Sony Interactive Entertainment Inc. Method and apparatus for improving efficiency without increasing latency in emulation of a legacy application title
US7228486B2 (en) * 2003-07-17 2007-06-05 Lucent Technologies Inc. Methods and devices for randomizing burst errors
US8643659B1 (en) 2003-12-31 2014-02-04 3Dlabs Inc., Ltd. Shader with global and instruction caches
US7418576B1 (en) * 2004-11-17 2008-08-26 Nvidia Corporation Prioritized issuing of operation dedicated execution unit tagged instructions from multiple different type threads performing different set of operations
US7631130B2 (en) * 2005-02-04 2009-12-08 Mips Technologies, Inc Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor
US7613904B2 (en) * 2005-02-04 2009-11-03 Mips Technologies, Inc. Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler
US7664936B2 (en) * 2005-02-04 2010-02-16 Mips Technologies, Inc. Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages
US7506140B2 (en) * 2005-02-04 2009-03-17 Mips Technologies, Inc. Return data selector employing barrel-incrementer-based round-robin apparatus
US7752627B2 (en) * 2005-02-04 2010-07-06 Mips Technologies, Inc. Leaky-bucket thread scheduler in a multithreading microprocessor
US7490230B2 (en) * 2005-02-04 2009-02-10 Mips Technologies, Inc. Fetch director employing barrel-incrementer-based round-robin apparatus for use in multithreading microprocessor
US7681014B2 (en) * 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US7853777B2 (en) * 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7657891B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7657883B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
US7478276B2 (en) * 2005-02-10 2009-01-13 International Business Machines Corporation Method for checkpointing instruction groups with out-of-order floating point instructions in a multi-threaded processor
US7409589B2 (en) * 2005-05-27 2008-08-05 International Business Machines Corporation Method and apparatus for reducing number of cycles required to checkpoint instructions in a multi-threaded processor
US7689735B2 (en) * 2005-10-03 2010-03-30 Arm Limited Instruction stream control
US7797467B2 (en) 2005-11-01 2010-09-14 Lsi Corporation Systems for implementing SDRAM controllers, and buses adapted to include advanced high performance bus features
CN101449256B (zh) 2006-04-12 2013-12-25 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
KR100837400B1 (ko) * 2006-07-20 2008-06-12 삼성전자주식회사 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치
US20080024510A1 (en) * 2006-07-27 2008-01-31 Via Technologies, Inc. Texture engine, graphics processing unit and video processing method thereof
US7990989B2 (en) * 2006-09-16 2011-08-02 Mips Technologies, Inc. Transaction selector employing transaction queue group priorities in multi-port switch
US7773621B2 (en) * 2006-09-16 2010-08-10 Mips Technologies, Inc. Transaction selector employing round-robin apparatus supporting dynamic priorities in multi-port switch
US7760748B2 (en) * 2006-09-16 2010-07-20 Mips Technologies, Inc. Transaction selector employing barrel-incrementer-based round-robin apparatus supporting dynamic priorities in multi-port switch
US7961745B2 (en) * 2006-09-16 2011-06-14 Mips Technologies, Inc. Bifurcated transaction selector supporting dynamic priorities in multi-port switch
US7859548B1 (en) 2006-10-19 2010-12-28 Nvidia Corporation Offloading cube map calculations to a shader
US7830387B2 (en) * 2006-11-07 2010-11-09 Microsoft Corporation Parallel engine support in display driver model
EP2527972A3 (en) 2006-11-14 2014-08-06 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US7958333B2 (en) * 2007-05-30 2011-06-07 XMOS Ltd. Processor with memory access stage adapted to fetch an instruction of a thread when no memory access operation is detected
JP5093237B2 (ja) * 2007-06-20 2012-12-12 富士通株式会社 命令処理装置
EP2453350B1 (en) 2007-06-20 2016-04-27 Fujitsu Limited Processing device
US20090037918A1 (en) * 2007-07-31 2009-02-05 Advanced Micro Devices, Inc. Thread sequencing for multi-threaded processor with instruction cache
US8006073B1 (en) * 2007-09-28 2011-08-23 Oracle America, Inc. Simultaneous speculative threading light mode
US8073558B2 (en) 2007-10-05 2011-12-06 Honeywell International Inc Critical resource notification system and interface device
US8082420B2 (en) * 2007-10-24 2011-12-20 International Business Machines Corporation Method and apparatus for executing instructions
KR101335001B1 (ko) * 2007-11-07 2013-12-02 삼성전자주식회사 프로세서 및 인스트럭션 스케줄링 방법
US8174534B2 (en) * 2007-12-06 2012-05-08 Via Technologies, Inc. Shader processing systems and methods
TWI462011B (zh) * 2007-12-28 2014-11-21 Accton Technology Corp 程序之執行緒群組管理方法
US8086825B2 (en) 2007-12-31 2011-12-27 Advanced Micro Devices, Inc. Processing pipeline having stage-specific thread selection and method thereof
US7793080B2 (en) 2007-12-31 2010-09-07 Globalfoundries Inc. Processing pipeline having parallel dispatch and method thereof
US8880853B2 (en) 2008-02-01 2014-11-04 International Business Machines Corporation CAM-based wake-and-go snooping engine for waking a thread put to sleep for spinning on a target address lock
US8225120B2 (en) 2008-02-01 2012-07-17 International Business Machines Corporation Wake-and-go mechanism with data exclusivity
US8316218B2 (en) 2008-02-01 2012-11-20 International Business Machines Corporation Look-ahead wake-and-go engine with speculative execution
US8312458B2 (en) 2008-02-01 2012-11-13 International Business Machines Corporation Central repository for wake-and-go mechanism
US8452947B2 (en) 2008-02-01 2013-05-28 International Business Machines Corporation Hardware wake-and-go mechanism and content addressable memory with instruction pre-fetch look-ahead to detect programming idioms
US8516484B2 (en) 2008-02-01 2013-08-20 International Business Machines Corporation Wake-and-go mechanism for a data processing system
US8145849B2 (en) 2008-02-01 2012-03-27 International Business Machines Corporation Wake-and-go mechanism with system bus response
US8015379B2 (en) 2008-02-01 2011-09-06 International Business Machines Corporation Wake-and-go mechanism with exclusive system bus response
US8171476B2 (en) 2008-02-01 2012-05-01 International Business Machines Corporation Wake-and-go mechanism with prioritization of threads
US8732683B2 (en) 2008-02-01 2014-05-20 International Business Machines Corporation Compiler providing idiom to idiom accelerator
US8250396B2 (en) 2008-02-01 2012-08-21 International Business Machines Corporation Hardware wake-and-go mechanism for a data processing system
US8725992B2 (en) 2008-02-01 2014-05-13 International Business Machines Corporation Programming language exposing idiom calls to a programming idiom accelerator
US8788795B2 (en) 2008-02-01 2014-07-22 International Business Machines Corporation Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors
US8612977B2 (en) 2008-02-01 2013-12-17 International Business Machines Corporation Wake-and-go mechanism with software save of thread state
US8341635B2 (en) 2008-02-01 2012-12-25 International Business Machines Corporation Hardware wake-and-go mechanism with look-ahead polling
US8386822B2 (en) 2008-02-01 2013-02-26 International Business Machines Corporation Wake-and-go mechanism with data monitoring
US8640141B2 (en) 2008-02-01 2014-01-28 International Business Machines Corporation Wake-and-go mechanism with hardware private array
US8127080B2 (en) 2008-02-01 2012-02-28 International Business Machines Corporation Wake-and-go mechanism with system address bus transaction master
US8145723B2 (en) 2009-04-16 2012-03-27 International Business Machines Corporation Complex remote update programming idiom accelerator
US8230201B2 (en) 2009-04-16 2012-07-24 International Business Machines Corporation Migrating sleeping and waking threads between wake-and-go mechanisms in a multiple processor data processing system
US8082315B2 (en) 2009-04-16 2011-12-20 International Business Machines Corporation Programming idiom accelerator for remote update
US8886919B2 (en) 2009-04-16 2014-11-11 International Business Machines Corporation Remote update programming idiom accelerator with allocated processor resources
US9690625B2 (en) * 2009-06-16 2017-06-27 Oracle America, Inc. System and method for out-of-order resource allocation and deallocation in a threaded machine
JP5463076B2 (ja) * 2009-05-28 2014-04-09 パナソニック株式会社 マルチスレッドプロセッサ
US8671191B2 (en) 2009-07-17 2014-03-11 Honeywell International Inc. Installation system for demand response resources
US8667132B2 (en) 2009-07-17 2014-03-04 Honeywell International Inc. Arrangement for communication about and management of a resource using a mobile device
US9818073B2 (en) 2009-07-17 2017-11-14 Honeywell International Inc. Demand response management system
US9124535B2 (en) 2009-07-17 2015-09-01 Honeywell International Inc. System for using attributes to deploy demand response resources
US9137050B2 (en) 2009-07-17 2015-09-15 Honeywell International Inc. Demand response system incorporating a graphical processing unit
US8782190B2 (en) * 2009-07-17 2014-07-15 Honeywell International, Inc. Demand response management system
US8676953B2 (en) 2009-07-17 2014-03-18 Honeywell International Inc. Use of aggregated groups for managing demand response resources
US8572230B2 (en) 2009-07-17 2013-10-29 Honeywell International Inc. System for using attributes to deploy demand response resources
US8671167B2 (en) * 2009-07-17 2014-03-11 Honeywell International Inc. System for providing demand response services
US8607234B2 (en) * 2009-07-22 2013-12-10 Empire Technology Development, Llc Batch scheduling with thread segregation and per thread type marking caps
US8799912B2 (en) * 2009-07-22 2014-08-05 Empire Technology Development Llc Application selection of memory request scheduling
US8839255B2 (en) * 2009-07-23 2014-09-16 Empire Technology Development Llc Scheduling of threads by batch scheduling
JP2011065489A (ja) * 2009-09-17 2011-03-31 Sony Corp 情報処理装置、データ表示方法及びプログラム
US9189242B2 (en) * 2009-09-24 2015-11-17 Nvidia Corporation Credit-based streaming multiprocessor warp scheduling
US8370671B2 (en) * 2009-12-02 2013-02-05 International Business Machines Corporation Saving power by powering down an instruction fetch array based on capacity history of instruction buffer
TWI506434B (zh) * 2010-03-29 2015-11-01 Via Tech Inc 預取單元、資料預取方法、電腦程式產品以及微處理器
TWI474280B (zh) * 2010-04-21 2015-02-21 Via Tech Inc 增進繪圖處理單元之總處理量的方法與系統
US20110276784A1 (en) * 2010-05-10 2011-11-10 Telefonaktiebolaget L M Ericsson (Publ) Hierarchical multithreaded processing
US9058675B2 (en) 2010-05-29 2015-06-16 Intel Corporation Non-volatile storage for graphics hardware
CN102063289B (zh) * 2010-09-07 2013-10-16 中国科学技术大学 串行程序线程级推测执行能力评估方法和评估器
EP2616928B1 (en) 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
US8904115B2 (en) 2010-09-28 2014-12-02 Texas Instruments Incorporated Cache with multiple access pipelines
US8630744B2 (en) 2011-01-28 2014-01-14 Honeywell International Inc. Management and monitoring of automated demand response in a multi-site enterprise
US9153001B2 (en) 2011-01-28 2015-10-06 Honeywell International Inc. Approach for managing distribution of automated demand response events in a multi-site enterprise
US8626354B2 (en) 2011-01-28 2014-01-07 Honeywell International Inc. Approach for normalizing automated demand response events in energy management control systems
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 인텔 코포레이션 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
TWI518504B (zh) 2011-03-25 2016-01-21 軟體機器公司 使用可分割引擎實體化的虛擬核心以支援程式碼區塊執行的暫存器檔案節段
KR101639854B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 상호접속 구조
WO2012162188A2 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
US9128769B2 (en) 2011-10-13 2015-09-08 Cavium, Inc. Processor with dedicated virtual functions and dynamic assignment of functional resources
US9129060B2 (en) 2011-10-13 2015-09-08 Cavium, Inc. QoS based dynamic execution engine selection
DE102012220365A1 (de) * 2011-11-10 2013-05-16 Nvidia Corp. Aufgabe-Thread-Feld-Granularität-Ausführung-Präemption
CN102495726B (zh) * 2011-11-15 2015-05-20 无锡德思普科技有限公司 机会多线程方法及处理器
CN108427574B (zh) 2011-11-22 2022-06-07 英特尔公司 微处理器加速的代码优化器
US10191746B2 (en) 2011-11-22 2019-01-29 Intel Corporation Accelerated code optimizer for a multiengine microprocessor
US20130141447A1 (en) * 2011-12-06 2013-06-06 Advanced Micro Devices, Inc. Method and Apparatus for Accommodating Multiple, Concurrent Work Inputs
US8933942B2 (en) 2011-12-08 2015-01-13 Advanced Micro Devices, Inc. Partitioning resources of a processor
US8639882B2 (en) * 2011-12-14 2014-01-28 Nvidia Corporation Methods and apparatus for source operand collector caching
US8949575B2 (en) 2011-12-14 2015-02-03 International Business Machines Corporation Reversing processing order in half-pumped SIMD execution units to achieve K cycle issue-to-issue latency
US10146545B2 (en) 2012-03-13 2018-12-04 Nvidia Corporation Translation address cache for a microprocessor
CN108681519B (zh) * 2012-03-30 2022-04-08 英特尔公司 用于从多线程发送请求至加速器的机制
WO2013147852A1 (en) * 2012-03-30 2013-10-03 Intel Corporation Instruction scheduling for a multi-strand out-of-order processor
US9880846B2 (en) 2012-04-11 2018-01-30 Nvidia Corporation Improving hit rate of code translation redirection table with replacement strategy based on usage history table of evicted entries
JP5894496B2 (ja) 2012-05-01 2016-03-30 ルネサスエレクトロニクス株式会社 半導体装置
KR20130123645A (ko) * 2012-05-03 2013-11-13 삼성전자주식회사 그래픽 처리 장치를 위한 동적 로드 밸런싱 장치 및 방법
US9875105B2 (en) 2012-05-03 2018-01-23 Nvidia Corporation Checkpointed buffer for re-entry from runahead
US10241810B2 (en) 2012-05-18 2019-03-26 Nvidia Corporation Instruction-optimizing processor with branch-count table in hardware
US9645929B2 (en) 2012-09-14 2017-05-09 Nvidia Corporation Speculative permission acquisition for shared memory
US20140081704A1 (en) 2012-09-15 2014-03-20 Honeywell International Inc. Decision support system based on energy markets
US11013993B2 (en) 2012-09-28 2021-05-25 Sony Interactive Entertainment Inc. Pre-loading translated code in cloud based emulated applications
US10001996B2 (en) 2012-10-26 2018-06-19 Nvidia Corporation Selective poisoning of data during runahead
US9740553B2 (en) 2012-11-14 2017-08-22 Nvidia Corporation Managing potentially invalid results during runahead
TWI462020B (zh) * 2012-11-28 2014-11-21 Htc Corp 執行緒管理方法及其電子裝置
US9389850B2 (en) 2012-11-29 2016-07-12 Honeywell International Inc. System and approach to manage versioning of field devices in a multi-site enterprise
US9632976B2 (en) 2012-12-07 2017-04-25 Nvidia Corporation Lazy runahead operation for a microprocessor
US9569214B2 (en) 2012-12-27 2017-02-14 Nvidia Corporation Execution pipeline data forwarding
US20140189310A1 (en) 2012-12-27 2014-07-03 Nvidia Corporation Fault detection in instruction translations
US9823931B2 (en) 2012-12-28 2017-11-21 Nvidia Corporation Queued instruction re-dispatch after runahead
US10108424B2 (en) 2013-03-14 2018-10-23 Nvidia Corporation Profiling code portions to generate translations
US9547602B2 (en) 2013-03-14 2017-01-17 Nvidia Corporation Translation lookaside buffer entry systems and methods
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
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
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
EP2972845B1 (en) 2013-03-15 2021-07-07 Intel Corporation A method for executing multithreaded instructions grouped onto blocks
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9442755B2 (en) * 2013-03-15 2016-09-13 Nvidia Corporation System and method for hardware scheduling of indexed barriers
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
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
CN104063270B (zh) * 2013-03-22 2017-06-23 斯克林集团公司 加标签方法、加标签装置以及缺陷检查装置
JP6152034B2 (ja) * 2013-03-22 2017-06-21 株式会社Screenホールディングス ラベリング方法、ラベリング装置および欠陥検査装置
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
US10346931B2 (en) 2013-07-11 2019-07-09 Honeywell International Inc. Arrangement for communicating demand response resource incentives
US9989937B2 (en) 2013-07-11 2018-06-05 Honeywell International Inc. Predicting responses of resources to demand response signals and having comfortable demand responses
US9691076B2 (en) 2013-07-11 2017-06-27 Honeywell International Inc. Demand response system having a participation predictor
US9582280B2 (en) 2013-07-18 2017-02-28 Nvidia Corporation Branching to alternate code based on runahead determination
US10062135B2 (en) * 2013-07-31 2018-08-28 National Technology & Engineering Solutions Of Sandia, Llc Graphics processing unit management system for computed tomography
KR20150019349A (ko) * 2013-08-13 2015-02-25 삼성전자주식회사 다중 쓰레드 실행 프로세서 및 이의 동작 방법
US20150074353A1 (en) * 2013-09-06 2015-03-12 Futurewei Technologies, Inc. System and Method for an Asynchronous Processor with Multiple Threading
US9417920B2 (en) * 2013-10-04 2016-08-16 Freescale Semiconductor, Inc. Method and apparatus for dynamic resource partition in simultaneous multi-thread microprocessor
GB2521155B (en) * 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configuring thread scheduling on a multi-threaded data processing apparatus
GB2521151B (en) 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configurable thread ordering for a data processing apparatus
US9589311B2 (en) * 2013-12-18 2017-03-07 Intel Corporation Independent thread saturation of graphics processing units
US9471307B2 (en) * 2014-01-03 2016-10-18 Nvidia Corporation System and processor that include an implementation of decoupled pipelines
US20150220343A1 (en) * 2014-02-05 2015-08-06 Mill Computing, Inc. Computer Processor Employing Phases of Operations Contained in Wide Instructions
US9558000B2 (en) 2014-02-06 2017-01-31 Optimum Semiconductor Technologies, Inc. Multithreading using an ordered list of hardware contexts
US9766894B2 (en) 2014-02-06 2017-09-19 Optimum Semiconductor Technologies, Inc. Method and apparatus for enabling a processor to generate pipeline control signals
US9665078B2 (en) 2014-03-25 2017-05-30 Honeywell International Inc. System for propagating messages for purposes of demand response
WO2015145192A1 (en) * 2014-03-27 2015-10-01 Intel Corporation Processor logic and method for dispatching instructions from multiple strands
US10902545B2 (en) * 2014-08-19 2021-01-26 Apple Inc. GPU task scheduling
US9824414B2 (en) 2014-12-09 2017-11-21 Intel Corporation Thread dispatching for graphics processors
US10346170B2 (en) 2015-05-05 2019-07-09 Intel Corporation Performing partial register write operations in a processor
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US9720693B2 (en) 2015-06-26 2017-08-01 Microsoft Technology Licensing, Llc Bulk allocation of instruction blocks to a processor instruction window
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
GB2540543B (en) * 2015-07-20 2020-03-11 Advanced Risc Mach Ltd Graphics processing
TWI564807B (zh) 2015-11-16 2017-01-01 財團法人工業技術研究院 排程方法及應用其的處理裝置
US10622032B2 (en) * 2015-12-08 2020-04-14 Rambus Inc. Low power signaling interface
US9977677B2 (en) 2016-04-07 2018-05-22 International Business Machines Corporation Execution slice with supplemental instruction port for an instruction using a source operand from another instruction port
US20170337062A1 (en) * 2016-05-19 2017-11-23 Centipede Semi Ltd. Single-thread speculative multi-threading
US10410097B2 (en) 2016-06-06 2019-09-10 Mutualink, Inc. System and method for distributed intelligent pattern recognition
US10541556B2 (en) 2017-04-27 2020-01-21 Honeywell International Inc. System and approach to integrate and manage diverse demand response specifications for multi-site enterprises
WO2019089816A2 (en) 2017-10-31 2019-05-09 Micron Technology, Inc. System having a hybrid threading processor, a hybrid threading fabric having configurable computing elements, and a hybrid interconnection network
US11513839B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Memory request size management in a multi-threaded, self-scheduling processor
US11119782B2 (en) 2018-05-07 2021-09-14 Micron Technology, Inc. Thread commencement using a work descriptor packet in a self-scheduling processor
US11513837B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread commencement and completion using work descriptor packets in a system having a self-scheduling processor and a hybrid threading fabric
US11157286B2 (en) 2018-05-07 2021-10-26 Micron Technology, Inc. Non-cached loads and stores in a system having a multi-threaded, self-scheduling processor
US11132233B2 (en) 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
US11126587B2 (en) 2018-05-07 2021-09-21 Micron Technology, Inc. Event messaging in a system having a self-scheduling processor and a hybrid threading fabric
US11513838B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread state monitoring in a system having a multi-threaded, self-scheduling processor
US11068305B2 (en) 2018-05-07 2021-07-20 Micron Technology, Inc. System call management in a user-mode, multi-threaded, self-scheduling processor
US11513840B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor
US11119972B2 (en) 2018-05-07 2021-09-14 Micron Technology, Inc. Multi-threaded, self-scheduling processor
US11074078B2 (en) 2018-05-07 2021-07-27 Micron Technology, Inc. Adjustment of load access size by a multi-threaded, self-scheduling processor to manage network congestion
US10796472B2 (en) * 2018-06-30 2020-10-06 Intel Corporation Method and apparatus for simultaneously executing multiple contexts on a graphics engine
US10721172B2 (en) 2018-07-06 2020-07-21 Marvell Asia Pte, Ltd. Limiting backpressure with bad actors
US11003457B2 (en) * 2019-01-23 2021-05-11 Mediatek Inc. Power-saving mechanism for memory sub-system in pipelined processor
US11321123B2 (en) * 2019-11-21 2022-05-03 International Business Machines Corporation Determining an optimum number of threads to make available per core in a multi-core processor complex to executive tasks
US10891708B1 (en) 2019-11-25 2021-01-12 Arm Limited Shader program execution in graphics processing
US11775185B2 (en) * 2020-09-17 2023-10-03 Micron Technology, Inc. Power budget arbitration for multiple concurrent access operations in a memory device

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS4834447A (ja) * 1971-08-31 1973-05-18
JPH05224923A (ja) * 1991-11-22 1993-09-03 Internatl Business Mach Corp <Ibm> ハイブリッドパイプライン接続プロセッサおよびその処理方法
JPH0644089A (ja) * 1992-05-18 1994-02-18 Matsushita Electric Ind Co Ltd 情報処理装置
US6073159A (en) * 1996-12-31 2000-06-06 Compaq Computer Corporation Thread properties attribute vector based thread selection in multithreading processor
WO2001077821A1 (en) * 2000-03-30 2001-10-18 Intel Corporation Method and apparatus for writing instructions into a buffer queue including overwriting invalid entries
WO2002006959A1 (en) * 2000-07-14 2002-01-24 Clearwater Networks, Inc. Instruction fetch and dispatch in multithreaded system
WO2002019101A1 (fr) * 2000-08-31 2002-03-07 Hajime Seki Systeme informatique
JP2002268878A (ja) * 2001-03-07 2002-09-20 Hitachi Ltd スレッド間優先度可変プロセッサ
JP2002342163A (ja) * 2001-05-15 2002-11-29 Fujitsu Ltd マルチスレッドプロセッサ用キャッシュ制御方式
US6493741B1 (en) * 1999-10-01 2002-12-10 Compaq Information Technologies Group, L.P. Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit
JP2003516570A (ja) * 1999-12-09 2003-05-13 インテル・コーポレーション マルチスレッド・プロセッサ内の複数のスレッドに入り、出る方法と装置
WO2003058447A2 (en) * 2001-12-31 2003-07-17 Intel Corporation A method and apparatus for suspending execution of a thread until a specified memory access occurs
JP2003223359A (ja) * 2002-01-29 2003-08-08 Fujitsu Ltd 演算処理装置

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3725871A (en) * 1971-02-11 1973-04-03 Honeywell Inf Systems Multi function polling technique
US5539911A (en) * 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
GB2287111B (en) * 1994-03-01 1998-08-05 Intel Corp Method for pipeline processing of instructions by controlling access to a reorder buffer using a register file outside the reorder buffer
JPH08320797A (ja) 1995-05-24 1996-12-03 Fuji Xerox Co Ltd プログラム制御システム
US6010476A (en) * 1996-12-02 2000-01-04 Angiotrax, Inc. Apparatus for performing transmyocardial revascularization
US6689103B1 (en) * 1999-05-07 2004-02-10 Scimed Life System, Inc. Injection array apparatus and method
US6574725B1 (en) * 1999-11-01 2003-06-03 Advanced Micro Devices, Inc. Method and mechanism for speculatively executing threads of instructions
US7015930B2 (en) * 2003-08-01 2006-03-21 Ati Technologies Inc. Method and apparatus for interpolating pixel parameters based on a plurality of vertex values
US6897871B1 (en) 2003-11-20 2005-05-24 Ati Technologies Inc. Graphics processing architecture employing a unified shader
US7418576B1 (en) * 2004-11-17 2008-08-26 Nvidia Corporation Prioritized issuing of operation dedicated execution unit tagged instructions from multiple different type threads performing different set of operations
US20070030280A1 (en) * 2005-08-08 2007-02-08 Via Technologies, Inc. Global spreader and method for a parallel graphics processor

Patent Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS4834447A (ja) * 1971-08-31 1973-05-18
JPH05224923A (ja) * 1991-11-22 1993-09-03 Internatl Business Mach Corp <Ibm> ハイブリッドパイプライン接続プロセッサおよびその処理方法
JPH0644089A (ja) * 1992-05-18 1994-02-18 Matsushita Electric Ind Co Ltd 情報処理装置
US6073159A (en) * 1996-12-31 2000-06-06 Compaq Computer Corporation Thread properties attribute vector based thread selection in multithreading processor
US6493741B1 (en) * 1999-10-01 2002-12-10 Compaq Information Technologies Group, L.P. Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit
JP2003516570A (ja) * 1999-12-09 2003-05-13 インテル・コーポレーション マルチスレッド・プロセッサ内の複数のスレッドに入り、出る方法と装置
WO2001077821A1 (en) * 2000-03-30 2001-10-18 Intel Corporation Method and apparatus for writing instructions into a buffer queue including overwriting invalid entries
WO2002006959A1 (en) * 2000-07-14 2002-01-24 Clearwater Networks, Inc. Instruction fetch and dispatch in multithreaded system
JP2004518183A (ja) * 2000-07-14 2004-06-17 クリアウオーター・ネツトワークス・インコーポレイテツド マルチスレッド・システムにおける命令のフェッチとディスパッチ
WO2002019101A1 (fr) * 2000-08-31 2002-03-07 Hajime Seki Systeme informatique
JP2002268878A (ja) * 2001-03-07 2002-09-20 Hitachi Ltd スレッド間優先度可変プロセッサ
JP2002342163A (ja) * 2001-05-15 2002-11-29 Fujitsu Ltd マルチスレッドプロセッサ用キャッシュ制御方式
WO2003058447A2 (en) * 2001-12-31 2003-07-17 Intel Corporation A method and apparatus for suspending execution of a thread until a specified memory access occurs
JP2006500639A (ja) * 2001-12-31 2006-01-05 インテル コーポレイション 指定されたメモリアクセスが発生するまでスレッドの実行をサスペンドする方法及び装置
JP2003223359A (ja) * 2002-01-29 2003-08-08 Fujitsu Ltd 演算処理装置

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009512917A (ja) * 2005-09-26 2009-03-26 イマジネイション テクノロジーズ リミテッド スケーラブルなマルチスレッド型メディア処理アーキテクチャ
KR100810017B1 (ko) 2005-11-30 2008-03-07 인터내셔널 비지네스 머신즈 코포레이션 서로 다른 스레드에 대한 비대칭 하드웨어 멀티스레딩지원을 갖는 디지털 데이터 처리 장치
US8922565B2 (en) 2007-11-30 2014-12-30 Qualcomm Incorporated System and method for using a secondary processor in a graphics system
JP2011505633A (ja) * 2007-11-30 2011-02-24 クゥアルコム・インコーポレイテッド グラフィックスシステムにおいて2次プロセッサを使用するための方法及びシステム
KR20120058605A (ko) * 2009-09-03 2012-06-07 어드밴스드 마이크로 디바이시즈, 인코포레이티드 Gpu 워크의 하드웨어 기반 스케쥴링
JP2013504127A (ja) * 2009-09-03 2013-02-04 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド Gpuワークのハードウエアベースでのスケジューリング
KR101587201B1 (ko) 2009-09-03 2016-01-20 어드밴스드 마이크로 디바이시즈, 인코포레이티드 Gpu 워크의 하드웨어 기반 스케쥴링
US9626234B2 (en) 2010-09-20 2017-04-18 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
JP2013537993A (ja) * 2010-09-20 2013-10-07 クゥアルコム・インコーポレイテッド マルチプルプロセッサ計算プラットフォームにおけるプロセッサ間通信技法
US9645866B2 (en) 2010-09-20 2017-05-09 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
JP2014504416A (ja) * 2010-12-15 2014-02-20 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 組み合わせたcpu/gpuアーキテクチャシステムにおけるデバイスの発見およびトポロジーのレポーティング
JP2013196300A (ja) * 2012-03-19 2013-09-30 Fujitsu Ltd 試験方法、試験装置及びプログラム
JP2013250988A (ja) * 2013-07-22 2013-12-12 Panasonic Corp マルチスレッドプロセッサ
WO2015155894A1 (ja) 2014-04-11 2015-10-15 株式会社Murakumo プロセッサーおよび方法
KR20220026117A (ko) * 2020-08-25 2022-03-04 주식회사 엔씨소프트 게시판 서비스 제공 장치 및 방법, 게시판 서비스 요청 장치 및 방법
KR102449109B1 (ko) * 2020-08-25 2022-09-29 주식회사 엔씨소프트 게시판 서비스 제공 장치 및 방법, 게시판 서비스 요청 장치 및 방법

Also Published As

Publication number Publication date
SG112989A1 (en) 2005-07-28
US7676657B2 (en) 2010-03-09
TW200529071A (en) 2005-09-01
TWI425418B (zh) 2014-02-01
EP1555610B1 (en) 2010-04-28
US20070214343A1 (en) 2007-09-13
DE602004026819D1 (de) 2010-06-10
US7310722B2 (en) 2007-12-18
US20100122067A1 (en) 2010-05-13
US20050138328A1 (en) 2005-06-23
EP1555610A1 (en) 2005-07-20

Similar Documents

Publication Publication Date Title
US7310722B2 (en) Across-thread out of order instruction dispatch in a multithreaded graphics processor
TWI493451B (zh) 使用預解碼資料進行指令排程的方法和裝置
US9830158B2 (en) Speculative execution and rollback
US7634637B1 (en) Execution of parallel groups of threads with per-instruction serialization
US8732713B2 (en) Thread group scheduler for computing on a parallel thread processor
US8074224B1 (en) Managing state information for a multi-threaded processor
TWI490782B (zh) 來源運算元收集器快取的方法和裝置
TWI501150B (zh) 無指令解碼而排程指令的方法和裝置
TWI489385B (zh) 一種用於預先擷取快取線的電腦實作方法與子系統
US20130042090A1 (en) Temporal simt execution optimization
US20140123150A1 (en) Hardware scheduling of ordered critical code sections
JP2010244529A (ja) デッドロックを起こさないパイプライン処理のためのシステム及び方法
US9471307B2 (en) System and processor that include an implementation of decoupled pipelines
CN108604185B (zh) 用于将工作负荷有效地提交到高性能图形子系统的方法和装置
US20240086329A1 (en) Instruction prefetch mechanism
US9436969B2 (en) Time slice processing of tessellation and geometry shaders
US7484076B1 (en) Executing an SIMD instruction requiring P operations on an execution unit that performs Q operations at a time (Q&lt;P)
US20120084539A1 (en) Method and sytem for predicate-controlled multi-function instructions
TWI546736B (zh) 多執行緒圖形處理單元管線
US20140351826A1 (en) Application programming interface to enable the construction of pipeline parallel programs
US10152329B2 (en) Pre-scheduled replays of divergent operations
US7847803B1 (en) Method and apparatus for interleaved graphics processing
US8948167B2 (en) System and method for using domains to identify dependent and independent operations
US9665920B1 (en) Simultaneous execution of compute and graphics applications

Legal Events

Date Code Title Description
RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20070809

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20070813

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20070813

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071114

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071114

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100622

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100914

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101019

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110119

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110124

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110221

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110224

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110322

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110325

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110524