JP5035277B2 - 共有メモリに対するアトミックな更新を可能にするロックメカニズム - Google Patents

共有メモリに対するアトミックな更新を可能にするロックメカニズム Download PDF

Info

Publication number
JP5035277B2
JP5035277B2 JP2009060702A JP2009060702A JP5035277B2 JP 5035277 B2 JP5035277 B2 JP 5035277B2 JP 2009060702 A JP2009060702 A JP 2009060702A JP 2009060702 A JP2009060702 A JP 2009060702A JP 5035277 B2 JP5035277 B2 JP 5035277B2
Authority
JP
Japan
Prior art keywords
lock
memory
address
entry
thread
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2009060702A
Other languages
English (en)
Other versions
JP2009230757A (ja
Inventor
ダブリュ. コーン ブレット
アール. ニコルス ジョン
ニーランド ラース
シー. ミルズ ピーター
Original Assignee
エヌヴィディア コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エヌヴィディア コーポレイション filed Critical エヌヴィディア コーポレイション
Publication of JP2009230757A publication Critical patent/JP2009230757A/ja
Application granted granted Critical
Publication of JP5035277B2 publication Critical patent/JP5035277B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/52Indexing scheme relating to G06F9/52
    • G06F2209/521Atomic

Landscapes

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

Description

[0001]本発明は、一般に、共有メモリの読み取り及び書き込みに係り、より詳細には、アトミックな更新のための共有メモリへのアクセスをロック及びアンロックするシステム及び方法に係る。
[0002]アトミックなメモリオペレーションを実施するために多くのプロセッサに使用される従来のロードリンク及び記憶条件インストラクションのような、共有メモリへのメモリアクセスをロック及びアンロックするための現在のメカニズムは、各記憶(書き込み)オペレーションの前にアクセスされる各エントリーに対してロック状態をチェックする。更に、要求元は、典型的に、ロックが得られたかどうかに関わらず記憶オペレーションが試みられた後までフィードバックを受け取らない。
[0003]従って、この技術で要求されているのは、アトミックなメモリオペレーションを遂行するために共有メモリにアクセスする改良されたロックメカニズムである。
[0004]アトミックなオペレーションのための共有メモリへのアクセスをロック及びアンロックするシステム及び方法は、ロックが首尾良く行われたかどうか指示する即時フィードバックを与える。読み取りデータがロック状態と共に要求元へ返送される。ロック状態は、読み取り中にロックされるときまたは書き込み中にアンロックするときに同時に変更される。それ故、ロック状態を、読み取り−変更−書き込みオペレーションの前にまたはその間に、個別のトランザクションとしてチェックする必要はない。更に、各アトミックなメモリオペレーションに対してロックまたはアンロックを明確に指定することができる。それ故、メモリ位置のコンテンツを変更しないオペレーションの場合は、ロックオペレーションが遂行されない。ロック状態を指示するロックビットは、必ずしも、共有メモリ内の各メモリ位置に必要とされない。というのは、メモリアドレスエイリアシングを許すことにより多数の位置の中に各ロックビットを共有できるからである。メモリアドレスエイリアシングから生じる偽のメモリ位置の数を減少するために、明確なロックオペレーションを使用することができる。
[0005]共有メモリへのアトミックな更新を遂行するための本発明の方法の種々の実施形態は、あるアドレスに対応する共有メモリのエントリーにアクセスするためのメモリ要求を受け取ることを含む。ロックフラグを記憶するロックエントリーのロックアドレスは、そのアドレスを使用して決定される。そのアドレスに対応する共有メモリのエントリーに対してロックが得られたかどうかを指示するロック結果が、ロックアドレスに対して計算される。メモリ要求によりエントリーがロックされたことを指示すると共に、別のメモリ要求がそのアドレスに対応する共有メモリのエントリーを書き込むのを防止するために、ロックフラグがセットされる。そのアドレスに対応する共有メモリのエントリーに記憶されたデータが読み取られる。
[0006]本発明の種々の実施形態は、共有メモリにアクセスするためのシステムを含む。このシステムは、多数のエントリーにおけるデータを記憶するための共有記憶リソースを備え、これは、メモリロックユニットに結合される。共有記憶リソースは、あるアドレスに対応する共有記憶リソースのエントリーにアクセスするためのメモリ要求を受けると共に、そのアドレスに対応してそのエントリーに記憶されたデータを出力するように構成される。メモリロックユニットは、メモリ要求で指定されたロック要求の受け取り、前記アドレスを使用してロックフラグを記憶するロックエントリーのロックアドレスの決定、及び、メモリ要求によりエントリーがロックされたことを指示して、別のメモリ要求が前記アドレスに対応する共有記憶リソースのエントリーを書き込むのを防止するためにロックフラグのセット、をするように構成される。
[0007]上述した本発明の特徴を詳細に理解できるように、前記で簡単に要約した本発明について、幾つかを添付図面に例示した実施形態を参照して、より特定して説明する。しかしながら、添付図面は、本発明の典型的な実施形態のみを例示するもので、それ故、本発明の範囲をそれに限定するものではなく、本発明は、同等の効果を発揮できる他の実施形態も包含できるものであることに注意されたい。
本発明の1つ以上の態様を実施するように構成されたコンピュータシステムを示すブロック図である。 本発明の1つ以上の態様に基づく図1のコンピュータシステムのための並列処理サブシステムのブロック図である。 本発明の1つ以上の態様に基づく図2の並列処理サブシステムのための並列処理ユニットのブロック図である。 本発明の1つ以上の態様に基づく図3の並列処理ユニットのためのインストラクションユニットのブロック図である。 本発明の1つ以上の態様に基づく図3に示す共有メモリユニットのブロック図である。 本発明の1つ以上の態様に基づき共有メモリにおいてロックオペレーションを遂行するための方法ステップのフローチャートである。 本発明の1つ以上の態様に基づき共有メモリにおいてアンロックオペレーションを遂行するための方法ステップのフローチャートである。 本発明の1つ以上の態様に基づきロック及びアンロックコマンドを使用して共有メモリにアクセスするための方法ステップのフローチャートである。
[0016]以下の説明では、本発明をより完全に理解するために多数の特定の細部について説明する。しかしながら、当業者であれば、これらの特定の細部の1つ以上がなくても、本発明を実施できることが明らかであろう。他の点について、本発明を不明瞭にしないために、良く知られた特徴は、説明しない。
システムの概略
[0017]図1は、本発明の1つ以上の態様を実施するように構成されたコンピュータシステム100を示すブロック図である。このコンピュータシステム100は、メモリブリッジ105を含むバス経路を経て通信する中央処理ユニット(CPU)102及びシステムメモリ104を備えている。例えば、ノースブリッジ(Northbridge)チップでよいメモリブリッジ105は、バスまたは他の通信経路106(例えば、ハイパートランスポートリンク)を経てI/O(入力/出力)ブリッジ107に接続される。例えば、サウスブリッジ(Southbridge)チップでよいI/Oブリッジ107は、1つ以上のユーザ入力装置108(例えば、キーボード、マウス)からユーザ入力を受け取り、そしてその入力を、経路106及びメモリブリッジ105を経てCPU102へ転送する。メモリブリッジ105には、バスまたは他の通信経路113(例えば、PCIエクスプレス、アクセラレーテッドグラフィックポートまたはハイパートランスポートリンク)を経て並列処理サブシステム112が結合され、一実施形態では、この並列処理サブシステム112は、ディスプレイ装置110(例えば、従来のCRTまたはLCDベースのモニタ)へピクセルを配送するグラフィックサブシステムである。I/Oブリッジ107には、システムディスク114も接続される。スイッチ116は、I/Oブリッジ107と、他のコンポーネント、例えば、ネットワークアダプタ118及び種々のアドイン(add-in)カード120及び121との間の接続をなす。また、I/Oブリッジ107には、USBまたは他のポート接続部、CDドライブ、DVDドライブ、フィルムレコーディング装置、等を含む他のコンポーネント(明確に示さず)を接続することもできる。図1における種々のコンポーネントを相互接続する通信経路は、適当なプロトコル、例えば、PCI(周辺コンポーネント相互接続)、PCI−エクスプレス(PCI−E)、AGP(アクセラレーテッドグラフィックポート)、ハイパートランスポート、或いは他のバスまたはポイント・ツー・ポイント通信プロトコルを使用して実施することができ、そして異なる装置間の接続は、この技術で知られたように異なるプロトコルを使用することができる。
[0018]一実施形態では、並列処理サブシステム112は、例えば、ビデオ出力回路を含めて、グラフィック及びビデオ処理に最適な回路を組み込んでおり、そしてグラフィック処理ユニット(GPU)を構成する。別の実施形態では、並列処理サブシステム112は、以下に詳細に述べるように、基礎となる計算アーキテクチャーを保存しながら、汎用の処理に最適な回路を組み込んでいる。更に別の実施形態では、並列処理サブシステム112は、1つ以上の他のシステム要素、例えば、メモリブリッジ105、CPU102、及びI/Oブリッジ107と一体化されて、システムオンチップ(SoC)を形成することができる。
[0019]図2は、本発明の一実施形態に基づく並列処理サブシステム112を示す。この並列処理サブシステム112は、1つ以上の並列処理ユニット(PPU)202を備え、その各々は、ローカル並列処理(PP)メモリ204に結合される。一般的に、並列処理サブシステムは、U個のPPUを含む。但し、U≧1である。(ここで、同じオブジェクトの複数のインスタンスは、オブジェクトを識別する参照番号と、必要に応じてインスタンスを識別するカッコ内の数字とで示される。)PPU202及びPPメモリ204は、例えば、プログラム可能なプロセッサ、特定用途向け集積回路(ASIC)、及びメモリ装置のような1つ以上の集積回路装置を使用して実施することができる。
[0020]PPU202(0)について詳細に示すように、各PPU202は、メモリブリッジ105へ接続される(または別の実施形態では、CPU102へ直結される)通信経路113を経てシステム100の残り部分と通信するホストインターフェイス206を備えている。一実施形態では、通信経路113は、この技術で知られたように、各PPU202に専用レーンが割り当てられるPCI−Eリンクである。また、他の通信経路が使用されてもよい。ホストインターフェイス206は、通信経路113で送信するためのパケット(または他の信号)を発生し、また、通信経路113から全ての到来パケット(または他の信号)も受信して、それをPPU202の適当なコンポーネントへ向ける。例えば、処理タスクに関連したコマンドをフロントエンドユニット212に向ける一方、メモリオペレーション(例えば、PPメモリ204からの読み取りまたはそこへの書き込み)に関連したコマンドをメモリインターフェイス214に向けることができる。ホストインターフェイス206、フロントエンドユニット212、及びメモリインターフェイス214は、一般的に従来設計のものでよく、本発明にとって重要でないので、詳細な説明は省く。
[0021]各PPU202は、高度な並列プロセッサを実施するのが好都合である。PPU202(0)について詳細に示すように、PPU202は、C個のコア208を含む。但し、C≧1である。各処理コア208は、非常に多数(例えば、数十または数百)のスレッドを同時に実行することができ、各スレッドは、プログラムのインスタンスであり、マルチスレッド型処理コア208の一実施形態を以下に説明する。コア208は、フロントエンドユニット212から処理タスクを定義するコマンドを受け取るワーク配布ユニット210を経て、実行されるべき処理タスクを受け取る。このワーク配布ユニット210は、配布ワークのための種々のアルゴリズムを実施することができる。例えば、一実施形態では、ワーク配布ユニット210は、各コア208から、そのコアが新たな処理タスクを受け入れるに充分なリソースを有するかどうか指示する「レディ」信号を受け取る。新たな処理タスクが到着すると、ワーク配布ユニット210は、レディ信号をアサートしているコア208にタスクを指定し、レディ信号をアサートしているコア208がない場合には、ワーク配布ユニット210は、コア208によりレディ信号がアサートされるまで、新たな処理タスクを保持する。当業者であれば、他のアルゴリズムも使用できると共に、ワーク配布ユニット210が到来する処理タスクを配布する特定のやり方は、本発明にとって重要ではないことが明らかであろう。
[0022]コア208は、種々の外部メモリ装置から読み取ったりそこに書き込んだりするためにメモリインターフェイス214と通信する。一実施形態では、メモリインターフェイス214は、ローカルPPメモリ204と通信するためのインターフェイスと、ホストインターフェイスへの接続とを含み、これにより、コアは、システムメモリ104、或いはPPU202に対してローカルではない他のメモリと通信することができる。メモリインターフェイス214は、一般的に従来設計のものでよく、詳細な説明は、省く。
[0023]コア208は、これに限定されないが、線形的及び非線形的なデータ変換、ビデオ及び/またはオーディオデータのフィルタリング、モデリングオペレーション(例えば、物理の法則を適用して、オブジェクトの位置、速度及び他の属性を決定する)、映像レンダリングオペレーション(例えば、頂点シェーダー、幾何学的シェーダー及び/またはピクセルシェーダープログラム)、等を含む種々様々なアプリケーションに関する処理タスクを実行するようにプログラムすることができる。PPU202は、システムメモリ104及び/またはローカルPPメモリ204からのデータを内部(オンチップ)メモリへ転送し、そのデータを処理し、そしてその結果データをシステムメモリ104及び/またはローカルPPメモリ204へ書き戻すことができ、このようなデータは、例えば、CPU102または別の並列処理サブシステム112を含む他のシステムコンポーネントによりアクセスすることができる。
[0024]再び、図1を参照すれば、ある実施形態において、並列処理サブシステム112内のPPU202は、その幾つかまたは全部が、レンダリングパイプラインを伴うグラフィックプロセッサであって、CPU102及び/またはシステムメモリ104によりメモリブリッジ105及びバス113を経て供給されたグラフィックデータからピクセルデータを発生し、(例えば、従来のフレームバッファを含むグラフィックメモリとして使用できる)ローカルPPメモリ204と相互作用してピクセルデータを記憶及び更新し、そのピクセルデータをディスプレイ装置110へ配送し、等々に関連した種々のタスクを遂行するように構成することができる。ある実施形態では、PPサブシステム112は、グラフィックプロセッサとして動作する1つ以上のPPU202、及び汎用の計算に使用される1つ以上の他のPPU202を含むことができる。PPUは、同じものでも異なるものでもよく、そして各PPUは、それ自身の専用のPPメモリ装置(1つまたは複数)を有してもよいし、専用のPPメモリ装置を有していなくてもよい。
[0025]動作に際して、CPU102は、システム100のマスタープロセッサであり、他のシステムコンポーネントのオペレーションを制御し整合させる。特に、CPU102は、PPU202のオペレーションを制御するコマンドを発行する。ある実施形態では、CPU102は、各PPU202のためのコマンドのストリームをプッシュバッファ(図1には明確に示さず)に書き込み、このプッシュバッファは、CPU102及びPPU202の両方に対してアクセス可能なシステムメモリ104、PPメモリ204、または別の記憶位置に配置することができる。PPU202は、プッシュバッファからコマンドストリームを読み取り、そしてCPU102のオペレーションとは非同期でそれらコマンドを実行する。
[0026]ここに示すシステムは、例示に過ぎず、変更や修正がなされ得ることが明らかであろう。ブリッジの数及び配列を含む接続形態は、必要に応じて変更することができる。例えば、ある実施形態では、システムメモリ104は、ブリッジを経ずに、CPU102へ直結され、他の装置は、メモリブリッジ105及びCPU102を経てシステムメモリ104と通信する。他の別の形態では、並列処理サブシステム112は、I/Oブリッジ107へ接続され、またはメモリブリッジ105ではなく、CPU102へ直結される。更に別の実施形態では、I/Oブリッジ107及びメモリブリッジ105が1つのチップへ一体化されてもよい。ここに示す特定のコンポーネントは、任意のものであり、例えば、いかなる数のアドインカードまたは周辺装置がサポートされてもよい。ある実施形態では、スイッチ116が除去され、ネットワークアダプタ118及びアドインカード120、121がI/Oブリッジ107に直結される。
[0027]PPU202とシステム100の残り部分との接続を変更することもできる。ある実施形態では、PPシステム112は、システム100の拡張スロットに挿入できるアドインカードとして実施される。他の実施形態では、PPU202は、単一チップ上で、メモリブリッジ105またはI/Oブリッジ107のようなバスブリッジと一体化することができる。更に別の実施形態では、PPU202の幾つかのまたは全部の要素を単一チップ上でCPU102と一体化することができる。
[0028]PPUには、ローカルメモリを含まずに、任意の量のローカルPPメモリを設けることができ、そしてローカルメモリ及びシステムメモリを任意の組合せで使用することができる。例えば、PPU202は、一体化メモリアーキテクチャー(UMA)実施形態ではグラフィックプロセッサであり、このような実施形態では、専用のグラフィック(PP)メモリがほとんどまたは全く設けられず、また、PPU202は、システムメモリを排他的またはほぼ排他的に使用する。UMA実施形態では、PPUは、ブリッジチップまたはプロセッサチップに一体化されてもよく、或いは例えば、ブリッジチップを経てPPUをシステムメモリに接続する高速リンク(例えば、PCI−E)を伴う個別のチップとして設けられてもよい。
[0029]上述したように、並列処理サブシステムには、任意の数のPPUを含ませることもできる。例えば、複数のPPUを単一のアドインカードに設けることもできるし、または複数のアドインカードを通信経路113に接続することもできるし、或いは1つ以上のPPUをブリッジチップに一体化することもできる。マルチPPUシステムのPPUは、互いに同じものでもよいし異なるものでもよく、例えば、異なるPPUは、異なる数のコア、異なる量のローカルPPメモリ、等を有してもよい。複数のPPUが存在する場合には、それらを並列に動作させて、単一のPPUで可能なものより高いスループットでデータを処理することができる。
[0030]1つ以上のPPUを含むシステムは、デスクトップ、ラップトップまたはハンドヘルドパーソナルコンピュータ、サーバー、ワークステーション、ゲームコンソール、埋め込まれたシステム、等々を含む種々の構成及びフォームファクタで実施することができる。
コアの概略
[0031]図3は、本発明の1つ以上の態様に基づく図2の並列処理サブシステム112のための並列処理ユニット220を示すブロック図である。このPPU202は、非常に多数のスレッドを並列に実行するように構成されたコア208(または複数コア208)を備える。ここで、「スレッド(thread)」という語は、入力データの特定セットに対して実行される特定プログラムのインスタンスを指す。ある実施形態では、単一インストラクション複数データ(SIMD)のインストラクション発行技術を使用して、複数の独立したインストラクションユニットを設けずに、非常に多数のスレッドの並列実行がサポートされる。ある実施形態では、単一インストラクションマルチスレッド(SIMT)技術を使用し、処理エンジンのセットへインストラクションを発行するように構成された共通のインストラクションユニットを使用して、非常に多数の一般的に同期されたスレッドの並列実行がサポートされる。全ての処理エンジンが典型的に同じインストラクションを実行するSIMD実行形態とは異なり、SIMTの実行は、異なるスレッドが、所与のスレッドプログラムを通して、発散する実行経路を容易にたどれるようにする。当業者であれば、SIMD処理形態は、SIMT処理形態の機能的サブセットを表すことが理解されよう。
[0032]SIMDマシンと同様に、SIMT並列処理コア208は、このコア208に含まれた複数の並列処理エンジン302にわたって異なるデータに対して単一の並列プログラムのインスタンスを実行する。従って、例えば、コア208は、該コア208内の並列処理エンジン302において一連の共通のインストラクションを実行するように構成できる。単一の並列処理エンジン302への一連のインストラクションは、前記で定義されたスレッドを構成する。コア208内の並列処理エンジン302間のある数の現在実行中のスレッドの集合を、ここでは「ワープ(warp)」または「スレッドグループ」と称する。更に、複数の関連スレッドグループは、コア208において同時にアクティブとなり得る(実行の異なる段階で)。スレッドグループのこの集合を、ここでは「協働スレッドアレー」(CTA)と称する。
[0033]特定のCTAのサイズは、m*kに等しい。但し、kは、スレッドグループ内の同時に実行されるスレッドの数で、典型的に、コア208における並列処理エンジン302の数の整数倍であり、そしてmは、コア208において同時にアクティブなスレッドグループの数である。CTAのサイズは、一般的に、プログラマーと、CTAに利用可能なメモリまたはレジスタのようなハードウェアリソースの数とによって決定される。
[0034]一実施形態では、各コア208は、単一インストラクションユニット312からSIMTインストラクションを受け取るように構成されたP個(例えば、8個、16個、等)の並列処理エンジン302のアレイを含む。各処理エンジン302は、機能的ユニット(例えば、演算論理ユニット、等)の同じセットを含むのが好都合である。機能的ユニットは、この技術で知られたように、先のインストラクションが終了する前に新たなインストラクションを発行できるようなパイプライン型のものでよい。機能的ユニットの任意の組合せを設けることもできる。ある実施形態では、機能的ユニットは、整数及び浮動小数点演算(例えば、加算及び乗算)、比較演算、ブール演算(AND、OR、XOR)、ビットシフト、及び種々の代数関数(例えば、平面補間、三角法、指数関数、及び対数関数、等)の計算、を含む種々のオペレーションをサポートし、そして同じ機能的ユニットハードウェアをレバレッジして、異なるオペレーションを遂行することができる。
[0035]各処理エンジン302は、ローカル入力データ、中間結果、等を記憶するためにローカルレジスタファイル(LRF)304のスペースを使用する。一実施形態では、ローカルレジスタファイル304は、ある数のエントリーを各々有するP個のレーンに物理的または論理的に分割される(各エントリーは、例えば、32ビットワードを記憶する)。各処理エンジン302に1つのレーンが指定されると共に、異なるレーンの対応エントリーに、同じプログラムを実行する異なるスレッドに対するデータをポピュレートさせて、同期した並列実行を容易にすることができる。ある実施形態では、各処理エンジン302は、それに指定されたレーンのLRFエントリーにしかアクセスできない。ローカルレジスタファイル304におけるエントリーの全数は、処理エンジン302当たり複数の同時スレッドをサポートするに充分なほど大きいのが好都合である。
[0036]また、各処理エンジン302は、コア208内の全処理エンジン302間で共有されて異なるスレッド間でデータを転送するのに使用できるオンチップ共有メモリ306にアクセスすることができる。この共有メモリ306は、希望の大きさのものでよく、ある実施形態では、いずれの処理エンジン302も、等しく低い待ち時間(例えば、ローカルレジスタファイル304へのアクセスに匹敵する)で、共有メモリ306内の任意の位置から読み取りまたはそこに書き込むことができる。ある実施形態では、共有メモリ306は、共有レジスタファイルとして実施され、他の実施形態では、共有メモリ306は、共有キャッシュメモリを使用して実施することができる。
[0037]共有メモリ306に加えて、ある実施形態では、付加的なオンチップパラメータメモリ及び/またはキャッシュ(1つまたは複数)308も設けられ、これは、例えば、従来のRAMまたはキャッシュとして実施されてもよい。パラメータメモリ/キャッシュ308は、例えば、複数のスレッドにより必要となることのある状態パラメータ及び/または他のデータ(例えば、種々の定数)を保持するのに使用できる。また、処理エンジン302は、メモリインターフェイス214を経てオフチップ「グローバル」メモリ320にアクセスすることができ、これは、例えば、PPメモリ204及び/またはシステムメモリ104を含むことができ、システムメモリ104は、上述したように、メモリインターフェイス214によりホストインターフェイス206を経てアクセスすることができる。PPU202の外部の任意のメモリをグローバルメモリ320として使用してもよいことを理解されたい。複数の処理エンジン302は、どの処理エンジン302でもグローバルメモリ320にアクセスするのを許す相互接続部(明確に図示せず)を経てメモリインターフェイス214へ結合することができる。
[0038]一実施形態では、各処理エンジン302は、マルチスレッド型であり、例えば、ローカルレジスタファイル304の指定レーンの異なる部分における各スレッドに関連した現在状態情報を維持することにより、ある数G(例えば、24)までのスレッドを同時に実行することができる。処理エンジン302は、異なるスレッドからのインストラクションを効率のロスなく任意のシーケンスで発行できるように、あるスレッドから別のスレッドへ急速にスイッチするように設計されるのが好都合である。
[0039]インストラクションユニット312は、所与の処理サイクルに対して、同じインストラクション(INSTR)をP個の全処理エンジン302へ発行できるように構成される。従って、単一クロックサイクルのレベルにおいて、コア208は、P重(P-way)SIMTまたはSIMD設計を実質的に表わすマイクロアーキテクチャーを実施する。また、各処理エンジン302がマルチスレッド型で、G個までのスレッドを同時にサポートするので、この実施形態のコア208は、同時に実行するP*G個までのスレッドを有することができる。例えば、P=16及びG=24の場合には、コア208が384個までの同時スレッドをサポートする。
[0040]インストラクションユニット312は、同じインストラクションをP個の全処理エンジン302へ並列に発行するので、コア208は、複数のスレッドグループにおいて複数のスレッドを処理するのに使用されるのが好都合である。ここで使用する「スレッドグループ」とは、グループの1つのスレッドが各処理エンジン302に指定されるようにして、異なる入力データに対して同じプログラムを実行するP個までのスレッドのグループを指す。スレッドグループは、P個より少ないスレッドを含んでもよく、この場合は、そのスレッドグループが処理されるときのサイクル中には処理エンジン302の幾つかがアイドル状態になる。また、スレッドグループは、P個より多くのスレッドを含んでもよく、この場合は、連続するクロックサイクルにわたり処理が行われる。各処理エンジン302は、G個までのスレッドを同時にサポートできるので、コア208において所与の時間にG個のスレッドまでのグループを実行できることになる。
[0041]各クロックサイクルに、Gスレッドグループの選択された1つを形成しているP個の全スレッドに1つのインストラクションが発行される。どのスレッドが現在アクティブであるか指示するために、関連スレッドに対する「アクティブマスク」をインストラクションと共に含ませることができる。処理エンジン302は、アクティブマスクをコンテクスト識別子として使用して、例えば、インストラクションを実行するときに、ローカルレジスタファイル304の指定レーンのどの部分を使用すべきか決定する。従って、所与のサイクルに、コア208の全ての処理エンジン302が、同じスレッドグループ内の異なるスレッドに対して同じインストラクションを同期状態で実行することができる。当業者であれば、スレッドグループ内の各スレッドのこのような同期並列実行がSIMDアーキテクチャーの特徴であることが明らかであろう。あるスレッドグループ内の複数のスレッドが同期状態で実行するときには、処理エンジン302は、SIMD形態でインストラクションを実行するように構成される。しかしながら、あるインスタンスでは、あるスレッドグループ内の幾つかのスレッドが、例えば、以下に述べるように、条件付きまたは述語型インストラクション、プログラムの分岐点での発散、等のために、一時的にアイドル状態になることがある。処理エンジン302は、SIMDまたはSIMTエンジンとして機能するように構成されてもよい。
[0042]コア208のオペレーションは、コアインターフェイス303を経て制御されるのが好都合である。ある実施形態では、コアインターフェイス303は、処理されるべきデータ(例えば、原始データ、頂点データ、及び/またはピクセルデータ)、状態パラメータ、及び、データをどのように処理すべきか定義するコマンド(例えば、どんなプログラムを実行すべきか)をワーク配布ユニット210から受け取る。コアインターフェイス303は、処理されるべきデータを共有メモリ306にロードすることができ、また、パラメータをパラメータメモリ308にロードすることができる。また、コアインターフェイス303は、インストラクションユニット312において各々の新たなスレッドまたはスレッドグループを初期化し、次いで、スレッドの実行を開始するようにインストラクションユニット312に信号を送る。スレッドまたはスレッドグループの実行が完了すると、コア208は、コアインターフェイス303に通知するのが好都合である。次いで、コアインターフェイス303は、他のプロセスを開始し、例えば、共有メモリ306から出力データを検索し、及び/または付加的なスレッドまたはスレッドグループの実行のためにコア208を準備することができる。
[0043]ここに述べるコアアーキテクチャーは、例示に過ぎず、変更や修正が考えられることが明らかである。いかなる数の処理エンジンが含まれてもよい。ある実施形態では、各処理エンジンは、それ自身のローカルレジスタファイルを有し、スレッド当たりのローカルレジスタファイルエントリーの割り当ては、固定でもよいし、または希望の通りに構成できてもよい。更に、1つのコア208しか示されていないが、PPU202は、いかなる数のコア208を含んでもよく、それらコアは、互いに同じ設計のものであって、実行の振舞いが、どのコア208が特定の処理タスクを受け取るかに依存しないようにするのが好都合である。各コア208は、他のコア208とは独立して動作すると共に、それ自身の処理エンジン、共有メモリ、等を有するのが好都合である。
[0044]当業者であれば、図1、2及び3に示すアーキテクチャーは、本発明の範囲を何ら限定するものではなく、且つここに教示する技術は、本発明の範囲から逸脱せずに、これに限定されないが、1つ以上のCPU、1つ以上のマルチコアCPU、1つ以上のGPU、1つ以上のマルチコアGPU、等を含む任意の適切に構成された処理ユニットにおいて実施できることが理解されよう。
スレッドアレー及び協働スレッドアレー
[0045]ある実施形態では、図3のマルチスレッド処理コア208は、スレッドブロックまたはスレッドアレーを使用して汎用計算を実行することができる。スレッドアレーは、入力データセットに対して同じプログラムを同時に実行して出力データセットを発生する多数(n)のスレッドより成る。スレッドアレーの各スレッドには、実行中にスレッドにアクセスできる、固有のスレッド識別子(スレッドID)が指定される。このスレッドIDは、スレッドの処理振舞いについての種々の態様を制御する。例えば、スレッドIDを使用して、入力データセットのどの部分をスレッドが処理すべきか決定し、及び/または出力データセットのどの部分をスレッドが発生しまたは書き込むべきか決定することができる。
[0046]ある実施形態では、スレッドアレーは、「協働」スレッドアレー即ちCTAとして配列される。各CTAは、入力データセットに対して同じプログラム(ここでは「CTAプログラム」と称される)を同時に実行して、出力データセットを発生するスレッドのグループである。CTAでは、スレッドは、スレッドIDに基づくやり方でデータを互いに共有することにより協働することができる。例えば、CTAでは、データをあるスレッドによって発生し、別のスレッドによって消費することができる。ある実施形態では、データを共有すべきポイントにおいてCTAプログラムコードに同期インストラクションを挿入して、消費側スレッドがデータへのアクセスを試みる前に発生側スレッドによりデータが実際に発生されるよう確保することができる。CTAのスレッド間でのデータ共有がもしあれば、その程度は、CTAプログラムによって決定され、従って、CTAを使用する特定のアプリケーションにおいて、CTAのスレッドは、CTAプログラムに基づいて実際にデータを互いに共有してもよいし、しなくてもよいことを理解されたい。
[0047]ある実施形態では、CTAのスレッドは、図3の共有メモリ306を使用して、入力データ及び/または中間結果を同じCTAの他のスレッドと共有する。例えば、CTAプログラムは、特定のデータを書き込むべき共有メモリ306内のアドレスを計算するためのインストラクションを含み、このアドレスは、スレッドIDの関数である。各スレッドは、それ自身のスレッドIDを使用して関数を計算し、そして対応する位置に書き込みを行う。アドレス関数は、異なるスレッドが異なる位置に書き込みを行い、関数が決定論的である限り、スレッドによって書き込まれる位置を予想できるように、定義されるのが好都合である。また、CTAプログラムは、データを読み取るべき共有メモリ306内のアドレスを計算するためのインストラクションを含むこともでき、そのアドレスは、スレッドIDの関数である。適当な関数を定義して、同期技術を与えることにより、予想可能なやり方で、CTAの1つのスレッドによって共有メモリ306内の所与の位置にデータを書き込み、そして同じCTAの異なるスレッドによりその位置からデータを読み取ることができる。その結果、スレッド間での希望のデータ共有パターンをサポートすることができ、CTAのいずれのスレッドも、同じCTAの他のスレッドとでデータを共有することができる。
[0048]共有メモリ306を使用してスレッド間で通信を行うとき、特に、スレッドがCTA内の他のスレッドに対してメモリ位置で読み取り−変更−書き込みオペレーションをアトミックに遂行するときには、読み取り及び書き込みオペレーションが正しい結果を生成することを確保するためにメモリロック及びアンロックオペレーションを使用しなければならない。共有メモリ306へのアトミック更新のサポートを要求するアプリケーションは、例えば、マルチスレッドヒストグラムである。各スレッドは、入力を読み取り、次いで、適当なヒストグラムのビンを増加する。ここで、ビンは、高速アクセス及びスレッドにわたる共有を許すために共有メモリ306に論理的に記憶される。マルチスレッドが同じビンを増加する必要がある場合には、1つのスレッドによる読み取り−変更−書き込みのオペレーションシーケンスが、別のスレッドからの書き込みにより中断されてはならず、さもなければ、共有メモリ306に記憶される最終結果が誤ったものになり得る。図4Bを参照して説明するように、共有メモリ306のアトミック更新のサポートを与えるためにメモリロックユニットが共有メモリ306内のメモリ位置をロックしたり、アンロックしたりする。
[0049]CTA(または他の形式のスレッドアレー)は、データ並列分解に適した計算を遂行するのに使用されるのが好都合である。ここで使用する「データ並列分解」は、入力データに対して同じアルゴリズムを複数回並列に実行して出力データを発生することにより計算上の問題を解決する状態を含み、例えば、データ並列分解の1つの共通のインスタンスは、出力データセットの異なる部分を発生するために、入力データセットの異なる部分に同じ処理アルゴリズムを適用することを含む。データ並列分解の影響を受け易い問題は、例えば、マトリクス代数、任意の次元数における線型及び/または非線型変換(例えば、高速フーリエ変換)、及び種々のフィルタリングアルゴリズムを含み、また、フィルタリングアルゴリズムは、任意の次元数のコンボリューションフィルタ、複数次元の分離可能なフィルタ、等を含む。入力データセットの各部分に適用されるべき処理アルゴリズムは、CTAプログラムにおいて指定され、そしてCTA内の各スレッドは、入力データセットの一部分に対して同じCTAプログラムを実行するか、または出力データセットの一部分を発生する。CTAプログラムは、広範囲の数学的及び論理的オペレーションを使用してアルゴリズムを実施することができ、また、プログラムは、条件付きまたは分岐実行経路と、直接的及び/または間接的メモリアクセスとを含むことができる。
[0050]一実施形態では、図1のCPU102で実行されるドライバプログラムは、CTAを定義するコマンドをメモリ(例えば、システムメモリ104)内のプッシュバッファ(明確に図示せず)へ書き込み、これは、PPU202によりコマンドが読み取られるところである。これらコマンドは、CTA内のスレッドの数、CTAを使用して処理されるべき入力データセットのグローバルメモリ320内の位置、実行されるべきCTAプログラムのグローバルメモリ320内の位置、及び出力データを書き込むべきグローバルメモリ320内の位置のような状態パラメータに関連付けられるのが好都合である。この状態パラメータは、コマンドと一緒にプッシュバッファに書き込まれてもよい。コマンドに応答して、コアインターフェイス303は、状態パラメータをコア208(例えば、パラメータメモリ308)へロードし、次いで、CTAパラメータで指定されたスレッドの数が起動されるまでスレッドの起動を開始する。一実施形態では、コアインターフェイス303は、起動されたスレッドにスレッドIDを順次に指定する。より一般的には、CTAの全スレッドが同じコア208において同じプログラムを実行するので、有効スレッドIDの各々が1つのスレッドのみに指定される限り、どのスレッドにどのようなスレッドIDが指定されてもよい。固有の識別子(数字識別子を含むが、これに限定されない)をスレッドIDとして使用することができる。一実施形態では、CTAが、ある数(n)のスレッドを含む場合には、スレッドIDは、0からn−1までの単なる順次(一次元)インデックス値である。他の実施形態では、多次元インデックス機構を使用することができる。スレッドIDを参照することによってデータの共有が制御される限り、処理エンジンにスレッドを特定に指定しても、CTAの実行結果に影響が及ぶことはない。従って、CTAプログラムは、それを実行すべき特定のハードウェアとは独立したものでよい。
マルチスレッドインストラクション処理
[0051]図4Aは、本発明の1つ以上の態様に基づく、図3の並列処理ユニット202のためのインストラクションユニット312を示すブロック図である。このインストラクションユニット312は、インストラクションフェッチユニット400と、インストラクションキャッシュ430と、ディスパッチャー435と、条件コードユニット450とを含む。インストラクションフェッチユニット400は、処理されるべきデータと、データを処理するのに使用すべきプログラムに対応するプログラム識別子とを受け取る。
[0052]プログラムカウンタ記憶装置405は、各スレッドグループに対して実行されるべき次のプログラムインストラクション(INSTR)を指示するアクティブなプログラムカウンタを記憶する。G=24のときには、プログラムカウンタ記憶装置405は、24個のアクティブなプログラムカウンタを記憶する。同様に、スレッド状態記憶装置420は、各スレッドグループに対するアクティブなマスクを記憶し、アクティブなマスクの各ビットは、P個の処理エンジン302の整数に対応する。それ故、アクティブなマスクにおけるビット数は、スレッドグループにおけるスレッドの数である。また、スレッド状態記憶装置420は、各スレッドグループに対するディセーブルマスクも記憶する。ディセーブルマスクは、スレッドグループ内の各スレッドに対してフラグを含む。このフラグは、スレッドがイネーブルされたか、条件付きリターンインストラクションの処理のためにディセーブルされたか、条件付きブレークインストラクションの処理のためにディセーブルされたか、またはスレッドがプログラムを退出したか、指示する。これらインストラクションの処理、及びディセーブルマスクの決定は、図5A、5B及び7を参照して説明する。
[0053]CRS(コール(call)、リターン(return)、同期(synchronization))スタック425は、図4に実行スタック(0)〜(G−1)として示された各スレッドグループのための実行スタックを含む。実行スタックは、例えば、トークンタイプ、トークンプログラムカウンタ及びトークンマスクのような状態情報を含むトークンをプッシュ及びポップするために制御インストラクションの処理中に使用される。本発明のある実施形態では、CRSスタック425は、実行スタック455に対してグローバルメモリ320へのエントリーをこぼし、実行スタック455は、オーバーフローし、CRSスタック425にスペースが得られたときにこぼれたエントリーを回復させることができる。コントローラ415は、制御インストラクションが実行されるときにCRSスタック425からエントリーをプッシュ及びポップする。一実施形態では、6つのタイプの制御インストラクションがある。即ち、条件付き分岐インストラクションと、コールインストラクションと、プレブレーク(PreBreak)インストラクションと、プレリターン(PreReturn)インストラクションと、条件付きリターンインストラクションと、同期インストラクションと、条件付きブレークインストラクションである。別の実施形態は、それより多数または少数のタイプの制御インストラクション、並びに異なるタイプの制御インストラクションを含んでもよい。
[0054]コントローラ415は、スレッドグループに対するアクティブなプログラムカウンタ及びアクティブなマスクをインストラクションキャッシュ430に与える。このインストラクションキャッシュ430は、アクティブなプログラムカウンタに対応するインストラクションを得、そしてそのインストラクション及びアクティブなマスクをディスパッチャー435へ出力する。インストラクションキャッシュ430は、当業者に知られたキャッシュ技術を使用して、グローバルメモリ320からインストラクションを必要に応じて読み取る。コントローラ415は、制御インストラクションが実行されるときに条件コードユニット450から制御情報440を経て制御情報を受け取る。この制御情報は、制御インストラクションのタイプを示すトークンタイプと、スタックアンワインド(unwind)信号と、トークンをCRSスタック425にプッシュすると共に、スレッドグループに対するアクティブマスク及びディセーブルマスクを更新するのに必要な他のデータとを含む。
[0055]ディスパッチャー435は、インストラクションをデコードし、条件付き制御インストラクション(条件付き分岐、条件付きブレーク、及び条件付きリターン)に対する条件付きデータを条件コードユニット450へ出力する。条件付きデータは、(制御インストラクションにより指定される)条件テスト及び比較値を含み、これらに対して条件コードが適用される。従来、条件コードは、インストラクションにより指定された条件テストを比較値に対して評価し、真または偽の結果を発生するのに使用される。整数値に対する8つの条件テストのうちの6つは、従来の条件テスト、例えば、より小さい(lessthan)(LT)、等しい(equal)(EQ)、より大きい(greater than)(GT)、以下(less than or equal)(LE)、以上(greaterthan or equal)(GE)、及び不等(not equal)(NE)である。条件テストは、比較値が正であるか、ゼロであるかまたは負であるか決定するのに使用される。
[0056]浮動小数点フォーマット値が使用されるときには、条件テストは、NaN(非数(not-a-number))値のような非順序値に対する振舞いを定義する条件テストも含むことができる。NaNは、数値に対して順序をもたず、それ故、比較値を発生するのに使用されたときまたは従来の条件テストのための入力として使用されたときには、予期せぬ結果を生じさせる。8つの新たな条件テスト、例えば、LEG、U、LTU、EQU、LEU、GTU、NEU及びGEUは、NaN値の明確なハンドリングを与える。LEG(より小さい、等しい、またはより大きい)は、比較値がゼロ、正または負であり、即ち順序付けされるときしか真とならない。U(非順序)は、比較値が非順序付けされ、即ちNaNであるときしか真とならない。LTU(ゼロ未満または非順序)は、比較値が負またはNaNであるときに真となる。EQU(ゼロに等しいまたは非順序)は、比較値がゼロまたはNaNであるときしか真とならない。LEU(ゼロ以下または非順序)は、比較値が負、ゼロまたはNaNのときしか真とならない。GTU(ゼロより大きいまたは非順序)は、比較値が正またはNaNであるときしか真とならない。NEU(ゼロに等しくなくまたは非順序)は、比較値が正、負またはNaNであるときしか真とならない。GEU(ゼロ以上または非順序)は、比較値が正、ゼロまたはNaNであるときしか真とならない。
[0057]他の2つの従来の条件テスト(整数及び浮動小数点値に対する)は、常に(TR)であって、決して(FL)ではない。オーバーフロー及び桁上げのような付加的な条件テストも使用でき、従って、条件テストの数が増加される。比較値は、プログラムの実行中に計算することができ、スレッドグループ内の各スレッドは、比較値を有してもよい。それ故、条件テストが評価されるときには、あるスレッドは、真の結果を発生し、一方、他のスレッドは、偽の結果を発生することがある。1つ以上のアクティブなスレッドが、他のアクティブなスレッドとは異なる条件テスト結果を生じるときには、スレッドが発散し、CRSスタックを使用して、分岐の第1の側が実行を完了した後に実行される分岐の側に対してアクティブなマスク及びプログラムカウンタを含むトークンを記憶する。
[0058]また、条件付きデータに加えて、ディスパッチャーは、制御インストラクション(コール、ブレーク、リターン、分岐、等)、インストラクションにより指定されるターゲットプログラムカウンタ(アドレス)、及びアクティブなマスクを条件コードユニット450へ出力する。制御インストラクションは、ディスパッチャー435によって処理エンジン203へ出力されない。むしろ、条件コードユニット450は、この条件コードユニット450によりコントローラへ出力された制御情報に含まれたアクティブなマスクに基づいて「テークン(taken)」マスクを決定する。より詳細には、条件コードユニット450は、条件テスト結果を使用して、インストラクションにより指定されたテスト条件に対して「真」と評価するアクティブなスレッドを指示する「テークンマスク」を決定する。真の比較テスト結果を指示するスレッドグループ内のスレッドに対するこのテークンマスクのビットがクリアされる。アクティブなマスク及びテークンマスクは、ディセーブルマスクを更新するように、コントローラ415によって使用することができる。異なるファンクションポインタを有する2つ以上のスレッドでファンクションコールが遂行されるときには、ファンクションコールが直列化されて、各固有のファンクションポインタを指定するスレッドを実行すると共に、テークンマスクを使用して、各固有のファンクションポインタに対するアクティブなスレッドを指示する。
[0059]条件コードユニット450は、テークンマスク及びトークンタイプを、制御情報440を経てコントローラ415へ出力する。ターゲットプログラムカウンタがコール又は分岐制御インストラクションにより指定されるときには、テークンプログラムカウンタが条件コードユニット450により制御情報440を経てコントローラ415へ出力される。トークンタイプは、ディセーブルマスクを発生するために実行された制御インストラクションのタイプを指示する。トークンタイプは、同期、コール、発散、及びブレークを含む。スレッドに対する制御インストラクションが、フライト中(in-flight)であり、即ちコントローラ415により出力されたが制御情報440を経てコントローラ415によりまだ受け取られていないときには、同じスレッドに対する別のインストラクションがコントローラ415により出力されてはならないことに注意されたい。
[0060]ディスパッチャー435によって受け取られる他のインストラクション(非制御インストラクション)は、処理エンジン302へ出力するために待ち行列に入れられる。ディスパッチャー435は、インストラクションを処理するのに必要な(計算又は記憶)リソースの利用性に基づきインストラクションを出力するように構成されてもよい。ディスパッチャー435のある実施形態では、スコアボード機構を使用して、リソースの利用性を追跡すると共に、どのインストラクションを処理エンジン302へ出力できるか決定する。処理エンジン302がインストラクションを受け取ると、そのインストラクションを実行するのに必要なオペランドを得るために読み取り要求が発生されて、その読み取り要求がLRF304又は共有メモリ306へ出力される。次いで、インストラクションは、オペランドが得られたときに処理エンジン302によって処理される。
共有メモリにアクセスするためのロック及びアンロックコマンド
[0061]図4Bは、本発明の1つ以上の態様に基づく、図3に示す共有メモリ306のブロック図である。共有メモリ306内の位置にアクセスするアトミックオペレーションのサポートを与えるために、処理エンジン302からのメモリ読み取り及び書き込み要求がメモリロックユニット410へ入力される。記憶リソース406内の位置に対するロック状態を記憶するロックビット474のセットが設けられる。本発明のある実施形態では、ロックビットは、記憶リソース406内の各アドレス位置に対して専用のものでよい。本発明の他の実施形態では、各ロックビットは、記憶リソース406内の多数のアドレス位置間で共有されてもよい。更に、ロックビット474又は他のロックビットを使用して、グローバルメモリ320のような他のアドレススペースをカバーし、また、記憶リソース406及びグローバルメモリ320内のアドレス可能な位置間で各ロックビットを共有してもよい。
[0062]記憶リソース406内の物理的メモリは、複数のCTAが同時に実行されるのを許すように動的に細分化される。ロックビット474に必要な記憶量を減少するために、記憶リソース406内のエントリーの複数アドレスがロックビット474内の同じロックビットに対してエイリアシングされる。処理エンジン302から受け取られた要求メモリアドレスをロックビットアドレス、例えば、ロックアドレスへマップするために、メモリロックユニット410によりハッシュ関数が実施されてもよい。本発明の好ましい実施形態では、ハッシュ関数は、ワードアドレスN及びN+1が異なるロックビットへとマップされ、且つ少なくとも256個の独立したロックが設けられることを保証する。本発明のある実施形態では、ハッシュ関数は、要求に対して受け取られたアドレスの下位ビットを単純に使用する。
[0063]メモリロックユニット410は、重要な経路にパイプライン段または判断ロジックを追加することを要求せずに、既存の共有メモリ読み取り/書き込みロジックに追加することができる。更に、ロックビット474は、記憶リソース406と同じアクセス要件を有するバンク型単一ポート付きRAM(ランダムアクセスメモリ)またはラッチアレーとして実施されてもよい。より詳細には、記憶リソース406へのアクセスを制御するのに使用されるものに対する既存のバンク競合及びアドレス直列化ロジックが、ロックビット474に対してメモリロックユニット410により設けられる。
[0064]共有メモリ306へのアトミック更新に対するサポートを与えるために、共有メモリ読み取り及び書き込みインストラクションが、ロック取得及びロック解除サフィックスで増強される。共有メモリ読み取りインストラクションG2Rは、読み取られるアドレスに対するロックを取得するよう試みるために、ロックコマンドサフィックス.LCKを指定する。G2R.LCKは、図5Aを参照して説明するように、指示されたアドレスに記憶されるデータと、ロックが首尾良く得られたかどうか指示するフラグと、の両方をリターンする。ロックビットは、メモリ読み取り及び書き込みアクセスと並列にアクセスされ、ロックを取得及び解除するのに付加的なパイプライン段またはロックサイクルが必要とされないようにする。
[0065]ロックが首尾良く取得された場合には、プログラムは、データを変更し、新たな値を、指示されたアドレスにより指定される位置に記憶し、そして(.UNLサフィックスを使用して)ロックを解除して、他のスレッドが、その位置、または解除されたロックアドレスと同じロックアドレスへアドレスがエイリアシングする別の位置、にアクセスするのを許す。G2R.LCKインストラクションによりロックが首尾良く取得されない場合には、プログラムは、図5Cを参照して述べるように、再びロックを取得するように試みなければならない。ロックビットを授けるのはプログラムの役割であることに注意されたい。というのは、メモリロックユニット410は、ロック所有権を追跡するように構成されておらず、従って、ロックを取得していないスレッドが記憶リソース406内のロックされた位置を変更するのを防止できないからである。
[0066]テーブル1は、インストラクションサフィックスを使用して指定されるロックコマンド(LCK)の機能を示すプログラムインストラクションのセットである。プログラムインストラクションは、説明を容易にするためにC擬似コードで表わされる。G2R.LCKインストラクションの実行は、図5Aを参照して説明する。
Figure 0005035277
[0067]図5Aは、本発明の1つ以上の実施形態に基づき共有メモリ306に対するテーブル1に示されたロックオペレーションを遂行するための方法ステップを示すフローチャートである。ステップ500において、メモリロックユニット410は、G2R.LCKインストラクションに対して指定されたアドレスを受け取り、そしてハッシュアドレス(hash_addr)を決定する。本発明のある実施形態では、ロックアドレスは、アドレスの下位8ビットである。バイトアドレスを使用するときには、4バイトの粒度を使用してロックが行われ、アドレスの下位8ビットは、ビット9:2である。ステップ505では、メモリロックユニット410は、ロックアドレスを使用してロックビット474を読み取ることによりロックアドレスに対するロック結果を計算し、return_lockを得る。スレッドグループ内で、あるスレッドは、ロックを取得でき、他のスレッドは、ロックを取得できない。スレッドグループ内の複数スレッドが同じアドレスをロックするように同時に試みる場合には、1つのスレッドしかロックが許可されない。
[0068]ステップ510では、メモリロックユニット410は、ロックアドレスに対応するロックビット474においてロックフラグをセットする。return_lockは、以前のロックフラグの単なる逆型であり、そしてロックフラグは、無条件にセットされることに注意されたい。このインストラクションの前にロックアドレスがロックされたかどうかに関わらず、ロックフラグが読み取られた後にそれがロックされる。ステップ515では、アドレスに対応する記憶リソース406のエントリーが読み取られて、データを得る。重要なことに、ロックフラグの更新は、記憶リソース406へのアクセスと同時に行うことができる。というのは、記憶リソース406のエントリーの読み取りが、ロックフラグの値に依存しないからである。それ故、ロックオペレーションを遂行するのに、付加的なロックサイクルもパイプライン段も必要とされない。
[0069]テーブル2は、インストラクションサフィックスを使用して指定されたアンロックコマンド(UNL)の機能を示すプログラムインストラクションのセットである。プログラムインストラクションは、説明を容易にするためにC擬似コードで表わされ、ここで、hash_addrは、ロックアドレスである。R2G.UNLインストラクションの実行は、図5Bを参照して説明する。
Figure 0005035277

[0070]図5Bは、本発明の1つ以上の実施形態に基づき共有メモリ306に対するテーブル2に示されたアンロックオペレーションを遂行するための方法ステップを示すフローチャートである。ステップ520において、メモリロックユニット410は、R2G.UNLインストラクションに対して指定されたアドレスを受け取り、そしてハッシュアドレス(hash_addr)を決定する。ステップ525では、メモリロックユニット410は、ロックアドレスに対応するロックビット474のロックフラグをクリアする。ステップ530では、アドレスに対応する記憶リソース406のエントリーが、R2G.UNLインストラクションで与えられたデータと共に書き込まれる。重要なことに、ロックフラグをセットするのは、無条件であり、記憶リソース406のエントリーに対する更新と同時に行われる。それ故、アンロックオペレーションを遂行するのに、付加的なロックサイクルもパイプライン段も必要とされない。
[0071]テーブル3は、ロック及びアンロックコマンドの使用を示すプログラムインストラクションのセットである。プログラムインストラクションは、説明を容易にするために、アッセンブリ擬似コードで表わされる。テーブル3に示すコードの実行は、図5Cを参照して説明する。SIMTプロセッサの環境で説明するが、テーブル1、2及び3に示すプログラムインストラクションは、単一スレッドまたはマルチスレッドのいずれの形式のプロセッサで実行されてもよい。
Figure 0005035277
図5Cは、本発明の1つ以上の態様に基づきロック及びアンロックコマンドを使用して共有メモリ306に対するアトミック更新を許すための方法ステップのフローチャートである。コントローラ415は、アクティブなプログラムカウンタをインストラクションキャッシュ430に出力することによりスレッドに対するアクティブなプログラムカウンタ(PC)の現在設定に対応するプログラムインストラクションをフェッチする。ディスパッチャー435は、プレブレークインストラクション(PBK)が制御インストラクションであることを決定し、そしてPBKインストラクションを条件コードユニット450へ出力する。ステップ550において、プレブレークインストラクションを実行して、ループ後アドレス(afterloop address)LOCKDONEをCRSスタック425にプッシュし、共有メモリ306のアトミック更新に続くプログラムの実行を継続する。スレッドは、それらのロックされたオペレーションを完了すると(例えば、ロックを首尾良く取得すると)、スレッドグループの全てのスレッドがロックの取得に成功するまでそれらをディセーブルさせるブレークインストラクション(BRK)を実行する。最後のスレッド(1つまたは複数)がブレークインストラクションを実行すると、PBKトークンが最終的にスタックからポップされ、そしてPBKインストラクションのときに有効であった元のアクティブなマスクを使用してLOCKDONEアドレスへ制御が移行される。スレッドグループのスレッドは、ブレークインストラクションが最後に実行されるときに発散せず、それ故、スレッドをループから退出させる条件を満足する。プレブレークインストラクションを実行した後に、コントローラ415は、プログラムカウンタ記憶装置405にスレッドに対して記憶されたアクティブなプログラムカウンタを増加し、スレッドに対する次のインストラクションを指すようにする。
[0072]ステップ555では、G2R.LCKインストラクションは、ディスパッチャー435により処理エンジン302へ出力される。ロックコマンドがアドレスA1に対して実行され、A1により指定されたアドレスから読み取られたデータがLRF304のレジスタR2に記憶される。ステップ560では、スレッドグループの各スレッドに対するロックフラグの値がメモリロックユニット410により出力されて、条件レジスタC1(図示せず)に記憶される。C1の値は、処理エンジン302により条件コードユニット450へ入力として与えられ、アクティブなプログラムカウンタが増加される。
[0073]ステップ565では、ADDインストラクションがディスパッチャー435により処理エンジン302へ出力され、共有メモリ306から読み取られた値に対してオペレーションを遂行する。処理エンジン302は、R2に記憶された値をレジスタR2及びR7の値の和として更新し、アクティブなプログラムカウンタが増加される。ステップ570では、ディスパッチャー435は、C1.NEによって指定された条件を評価し、どのロック結果が、ロックが成功であったことを指示するか決定する。ステップ570においてロック結果が、ロックが成功であったことを指示するスレッドに対して、ステップ575においてアンロックコマンドが実行され、各ロックフラグをクリアすると共に、R2に記憶された変更されたデータを、共有メモリ306のアドレスA1に対応する位置に書き込む。アクティブなプログラムカウンタが増加され、方法はステップ580へ進む。ステップ570では、ロックを取得し損なったスレッドは、ステップ575をバイパスして、ステップ580へ直接進む一方、アクティブなプログラムカウンタを増加する。
[0074]ステップ580では、コントローラ415は、C1.NE条件が条件付きブレークインストラクションに対して評価されたときに条件コードユニット450により与えられるテークンマスクに基づいてアクティブなスレッドのいずれかが発散するかどうか決定する。条件コードユニット450は、テークンマスク、トークンタイプ、及びターゲットプログラムカウンタを含む制御情報をコントローラ415へ出力する。コントローラ415は、少なくとも1つのアクティブなスレッドがスレッドグループ内の他のアクティブなスレッドから発散することを決定した場合に、条件C1.NEが真であるスレッドをディセーブルし、減らされたアクティブマスクでの実行を継続する。トークンプログラムカウンタは、スレッド内の次のインストラクションを指定するように増加されたアクティブなプログラムカウンタに等しい。
[0075]コントローラ415は、アクティブなマスクを、試みられたロックが不首尾であったために条件テストに対して「真」と評価したアクティブなスレッドを指示するテークンマスクとして決定する。コントローラ415は、アクティブなプログラムカウンタを、分岐インストラクションLOOPにより指定されるターゲットプログラムカウンタ(アドレス)にセットし、そしてスレッドグループ内の全てのアクティブなスレッドが首尾良くロックを取得するまで、ステップ555、560、565及び570が繰り返される。この方法は、アドレスのエイリアシングにより複数のスレッドが同じロックビットへのアクセスを試みたときでも、ロックを取得したスレッドがデータを書き込んでロックを解除するので、前方に進行できるようにすることに注意されたい。
[0076]ステップ575を完了したスレッドは、ステップ575を完了するために、共有メモリ306の各エントリーを首尾良くロックしていないスレッドを待機する。全てのアクティブなスレッドがアンロックコマンド及びその関連インストラクションを実行すると、スレッドは発散せず、そして全てのアクティブなスレッドは、ブレークインストラクションに対する条件テストに合格する。従って、ステップ585において、発散トークンがCRSスタック425からポップされ、LOCKDONEにおいて第1のインストラクションが実行される。当業者であれば、図5A、5B及び5Cに示す方法ステップをいずれの順序で遂行するように構成されたいずれのシステムも本発明の範囲内に包含されることが理解されよう。
[0077]このシステム及び方法は、アトミックなメモリオペレーションを遂行するために共有メモリにアクセスする改良されたロックメカニズムを提供する。より詳細には、ロックが首尾良くなされたかどうか指示する即時フィードバックが与えられる。読み取られたデータは、ロック結果と共に要求元へ返送され、要求元がデータを処理できるようにする。ロック状態は、読み取り中にロックするかまたは書き込み中にアンロックするときに同時に変更でき、読み取り−変更−書き込みオペレーション中に個別のトランザクションとしてロック状態をチェックするための待ち時間に関して付加的なオーバーヘッドが生じないようにする。更に、各アトミックなメモリオペレーションに対してロックまたはアンロックが明確に指定され、アドレスのエイリアシングによる競合が、データを変更し得るオペレーションにしか影響を及ぼさないようにする。
[0078]本発明の一実施形態は、コンピュータシステムに使用するためのプログラム製品として実施することができる。プログラム製品のプログラム(1つまたは複数)は、(ここに述べる方法を含む)実施形態の機能を定義し、そして種々のコンピュータ読み取り可能な記憶媒体に含ませることができる。ここに例示するコンピュータ読み取り可能な記憶媒体は、(i)情報が永久的に記憶される書き込み不能の記憶媒体(例えば、コンピュータ内のリードオンリメモリ装置、例えば、CD−ROMドライブにより読み取り可能なCD−ROMディスク、フラッシュメモリ、ROMチップ、または任意の形式のソリッドステート不揮発性半導体メモリ)、及び(ii)変更可能な情報が記憶される書き込み可能な記憶媒体(例えば、ディスケットドライブまたはハードディスクドライブ内のフロッピーディスク、または任意の形式のソリッドステートランダムアクセス半導体メモリ)を含むが、これらに限定されない。
[0079]本発明は、特定の実施形態を参照して以上に説明した。しかしながら、当業者であれば、特許請求の範囲に述べる本発明の広い精神及び範囲から逸脱せずに種々の変更や修正がなされ得ることが理解されよう。従って、以上の説明及び添付図面は、例示のためのものであって、それに限定されるものではない。
100・・・システム、102・・・CPU、104・・・システムメモリ、105・・・メモリブリッジ、106・・・通信経路、107・・・I/Oブリッジ、108・・・入力装置、110・・・ディスプレイ装置、112・・・並列処理サブシステム、113・・・通信経路、114・・・システムディスク、116・・・スイッチ、118・・・ネットワークアダプタ、120・・・アドインカード、121・・・アドインカード、202・・・PPU、204・・・PPメモリ、206・・・ホストインターフェイス、208・・・コア、210・・・ワーク配布ユニット、212・・・フロントエンド、214・・・メモリインターフェイス、302・・・処理エンジン、303・・・コアインターフェイス、304・・・ローカルレジスタファイル、306・・・共有メモリ、308・・・パラメータメモリ、312・・・インストラクションユニット、320・・・グローバルメモリ、400・・・インストラクションフェッチユニット、405・・・プログラムカウンタ記憶装置、406・・・記憶リソース、410・・・メモリロックユニット、415・・・コントローラ、420・・・スレッド状態記憶装置、425・・・CRSスタック、430・・・インストラクションキャッシュ、435・・・ディスパッチャー、440・・・制御情報、450・・・条件コードユニット、455・・・実行スタック、474・・・ロックビット。

Claims (5)

  1. 共有メモリに対するアトミックな更新を行う方法において、
    あるアドレスに対応する前記共有メモリのエントリーにアクセスするためのメモリ要求を受け取るステップと、
    前記アドレスを使用してロックフラグを記憶するロックエントリーのロックアドレスを決定するステップと、
    前記アドレスに対応する前記共有メモリのエントリーに対してロックが取得されたかどうか指示する前記ロックアドレスに対するロック結果を計算するステップと、
    前記メモリ要求により前記エントリーがロックされたことを指示して、別のメモリ要求が、前記アドレスに対応する前記共有メモリのエントリーを書き込むのを防止するために、前記ロックフラグをセットするステップと、
    前記アドレスに対応する前記共有メモリのエントリーに記憶されたデータ及び前記ロック結果を同時に読み取るステップと、
    前記データを使用して変更データを発生するオペレーションを遂行するステップと、
    前記ロック結果が、前記エントリーに対してロックが取得されたことを指示するときには、前記エントリーが前記メモリ要求によってアンロックされることを指示するために、
    前記ロックフラグをクリアするステップと
    前記アドレスに対応する前記共有メモリのエントリーに前記変更データを書き込むステップと
    を備える、
    方法。
  2. 前記ロック結果が、前記エントリーに対してロックが取得されなかったことを指示するときには、前記ロック結果を計算するステップ、前記ロックフラグをセットするステップ及び、前記データ及び前記ロック結果を同時に読み取るステップを繰り返すステップを更に備える、請求項1に記載の方法。
  3. 前記決定するステップ、前記計算するステップ、前記セットするステップ及び前記読み取るステップは、プログラムの複数の実行スレッドに対して並列に遂行される、請求項1に記載の方法。
  4. 共有メモリに対するアトミックな更新を行うシステムにおいて、
    複数のエントリーにデータを記憶するための共有記憶リソースであって、あるアドレスに対応する該共有記憶リソースのエントリーにアクセスするためのメモリ要求を受け取ると共に、前記アドレスに対応する前記エントリーに記憶されたデータを出力する、ように構成された共有記憶リソースと、
    前記共有記憶リソースに結合されたメモリロックユニットであって、前記メモリ要求で指定されるロック要求を受け取り、前記アドレスを使用してロックフラグを記憶するロックエントリーのロックアドレスを決定し、前記アドレスに対応する前記共有記憶リソースのエントリーに対してロックが取得されたかどうか指示する前記ロックアドレスに対するロック結果を計算し、前記メモリ要求により前記エントリーがロックされたことを指示して、別のメモリ要求が、前記アドレスに対応する前記共有記憶リソースのエントリーを書き込むのを防止するために、前記ロックフラグをセットし、前記アドレスに対応する前記共有記憶リソースのエントリーにアクセスするための第2のメモリ要求で指定されたアンロック要求を受け取り、前記ロック結果が、前記エントリーに対してロックが取得されたことを指示するときには、前記エントリーが前記第2のメモリ要求によってアンロックされることを指示するために、前記ロックフラグをクリアし、前記アドレスに対応する前記共有記憶リソースのエントリーにアクセスするための前記第2のメモリ要求を受け取り、前記アドレスに対応する前記共有記憶リソースのエントリーに変更データを書き込む、
    ように構成されたメモリロックユニットと、
    を備え、
    前記共有記憶リソースが前記データを出力すると同時に、前記メモリロックユニットは、前記ロック結果を出力する、
    システム。
  5. 前記ロックフラグは、前記共有記憶リソースにおけるエントリーの2つ以上のアドレスにより共有される、請求項に記載のシステム。
JP2009060702A 2008-03-24 2009-03-13 共有メモリに対するアトミックな更新を可能にするロックメカニズム Active JP5035277B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/054,267 US8055856B2 (en) 2008-03-24 2008-03-24 Lock mechanism to enable atomic updates to shared memory
US12/054,267 2008-03-24

Publications (2)

Publication Number Publication Date
JP2009230757A JP2009230757A (ja) 2009-10-08
JP5035277B2 true JP5035277B2 (ja) 2012-09-26

Family

ID=41060802

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009060702A Active JP5035277B2 (ja) 2008-03-24 2009-03-13 共有メモリに対するアトミックな更新を可能にするロックメカニズム

Country Status (3)

Country Link
US (2) US8055856B2 (ja)
JP (1) JP5035277B2 (ja)
DE (1) DE102009012766A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9471400B1 (en) 2015-07-28 2016-10-18 International Business Machines Corporation Reentrant read-write lock algorithm

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8185459B2 (en) * 2008-05-14 2012-05-22 Symcor Inc. System, method and computing device for detecting duplicate financial documents
US8619086B2 (en) * 2009-04-30 2013-12-31 Intel Corporation Managing three dimensional scenes using shared and unified graphics processing unit memory
EP2470991A1 (en) * 2009-08-24 2012-07-04 ABB Technology AG Improved execution of real time applications with an automation controller
US8850436B2 (en) * 2009-09-28 2014-09-30 Nvidia Corporation Opcode-specified predicatable warp post-synchronization
US10360039B2 (en) * 2009-09-28 2019-07-23 Nvidia Corporation Predicted instruction execution in parallel processors with reduced per-thread state information including choosing a minimum or maximum of two operands based on a predicate value
US8365014B2 (en) * 2010-01-14 2013-01-29 Juniper Networks, Inc. Fast resource recovery after thread crash
US9349154B2 (en) * 2010-04-05 2016-05-24 Nvidia Corporation Bindless texture and image API
US20120151145A1 (en) * 2010-12-13 2012-06-14 Advanced Micro Devices, Inc. Data Driven Micro-Scheduling of the Individual Processing Elements of a Wide Vector SIMD Processing Unit
CN103377086A (zh) * 2012-04-27 2013-10-30 华为技术有限公司 用于异步多核系统操作共享资源的方法、装置及系统
WO2014022203A1 (en) * 2012-08-02 2014-02-06 Siemens Corporation Pipelining for cyclic control systems
US9542237B2 (en) * 2012-09-04 2017-01-10 Red Hat Israel, Ltd. Shared locking for storage centric exclusive locks
US9678897B2 (en) * 2012-12-27 2017-06-13 Nvidia Corporation Approach for context switching of lock-bit protected memory
US9146885B2 (en) 2013-05-17 2015-09-29 Analog Devices, Inc. Parallel atomic increment
US9396226B2 (en) 2013-06-24 2016-07-19 International Business Machines Corporation Highly scalable tree-based trylock
US9329895B2 (en) 2014-01-22 2016-05-03 International Business Machines Corporation Reader-writer lock
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
US9672163B2 (en) 2014-04-17 2017-06-06 Thomson Licensing Field lockable memory
GB2529899B (en) 2014-09-08 2021-06-23 Advanced Risc Mach Ltd Shared Resources in a Data Processing Apparatus for Executing a Plurality of Threads
US10560542B2 (en) * 2014-09-15 2020-02-11 Ge Aviation Systems Llc Mechanism and method for communicating between a client and a server by accessing message data in a shared memory
US9898348B2 (en) 2014-10-22 2018-02-20 International Business Machines Corporation Resource mapping in multi-threaded central processor units
WO2016120884A1 (en) * 2015-01-30 2016-08-04 Hewlett-Packard Development Company, L.P. Failure atomic update of a single application data file
CN105988724B (zh) * 2015-02-12 2019-02-26 华为技术有限公司 多副本写入存储设备的方法及存储设备
US10209990B2 (en) * 2015-06-02 2019-02-19 Advanced Micro Devices, Inc. Conditional atomic operations in single instruction multiple data processors
GB2539958B (en) * 2015-07-03 2019-09-25 Advanced Risc Mach Ltd Data processing systems
US10839289B2 (en) 2016-04-28 2020-11-17 International Business Machines Corporation Neural network processing with von-Neumann cores
GB2551529B (en) * 2016-06-21 2018-09-12 Advanced Risc Mach Ltd Switching between private cache and shared memory to handle atomic operations
EP4089531B1 (en) 2016-12-31 2024-06-26 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing
US10387037B2 (en) * 2016-12-31 2019-08-20 Intel Corporation Microarchitecture enabling enhanced parallelism for sparse linear algebra operations having write-to-read dependencies
US10585818B2 (en) * 2017-04-05 2020-03-10 International Business Machines Corporation Low overhead exclusive control for shared memory objects
US10452586B2 (en) 2017-04-17 2019-10-22 Intel Corporation Avoid thread switching in cache management
US10943171B2 (en) * 2017-09-01 2021-03-09 Facebook, Inc. Sparse neural network training optimization
US10877992B2 (en) 2017-11-30 2020-12-29 International Business Machines Corporation Updating a database
US10929199B2 (en) 2018-07-02 2021-02-23 International Business Machines Corporation Memory lock serialization
CN112905365B (zh) * 2019-10-30 2024-02-13 支付宝(杭州)信息技术有限公司 一种数据处理方法、装置、设备及介质
CN111143240B (zh) * 2019-12-31 2022-07-05 科华恒盛股份有限公司 图像存储方法、系统及终端设备
US11361400B1 (en) 2021-05-06 2022-06-14 Arm Limited Full tile primitives in tile-based graphics processing

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4574350A (en) * 1982-05-19 1986-03-04 At&T Bell Laboratories Shared resource locking apparatus
JPH02242363A (ja) * 1989-03-15 1990-09-26 Fujitsu Ltd 共用資源制御方式
US5263161A (en) * 1989-07-26 1993-11-16 Massachusetts Institute Of Technology Non-busy waiting resource control
US5343469A (en) * 1990-06-14 1994-08-30 Nec Corporation Communication system and communication devices having lock function
US5168564A (en) * 1990-10-05 1992-12-01 Bull Hn Information Systems Inc. Cancel mechanism for resilient resource management and control
JPH09297706A (ja) * 1996-04-30 1997-11-18 Ricoh Co Ltd データ処理装置及びデータ処理装置における共有メモリの排他制御方法
JP4132322B2 (ja) * 1998-12-16 2008-08-13 株式会社日立製作所 記憶制御装置およびその制御方法
US6324624B1 (en) * 1999-12-28 2001-11-27 Intel Corporation Read lock miss control and queue management
US6973521B1 (en) * 2000-05-16 2005-12-06 Cisco Technology, Inc. Lock controller supporting blocking and non-blocking requests
US7003521B2 (en) * 2000-05-30 2006-02-21 Sun Microsystems, Inc. Method and apparatus for locking objects using shared locks
US6862608B2 (en) * 2001-07-17 2005-03-01 Storage Technology Corporation System and method for a distributed shared memory
US6816952B1 (en) * 2002-05-31 2004-11-09 Unisys Corporation Lock management system and method for use in a data processing system
US7458076B2 (en) * 2004-08-05 2008-11-25 International Business Machines Corporation Method, apparatus, and computer program product for dynamically tuning a data processing system by identifying and boosting holders of contentious locks
US7509463B2 (en) * 2005-12-01 2009-03-24 Sony Computer Entertainment, Inc. Cell processor atomic compare and swap using dedicated synergistic processor element
US8108627B2 (en) * 2006-03-31 2012-01-31 Intel Corporation Array comparison and swap operations
US20080250509A1 (en) * 2007-04-04 2008-10-09 Nokia Corporation Write Protection For Memory Devices
US8286196B2 (en) 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
WO2008127622A2 (en) 2007-04-11 2008-10-23 Apple Inc. Data parallel computing on multiple processors
US8341611B2 (en) 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9471400B1 (en) 2015-07-28 2016-10-18 International Business Machines Corporation Reentrant read-write lock algorithm
US9658900B2 (en) 2015-07-28 2017-05-23 International Business Machines Corporation Reentrant read-write lock algorithm
US9672077B2 (en) 2015-07-28 2017-06-06 International Business Machines Corporation Reentrant read-write lock algorithm

Also Published As

Publication number Publication date
US8375176B2 (en) 2013-02-12
JP2009230757A (ja) 2009-10-08
US20120036329A1 (en) 2012-02-09
US8055856B2 (en) 2011-11-08
DE102009012766A1 (de) 2009-10-15
US20090240860A1 (en) 2009-09-24

Similar Documents

Publication Publication Date Title
JP5035277B2 (ja) 共有メモリに対するアトミックな更新を可能にするロックメカニズム
EP2480979B1 (en) Unanimous branch instructions in a parallel thread processor
JP5701487B2 (ja) 同期並列スレッドプロセッサにおける間接的な関数呼び出し命令
US7617384B1 (en) Structured programming control flow using a disable mask in a SIMD architecture
US10067768B2 (en) Execution of divergent threads using a convergence barrier
US9830158B2 (en) Speculative execution and rollback
EP2483787B1 (en) Efficient predicated execution for parallel processors
US8108659B1 (en) Controlling access to memory resources shared among parallel synchronizable threads
US8639882B2 (en) Methods and apparatus for source operand collector caching
US8850436B2 (en) Opcode-specified predicatable warp post-synchronization
US20130198760A1 (en) Automatic dependent task launch
US9448803B2 (en) System and method for hardware scheduling of conditional barriers and impatient barriers
US9678897B2 (en) Approach for context switching of lock-bit protected memory
US8572355B2 (en) Support for non-local returns in parallel thread SIMD engine
US9507638B2 (en) Compute work distribution reference counters
US20130198759A1 (en) Controlling work distribution for processing tasks
US9513923B2 (en) System and method for context migration across CPU threads
US8413151B1 (en) Selective thread spawning within a multi-threaded processing system
US8417735B1 (en) Instruction-efficient algorithm for parallel scan using initialized memory regions to replace conditional statements

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120110

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120410

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120413

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120419

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

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

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

Free format text: PAYMENT UNTIL: 20150713

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5035277

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250