JP5876458B2 - Simdベクトルの同期 - Google Patents

Simdベクトルの同期 Download PDF

Info

Publication number
JP5876458B2
JP5876458B2 JP2013240725A JP2013240725A JP5876458B2 JP 5876458 B2 JP5876458 B2 JP 5876458B2 JP 2013240725 A JP2013240725 A JP 2013240725A JP 2013240725 A JP2013240725 A JP 2013240725A JP 5876458 B2 JP5876458 B2 JP 5876458B2
Authority
JP
Japan
Prior art keywords
source operand
data elements
data
mask
instruction
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.)
Expired - Fee Related
Application number
JP2013240725A
Other languages
English (en)
Other versions
JP2014059902A (ja
Inventor
ラジェワラ、ラヴィ
ティ. フォアシス、アンドリュー
ティ. フォアシス、アンドリュー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2014059902A publication Critical patent/JP2014059902A/ja
Application granted granted Critical
Publication of JP5876458B2 publication Critical patent/JP5876458B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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
    • 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/0815Cache consistency protocols

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Multi Processors (AREA)

Description

本開示は、マイクロプロセッサ及びその他のプロセッシングデバイスに関し、より詳細には、SIMDベクトルの同期に関する。
例えば、マルチスレッドプロセッサ、複数のプロセッシングデバイス及び/又はマルチコアプロセッサを組み込んだシステムにおける、複数スレッド及び/又はプロセッシングユニット(以下、エージェントと称する)は、しばしば、システム内に格納されているリソース及びデータを共有する必要が生じる。エージェントが最近の及び最新のデータにアクセスすることを確実にし、また、エージェントが、別のエージェントと現在関連付けられているデータにアクセスし及び変更を行わないように対策がとられている。また、データ及びリソース共有を複雑にしている要因として、現代のプロセッシングデバイスは、1以上の専用キャッシュメモリを含むことが挙げられる。マルチプロセッサ及びマルチコアシステム内では、複数のオンチップキャッシュは、多くの場合−現実的には通常、データアイテムの複数のコピーを収容する。したがって、エージェントがデータアイテムのコピーにアクセスする場合、更新された又は有効なデータ値が読み出されることが保証される。
これらのシステムにおいては、"キャッシュコヒーレンシ(coherency)"が維持される。キャッシュコヒーレンシとは、キャッシュメモリから書き出される又は読み込まれるデータの同期のことを指し、スレッド又はプロセッサによってアクセスされるキャッシュに格納されるあらゆるデータアイテムが、そのデータアイテムの最近(most recent)のコピーとなるように同期を行う。また、キャッシュからメインメモリへと書き戻されるあらゆるデータ値は、最新(most current)データとなる。
キャッシュコヒーレンシを維持し、エージェントがデータアイテムを必要とする時に、そのデータアイテムの最新の値がアクセスされるのを確実にする1つの方法として、セマフォ(semaphore)(例えば、フラグ又はロック(lock))の実装がある。ロックは、例えば、(読み込みオペレーションにおいて)エージェントによるメモリからの特定のデータアイテムの要求に応答して、プロセッサ及び/又はスレッド間の同期を確かにするプロセスを含む。一般的に、ロックは、読み出し(read)/読み込み(load)命令、データアイテムを変更する命令、及び、書き込み(write)/格納(store)命令を含む、命令のセットと関連付けられる。本明細書では、"ロックシーケンス"又は"ロックオペレーション"とも称されるロックは、例えば、データを格納するメモリロケーションのオーナーシップを取得した後、その他のプロセスがそのデータの操作を行うことを防ぐと同時に、そのデータに対して不可分操作(atomic operation)を実行し、不可分操作が実行された後にメモリロケーションのオーナーシップを解除することを含んでもよい。不可分操作とは、中断されず、連続的な態様で実行されて、完結される又は全く完結されないことが保証されている(すなわち、オペレーションは分割できない)オペレーションのことである。
コンピューティングシステムのブロック図である。 図1に示すようなプロセッシングデバイスの概略図である。 単一命令複数データ(SIMD)ベクトル比較/交換(compare-and-exchange)命令のエンコーディングスキームを示した図である。 図3に示した命令フォーマットを実装するコンピュータシステムの第1の例を示したブロック図である。 図3に示した命令フォーマットを実装するコンピュータシステムの第2の例を示したブロック図である。 図3に示した命令フォーマットを実装するコンピュータシステムの第3の例を示したブロック図である。 図3に示した命令フォーマットを実装するコンピュータシステムの第4の例を示したブロック図である。
その他の特徴及び利点が、以下の詳細な説明、図面及び特許請求の範囲から明らかとなるであろう。
以下の詳細な説明では、明細書に記載される例の完全な理解を提供するべく、特定の命令、命令形式、レジスタ及びメモリ等のデバイス等、多くの詳細事項が記される。しかしながら、これら詳細事項がなくとも本発明を実施可能であることは、当業者にとって明らかである。
セマフォがロックされているか(及び/又は、ロックするようにする)を判断する1つの方法は、読み出し−変更―書き込み(read-modify-write)シーケンス(又はオペレーション)の利用である。しかしながら、読み出し−変更―書き込みの実装では、セマフォメカニズム自体の取得及び解放の問題がある。すなわち、プロセッサが共有されているメモリ空間の制御権を得ようと試みる場合、プロセッサは、最初にロック値を読み出し、その値を確認及び変更(許可される場合)した後、変更値をロックに書き戻す。別のプロセッサがロック値を変更してしまうことを防ぐには、通常、読み出し−変更―書き込みオペレーションを不可分操作(すなわち、一旦実行を開始したら、中断されることなく完了される)として実行されることが望ましい。不可分操作を使用することにより、プロセスは、セマフォを取得(読み出し)して、値を変更し(許可される場合)、書き込みを開始することによりセマフォを解放して、別のプロセスがロックを取得するのを試みる前にオペレーションを完結させる。
図1に示すように、コンピュータシステム10は、バス13によってメモリ12(例えば、レジスタ、キャッシュ、RAM等)と結合された複数のプロセッシングユニット11(例えば、プロセッサ、コア、実行ユニット等)を有する。複数のプロセッシングユニット11のうちの1以上が、1以上のスレッドと関連付けられる。コンピュータシステム10は、好適な数のプロセッシングユニット11を含み、プロセッシングユニットはそれぞれ、好適な数のスレッドを有する。複数のプロセッシングユニット11はそれぞれ、別個の集積回路デバイスの一部を構成してもよい、又は、複数のプロセッシングユニット11の全て(又はその一部)が、1つのダイ上に形成されていてもよい。特定のコンピュータシステムでは、4つのプロセッシングユニット11(P1、P2、P3及びP4と称される)が、システム10の一部として示されている。4つのプロセッシングユニット11の全てが、メモリ12、具体的には、メモリ12内の共有メモリ空間15と結合される。
メモリ12は、様々な態様で構成することができる。図では1つのメモリとして示されているが、メモリ12は、複数の内部メモリ及び外部メモリを含んでもよい。具体的な例として、4つのプロセッシングユニット11の全てがメモリ12にアクセスし、及び、共有空間15と称されるメモリ12の部分は、1以上のプロセッシングユニット11によってアクセスされる。メモリ12内にその他の共有空間が存在してもよく、2以上のプロセッシングユニット11が、このような共有空間にアクセスする能力を有する。メモリ12の共有されない空間は、通常は、1つのプロセッシングユニット11のみによってアクセスされる空間として分類される。
図1に示すコンピュータシステム10は、コンピュータシステムの一例であり、簡略化のために図示されていない別の構成要素を含んでもよい。例えば、コンピュータシステム10は、ダイレクト・メモリ・アクセス(DMA)コントローラ、ネットワークインターフェース(例えば、ネットワークカード)、1以上のプロセッシングユニット11と関連付けられたチップセット、及び、更なる信号ライン及びバスを含んでもよい。コンピュータシステム10は、図1に示されている全ての構成要素を必ずしも含まなくてもよい。
図1において、採用されているセマフォはロック(又はロック変数)16であり、ロック16は、1以上の対応する共有空間15(点線14で示されている)への制御アクセスに割り当てられている。ロック16は、共有空間15へのアクセスの取得と関連付けられている値を収容するべく割り当てられているメモリ内の特定のロケーションである。そして、複数のプロセッシングユニット11のうちの1つが共有スペース15へアクセスするためには、当該プロセッシングユニットは、最初に対応するロック16にアクセスした後に、ロックロケーション16に格納されているデータのステート(値)を検証(test)する。2つの値が、単純な形式で、ロック16に割り当てられる。第1の値は、共有スペースがアクセス可能であることを示し、第2の値は、共有スペースが現在使用されておりアクセス不可能であることを示す。単純な実施形態では、ビットステータス1及び0を使用して、ロック16についてロックされている状態とロックされていない状態とを表すことができる。
実際のロック値及びロック16に対するロックステートは、設計の一つの選択肢であり、様々な変形例が考えられることは明らかである。ロック16のロケーションは、必ずしもメモリ12内にある必要はない。更に、図1に示すように、メモリ12は、様々なメモリデバイスのうちの1つであってもよい。また、複数のプロセッシングユニット11の1以上を、メモリにアクセスするメモリアクセスデバイス(ダイレクト・メモリ・アクセス・コントローラ等のデバイス)と置き換えることもできる。これらの例において、デバイスは、共有スペース15へのアクセスを取得するために、本命令書に記載される複数のプロセッシングユニット11と同様に機能する。また、1つのバス13のみが示されているが、バス13が様々なデバイスを結合させることから、複数のバスが同じ階層レベル又は異なる階層レベルに存在してもよい。
データ転送のために、複数のプロセッシングユニット11がメモリ12へのアクセスを行う場合は、通常、読み込み(ロード)及び格納(ストア)オペレーションが使用される。ロードオペレーションは、アクセスされるメモリにおけるロケーションからメモリの内容を転送し、ストアオペレーションは、アクセスされるメモリロケーションへとデータを転送する。したがって、ロード/ストアオペレーションは、メモリ12及びロック16にアクセスし、複数のプロセッシングユニット11とメモリ12との間のデータ転送に使用される。ロードアクセス及びストアアクセスは、それぞれ、読み出し(リード)アクセス及び(書き込み(ライト)アクセスとも称される。
図1及び図2に示すように、コンピュータシステム10は、システムバス22を介して、複数のプロセッシングユニット11と結合されるリードオンリーメモリ(ROM)31及びメインメモリ18を含み、メインメモリ18としては、例えば、好適な種類のランダムアクセスメモリ(RAM)が含まれる。プロセッシングユニット11はまた、システムバス22によって接続されるデータ記憶デバイス30を含む。データ記憶デバイス30は、例えば、ハードディスクドライブのような、あらゆる好適な不揮発性メモリを含む。コンピュータシステム10は更に、フロッピー(登録商標)ディスクドライブ、CD ROMドライブ、及び/又は、USBドライブのような取り外し可能記憶媒体32を含む。
図2では、プロセッシングユニット11が、1以上のバスによって相互接続される複数の構成要素を含み、これらのバスは、図2では、ローカルバス19として記号で示されている。ローカルバス19、すなわち、プロセッシングユニット11の構成要素は、バスインターフェースユニット23と結合される。バスインターフェースユニット23は、プロセッシングユニット11をシステムバス22と接続し、プロセッシングユニット11とメインメモリ18との間、及び、プロセッシングユニット11と外部キャッシュ20との間の情報伝達を可能としている。
プロセッシングユニット11は、ローカルバス19と結合された命令デコーダ21を含む。命令デコーダ21は、プロセッシングユニット11において実行されるプログラム又はコードと関連付けられた命令(又は複数の命令)を受信し、受信した命令を、1以上の機械レベル命令/オペレーション(μオペレーション)に分解する。プロセッシングユニット11は、プログラムと関連付けられた1以上の命令を受信してもよく、コンピュータシステム10の別のプロセッシングユニット11は、同じプログラムと関連付けられた1以上の命令を受信してもよい。そして、プログラムは、複数のプロセッシングユニット11上で実行されてもよい。
プロセッシングユニット11は更に、例えば、データアクセス制御ユニット(DAC)24、メモリオーダリングバッファ(MOB)26、レジスタファイルユニット29及び機能ユニット27を含む複数の実行ユニットを含む。
レジスタファイルユニット29は、複数のレジスタを含み、それぞれが、16、32、64、128、256又は512ビットの記憶領域を有する。さらに、レジスタファイル29は、それぞれが1以上のレジスタを有する1以上のレジスタファイルを含んでもよい。機能ユニット27は、例えば、算術ユニット、論理ユニット及び/又は浮動小数点ユニットのような1以上の機能ユニットを含む。MOB26は、ロード命令及びストア命令が適切な順番になるようにし、メモリ階層構造(すなわち、コンピュータシステム10内の様々なレベルのメモリ、L0キャッシュ25、L1キャッシュ28、外部キャッシュ20、メインメモリ18及びデータ記憶デバイス30を含む)内におけるこれらのトランザクションの適切なシーケンスを提供する。L0キャッシュ25及びL1キャッシュ28のそれぞれは、機能ユニット27によって最近アクセスされたデータ又はアクセスされると期待される最近のデータを格納することができる。機能ユニット27が要求するデータのアイテムが、キャッシュメモリ25、28の一方に存在する場合には、キャッシュ"ヒット(hit)"が発生するが、要求されたデータがキャッシュに存在しない場合には、キャッシュ"ミス"が発生する。キャッシュメモリの1以上(例えば、L0キャッシュ25)が、DAC24と結合されてもよい。DAC24は、キャッシュミスになる全てのトランザクション、及び、特別な扱いを必要とするその他のトランザクションを制御する。上記したロックは、DAC24及びプロセッシングユニット11のその他の構成要素によって特別な対応が必要なトランザクションの一種である。μオペレーションが、例えば、算術操作に対応する場合には、μオペレーションが機能ユニット27に送信されて、機能ユニットが算術操作を実行する。μオペレーションが、例えば、メモリ参照命令、例えば、ロード又はストア、に対応する場合には、そのμオペレーションはMOB26に送信される。
図2に示したプロセッシングユニット11は、プロセッシングデバイスの一例を示すことを目的としており、プロセッシングユニットは、図に示されていないその他の数多くの構成要素を含んでもよい。理解を容易にするために、これらの構成要素については、図示を省略している。例えば、プロセッシングユニット11は、アドレス生成ユニット、リザベーションステーション(reservation station)、リオーダバッファ(reorder buffer)、スケジューラ、セグメント及びアドレス変換ユニット、トランスレーション・ルックアサイド・バッファ、ページミスハンドラ、及び/又は、内部クロック回路を含んでもよい。図2では別々の要素として示されている構成要素を、組み合わせる及び/又は共有回路としてもよい。本明細書に記載される実施形態は、特定のアーキテクチャ又は配置に限定されず、また、これらのアーキテクチャ又は配置を説明するのに使用される特定の言葉によっても限定されない。また、開示される実施形態は、そのアーキテクチャ又は言葉に関係なく、あらゆる種類のプロセッシングデバイス上で実行可能であると考えられる。
実行されるべくスケジュールされたμオペレーションの1以上は、ロックされたμオペレーションを含んでもよい。上記したように、ロック(lock)は、プロセッサ及び/又はスレッド間の同期を確実にする態様で実行されるオペレーション(例えば、ロード、変更及びストア)のシーケンスに対応する。
図3には、読み出し(read)−変更(modify)−書き込み(write)オペレーションを実行する命令が示されている。命令40は、5つのオペランド41−45を含む1つの不可分命令である。オペコード(Opコード)オペランド41は、これが、VCMPXCHG命令であることを特定する。オペランド42−44は、SRC1/DEST、SRC2、SRC3と関連付けられるソース及び宛先(destination)オペランド、及び、ある実装形態では、マスク・ストレージ・ロケーション(MSK)オペランド及び/又はオフセット(又は"即値(immediate)")オペランド45に対応している。オフセット又は即値は、メモリ12を呼び出す時に、(SRC1のような)ベースアドレスからのオフセットを提供するのに使用される。以下に記す命令は、このようなオフセットを有してもよいが、オフセットは図示していない。マスク記憶ロケーション45を規定する実装は、SRC1/DESTオペランドによって参照される記憶ロケーションに格納されている各データ要素に対応するマスク要素を格納するレジスタ又はメモリロケーションを参照する。
命令40に応答して、プロセッシングユニット11は、第1ソースデータを読み出し、読み出したデータを別のソースデータと比較して、比較結果が予め定められた条件(真又は一致の条件等)を満たす場合には、ある変更値が第1ソースデータの元のロケーションであってもよいロケーションに書き込まれる。予め定められた条件を満たさない場合には、そのロケーションにおける元のデータは、変更されない。命令はこれら3つのソースオペランド(SRC1、SRC2及びSRC3のようなオペランド)及び1つの宛先オペランド(DESTのようなオペランド)を使用して、命令の実行において使用される様々な情報のロケーションを提供する。オペレーション固有レジスタ使用して、命令が実行される時に宛先データを格納する及び1以上のソースデータを提供してもよく、これにより、実際の命令フォーマットにおいて明示的にオペランドを規定する必要がなくなる。更に、一例では、SRC1オペランド及びDESTオペランドとは、同じ記憶ロケーション(SRC1/DEST)を参照する。
命令40の実行の前に、SRC1、SRC2及びSRC3が、レジスタファイルユニット29内のレジスタにロードされる(読み込まれる)。例えば、SRC1/DESTオペランドによって規定される1ロケーションに格納される値を安全に更新するために、値がSRC2オペランドによって規定されるロケーションに最初に読み込まれて、SRC3オペランドによって規定されるロケーションに置き換え値が読み込まれる。そして、不可分比較/交換オペレーションが実行されて、SRC1/DESTオペランドと関連付けられている現在の値と、SRC2オペランドと関連付けられている値とが比較される(すなわち、別のエージェントによる変更のために、現在の値は最初にコピーされた値とは異なっている可能性がある)。値の変更がなかった場合には、その値は、SRC3オペランドと関連付けられている値で置き換えられて、更新が成功したことを示すべく、ゼロフラグが設定される。最初のコピーと比較/交換(compare-exchange)オペレーションとの間に、別のエージェントが値を変更していた場合には、現在の値は置き換えられず、更新が失敗したことを示すべくゼロフラグがクリアされる。
図4のブロック図には、命令40が実行される時の情報のフローが示されている。プロセッシングユニット11は、実行ユニット46(例えば、図2のDAC24)、レジスタファイル29、BIU23及びデコーダ21を含み、これらは全てローカルバス19によって結合されている。レジスタファイル29は、様々なオペレーションを実行するために、実行ユニット46によってアクセスされる複数のレジスタを含む。図4に示すように、VCMPXCHG命令40は、実行ユニット46内に存在するように示されており、点線が、命令のオペランドから対応するSRC1、SRC2、SRC3及びDESTと関連付けられているレジスタに向かって示されている。複数のレジスタが、レジスタファイル29内に存在する。実行ユニット46がオペレーションを実行するために、デコーダ21を使用して、(VCMPXCHG命令40を含む)様々な命令をデコードする。
図1及び図2で記載したメモリ12が、バス19及び/又はバス22によってBIU23と結合されている様子が示されている。また、プロセッシングユニット11とメモリ12との間のデータ転送が、BIU54a又はローカルバス19を介して発生してもよい。VCMPXCHG命令40を利用したプログラムルーチンは、メモリ12であってもよい、又は、メモリ12を含むメモリ内に存在してもよい。
次の表に示す疑似コードには、VCMPXCHG命令40がどのように動作するかの例が示されている。その他の疑似コード、言語、オペレーション、オペレーションの順番及び/又は数を使用してもよい。
Figure 0005876458
表には、VEX.128及びVEX.256の具体的な例が示されており、ロック値が、SRC1/DESTによって参照される512ビット記憶ロケーション(例えば、64バイトキャッシュライン又はレジスタ)のビット[127:0]及びビット[255:0]にそれぞれ格納される。一実施形態において、SRC1/DESTによって参照されるロック値と、これらに対応する共有記憶ロケーション15との間には、1対1の関係が存在する。例えば、SRC1/DESTは、16個の8ビットロック値(128ビット)を参照して、ロック値各々は、キャッシュライン又はSIMDレジスタ内の16個の記憶ロケーションのうちの1つに対応している。これに替えて、SRC1/DESTは、32個の8ビットロック値(256ビット)を参照してもよく、8ビットロック値の各々は、キャッシュライン又はSIMDレジスタ内の32個の記憶ロケーションのうちの1つに対応する。
上記の例に戻り、SRC1/DESTとSRC2との比較結果は、ロック値が変更されたかを示す。真(true)の条件は、ロックが変更されて、ロックがアンロック状態であることを示す。この条件を満たす場合、SRC3によって参照される値が、SRC1/DESTに書き込まれて、ロック値がロックされた状態に変更され、その他のエージェントが共有空間へアクセスするのを防ぐ。その後、オペレーションが成功したことを示すべく、ゼロフラグ(ZF)が設定される。
偽(false)の条件は、1以上のロックが変更され(ロックされて)、別のエージェントが共有スペースのオーナーシップを取得したことを示す。条件が偽である場合、SRC1/DESTによって参照される値が、SRC2に格納されて、オペレーションが成功しなかったことを示すべくゼロフラグがクリアされる。そして、オペレーションから戻る前に、SRC2の上位バイトがクリアされる。
一般的に、アクセスが最初に拒否され、問い合わせを行っているエージェントが、アクセスを取得するまでアクセスへのリトライを継続する。ある実装形態では、外側ループが、不可分でないロードを含み、VCMPXCHG命令40を再実行する前に検証を行う。プロセッサが共有メモリ空間15へのアクセスを一旦完了させると、プロセッサは、共有メモリ空間15に対する制御を解放して、ロック16の書き込みサイクルでアンロックし、その他のエージェントが共有メモリ空間15へのエントリを取得できるようにする。しかしながら、プロセッサがこのように共有メモリ空間を開放する構成は設計選択事項であり、システム構成によって決定されてもよい。
ある実装形態では、VCMPXCHG命令40は、それぞれが、複数のマスク要素を有するマスクベクトルを含み、マスク要素各々はSRC1/DESTによって参照される複数のデータ要素のうちの1つに対応する。マスクベクトル記憶ロケーションは、レジスタファイルユニット29内のレジスタであってもよく、例えば、シャドウレジスタ(shadow register)、制御レジスタ、フラグレジスタ、汎用レジスタ、SIMDレジスタ又はその他の好適なレジスタであってもよい。一実施形態において、SRC1/DESTによって参照されるデータ要素と、マスクレジスタ格納されている対応するマスク要素との間には、一対一の関係が存在する。マスク要素又はマスク値は、(例えば、対応する又は示されたレジスタロケーションにおける)対応するデータ要素が比較された及び/又は変更されたことを示す、フラグ、マーカー、タブ、インジケータ及び/又はその他の数、ビット及び/又はコードを含んでもよい。例えば、値"1"を有するマスク要素は、対応するデータ要素が変更されることを示し、それ以外の場合には、値"0"が使用されてもよい。無論、その他の数又はフラグを使用してもよい。
表2には、マスクされたVCMPXCHGD及びVCMPXCHGQ命令の例がそれぞれ、16幅の512バイトベクトル、及び8幅の512バイトベクトルの疑似コードで示されている。マスクされたコンペア(比較)実装では、アクティブな要素のみが比較及び更新される。
Figure 0005876458
表2に示した具体的なVCMPXCHGD及びVCMPXCHGQの例において、変数ALL CMPS SUCCEEDが最初に1にプリセットされる(すなわち、真の状態)。設定されると、アクティブなマスク要素の各々(例えば、例えば、2進数の1、又は、16進数の0x01、0xFF又は0x80を含む格納されている特定の値を有するマスク要素)に対して、SRC1/DESTが参照する対応する記憶ロケーションと、SRC2における対応するビットによって参照される値との比較が行われる。マスクが使用されない場合、SRC1/DESTによって参照される記憶ロケーションの各々は、SRC2における対応するビットによって参照される値と比較される。
SRC1/DESTの値と、SRC2の対応する値との間の比較結果は、特定のロック値が変更されたか否かを示す。上記の例では、真の条件(すなわち、一致しない条件)は、ロックが変更され、別のエージェントが、共有記憶ロケーションのオーナーシップを取ったことを示す。参照される記憶ロケーションのうちの何れか1つがこの条件を満たす場合、ALL CMPS SUCCEEDがクリアされて、全ての比較が成功しなかったことが示される。その後、ゼロフラグがクリアされて、アクティブなマスク要素各々に対して、SRC1/DESTによって参照される対応する記憶ロケーションに格納されている値が、SRC2の対応するビットにロードされる。
比較結果が偽である(すなわち、アクティブなマスク要素の各々について、SRC1/DESTによって参照される対応する値が、SRC2における対応する値と一致する)場合には、ALL CMPS SUCCEEDは、変わることなく設定され続ける。その後、ゼロフラグ(ZF)が設定されて、アクティブなマスク要素各々について、SRC3における対応する記憶ロケーションに格納された値が、SRC1/DESTにおける対応するビットにロードされ、その他のエージェントが共有空間へアクセスすることを防ぐべく、ロック値がロックされた状態に変更される。
図5のブロック図は、命令40が実行される時の情報のフローの別の例を示している。図5に示すように、VCMPXCHG命令40は、実行ユニット46内に存在するように示されており、点線が、命令のオペランドから対応するSRC2、SRC3及びMSKと関連付けられているレジスタに向かって示されている。この例では、マスク記憶ロケーション(MSK)は、マスクレジスタであり、SRC1/DESTと関連付けられている記憶ロケーションは、L1キャッシュである。レジスタは、レジスタファイルユニット29内に存在する。
命令40の実行の前に、SRC1がL1キャッシュにプリフェッチされて、SRC2、SRC3及びMSKのデータが、レジスタファイルユニット29内のレジスタにロードされる。マスクレジスタは、SRC1/DESTオペランドと関連付けられている記憶ロケーションにおけるデータ要素各々に対応する複数のマスク要素を格納する。また、比較値が、最初にSRC2オペランドによって規定されるロケーションに読み込まれて、置換値が、SRC3オペランドによって規定されるロケーションに読み込まれる。そして、命令40が実行されて、実行ユニット46は、SRC1/DESTと関連付けられた対応するデータ要素とSRC2オペランドと関連付けられた対応するデータ要素とを比較し、一致する場合には、SRC1/DESTからのデータ要素を、SRC3からの対応するデータ要素で置き換える。一致しない場合には、命令40の実行により、実行ユニット46がSRC2データ要素を、対応するSRC1/DESTデータ要素で置き換える。
ある実装形態では、SRC1/DESTデータ要素とSRC2データ要素との比較は、対応するマスク要素がアクティブである場合にのみ実行される。ある実装形態では、実行ユニット46は更に、対応するマスク要素がアクティブである対応するデータ要素の各組において一致が存在する場合にはフラグを設定し、対応するマスク要素がアクティブである対応するデータ要素の複数の組のうちの何れかにおいて一致が存在しない場合には、フラグをクリアする。また、ある実装形態では、SRC1/DESTデータ要素の、対応するSRC3データ要素による置き換えは、各SRC1/DESTデータ要素に対応するマスク要素がアクティブである場合にのみ実行される。また、ある実装形態では、SRC2データ要素の対応するSRC1/DESTデータ要素での置き換えは、SRC1/DESTデータ要素に対応するマスク要素がアクティブである場合にのみ実行される。
ある実施形態では、ロックされている状態を示すロック値は、アクティブであるマスク要素を示すマスク値と同様であってもよい(例えば、2進数の1)。この場合、SRC3を、マスクベクトル及びロック値置換ベクトルの両方として使用してもよい。
ある実装形態では、比較/交換オペレーションは、SRC2オペランドと関連付けられている値の更新を行わずに、実行を完了してもよい。その後、フラグ(例えば、ゼロフラグ)の検証が行われ、フラグが、SRC1/DESTオペランドと関連付けられている値に対して更新オペレーションが失敗したことを示している場合には、比較/交換オペレーションの前の段階が繰り返されて、比較/交換オペレーションを再度行う前に、SRC2及びSRC3と関連付けられている値を更新する。
1以上の実施形態が、SIMD命令を格納する有形機械アクセス可能媒体及び/又は機械可読媒体を含む製造物品を含み、SIMD命令は、複数のデータ要素に対するベクトル比較/交換オペレーションを規定しており、複数のデータ要素の各々は、対応するテスト要素、置換要素及びマスク要素を有し、機械(例えば、実行ユニット)によって実行されると、機械に、マスク要素各々がアクティブである場合には、データ要素と対応するテスト要素とを比較させ、全ての比較結果が一致を示しているとの判断に応答して、フラグを設定し、比較されたデータ要素を対応する置換要素で置き換え、全ての比較結果が一致を示していないとの判断に応答して、フラグをクリアし、比較されたテストデータ要素を対応するデータ要素で置き換える。有形媒体は、1以上の固形材料を含んでもよい。媒体は、例えば、機械によってアクセス可能な形式で状態を格納することを提供するメカニズムを含んでもよい。媒体としては、必要に応じて、フロッピー(登録商標)ディスケット、光記憶媒体、光ディスク、CD−ROM、磁気ディスク、磁気光学ディスク、リードオンリーメモリ(ROM)、プログラム可能ROM(PROM)、消去可能−プログラム可能ROM(EPROM)、電気的消去可能−プログラム可能リードオンリーメモリ(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、及びこれらの組み合わせを含んでもよい。
好適な機械としては、これに限定されないが、例えば、汎用プロセッサ、特殊用途プロセッサ(例えば、グラフィックスプロセッサ及び暗号化プロセッサ)、暗号化アクセラレータ、ネットワーク通信プロセッサ、コンピュータシステム、ネットワークデバイス、モデム、パーソナル・デジタル・アシスタンス(PDA)、携帯電話、及び、1以上の実行ユニットを有するその他様々な電子デバイスが含まれる。また、その他の実施形態は、コンピュータシステム、組み込みシステム、又は、実行ユニットを有する及び/又は本明細書に開示される方法を実行するその他の電子デバイスに関する。
図6には、プロセッサ51を含む好適なコンピュータシステム50の一例が示されている。プロセッサは、少なくとも1つのベクトル比較/交換オペレーション53を実行可能な少なくとも1つの実行ユニット52を含む。
プロセッサは、バス(例えば、フロントサイドバス)又はその他のインターコネクト55を介して、チップセット54と結合される。チップセットを介してプロセッサとシステム内のその他の構成要素との間でデータ信号を送信するのに、インターコネクトを使用してもよい。
チップセットは、メモリコントローラハブ(MCH)56として知られるシステムロジックチップを含む。MCHは、フロントサイドバス又はその他のインターコネクト55と結合される。
メモリ58が、MCHと結合される。様々な実施形態において、メモリは、ランダムアクセスメモリ(RAM)を含む。DRAMは、コンピュータシステムの一部で使用されているRAMの一種の例であり、全てのコンピュータシステムで使用されているわけではない。図に示すように、メモリは、1以上の乗算命令及びデータ60のような命令59を格納するのに使用されてもよい。
コンポーネントインターコネクト61も、MCHと結合される。1以上の実施形態において、コンポーネントインターコネクトは、1以上の周辺コンポーネントインターコネクトエクスプレス(PCIe)を含んでもよい。コンポーネントインターコネクトは、チップセットを介した、その他の構成要素とシステムの残りの部分との結合を可能にする。このようなコンポーネントの一例として、グラフィックスチップ又はその他のグラフィックスデバイスが挙げられ、これは必要に応じて設けられる構成であり、必須の構成ではない。
また、チップセットは、入出力(I/O)コントローラハブ(ICH)62を含む。ICHは、ハブインターフェースバス又はその他のインターコネクト63を通じて、MCHと結合する。1以上の実施形態において、バス又はその他のインターコネクト63は、ダイレクト・メディア・インターフェース(DMI)を含んでもよい。
データストレージ(記憶装置)64が、ICHと結合される。様々な実施形態において、データストレージは、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス等、又は、これらの組み合わせを含んでもよい。
第2コンポーネントインターコネクト65も、ICHと結合される。1以上の実施形態において、第2コンポーネントインターコネクトは、1以上の周辺コンポーネント・インターコネクト・エクスプレス(PCIe)インターフェースを含んでもよい。第2コンポーネントインターコネクト65は、チップセットを介した、様々な種類の構成要素とシステムの残りの部分との結合を可能にする。
シリアル拡張ポート66も、ICHに結合される。1以上の実施形態において、シリアル拡張ポートは、1以上のユニバーサル・シリアル・バス(USB)ポートを含んでもよい。シリアル拡張ポートは、チップセットを介した、その他の様々な種類の入出力デバイスとシステムの残りの部分との結合を可能にしてもよい。
必要に応じてICHと結合されてもよいその他の構成要素の例としては、これに限定されないが、オーディオコントローラ、無線送受信機、及び、ユーザー入力デバイス(例えば、キーボード、マウス)が含まれる。
ネットワークコントローラ67も、ICHに結合されてもよい。ネットワークコントローラは、システムをネットワークに接続することを可能にする。
一以上の実施形態において、コンピュータシステムは、ワシントン、リッチモンドに本社を置くマイクロソフトコーポレーションから入手可能なWINDOWS(登録商標)オペレーティングシステムの1バージョンを実行可能であってもよい。これに替えて、例えば、UNIX(登録商標)、リナックス(登録商標)又は組み込みシステムのようなその他のオペレーティングシステムを使用してもよい。
これは、好適なコンピュータシステムの特定の一例に過ぎない。例えば、1以上の別の実施形態において、プロセッサは、複数のコアを有してもよい。その他の例として、1以上の別の実施形態では、MCH56は、物理的にプロセッサ51とオンダイで一体化されていてもよく、プロセッサが、一体化されたMCHを介して、メモリ58と直接結合されていてもよい。更なる例として、1以上の別の実施形態では、その他の構成要素は、例えば、システムオンチップ(SoC)設計を提供するような態様で、プロセッサとオンダイで集積化されていてもよい。更なる別の例として、1以上の別の実施形態では、コンピュータシステムは複数のプロセッサを有してもよい。
図7には、好適なコンピュータシステム70の別の例が示されている。第2の例示的実施形態は、上記のコンピュータシステム50と一部、同様な構成を有する。明瞭化のため、以下では、同様な構成の全てを繰り返して説明せず、違う構成に注目して説明する。
コンピュータシステム50と同様に、コンピュータシステム70は、プロセッサ71、及び、I/Oコントローラハブ(ICH)72を有するチップセット74を含む。コンピュータシステム70はまた、チップセット74と結合された第1コンポーネントインターコネクト81、ICHと結合された第2コンポーネントインターコネクト85、ICHと結合されたシリアル拡張ポート86、ICHと結合されたネットワークコントローラ87、及び、ICHと結合されたデータストレージ84を含む。
プロセッサ71は、マルチコアプロセッサであって、複数のプロセッサコア72−1〜72−Mを含み、ここで、Mは、2以上の整数である(例えば、2、4、7等)。コアはそれぞれ、本明細書に開示したような命令の少なくとも1つの実施形態を実行可能な少なくとも1つの実行ユニットを含んでもよい。図に示すように、コア1は、キャッシュ88(例えば、L1キャッシュ)を含む。その他の複数のコアはそれぞれ同様に、専用キャッシュを含んでもよい。プロセッサコアは、1つの集積回路(IC)チップに実装されてもよい。
プロセッサはまた、少なくとも1つの共有キャッシュ89を含む。共有キャッシュは、コアのようなプロセッサの1以上の構成要素によって使用されるデータ(例えば、命令)を格納してもよい。例えば、共有キャッシュは、プロセッサの構成要素によるアクセスを高速にするために、メモリ78に格納されるデータをローカルにキャッシュしてもよい。1以上の実施形態において、共有キャッシュは、レベル2(L2)、レベル3(L3)、レベル4(L4)又はその他のレベルのキャッシュのような中間レベルのキャッシュ、ラストレベルキャッシュ(LLC)及び/又はこれらの組み合わせを含んでもよい。
プロセッサコア及び共有キャッシュはそれぞれ、バス又はその他のインターコネクト90と結合される。バス又はその他のインターコネクトは、コアと共有キャッシュとを結合して、通信を可能としてもよい。
プロセッサはまた、メモリコントローラハブ(MCH)76を含む。例示した実施形態に示されるように、MCHは、プロセッサ71と集積される。例えば、MCHは、プロセッサコアと共に、オンダイで配置されてもよい。プロセッサは、MCHを介してメモリ78と結合される。1以上の実施形態において、メモリは、DRAMを含んでもよいが、必ずしも必須の構成ではない。
チップセットは、入出力(I/O)ハブ91を含む。I/Oハブは、バス(例えば、クイックパスインターコネクト:QuickPath Interconnect(QPI))又はその他のインターコネクト75を介してプロセッサと結合される。第1コンポーネントインターコネクト81が、I/Oハブ91と結合される。
これは、好適なシステムの1つの特定な例である。当技術分野において、ラップトップ、デスクトップ、携帯型PC、パーソナル・デジタル・アシスタント、エンジニアリングワークステーション、サーバー、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤー、携帯デバイス、及び、その他の電子デバイスにおいて知られているシステム設計及び構成が好適である。一般的に、本明細書に開示されるようなプロセッサ及び/又は実行ユニットを組みこむことが可能な多様なシステム又は電子デバイスが、好適である。
上記の説明では、説明の目的から、本発明の実施形態の完全な理解を提供するべく、数多くの詳細事項が記載されている。しかしながら、当業者であれば、これら詳細事項の一部がなくとも1以上のその他の実施形態を実施可能であることは理解できる。上記の特定の実施形態は、本発明を限定するのでなく、本発明の実施形態を例示するために提供されている。本発明の範囲は、上記で提供された具体的な例によって決定されるのではなく、添付の特許請求の範囲によってのみ決定される。また、説明を不明瞭にしない目的から、他の場合においては、周知の回路、構造、デバイス及びオペレーションについては、ブロック図の形式で示され、その詳細な説明を省略している。さらに、適切であると考えられる場合、同様な特性を有する場合がある対応する又は類似する要素を示すのに、参照番号及び参照番号の末尾部分が図面間で繰り返し使用されている。
あるオペレーションは、ハードウェアコンポーネントによって実行されてもよい、又は、命令でプログラムされた回路又はハードウェアにオペレーションを実行させる機械実行可能命令に実現されてもよい。回路は、例を挙げると、汎用プロセッサ、特殊用途プロセッサ又はロジック回路を含んでもよい。オペレーションは、必要に応じて、ハードウェア及びソフトウェアの組み合わせによって実行されてもよい。実行ユニット及び/又はプロセッサは、機械命令から導出された1以上の信号又は機械命令に応答して、命令が特定した結果のオペランドを格納する固有の又は特定の回路又はその他のロジックを含んでもよい。
また、「一実施形態」、「ある実施形態」、「1以上の実施形態」等は、本発明の実施形態の実行において、特定の特徴が含まれてもよいことを意味する。同様に、開示を簡潔にし、様々な発明の側面の理解を助けるべく、記載される様々な特徴は、1つの実施形態、図面又はその説明に共に組み込まれている場合がある。しかしながら、開示の方法は、本発明が、請求項各々に明示的に記載されるよりも多い数の特徴を必要とすることを意図していると解釈されるべきではない。添付の特許請求の範囲は、開示された1つの実施形態の全ての特徴よりも少ない発明の側面を反映している。したがって、詳細な説明に続く特許請求の範囲は、明示的に詳細な説明の章に組み込まれ、請求項の各々は、発明の別個の実施形態として独立している。
本発明の複数の実施形態が記載された。しかしながら、本発明の範囲及び精神の範囲内において、様々な変形が可能であることは明らかである。例えば、コンピュータシステムは、複数のプロセッサ又はメモリアクセスデバイスを有するコンピュータシステムに限定されない。本発明は、読み出し−修正−書き込み命令が実装される1つのプロセッサシステムにおいて、容易に利用される。
また、メモリの共有空間へのアクセス制御は、上記の例で説明した検証及び設定シーケンス以外の手段によっても達成可能である。例えば、アクセス毎に特定のカウント値でインクリメントされる単純なカウンタを使用することができる。
好ましい実施形態のVCMPXCHG命令は、読み出し−変換−書き込みオペレーションを実行するが、変換及び書き込み段階は、基本的に1つの段階で達成されることは理解される。元のデータを読み出した後に変更値を計算して、変更値を書き込む替わりに、VCMPXCHG命令の変更値が、命令による使用のために、予め設定される。変更値を使用するか否かは、比較によって取得される決定に依存するが、現在の変更値(SRC3)を、すぐに、宛先に書き込んで、宛先値を変更してもよい。
そして、マスクを利用するベクトル比較/交換オペレーションを実装する技術が記載された。本明細書に記載されたVCMPXCHG命令及び実装は、別の可能性においても利用することができ、共有メモリ空間へのアクセス制御機能に必ずしも限定される必要はない。例えば、VCMPXCHG命令は、SIMDオペレーションが複数のデータ要素について実行され、オペレーションの間に別のエージェントによってデータ要素が変更されていない場合には、共有メモリ空間にその結果が書き込まれるだけである投機的実行に適用してもよい。その他の実施形態が、添付の特許請求の範囲内に含まれる。

Claims (16)

  1. 第1の複数のデータ要素を含む第1ソースオペランド、第2の複数のデータ要素を含む第2ソースオペランド、および、第3の複数のデータ要素を含む第3ソースオペランドを示す命令をデコードするデコーダと、
    前記デコーダに接続され、前記デコーダによりデコードされた前記命令を実行する実行ユニットと、
    を備え、
    前記実行ユニットは、
    前記第1ソースオペランドにおける前記第1の複数のデータ要素のそれぞれが、前記第2ソースオペランドにおける前記第2の複数のデータ要素のうちの対応するデータ要素と一致した場合に、前記第3ソースオペランドにおける前記第3の複数のデータ要素のそれぞれをデスティネーションへと格納し、
    前記第1ソースオペランドにおける前記第1の複数のデータ要素のうちの少なくとも1つが、前記第2ソースオペランドにおける前記第2の複数のデータ要素のうちの対応するデータ要素と一致しない場合に、前記第1ソースオペランドにおける前記第1の複数のデータ要素を、前記第2ソースオペランドにより参照される記憶ロケーションに格納する
    プロセッサ。
  2. 前記実行ユニットは、
    前記第1ソースオペランドにおける前記第1の複数のデータ要素のそれぞれが、前記第2ソースオペランドにおける前記第2の複数のデータ要素のうちの対応するデータ要素と一致した場合に、ゼロフラグをセットし、
    前記第1ソースオペランドにおける前記第1の複数のデータ要素のうちの少なくとも1つが、前記第2ソースオペランドにおける前記第2の複数のデータ要素のうちの対応するデータ要素と一致しない場合に、ゼロフラグをクリアする
    請求項1に記載のプロセッサ。
  3. 前記デスティネーションは、前記第1ソースオペランドと同一の記憶ロケーションを含む請求項1または2に記載のプロセッサ。
  4. 前記第1ソースオペランドは、128ビットを含む請求項1から3のいずれか一項に記載のプロセッサ。
  5. 前記第1ソースオペランドは、256ビットを含む請求項1から4のいずれか一項に記載のプロセッサ。
  6. 前記命令の実行の前に、前記第1ソースオペランドがキャッシュにプリフェッチされ、
    前記実行ユニットは、前記第1ソースオペランドにおける前記第1の複数のデータ要素のそれぞれが、前記第2ソースオペランドにおける前記第2の複数のデータ要素のうちの対応するデータ要素と一致した場合に、前記第3ソースオペランドにおける前記第3の複数のデータ要素を、前記キャッシュ上の前記第1ソースオペランドにより参照される記憶ロケーションに格納する
    請求項1から5のいずれか一項に記載のプロセッサ。
  7. 第1の複数のデータ要素を含む第1ソースオペランド、第2の複数のデータ要素を含む第2ソースオペランド、第3の複数のデータ要素を含む第3ソースオペランド、および、それぞれがアクティブまたは非アクティブを示す複数のマスク要素を含むマスクベクトルを示す命令をデコードするデコーダと、
    前記デコーダに接続され、前記デコーダによりデコードされた前記命令を実行する実行ユニットと、
    を備え、
    前記実行ユニットは、
    前記マスクベクトルにおけるアクティブなマスク要素の各々に対して、前記第1ソースオペランドにおける前記第1の複数のデータ要素のそれぞれが、前記第2ソースオペランドにおける前記第2の複数のデータ要素のうちの対応するデータ要素と一致した場合に、前記第3ソースオペランドにおける前記第3の複数のデータ要素のうちアクティブなマスク要素に対応するデータ要素のそれぞれをデスティネーションへと格納し、
    前記マスクベクトルにおけるアクティブなマスク要素の各々に対して、前記第1ソースオペランドにおける前記第1の複数のデータ要素のうちの少なくとも1つが、前記第2ソースオペランドにおける前記第2の複数のデータ要素のうちの対応するデータ要素と一致しない場合に、前記第1ソースオペランドにおける前記第1の複数のデータ要素のうちアクティブなマスク要素に対応するデータ要素を、前記第2ソースオペランドにより参照される記憶ロケーションに格納する
    プロセッサ。
  8. 前記実行ユニットは、
    前記マスクベクトルにおけるアクティブなマスク要素の各々について、前記第1ソースオペランドにおける前記第1の複数のデータ要素のそれぞれが、前記第2ソースオペランドにおける前記第2の複数のデータ要素のうちの対応するデータ要素と一致した場合に、ゼロフラグをセットし、
    前記マスクベクトルにおけるアクティブなマスク要素の各々について、前記第1ソースオペランドにおける前記第1の複数のデータ要素のうちの少なくとも1つが、前記第2ソースオペランドにおける前記第2の複数のデータ要素のうちの対応するデータ要素と一致しない場合に、ゼロフラグをクリアする
    請求項7に記載のプロセッサ。
  9. 前記デスティネーションは、前記第1ソースオペランドと同一の記憶ロケーションを含む請求項7または8に記載のプロセッサ。
  10. 前記第1ソースオペランドは、512ビットを含む請求項7から9のいずれか一項に記載のプロセッサ。
  11. 前記第1ソースオペランドは、32ビットのデータ要素または64ビットのデータ要素を含む請求項7から10のいずれか一項に記載のプロセッサ。
  12. 前記命令の実行の前に、前記第1ソースオペランドがキャッシュにプリフェッチされ、
    前記実行ユニットは、前記第1ソースオペランドにおける前記第1の複数のデータ要素のそれぞれが、前記第2ソースオペランドにおける前記第2の複数のデータ要素のうちの対応するデータ要素と一致した場合に、前記第3ソースオペランドにおける前記第3の複数のデータ要素を、前記キャッシュ上の前記第1ソースオペランドにより参照される記憶ロケーションに格納する
    請求項7から11のいずれか一項に記載のプロセッサ。
  13. 前記デコーダは、前記第3ソースオペランドを、前記マスクベクトルとしても使用する前記命令をデコードする請求項7から12のいずれか一項に記載のプロセッサ。
  14. 第1の複数のデータ要素を含む第1ソースオペランド、第2の複数のデータ要素を含む第2ソースオペランド、および、第3の複数のデータ要素を含む第3ソースオペランドを示す命令をデコードするデコーダと、
    前記デコーダに接続された実行ユニットと、
    を備え、
    前記命令は、前記第3ソースオペランドを、前記第3の複数のデータ要素のそれぞれがマスク要素として用いられるマスクベクトルとして使用するものであり、
    前記命令に応じて、前記実行ユニットは、
    前記第3ソースオペランドのアクティブなマスク要素に対応して、前記第1の複数のデータ要素および前記第2の複数のデータ要素の対応するアクティブなデータ要素同士を比較し、
    一致が存在する場合に、前記第3ソースオペランドのアクティブなマスク要素に対応して、前記第1の複数のデータ要素のうちアクティブなデータ要素を、前記第3の複数のデータ要素のうちの対応するデータ要素に置き換え、フラグをセットする
    プロセッサ。
  15. 前記一致が存在しないと判断した前記実行ユニットは、前記第1の複数のデータ要素を、前記第2の複数のデータ要素上に格納する請求項14に記載のプロセッサ。
  16. 前記第1ソースオペランドは、512ビットを含む請求項14またはに記載のプロセッサ。
JP2013240725A 2009-12-22 2013-11-21 Simdベクトルの同期 Expired - Fee Related JP5876458B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/644,529 2009-12-22
US12/644,529 US8996845B2 (en) 2009-12-22 2009-12-22 Vector compare-and-exchange operation

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2012517936A Division JP5421458B2 (ja) 2009-12-22 2010-11-29 Simdベクトルの同期

Publications (2)

Publication Number Publication Date
JP2014059902A JP2014059902A (ja) 2014-04-03
JP5876458B2 true JP5876458B2 (ja) 2016-03-02

Family

ID=44152784

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2012517936A Expired - Fee Related JP5421458B2 (ja) 2009-12-22 2010-11-29 Simdベクトルの同期
JP2013240725A Expired - Fee Related JP5876458B2 (ja) 2009-12-22 2013-11-21 Simdベクトルの同期

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2012517936A Expired - Fee Related JP5421458B2 (ja) 2009-12-22 2010-11-29 Simdベクトルの同期

Country Status (9)

Country Link
US (1) US8996845B2 (ja)
JP (2) JP5421458B2 (ja)
KR (1) KR101461378B1 (ja)
CN (2) CN105094749A (ja)
BR (1) BRPI1005259A2 (ja)
DE (1) DE112010004963T5 (ja)
GB (1) GB2488619B (ja)
TW (2) TWI525539B (ja)
WO (1) WO2011087590A2 (ja)

Families Citing this family (57)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US8996845B2 (en) 2009-12-22 2015-03-31 Intel Corporation Vector compare-and-exchange operation
WO2013048468A1 (en) 2011-09-30 2013-04-04 Intel Corporation Instruction and logic to perform dynamic binary translation
CN105955704B (zh) * 2011-11-30 2018-12-04 英特尔公司 用于提供向量横向比较功能的指令和逻辑
US10318291B2 (en) 2011-11-30 2019-06-11 Intel Corporation Providing vector horizontal compare functionality within a vector register
US20140108480A1 (en) * 2011-12-22 2014-04-17 Elmoustapha Ould-Ahmed-Vall Apparatus and method for vector compute and accumulate
WO2013095609A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for performing conversion of a mask register into a vector register
US9588764B2 (en) 2011-12-23 2017-03-07 Intel Corporation Apparatus and method of improved extract instructions
WO2013095617A1 (en) 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for propagating conditionally evaluated values in simd/vector execution
WO2013095635A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Instruction for merging mask patterns
US9632980B2 (en) 2011-12-23 2017-04-25 Intel Corporation Apparatus and method of mask permute instructions
US9946540B2 (en) 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
US9619236B2 (en) 2011-12-23 2017-04-11 Intel Corporation Apparatus and method of improved insert instructions
US9658850B2 (en) 2011-12-23 2017-05-23 Intel Corporation Apparatus and method of improved permute instructions
WO2013095657A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Instruction and logic to provide vector blend and permute functionality
US9489196B2 (en) * 2011-12-23 2016-11-08 Intel Corporation Multi-element instruction with different read and write masks
CN104067224B (zh) * 2011-12-23 2017-05-17 英特尔公司 在不同的粒度水平下对数据值进行广播和掩码的指令执行
CN107908427B (zh) 2011-12-23 2021-11-09 英特尔公司 用于多维数组中的元素偏移量计算的指令
US20140019723A1 (en) * 2011-12-28 2014-01-16 Koichi Yamada Binary translation in asymmetric multiprocessor system
US9552313B2 (en) 2011-12-28 2017-01-24 Intel Corporation Delivering real time interrupts with an advanced programmable interrupt controller
WO2013101229A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Structure access processors, methods, systems, and instructions
US9575753B2 (en) * 2012-03-15 2017-02-21 International Business Machines Corporation SIMD compare instruction using permute logic for distributed register files
US9405538B2 (en) * 2012-12-28 2016-08-02 Intel Corporation Functional unit having tree structure to support vector sorting algorithm and other algorithms
EP2965194A4 (en) * 2013-03-05 2016-11-30 Intel Corp ANALYSIS OF POTENTIAL ADVANTAGES OF VECTORIZATION
US9411593B2 (en) * 2013-03-15 2016-08-09 Intel Corporation Processors, methods, systems, and instructions to consolidate unmasked elements of operation masks
US9405937B2 (en) 2013-06-28 2016-08-02 Intel Corporation Method and apparatus for securing a dynamic binary translation system
US9292298B2 (en) * 2013-07-08 2016-03-22 Arm Limited Data processing apparatus having SIMD processing circuitry
US9495155B2 (en) 2013-08-06 2016-11-15 Intel Corporation Methods, apparatus, instructions and logic to provide population count functionality for genome sequencing and alignment
US9466091B2 (en) 2013-09-26 2016-10-11 Imagination Technologies Limited Atomic memory update unit and methods
US11257271B2 (en) 2013-09-26 2022-02-22 Imagination Technologies Limited Atomic memory update unit and methods
GB2520603B (en) * 2013-09-26 2016-04-06 Imagination Tech Ltd Atomic memory update unit and methods
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
US9390023B2 (en) * 2013-10-03 2016-07-12 Cavium, Inc. Method and apparatus for conditional storing of data using a compare-and-swap based approach
US10445092B2 (en) * 2014-12-27 2019-10-15 Intel Corporation Method and apparatus for performing a vector permute with an index and an immediate
US9996350B2 (en) 2014-12-27 2018-06-12 Intel Corporation Hardware apparatuses and methods to prefetch a multidimensional block of elements from a multidimensional array
US10528345B2 (en) * 2015-03-27 2020-01-07 Intel Corporation Instructions and logic to provide atomic range modification operations
US10019264B2 (en) * 2016-02-24 2018-07-10 Intel Corporation System and method for contextual vectorization of instructions at runtime
GB2549737B (en) * 2016-04-26 2019-05-08 Advanced Risc Mach Ltd An apparatus and method for managing address collisions when performing vector operations
WO2018022525A1 (en) * 2016-07-27 2018-02-01 Intel Corporation System and method for multiplexing vector mask matches
US20190155603A1 (en) * 2016-07-27 2019-05-23 Intel Corporation System and method for multiplexing vector compare
EP3336691B1 (en) * 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
EP3336692B1 (en) 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
CN109542515B (zh) * 2017-10-30 2021-06-25 上海寒武纪信息科技有限公司 运算装置及方法
US20210133854A1 (en) 2018-09-13 2021-05-06 Shanghai Cambricon Information Technology Co., Ltd. Information processing method and terminal device
CN111258637B (zh) * 2018-11-30 2022-08-05 上海寒武纪信息科技有限公司 数据处理方法、处理器、数据处理装置及存储介质
CN111258639B (zh) * 2018-11-30 2022-10-04 上海寒武纪信息科技有限公司 数据处理方法、处理器、数据处理装置及存储介质
CN111258640B (zh) * 2018-11-30 2022-10-04 上海寒武纪信息科技有限公司 数据处理方法、处理器、数据处理装置及存储介质
CN111258642B (zh) * 2018-11-30 2022-10-04 上海寒武纪信息科技有限公司 数据处理方法、处理器、数据处理装置及存储介质
CN111258638B (zh) * 2018-11-30 2022-10-04 上海寒武纪信息科技有限公司 数据处理方法、处理器、数据处理装置及存储介质
US20200210181A1 (en) * 2018-12-29 2020-07-02 Intel Corporation Apparatuses, methods, and systems for vector element sorting instructions
US20200401412A1 (en) * 2019-06-24 2020-12-24 Intel Corporation Hardware support for dual-memory atomic operations
CN110515659B (zh) * 2019-08-28 2021-10-01 中国人民解放军国防科技大学 一种原子指令的执行方法和装置
CN110515660B (zh) * 2019-08-28 2021-08-06 中国人民解放军国防科技大学 一种加速原子指令执行的方法和装置
CN117561501A (zh) * 2021-06-22 2024-02-13 华为技术有限公司 一种多线程数据处理方法及装置
CN115098165B (zh) * 2022-06-13 2023-09-08 昆仑芯(北京)科技有限公司 数据处理方法、装置、芯片、设备及介质
CN118093143B (zh) * 2024-04-12 2024-07-02 清华大学 大语言模型解码阶段的数据调度方法和装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4482956A (en) * 1982-11-04 1984-11-13 International Business Machines Corporation Parallel queueing method
JPS61288243A (ja) * 1985-06-17 1986-12-18 Fujitsu Ltd コンペアアンドスワツプ命令処理方式
JPS6285372A (ja) 1985-10-09 1987-04-18 Nec Corp マルチプロセツサシステムにおけるコンペアアンドスワツプ方式
US6460121B1 (en) * 1998-09-14 2002-10-01 Compaq Information Technologies Group, L.P. Method for providing an atomic memory read using a compare-exchange instruction primitive
US7308559B2 (en) * 2000-02-29 2007-12-11 International Business Machines Corporation Digital signal processor with cascaded SIMD organization
US6880071B2 (en) 2001-04-09 2005-04-12 Sun Microsystems, Inc. Selective signalling of later reserve location memory fault in compound compare and swap
US7107305B2 (en) 2001-10-05 2006-09-12 Intel Corporation Multiply-accumulate (MAC) unit for single-instruction/multiple-data (SIMD) instructions
CN100545804C (zh) * 2003-08-18 2009-09-30 上海海尔集成电路有限公司 一种基于cisc结构的微控制器及其指令集的实现方法
US8607241B2 (en) * 2004-06-30 2013-12-10 Intel Corporation Compare and exchange operation using sleep-wakeup mechanism
US7219213B2 (en) 2004-12-17 2007-05-15 Intel Corporation Flag bits evaluation for multiple vector SIMD channels execution
US7509463B2 (en) * 2005-12-01 2009-03-24 Sony Computer Entertainment, Inc. Cell processor atomic compare and swap using dedicated synergistic processor element
US20070260634A1 (en) * 2006-05-04 2007-11-08 Nokia Corporation Apparatus, system, method, and computer program product for synchronizing the presentation of media content
US7627723B1 (en) 2006-09-21 2009-12-01 Nvidia Corporation Atomic memory operators in a parallel processor
US7908255B2 (en) * 2007-04-11 2011-03-15 Microsoft Corporation Transactional memory using buffered writes and enforced serialization order
US8996845B2 (en) 2009-12-22 2015-03-31 Intel Corporation Vector compare-and-exchange operation

Also Published As

Publication number Publication date
GB2488619B (en) 2017-10-18
GB201119083D0 (ja) 2011-12-21
JP2014059902A (ja) 2014-04-03
WO2011087590A3 (en) 2011-10-27
KR101461378B1 (ko) 2014-11-20
BRPI1005259A2 (pt) 2013-04-02
JP5421458B2 (ja) 2014-02-19
WO2011087590A2 (en) 2011-07-21
TWI525539B (zh) 2016-03-11
CN105094749A (zh) 2015-11-25
US8996845B2 (en) 2015-03-31
US20110153989A1 (en) 2011-06-23
DE112010004963T5 (de) 2012-11-22
TWI427533B (zh) 2014-02-21
GB2488619A (en) 2012-09-05
KR20120096588A (ko) 2012-08-30
CN102103570A (zh) 2011-06-22
TW201140435A (en) 2011-11-16
TW201428622A (zh) 2014-07-16
JP2012531682A (ja) 2012-12-10
CN102103570B (zh) 2015-08-12

Similar Documents

Publication Publication Date Title
JP5876458B2 (ja) Simdベクトルの同期
JP5366802B2 (ja) 仮想化されたトランザクショナルメモリのグローバルオーバーフロー方法
CN106648843B (zh) 用于改善连续的事务性存储器区的吞吐量的***、方法和装置
EP2430525B1 (en) Load/store disjoint facility and instruction therefore
US9213665B2 (en) Data processor for processing a decorated storage notify
CN108334400B (zh) 为安全飞地管理存储器
US9361233B2 (en) Method and apparatus for shared line unified cache
US20070050560A1 (en) Augmented instruction set for proactive synchronization within a computer system
KR20190108109A (ko) 캐시 라인 로킹을 이용한 원자적 프리미트브들의 구현
CN109791584B (zh) 用于标识和避免虚拟机监视程序和客户虚拟机之间的跟踪冲突的处理器扩展
US10768680B2 (en) Hardware apparatuses and methods to perform transactional power management
JP2007157142A (ja) 特定のspeを使ってcellプロセッサのアトミックなコンペア・アンド・スワップ命令を実行するための技術
JP6005392B2 (ja) ルーティングのための方法及び装置
US9207940B2 (en) Robust and high performance instructions for system call
CN108292268B (zh) 用于分布式一致性存储器的***、方法和设备
CN111095203A (zh) 实时寄存器值的集群间通信
US20090063881A1 (en) Low-overhead/power-saving processor synchronization mechanism, and applications thereof

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131224

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20131224

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150331

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150630

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150730

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150831

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150930

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

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20151222

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160121

R150 Certificate of patent or registration of utility model

Ref document number: 5876458

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees