专利摘要:
ある実施形態では、プロセッサは、単一の命令に応答して複数のデータ要素に対して動作を実行するベクトル・ユニットと;前記ベクトル・ユニットに前記データ要素を与えるよう前記ベクトル・ユニットに結合された制御ユニットとを含みうる。前記制御ユニットは、第一のマスクのもとで実行される第一のベクトル命令および第二のマスクのもとで実行される第二のベクトル命令に応答して前記データ要素の少なくともいくつかに対して原子的なSIMD動作が実行されることを可能にする。他の実施形態も記載され、特許請求される。
公开号:JP2011514598A
申请号:JP2010548946
申请日:2009-03-27
公开日:2011-05-06
发明作者:キム,チャンギュ;キム,デヒョン;グエン,アンソニー,ディー.;クマール,サンジーヴ;スメリャンスキー,ミハイル;チェン,イエン−クワン;チュガニ,ジャティン;ヒューズ,クリストファー;リー,ヴィクター,ダブリュー.
申请人:インテル コーポレイション;
IPC主号:G06F9-34
专利说明:

[0001] 本発明はベクトル命令に関する。]
背景技術

[0002] 多くのアプリケーションは大量のデータ・レベルの並列を有し、単一命令複数データ(SIMD: single-instruction multiple-data)サポートから裨益できるべきである。SIMD実行では、単一の命令が複数のデータ要素に対して同時に作用する。これは典型的には、レジスタおよび演算論理装置(ALU)のようなさまざまな資源の幅を拡張して、それぞれ複数のデータ要素を保持するまたは複数のデータ要素に作用することを許容することによって実装される。]
発明が解決しようとする課題

[0003] しかしながら、そのような多くのアプリケーションは、かなりの時間を、疎な位置の集合に対する原子的な演算において費やし、そのためSIMDから受ける恩恵は限定的である。現在のアーキテクチャは原子的な(atomic)ベクトル演算をサポートしないからである。]
[0004] 多くのアプリケーションにおいて、しばしば同期プリミティブおよび並列リダクション演算がマルチプロセッサ・システムにおいて実行される。同期プリミティブ(synchronization primitives)は、複数のスレッドが協働的に作業するときにプログラムが正しい順序で実行されることを保証する。これらのプリミティブはしばしば、原子的な読み出し‐修正‐書き込み(read-modify-write)動作を使って実装される。リダクション(reduction)は、多くの科学アプリケーションにおいて見出される一般的な動作である。複数のスレッドが並列にリダクションを実行するとき、競争条件(race conditions)において正しさを保証するために、原子的な読み出し‐修正‐書き込みシーケンスが典型的には使用される。]
[0005] 現代の並列アーキテクチャは、データ・レベルの並列を用いて多くのアプリケーションのパフォーマンスを改善するためにSIMDユニットを備えている。SIMD効率を維持するために、そのようなアーキテクチャはSIMD算術演算だけでなく、SIMDメモリ読み出しおよび書き込みをも(収集‐分散(gather-scatter)ユニットを通じて)許容する。しかしながら、これらのアーキテクチャのいずれもSIMD原子的動作はサポートしない。その結果、こうした原子的動作はベクトル化できず、したがってスカラー・コードを使って実装しなければならない。これは、SIMD幅、すなわち同時に処理される要素数が大きい(たとえば16)場合は特に、SIMD効率を著しく劣化させることがある。]
[0006] 分散リダクション(scatter reductions)は多くのアプリケーションで一般的な動作である。たとえば、分散加算(scatter-add)演算は、第一の配列の複数の値を、インデックスの分布に従って第二の配列の選択された要素にリダクションする(すなわち加算する)ことを可能にするために使用できる。インデックスの分布はしばしばランダムでありうる。このため、複数の要素を並行して(すなわちSIMDモードで)効率的に処理することは難しい。]
[0007] ヒストグラム計算は多くの画像処理アプリケーションにおいて一般的な動作である。たとえば、ヒストグラムは、画像中のピクセルの色値の分布を追跡するために使用される。しかしながら、ヒストグラム配列への更新は、配列への入力データに依存して、ランダムでありうる。特に、近隣の要素のインデックスが同じヒストグラム・ビンを指すことがある。この条件のため、複数のデータを並行して(すなわち、SIMDモードで)処理することは非常に難しくなる。]
課題を解決するための手段

[0008] 本発明は、請求項記載の手段によって従来技術の課題を解決する。]
図面の簡単な説明

[0009] Aは、本発明のある実施形態に基づくプロセッサ・コアのブロック図である。Bは、本発明のある実施形態に基づく、収集/分散ユニットの例示的な表現である。
本発明のある実施形態に基づく、原子的なベクトル動作を実行するための流れ図である。
本発明のある実施形態に基づく、システムのブロック図である。]
実施例

[0010] 諸実施形態は、メモリ分散・収集機能を、原子的なベクトル動作のサポートを提供するよう拡張しうる。さまざまな実施形態において、SIMD命令は原子的な動作を可能にするよう提供されうる。特に、SIMD式の複数の非連続的なメモリ位置への原子的動作を効率的にサポートするために、いわゆるベクトル収集‐リンク(gather-linked)命令およびベクトル分散‐条件付(scatter-conditional)命令が提供されうる。本稿での用法では、「ベクトル」および「SIMD」の用語は、単一の命令が複数のデータ要素に作用することを記述するために交換可能に用いられることを注意しておく。このようにして、これらの命令は、SIMD原子的動作が同期プリミティブおよび並列リダクション動作をより効率的に実装することを可能にしうる。さらに、他のベクトル命令が、プロセッサ内リダクション動作およびヒストグラム計算のためのプロセッサ支援を提供しうる。]
[0011] ある実施形態では、収集‐分散ユニットは、原子的なSIMDメモリ動作を許容するよう構成されることができる。データ要素が連続的にではなく間接的に(たとえばA[B[i]])アクセスされる要素をもつアプリケーションにおいて効率的にSIMDを利用することは、しばしば、データを再配列することを要求し、このことは著しいオーバーヘッドを生じることがある。このオーバーヘッドに対処するため、収集/分散動作を実行するために、SIMD式に非連続的なデータ要素をロードし記憶することを可能にするハードウェア・サポートが提供されることができる。すなわち、収集動作は、ソースSIMDレジスタに含まれる諸アドレスに基づいて、間接的にアドレス指定された諸位置から複数のデータ要素を読み出し(収集し)、それらのデータ要素を単一のSIMDレジスタ中にパックする。逆に、分散動作は、SIMDレジスタ内のそれらの要素をアンパックして、一組の間接的にアドレス指定された位置に書き込む(分散させる)。]
[0012] 具体的には、本発明のある実施形態によれば、収集‐リンク命令は収集される位置についての予約〔リザーブ〕を含み、本発明のある実施形態に基づく分散‐条件付命令は、対応する予約がいまだに保持されている要素へのみ値を分散させる。分散‐条件付はそれらの要素の部分集合についてのみ成功する(あるいはどれについても成功しない)ことがあるので、この命令は、記憶‐条件付〔SC〕の出力に相似して成功または失敗を示す出力マスクを有する。収集‐リンク命令の出力マスクは、ハードウェア実装における、より高い柔軟性を許容しうる。諸実施形態は、スカラーの原子的メモリ動作、すなわちロード・リンク(LL: load-linked)および記憶‐条件付(SC: store-conditional)と呼ばれる一対のスカラー命令を拡張しうる。LLは共有された位置に記憶された値を返し、その位置に関連付けられた予約インジケータをセットする。SCはその予約インジケータをチェックする。予約インジケータが有効であれば、新しい値がその位置に書き込まれ、この動作は成功を返し、有効でなければその値は書き込まれず、この動作は失敗を示すフラグを返す。概念的には、要求される各メモリ位置について、各ハードウェア・コンテキストについて、予約ビットがある。ある共有メモリ位置に関連付けられた諸予約ビットは、その位置が何らかのハードウェア・コンテキストによって書き込まれるときにクリアされる。LLおよびSCの一つの用途は、ロックおよびアンロックのような、より高いレベルの同期プリミティブの実装にある。ロックは、複数のスレッドによる共有データへのアクセスの原子性を保証するために使われる。しかしながら、これらの命令は同時には単一の要素に対してのみ作用する。諸実施形態は、これらの命令のこの限界を克服するために使用されうる。]
[0013] SIMDアーキテクチャでは、VLEN個の位置へのVLEN(SIMDベクトル長)個までの更新が、もし相異なるメモリ位置を更新するとわかっていれば、SIMDを使って並列に実行できる。しかしながら、VLEN個の同時更新の原子性を保証するためには、VLEN個のロックを取得して解放することが必要とされる。スカラー命令が使われる場合、VLEN個のデータ要素を検出、取得、更新してロックを解放するために、ループのVLEN回の逐次反復が実行され、そのような動作にはさまざまなオーバーヘッドが付随する。]
[0014] 多くのアプリケーションにおけるもう一つの一般的な動作は、リダクション動作である。マルチプロセッサ・システムでは、リダクションは、パフォーマンスを改善するために複数のスレッドによって実行されることができる。しかしながら、並列実装では、複数のスレッドが同じメモリ位置を同時に更新するとき、正しさを保証するために、共有されるデータ構造への原子的アクセスが使われる。こうして、リダクション動作は、同時更新の原子性を保証するために、スカラーのロード・リンク命令および記憶‐条件付命令を使用しうる。しかしながら、そのような動作は、本発明の実施形態なしにはSIMD式に実行されることができない。]
[0015] 同期プリミティブおよび並列リダクションの効率的かつSIMDフレンドリーな実装は、さまざまな実施形態において、LL命令およびSC命令へのSIMDサポートを提供することによって実現できる。より具体的には、同期プリミティブおよび並列リダクションのSIMD効率を改善するために、二つの命令、すなわち収集‐リンク(vgatherlink)命令および分散‐条件付(vscattercond)命令がSIMDアーキテクチャのためのロード・リンク動作および記憶‐条件付動作を提供しうる。加えて、SIMDアーキテクチャにおいて利用可能なベクトル収集命令(vgather)およびベクトル分散(vscatter)命令がてこ入れできる。ベクトル収集命令は、次のようなものでありうる:
vgather base, Addr, Dst
これは、VLEN個のデータ要素を、VLEN個(必ずしも連続的でなく、可能性としては重複がある)のメモリ位置から収集させる。それらのメモリ位置のアドレスはbaseおよびAddr(base[Addr[0]],…,base[Addr[VLEN−1]])から計算され、宛先(destination)Dstに連続的に記憶される。AddrおよびDstはメモリ内、あるいはSIMDレジスタ内のいずれかにあることができる。]
[0016] ベクトル分散命令は次のようなものでありうる:
vscatter base, Addr, Src
この命令は、ソースSrcからのVLEN個の連続的なデータ要素をVLEN個(必ずしも連続的ではないが一意的)のメモリ位置に分散させる。それらのメモリ位置のアドレスは、アドレス・オペランドAddrに記憶されている。vgather命令の場合と同様、AddrおよびSrcはメモリ内またはSIMDレジスタ内のいずれかにあることができる。]
[0017] このように、これら二つのベクトル命令およびスカラーLLおよびSC命令に基づいて、ベクトル収集‐リンク命令vgatherlinkは次のように定義されうる。]
[0018] この命令は、複数のデータ要素を収集してリンクし、また、のちの分散‐条件付命令によって使用されるよう、収集されたデータ要素のメモリ位置を予約する作用をする。このように、この命令は、VLEN個までのメモリ位置memory[Addr[0]],memory[Addr[VLEN−1]]を収集してリンクし、マスクのもとで宛先Dstに入れようとする。データ要素のいくつかを収集してリンクするのに失敗することもありうる。その場合、VLEN個のメモリ位置の部分集合のみを収集してリンクし、マスクFの対応するビットを有効状態、たとえば「1」状態にセットする。失敗した要素はその対応するマスクFを無効状態、たとえば「0」状態にセットする。]
[0019] 同様に、vscattercondは次のように定義されうる。]
[0020] この命令は、複数のデータ要素をメモリに条件付きで分散させる、より具体的には、vgatherlinkによって予約されておりその予約がいまだ有効である(すなわち、vgatherlink以来その位置への書き込みが行われていない)メモリ位置にのみ、分散させる作用をする。このように、この命令は、ソースSrcからのVLEN個までのデータ要素をVLEN個のメモリ位置memory[Addr[0]],…,memory[Addr[VLEN−1]]にマスクFのもとで条件付きで分散させる。個々の分散‐条件付動作が失敗したマスク下のすべての要素について、マスクFの対応する要素は無効状態、たとえば「0」状態にセットされる。]
[0021] vgatherlink命令およびvscattercond命令の組み合わせならびにマスク操作(後述)を使い、VLEN個の原子的動作の部分集合(たとえば、VLEN個のロックの部分集合の取得)が実行でき、対応するマスク要素が1にセットされる。このマスクは、SIMD領域において安全に実行するために使用できる。というのも、成功した原子的動作に対応するマスク下のSIMD要素の部分集合のみが有効にされるからである。ここで表1を参照すると、vgatherlinkおよびvscattercondを使ってVLEN個のロックを取得および解放する例示的なコード・セグメントが示されている。]
[0022] 上記のコードは、すべてのVLEN個の要素が更新されるまで、whileループの逐次反復毎にマスクのもとでVLEN個のSIMD要素の部分集合を更新する。他のスレッドとのロック競合のため、whileループの所与の反復においてはロックが得られないこともありうることを注意しておく。これは、すべての要素が「無効」状態にある場合にマスクのもとで実行されるSIMD_update領域が動作なし(NOP: no operation)としてはたらくことにつながる。マスク下でロックのサブセットのみが取得されるので、ロックのソートは要求されない。ロックのソートは、典型的には、デッドロックを避けるためにクリティカルなセクションの対応するシリアル実装において使用される。ロックのソートは、シリアル実装においては、より複雑で非効率的なコードという代償で、回避できる。上記のコードでは、デッドロックは、競合のないロックのみを取得して実行を進めることによって防止できる。このコードの例示的な実装は、図2に関連して後述する。] 図2
[0023] vgatherlinkおよびvscattercond命令の定義が柔軟であり、種々の使用シナリオを可能にできることを注意しておく。たとえば、上記のコードにおいて、代わりに、すべてのVLEN個のロックが取得されてしまうまでロックを取得するようまず逐次反復し、それからすべてのVLEN個の更新を同時に実行することもできる。]
[0024] スカラーのロード・リンク命令は常に成功する一方、本発明のある実施形態に基づくvgatherlink命令は、アドレスの部分集合において失敗することが許容されることを注意しておく。失敗が起こるには、いくつかの理由がありうる。たとえば:(1)他のスレッドがリンクされるアドレスの部分集合を持っている;(2)キャッシュにおけるコンフリクト:新しいラインを持ち込む唯一の方法が別のリンクされたラインを追い出すことである場合(たとえば、限られた関連付け可能性のため);(3)ラインがリモート位置またはメモリ内にあり、フェッチするのに長い遅延がかかる(たとえば、キャッシュ・ミスが発生)。]
[0025] 設計者がvgatherlink命令の失敗を許容することを選ぶことのできる他の多くの状況がある。失敗を許容することで、効率を改善しつつ、潜在的に競合の量を減らすことができる。つまり、VLEN個のアドレスについてvgatherlink命令が成功するのを待つことは、競合を増しうる。一方、うまくリンクされたアドレスの部分集合のみにvscattercond命令をすぐ発することは、競合の量を減らす。]
[0026] 上記の議論において、すべてのロック位置が一意的であると想定している。この制約条件は、プログラマーに、whileループにはいる前にロックを一意的なロックの諸部分集合に分割することを強制する。これは潜在的には高価な計算である。たとえば、VLEN個の要素が同時にツリーに挿入されるとき、プログラマーはコンパイル時には、どの要素が一意的であるかを知るすべがないことがありうる。]
[0027] ソフトウェアでロックを一意的な部分集合に分割することは高価であるが、vgatherlinkおよびvscattercond命令の意味内容(semantics)は、分割が必要とされないというものである。これらの命令は、分散‐条件付および通常の分散動作とは、単一のSIMD動作が同じ位置に複数の値を書き込もうとする要素エイリアシング(element aliasing)の扱いにおいて、異なる。エイリアシングされた(aliased)要素更新のうちの一つのみが成功し、出力マスクによって指示される。さまざまな実施形態において、収集‐リンク命令および分散‐条件付命令はいずれも出力マスクをもつので、ハードウェア設計者は、エイリアスの検出および解決を、いずれの命令の一部として実装することを選ぶこともできる。vgatherlinkまたはvscattercond命令はAddr内の一意的なアドレスの部分集合のみを処理するので、これは、whileループの所与の反復において一意的なロックのみが取得され、SIMD_update命令がVLEN個の要素の群内の一意的な諸要素に対してのみ実行されることを保証する。]
[0028] 上記の議論はロック取得に焦点を当ててきたが、vgatherlinkおよびvscattercondは少なくとも一つの他の使用シナリオをもつ。並列リダクション(parallel reductions)である。多くのアプリケーションにおいて、SIMD_update命令は、共有メモリ内の他のオブジェクトにアクセスすることは必要としない。したがって、そのようなオブジェクトは、更新のための原子性を保証するために取得されたロックをもつ必要はない。その代わり、vgatherlinkおよびvscattercond命令は、次の表2のように、更新されているデータに対して使用できる。]
[0029] このコードにおいて、vgatherlink命令は、グローバル・データ構造(glb_data)からベクトル・レジスタV中にデータ要素を収集する。該命令はまた、失敗した収集要素に対応してマスク・レジスタFの諸ビットを0に設定する。SIMD_update命令はベクトル・レジスタVを更新する。次いで、vscattercond命令はベクトル・レジスタVをグローバル・データ構造に分散させ、また、失敗した分散要素に対応してマスク・レジスタFの諸ビットを0に設定する。vscattercond命令ののち、マスク・レジスタFは、この反復工程においてうまく更新された各要素については1を含む。F1との排他的OR(XOR)演算はそれらのマスク・ビットをクリアし、まだ更新されていない要素に対応するマスク中のビットを1に設定する。]
[0030] vgatherlinkおよびvscattercond命令を直接、並列リダクションを実行するために適用することは、いくつかの利点をもたらしうる。まず、ロックを把握して解放する必要がないので、コードはより効率的である(つまり、表2のコードは表1のコードよりずっと短い)。第二に、ロック変数のためにメモリにアクセスする必要がないので、メモリの振る舞いがよりよくなる。]
[0031] 本稿に記載されるベクトル命令は、多くの方法で実装できる。そのような命令は、vgatherlinkおよびvscattercond動作における各要素のための予約位置を含め、さまざまなSIMDハードウェア資源をてこ入れできる。ある実施形態では、32ビット要素当たり1予約位置という粒度が使用されうるが、他の実施形態はより小さなまたはより大きな粒度を有していてもよい。単一の反復工程においてvgatherlink命令が収集し、vscattercondが分散させる要素の数は、設計パラメータであることができる。より多数の要素が収集され、分散されることを許容すればパフォーマンスはよくなるが、より多くの資源が必要となる。]
[0032] ある実施形態では、vgatherlinkおよびvscattercond命令は、それぞれ付録Iおよび付録IIに示される外的な振る舞いをもちうる。]
[0033] このように、諸実施形態は、SIMDアーキテクチャにおける原子的な動作の効率的なサポートを提供しうる。このようにして、複数のメモリ位置への原子的なアクセスをシリアル化する必要が、本稿に記載される命令を使って、回避できる。そのような複数位置へのアクセスは、効率的なループ構造、たとえばdo-whileループを使って可能にされる。]
[0034] 前記命令の諸実施形態は、さまざまなアプリケーションにおいて使用されうる。たとえば、ロックの使用のために、記載される命令は、物理シミュレーション・アプリケーションのようなさまざまなアプリケーションにおいて動作を実行するために使用されうる。同様に、リダクション動作のために、記載される命令は、さまざまなアプリケーション、たとえば画像処理アプリケーションおよび疎な線形代数プリミティブを利用するアプリケーションとの関連で使用できる。もちろん、本発明の範囲はこれに関して限定されるものではなく、本稿で記載される命令は他のアプリケーションにおいても使用できる。]
[0035] ここで図1のAを参照すると、本発明のある実施形態に基づくプロセッサ・コアのブロック図が示されている。図1のAに示されるように、プロセッサ・コア10は、コア10と同様の構成の複数のコアを含むマルチコア・プロセッサの単一のコアであってもよい。図1のAに示されるように、コア10は、SIMD動作をサポートするアーキテクチャのものであってもよい。たとえば、パイプライン/機能ユニット20のさまざまなコンポーネントは、たとえば拡張されたレジスタおよびALUなどのような機能ユニットを介して、ベクトル・サポートを提供するために、拡張されてもよい。] 図1
[0036] 引き続き図1のAを参照すると、パイプライン/機能ユニット20は、ロード/記憶ユニット(LSU: load/store unit)30および収集/分散ユニット(GSU: gather/scatter unit)40に結合されうる。LSU30は、キャッシュ・メモリ50に関してロードおよび記憶命令の実行を扱いうる。キャッシュ・メモリ50はある実施形態ではレベル1(L1)キャッシュであってもよい。同様に、GSU40は、本稿に記載されるベクトル収集‐リンク命令およびベクトル分散‐条件付命令のような収集および分散命令の実行を扱いうる。] 図1
[0037] これらのユニットは多くの異なる仕方で構成されうるものの、ここで図1Bを参照すると、本発明のある実施形態に基づく収集/分散ユニットの例示的な表現が示されている。図1Bに示されるように、GSU40は制御論理回路42を含みうる。制御論理42は、本稿に記載される命令のようなさまざまなベクトル命令の実行を扱うためのさまざまなハードウェア、ファームウェアおよびソフトウェアまたはそれらの組み合わせを含みうる。そのような動作を実現するために、制御論理42はマスク記憶44と通信してもよい。マスク記憶44は、たとえば本稿に記載される種々の命令のための入力マスクおよび/または出力マスクとして使用できるベクトル・マスクの形で、マスク情報の記憶を提供するための一つまたは複数の記憶位置を含みうる。さらに、制御論理42は、ベクトル記憶46と通信してもよい。ベクトル記憶46は、本稿に記載されるさまざまな命令のためのオペランドとして使用されるベクトル・データ要素の記憶を提供するための、ベクトル・レジスタ・ファイルまたは他の一時記憶であってもよい。さらに、制御論理42によって実装されうる、本稿に記載されるようなベクトル・シャッフル命令に従ってさまざまなデータ要素をシャッフルすることを可能にするよう、シャッフル論理48が設けられてもよい。さらに図1のBに示されるように、制御論理42は今度は、コアの上流の諸部分、たとえば図1のAのパイプライン/機能ユニット20ならびにコアの下流部分、たとえばキャッシュ・メモリ50と通信してもよい。図1のBの実施形態におけるこの個別的な実装に関して示されているものの、本発明の範囲がこの点に関して限定されないことは理解されたい。] 図1 図1B
[0038] ある実施形態では、GSU40は、ロード・リンク要求を生成してメモリ50に送るほかは、収集動作と同様にベクトル収集‐リンク動作を扱いうる。同様に、GSU40は、通常の記憶の代わりに、L1キャッシュへの記憶‐条件付要求を送りうる。さらに、GSU40は、個々の要求の成功または失敗に基づいてこれらの動作のための出力マスクをアセンブルし、記憶する。]
[0039] ある実施形態では、収集‐リンク命令および分散‐条件付命令をサポートするために、キャッシュ・メモリ50のキャッシュ・タグ構造が、キャッシュ・ラインごとにいわゆる収集ロード制御記憶(GLSC: gather load control store)エントリーを含みうる。GLSCエントリーは二つのフィールドを含みうる:有効ビットと、ハードウェア・スレッド識別子(ID)(同じコア上の同時のマルチスレッド化された(SMT: simultaneous multithreaded)スレッドの間で区別するための)である。収集‐リンク動作のために、GSU40がロード・リンク要求をキャッシュ・メモリ50に送る際、失敗する要求もあれば、成功する要求もある。成功する各要求について、キャッシュは対応するGLSCエントリーを更新し(たとえば、有効ビットがセットされ、要求者のスレッドIDが充填される)、GSU40は出力マスク中の対応するビットをセットし、GSU40はデータを宛先レジスタ内に入れる。分散‐条件付動作では、GSU40は一組の記憶‐条件付(store-conditional)要求をキャッシュ・メモリ50に送る。個々の記憶‐条件付要求は、対応するGLSCエントリーの有効ビットがセットされており、GLSCエントリー・スレッドIDが要求者のスレッドIDに一致する場合に成功する。ある実施形態では、これは、対応するキャッシュ・ラインが、収集‐リンク動作からの一致するロード・リンク要求によってうまくリンクされて以降、介在する書き込みによって修正されたり追い出されたりしていない場合に真となる。個々の記憶‐条件付要求が成功するとき、キャッシュはGLSC有効フラグをクリアし、キャッシュ・ライン中のデータを修正し、GSU40は出力マスク中の対応するビットを設定する。]
[0040] ここで図2を参照すると、本発明のある実施形態に従って原子的なベクトル動作を実行するための流れ図が示されている。図2に示されるように、方法100は、ベクトル・データ要素への原子的な更新を可能にするために、ベクトル収集‐リンク命令およびベクトル分散‐条件付命令を使用しうる。図2の実施形態でのこの個別的な実装をもって示されているものの、本発明の範囲はこれに関して限定されるものではないことを注意しておく。図2に示されるように、方法100は、ブロック110において開始されうる。ここで、ベクトル・マスクが有効状態に設定されてもよく、ベクトル・インデックス情報が取得されてもよい。そのような動作は、入力マスクを有効状態に設定し、SIMDデータ要素のためのインデックスを計算する(すなわちSIMDデータ要素のためのアドレスを得る)ために実行されうる。] 図2
[0041] 次いで制御はブロック120に渡される。ここで、すべてのSIMD要素が更新されるまで逐次反復されるループが開始されうる。このループは、ベクトルロック情報を得るためのベクトル収集‐リンク命令を実行することによって始まってもよい。具体的には、この収集‐リンクはこのように、VLEN個までのロック値を得るために使用されてもよい。菱形125で判定されるところにより所与のデータ要素について不成功の場合、つまり所与のデータ要素についてロックが利用可能でない場合、制御はブロック130に渡され、その利用可能でないロックについての対応するベクトル・マスク・インジケータが無効状態に設定されうる。もしそうではなく所与のロックが利用可能である場合には、そのような利用可能なデータ要素をロックしようとして、ベクトル分散‐条件付命令が実行されうる(ブロック140)。ロックを取得するいかなる成功動作についても、ベクトル分散‐条件付命令に関連付けられた出力マスクはセットされたままに留まりうる。一方、取得できなかったそのようないかなるロックについても、該マスクはその代わり、無効状態に設定されうる。次いで制御はブロック150に渡され、ここで、SIMD更新がデータ要素の部分集合に対して実行されうる。より具体的には、ブロック140でロックが取得されたいかなるデータ要素についても、SIMD更新が実行されうる。次いで制御はブロック160に渡され、ここで、更新されたデータ要素をアンロックするためにベクトル分散命令が実行されうる。次いで、菱形170において、追加的なベクトル・データ要素が更新されるべく残っているかどうかが判定されうる。もし残っていれば、制御はブロック120に戻る。もし残っていなければ、方法100は完了する。図2の実施形態におけるこの個別的な実装をもって示されているが、本発明の範囲はこれに関して限定されるものではない。] 図2
[0042] 諸実施形態は、さらに、SIMDモードにおける分散リダクション(scatter reductions)を可能にするために使用されうる。諸実施形態は、概念上、分散リダクション動作を三つの動作に分割する。第一に、第一の配列を、SIMD幅に等しい長さのチャンク〔かたまり〕に分ける。この配列は、所与の長さの整数または浮動小数点値の配列、たとえば第一の配列、長さNの値をもついわゆるC配列であってもよい。いわゆるB配列と称されるさらなる配列は長さNの整数インデックス配列であって、その要素は[1…M]の範囲内にあり、C配列の各要素の、長さMの他の配列A上へのマッピングを定義していてもよいことを注意しておく。インデックス(すなわち配列Bの内容)の分布はしばしばランダムであることを注意しておく。さらに、B配列の複数のエントリーは同じ値を有していてもよい。そのことは、C配列の複数の値をA配列の同じ要素に還元〔リダクション〕させる。第二に、各チャンク(SIMDレジスタ内にあると想定される)内で局所的リダクションを実行し、これらの各動作の終わりには、SIMDレジスタは、チャンク内のAの一意的な諸要素に対応する値を保持することになり(すなわち、レジスタ内のどの二つの値も配列の同じ要素に還元される必要はない)、すべての重複する値はこの一意的な要素に還元されている。第三に、各チャンクについて収集‐更新‐分散メモリ動作を実行して、そのチャンクについてのリダクションを完了する。]
[0043] 諸実施形態は、諸レジスタにおいてSIMDリダクションを実行することにおいて支援するさらに別のベクトル命令を提供してもよい。より具体的には、その命令は、第一のSIMDレジスタにおいて一意的な諸項目を見出し、重複している項目についてシャッフル制御(shuffle control)を生成するために使用されうる。そのような動作後は、シャッフル制御は、第一のSIMDレジスタからの第二のSIMDレジスタの生成を、重複する要素の対がそれぞれのSIMDレジスタにおいて対応する位置にあるように行うために使用されることができる。さらに、各対からの対応する重複要素を宛先ベクトル・レジスタに「還元」するために、これら二つのベクトル・レジスタの累積が実行される。シーケンス全体は、残っている要素がすべてAの相異なる要素にマッピングされるようになるまで反復される。このシーケンスは、反復数を最小にするために、各反復工程においてできるだけ多くの重複要素の対を累積する。代替的な諸実施形態は、実装コストを削減するために、重複の対の部分集合のみを累積してもよい。]
[0044] 上記の第二の動作の開始に先立って、配列BおよびCは(第一の動作におけるように)さまざまなチャンクに分割されることができる。それらのチャンクは二つのSIMDレジスタにロードされる(便宜上、これらのレジスタをVbおよびVcと呼ぶ)。第二の動作は、Vbの対応する要素において同じ値をもつVcの諸要素を組み合わせる。この第三の動作を実行するために、Vbの各要素をVbの他の要素に対してシリアルにチェックして何らかの一致があるかどうかを判定するよう、命令のシーケンスが使用されることができる。一致が見出されたら、Vcにおける対応する諸要素は還元される。次の表3はこの第二の動作の擬似コードである。]
[0045] しかしながら、このシリアル実装はO(N2)の計算量をもつ。したがって、本発明の諸実施形態は、この動作の計算量をO(logN)にまで低下させるために、本稿でベクトル・シャッフル・トゥー・リデュース(shuffle-to-reduce)命令と称されるベクトル命令vshuf2reduceを提供してもよい。このVshuf2reduce命令は一つのソースVbおよび入力マスク(どの要素が有効かを示す)を受けて、(スカラー・レジスタにおける)シャッフル制御を生成し、マスク・レジスタを更新する。ある実施形態では、この命令は次のフォーマットをもつ:]
[0046] このように、このvshuf2reduce命令は、Vcについてのシャッフル制御を生成するために、Vb内の諸要素のVb内の他の諸要素に対する全部対全部の比較を実行する。シャッフル制御は、Vc内の諸要素を、Vb内で同じインデックス値をもつVc内の他の諸要素と対ごとの仕方で揃える(line up)ためのシャッフル命令への入力として使われる。さらに、マスクFが返され、このマスクにおいて、各対からの二つの項目の一方に対応する要素が無効に設定されている。]
[0047] 上記の第三の動作は、第二の動作の出力VoutputをCの現在の内容と組み合わせるものである。これは、Voutputに対応するCの要素を読み出し、それらの値をVoutputと一緒に累積し、次いで新たに累積された値をもとのCにおける対応する位置に記憶することを含む。]
[0048] 次の表4は、この命令を使って分散リダクションを実行する擬似コードである。]
[0049] vshuf2reduce命令は、ツリー・リダクション(tree reduction)のためのシャッフル制御を生成する。つまり、whileループは、最悪ケース(すべての要素が同一であり、よって単一の要素に還元される場合)でもO(log(VLEN))ステップ以内に完了することが期待され、上述した分散リダクション動作の第二の動作のパフォーマンスを著しく改善する。Vcのすべての要素がVbの一意的な値をもつ場合には、ループは単一の反復工程において完了しうる。]
[0050] ある実施形態では、vshuf2reduce命令は、表5の次の擬似コードに基づいて実装できる。]
[0051] 全部対全部の要素ごとの比較は、段階的に実装でき、シャッフル制御は、ある実施形態では、事前プログラムされたルックアップ・テーブル〔探索表〕を使うことによって生成できる。]
[0052] 付録IIIは、スカラー・リダクションの第二の動作のためのこの命令の使用を示している。]
[0053] 諸実施形態は、SIMDレジスタ内の複数のインデックスが同じ場合の効率的な扱いを通じてヒストグラム計算の効率的なSIMD実行を可能にするさらなる命令を提供してもよい。そのような命令は、ソースSIMDレジスタ内の一意的な整数値の分布数計数(population count)を計算してもよい。出力は、一意的な諸要素の分布数計数を保持するSIMDレジスタと、どの要素が一意的であるかを示すマスク・レジスタである。ある実施形態では、vitemcountと称されるこの命令は次のフォーマットをもつ:]
[0054] 動作例として、初期状態を次のようなものとする(ここで、「‐」はどうでもいい値を意味する):]
[0055] vitemcount命令後、状態は次のようになる。]
[0056] Vsの各要素Vs[i]の分布数計数値はVd[i]に記憶される。Vsにおける一意的なインデックスは、Fmask内にその対応する書き込みマスクがセットされる。]
[0057] このvitemcount命令を用いて、SIMDヒストグラム計算は表6における次のように提供されることができる。]
[0058] 表6に示されるように、この計算は四段階で実行される。第一段階では、ソース・レジスタVsおよびマスクFがベクトル・レジスタ・ファイル(VRF: vector register file)およびマスク・レジスタ・ファイル(RF)からそれぞれ読み込まれる。第二段階では、Vsにおける一意的な要素を同定するために全部対全部の比較が実行される。この第二段階の結果は、Vsの各要素Vs[i]に関連付けられた4ビット・タグであり、二つ以上の同一要素の群が同じタグをもつ。第三のパイプライン段階は、それらの4ビット・タグを使って、同一要素の各群における要素数を計数する。第四段階にして最終段階では、計数ベクトルおよびマスクがVdおよびFにそれぞれ書き込まれる。いくつかの実装では、この命令は、並列なヒストグラム計算を可能にし、シリアル実装に対して高速化を提供できる。]
[0059] 諸実施形態は、多くの異なるシステム種別において実装されうる。ここで図3を参照すると、本発明のある実施形態に基づくシステムのブロック図が示されている。図3に示されるように、マルチプロセッサ・システム500はポイント・ツー・ポイントの相互接続システムであり、ポイント・ツー・ポイント相互接続550を介して結合された第一のプロセッサ570および第二のプロセッサ580を含む。図3に示されるように、プロセッサ570および580のそれぞれは、第一および第二のプロセッサ・コア(すなわち、プロセッサ・コア571aおよび574bならびにプロセッサ・コア584aおよび584b)を含むマルチコア・プロセッサであってもよい。各プロセッサ・コアは、本発明の実施形態に基づく単一命令ベクトル動作の実行を可能にするよう、図1のAおよびBに示されるような論理を含んでいてもよい。このようにして、原子的なベクトル動作が実行されることができ、本稿に記載されるベクトル命令をてこ入れするためにさまざまなコードが実行されることができる。] 図1 図3
[0060] 引き続き図3を参照するに、第一のプロセッサ570はさらに、メモリ・コントローラ・ハブ(MCH)572およびポイント・ツー・ポイント(P-P)インターフェース576および578を含む。同様に、第二のプロセッサ580はさらに、MCH582およびP-Pインターフェース586および588を含む。図4に示されるように、MCH572および582はプロセッサをそれぞれのメモリ、すなわちメモリ532およびメモリ534に結合する。メモリ532およびメモリ534はそれぞれのプロセッサにローカルに取り付けられたメイン・メモリ(たとえば、動的ランダム・アクセス・メモリ(DRAM))の一部であってもよい。第一のプロセッサ570および第二のプロセッサ580は、チップセット590に、それぞれP-P相互接続552および554を介して結合されてもよい。図3に示されるように、チップセット590はP-Pインターフェース594および598を含む。] 図3
[0061] さらに、チップセット590は、チップセット590を高性能グラフィック・エンジン538と結合するためのインターフェース592を含む。また、チップセット590は第一のバス516にインターフェース596を介して結合されてもよい。図3に示されるように、さまざまなI/O機器514が、バス・ブリッジ518とともに、第一のバス516に結合されてもよい。バス・ブリッジ518は第一のバス516を第二のバス520に結合する。さまざまな機器が第二のバス520に結合されてもよい。それにはたとえば、キーボード/マウス522、通信装置526およびディスク・ドライブまたは他の大容量記憶装置のようなデータ記憶装置528が含まれる。記憶装置はある実施形態ではコード530を含んでいてもよい。さらに、オーディオI/O524が第二のバス520に結合されてもよい。] 図3
[0062] 諸実施形態はコードで実装されてもよく、命令を記憶している記憶媒体上に記憶されてもよい。該命令は、該命令を実行するようシステムをプログラムするために使うことのできるものである。記憶媒体は、これに限られないが、任意の型のフロッピー(登録商標)ディスク、光ディスク、コンパクトディスクを利用した読み出し専用メモリ(CD-ROM)、書き換え可能型コンパクトディスク(CD-RW)および光磁気ディスクを含むディスク、読み出し専用メモリ(ROM)、動的ランダム・アクセス・メモリ(DRAM)、静的ランダム・アクセス・メモリ(SRAM)のようなランダム・アクセス・メモリ(RAM)、消去可能なプログラム可能型読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的に消去可能なプログラム可能型読み出し専用メモリ(EEPROM)のような半導体デバイス、磁気カードまたは光カード、あるいは電子的な命令を記憶するのに好適な他の任意の型の媒体を含みうる。]
[0063] 本発明は、限られた数の実施形態に関して記述してきたが、当業者は、それから数多くの修正および変形を認識するであろう。付属の請求項は、本発明の真の精神および範囲にはいるあらゆるそのような修正および変形をカバーすることが意図されている。]
[0064] 付録I]
[0065] ]
[0066] 付録II
vscattercondは次の外的振る舞いをもつべきである。]
[0067] ]
[0068] 付録III
初期状態(「‐」はどうでもいい値を表す)、SC=Shuffle_Controlはスカラー・オペランドだが、ここでは理解の簡単のためベクトルとして表している。]
[0069] この時点では、Vbの初期値がみな一意的であれば、Fマスクはいまだすべて1である。それは事実上F1マスクと同じであり、whileループ(L4ないしL9)は実行されずに動作2は完了する。この例では、Vbのいくつかの要素が同一なのでFマスクはF1マスクと同じではない。よって、ループ(L4ないしL9)が実行される。]
[0070] L4からL9までの間のループにおいて、vshuf2reduce、vshuffleおよびvaddは、マスクが変化しなくなるまで繰り返しコールされる。マスクが変化しなくなったら、リダクション動作の終わりということである。]
[0071] L9はループしてL4に戻る。FとF1はまだ異なるので、もう一回ループを実行する必要がある。]
[0072] ]
[0073] ]
权利要求:

請求項1
第一のベクトル命令、各アドレスが複数のデータ要素をもつベクトルの対応するデータ要素を有する記憶位置へのアドレスである複数のアドレスおよび前記ベクトルに関連付けられたマスク情報を受け取り、前記マスク情報によって示されるように前記複数のアドレスの各アドレスに対応する記憶位置から取得されたデータ要素をロードし、それらの記憶位置をその後の動作のためにリザーブする論理を有する、プロセッサ。
請求項2
前記論理は、取得が成功しなかったデータ要素のそれぞれに対応する無効インジケータをもって前記マスク情報を更新する、請求項1記載のプロセッサ。
請求項3
前記論理は、取得が成功したデータ要素に対応する、前記複数のデータ要素の部分集合をロードし、リザーブする、請求項2記載のプロセッサ。
請求項4
請求項1記載のプロセッサであって、前記論理は、第二のベクトル命令、各アドレスが前記ベクトルの対応するデータ要素を有する記憶位置へのアドレスである第二の複数のアドレスおよび第二のマスク情報を受け取り、ソース記憶装置からのデータ要素を、前記第二のマスク情報によって示されるように前記第二の複数のアドレスの各アドレスに対応する記憶位置に、その記憶位置がまだリザーブされている場合に、条件付きで書き込む、プロセッサ。
請求項5
前記論理は、もはやリザーブされていなかった記憶位置のそれぞれに対応する無効インジケータをもって、前記第二のマスク情報からの出力マスクを生成する、請求項4記載のプロセッサ。
請求項6
単一の命令に応答して複数のデータ要素に対して動作を実行する単一命令複数データ(SIMD)ユニットと;前記SIMDユニットに前記複数のデータ要素を与えるよう前記SIMDユニットに結合された制御ユニットとを有する装置であって、前記制御ユニットは、第一のマスクのもとで実行される第一のSIMD命令および第二のマスクのもとで実行される第二のSIMD命令に応答して前記複数のデータ要素の少なくともいくつかに対して原子的なSIMD動作が実行されることを可能にする、装置。
請求項7
前記第一のSIMD命令が、前記第一のマスクに対応する入力マスクに従って、第一の諸メモリ位置から前記複数のデータ要素を取得し、前記第一の諸メモリ位置をリザーブする、請求項6記載の装置。
請求項8
前記第二のSIMD命令が、前記第二のマスクに対応する入力マスクに従って、ソース位置からの第二の複数のデータ要素をリザーブされている前記第一の諸メモリ位置に記憶し、前記第一のSIMD命令が前記第二のマスクの生成を引き起こす、請求項7記載の装置。
請求項9
前記制御ユニットが、第二の複数のデータ要素を有する第二のベクトルを比較して、同じ値をもつデータ要素の群を示すシャッフル・コントロールを出力し、一意的でないデータ要素を示すために第三のマスクのインジケータを設定する第三のSIMD命令を前記SIMDユニットが実行することを可能にする、請求項6記載の装置。
請求項10
前記制御ユニットが、第三の複数のデータ要素を有する第三のベクトルの同一の要素の計数値を生成して、各一意的な要素についての計数値を宛先記憶装置に記憶し、さらに各一意的な要素を示す第四のマスクのインジケータを書き込む第四のSIMD命令を前記SIMDユニットが実行することを可能にする、請求項6記載の装置。
請求項11
プロセッサと;前記プロセッサに結合された動的ランダム・アクセス・メモリ(DRAM)とを有するシステムであって、前記プロセッサは、第一のマスクに従って、ベクトルのデータ要素の少なくとも部分集合を、対応する複数の、可能性としては非連続的なソース位置から取得して、前記部分集合の前記可能性としては非連続的なソース位置をその後の動作のためにリザーブする第一の単一命令複数データ(SIMD)命令を実行し、前記データ要素の部分集合を使って原子的なSIMD動作を実行し、第二のマスクに従って、データ要素の少なくとも第二の部分集合を、前記対応する複数の、可能性としては非連続的なソース位置に書き込む第二のSIMD命令を実行する論理を含む、システム。
請求項12
前記プロセッサは、データ要素の前記第二の部分集合を、前記対応する、可能性としては非連続的なソース位置のうちでいまだリザーブされている位置に書き込むよう前記第二のSIMD命令を実行する、請求項11記載のシステム。
請求項13
前記プロセッサは、取得が成功しなかったデータ要素のそれぞれに対応する無効インジケータをもって前記第一のマスクを更新する、請求項11記載のシステム。
請求項14
前記プロセッサが、第二の複数のデータ要素を有する第二のベクトルを解析し、同じ値をもつ前記第二の複数のデータ要素の群を示すシャッフル・コントロールを出力し、一意的でないデータ要素を示すために第三のマスクのインジケータを設定する第三のSIMD命令を実行する、請求項11記載のシステム。
請求項15
前記プロセッサが、第三の複数のデータ要素を有する第三のベクトルの同一の要素の計数値を生成して、各一意的な要素についての計数値を宛先記憶装置に記憶する第四のSIMD命令を実行する、請求項11記載のシステム。
类似技术:
公开号 | 公开日 | 专利标题
US10585670B2|2020-03-10|Cache storing data fetched by address calculating load instruction with label used as associated name for consuming instruction to refer
US20180157491A1|2018-06-07|Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9830158B2|2017-11-28|Speculative execution and rollback
Tian et al.2008|Copy or discard execution model for speculative parallelization on multicores
US9081803B2|2015-07-14|Performance of RCU-based searches and updates of cyclic data structures
US8214831B2|2012-07-03|Runtime dependence-aware scheduling using assist thread
JP3149348B2|2001-03-26|代理命令を用いる並列処理システム及び方法
JP2698033B2|1998-01-19|順不同の命令実行を可能にするコンピュータ・システム及びその操作方法
US8776030B2|2014-07-08|Partitioning CUDA code for execution by a general purpose processor
JP3014773B2|2000-02-28|プロセサアーキテクチャ
US5918005A|1999-06-29|Apparatus region-based detection of interference among reordered memory operations in a processor
Zhu et al.2007|Synchronization state buffer: supporting efficient fine-grain synchronization on many-core architectures
US8583905B2|2013-11-12|Runtime extraction of data parallelism
KR101367450B1|2014-02-25|멀티 스레드 어플리케이션을 위한 해시 테이블의 동시 리해싱의 수행
EP2951681B1|2018-11-14|Solution to divergent branches in a simd core using hardware pointers
US7953778B2|2011-05-31|Efficient support of consistent cyclic search with read-copy update and parallel updates
EP3314401B1|2020-02-12|Block-based architecture with parallel execution of successive blocks
JP4658894B2|2011-03-23|マルチプロセッサ・メモリ整合性の効率のよいエミュレーションのための方法
JP2898820B2|1999-06-02|自己並列化式のコンピュータ・システムおよび方法
US7617384B1|2009-11-10|Structured programming control flow using a disable mask in a SIMD architecture
US5758051A|1998-05-26|Method and apparatus for reordering memory operations in a processor
US8078847B2|2011-12-13|Detecting memory-hazard conflicts during vector processing
Pacheco2011|An introduction to parallel programming
US8060728B2|2011-11-15|Generating stop indicators during vector processing
US8225076B1|2012-07-17|Scoreboard having size indicators for tracking sequential destination register usage in a multi-threaded processor
同族专利:
公开号 | 公开日
CN101978350A|2011-02-16|
JP5455936B2|2014-03-26|
CN101978350B|2014-06-11|
US20140068226A1|2014-03-06|
JP5902209B2|2016-04-13|
WO2009120981A2|2009-10-01|
US9513905B2|2016-12-06|
US20090249026A1|2009-10-01|
US9678750B2|2017-06-13|
DE112009000741T5|2012-01-26|
JP2014099194A|2014-05-29|
CN103970506B|2017-07-14|
CN103970506A|2014-08-06|
WO2009120981A3|2009-12-17|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
JPH05108699A|1991-10-15|1993-04-30|Hitachi Ltd|共有データのベクトル処理方法|
US5872987A|1992-08-07|1999-02-16|Thinking Machines Corporation|Massively parallel computer including auxiliary vector processor|
JP2000057111A|1998-08-04|2000-02-25|Hitachi Ltd|並列処理プロセッサ、および、並列処理方法|
US7421565B1|2003-08-18|2008-09-02|Cray Inc.|Method and apparatus for indirectly addressed vector load-add -store across multi-processors|
US7627723B1|2006-09-21|2009-12-01|Nvidia Corporation|Atomic memory operators in a parallel processor|JP2014526757A|2011-09-26|2014-10-06|インテル・コーポレーション|Instructions and logic for providing vector scattering calculation function and vector collection calculation function|
JP2014526758A|2011-09-26|2014-10-06|インテル・コーポレーション|Instruction and logic providing vector load / store operations with stride function|
JP2014530429A|2011-09-23|2014-11-17|クアルコム,インコーポレイテッド|トランザクションメモリ動作を実行するように構成されたプロセッサ|
JP2016157479A|2016-05-02|2016-09-01|インテル・コーポレーション|Instructions and logic for providing vector scattering calculation function and vector collection calculation function|
WO2016136197A1|2015-02-25|2016-09-01|日本電気株式会社|データ処理装置、データ処理方法及び記録媒体|
JP2016527650A|2013-08-06|2016-09-08|インテル・コーポレーション|ベクトルポピュレーションカウント機能性を提供する方法、装置、命令、およびロジック|
JP2016529617A|2013-08-06|2016-09-23|インテル・コーポレーション|ゲノム配列決定および配列比較のためのポピュレーションカウント機能性を提供する方法、装置、命令、およびロジック|
US9477465B2|2012-11-27|2016-10-25|Fujitsu Limited|Arithmetic processing apparatus, control method of arithmetic processing apparatus, and a computer-readable storage medium storing a control program for controlling an arithmetic processing apparatus|US5513353A|1987-09-30|1996-04-30|Kabushiki Kaisha Toshiba|Cache control system which permanently inhibits local but not global parameter data writes to main memory|
US4953101A|1987-11-24|1990-08-28|Digital Equipment Corporation|Software configurable memory architecture for data processing system having graphics capability|
WO1995016234A1|1993-12-12|1995-06-15|Asp Solutions Usa, Inc.|Apparatus and method for signal processing|
JPH07271764A|1994-03-24|1995-10-20|Internatl Business Mach Corp <Ibm>|計算機プロセッサ及びシステム|
JP3179290B2|1994-07-28|2001-06-25|シャープ株式会社|ディジタル画像形成装置|
US5818443A|1996-05-06|1998-10-06|Cognex Corporation|Single step coarse registration and inspection of circular objects|
US6865295B2|2001-05-11|2005-03-08|Koninklijke Philips Electronics N.V.|Palette-based histogram matching with recursive histogram vector generation|
US7032082B1|2001-08-31|2006-04-18|Juniper Networks, Inc.|Centralized memory allocation with write pointer drift correction|
US20040054877A1|2001-10-29|2004-03-18|Macy William W.|Method and apparatus for shuffling data|
US6944744B2|2002-08-27|2005-09-13|Advanced Micro Devices, Inc.|Apparatus and method for independently schedulable functional units with issue lock mechanism in a processor|
US20040236920A1|2003-05-20|2004-11-25|Sheaffer Gad S.|Methods and apparatus for gathering and scattering data associated with a single-instruction-multiple-data operation|
CN100502511C|2004-09-14|2009-06-17|华为技术有限公司|用于分数像素精度运动预测的插值图像内存组织方法|
CN101061460B|2004-09-21|2011-03-30|Nxp股份有限公司|用于混移运算的微处理器设备和方法|
US7433513B2|2005-01-07|2008-10-07|Hewlett-Packard Development Company, L.P.|Scaling an array of luminace values|
JP2007334563A|2006-06-14|2007-12-27|Nec Corp|マスク付きベクトル演算処理装置|
DE602006006990D1|2006-06-28|2009-07-09|St Microelectronics Nv|SIMD-Prozessorarchitektur mit gruppierten Verarbeitungseinheiten|
US20080071851A1|2006-09-20|2008-03-20|Ronen Zohar|Instruction and logic for performing a dot-product operation|
US8081823B2|2007-11-20|2011-12-20|Seiko Epson Corporation|Segmenting a string using similarity values|
US9529592B2|2007-12-27|2016-12-27|Intel Corporation|Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation|
US9513905B2|2008-03-28|2016-12-06|Intel Corporation|Vector instructions to enable efficient synchronization and parallel reduction operations|EP2011018B1|2006-04-12|2016-07-13|Soft Machines, Inc.|Apparatus and method for processing an instruction matrix specifying parallel and dependent operations|
US8677105B2|2006-11-14|2014-03-18|Soft Machines, Inc.|Parallel processing of a sequential program using hardware generated threads and their instruction groups executing on plural execution units and accessing register file segments using dependency inheritance vectors across multiple engines|
US20090138680A1|2007-11-28|2009-05-28|Johnson Timothy J|Vector atomic memory operations|
US9513905B2|2008-03-28|2016-12-06|Intel Corporation|Vector instructions to enable efficient synchronization and parallel reduction operations|
US8904153B2|2010-09-07|2014-12-02|International Business Machines Corporation|Vector loads with multiple vector elements from a same cache line in a scattered load operation|
US10228949B2|2010-09-17|2019-03-12|Intel Corporation|Single cycle multi-branch prediction including shadow cache for early far branch prediction|
CN102004672B|2010-11-25|2012-12-05|中国人民解放军国防科学技术大学|一种可配置归约目标自增间隔的归约装置|
US8688957B2|2010-12-21|2014-04-01|Intel Corporation|Mechanism for conflict detection using SIMD|
US8972698B2|2010-12-22|2015-03-03|Intel Corporation|Vector conflict instructions|
TWI518504B|2011-03-25|2016-01-21|軟體機器公司|使用可分割引擎實體化的虛擬核心以支援程式碼區塊執行的暫存器檔案節段|
CN103547993B|2011-03-25|2018-06-26|英特尔公司|通过使用由可分割引擎实例化的虚拟核来执行指令序列代码块|
CN108108188A|2011-03-25|2018-06-01|英特尔公司|用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段|
WO2012134321A1|2011-03-30|2012-10-04|Intel Corporation|Simd integer addition including mathematical operation on masks|
US20120254591A1|2011-04-01|2012-10-04|Hughes Christopher J|Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements|
CN102156637A|2011-05-04|2011-08-17|中国人民解放军国防科学技术大学|向量交叉多线程处理方法及向量交叉多线程微处理器|
WO2012162189A1|2011-05-20|2012-11-29|Soft Machines, Inc.|An interconnect structure to support the execution of instruction sequences by a plurality of engines|
CN107729267A|2011-05-20|2018-02-23|英特尔公司|资源的分散分配以及用于支持由多个引擎执行指令序列的互连结构|
US8521705B2|2011-07-11|2013-08-27|Dell Products L.P.|Accelerated deduplication|
CN106293631B|2011-09-26|2020-04-10|英特尔公司|用于提供向量分散操作和聚集操作功能的指令和逻辑|
WO2013077876A1|2011-11-22|2013-05-30|Soft Machines, Inc.|A microprocessor accelerated code optimizer|
KR101648278B1|2011-11-22|2016-08-12|소프트 머신즈, 인크.|마이크로프로세서 가속 코드 최적화기 및 의존성 재순서화 방법|
CN104040490B|2011-11-22|2017-12-15|英特尔公司|用于多引擎微处理器的加速的代码优化器|
CN103959237B|2011-11-30|2016-09-28|英特尔公司|用于提供向量横向比较功能的指令和逻辑|
US10318291B2|2011-11-30|2019-06-11|Intel Corporation|Providing vector horizontal compare functionality within a vector register|
WO2013089749A1|2011-12-15|2013-06-20|Intel Corporation|Methods to optimize a program loop via vector instructions using a shuffle table and a mask store table|
CN104011657B|2011-12-22|2016-10-12|英特尔公司|用于向量计算和累计的装置和方法|
US20140201499A1|2011-12-23|2014-07-17|Elmoustapha Ould-Ahmed-Vall|Systems, apparatuses, and methods for performing conversion of a list of index values into a mask value|
CN104137059B|2011-12-23|2018-10-09|英特尔公司|多寄存器分散指令|
WO2013095608A1|2011-12-23|2013-06-27|Intel Corporation|Apparatus and method for vectorization with speculation support|
US9766887B2|2011-12-23|2017-09-19|Intel Corporation|Multi-register gather instruction|
CN104025067B|2011-12-29|2017-12-26|英特尔公司|具有由向量冲突指令和置换指令共享的全连接互连的处理器|
EP2798465B1|2011-12-30|2018-11-14|Intel Corporation|Unique packed data element identification processors, methods, systems, and instructions|
US9575753B2|2012-03-15|2017-02-21|International Business Machines Corporation|SIMD compare instruction using permute logic for distributed register files|
US9298456B2|2012-08-21|2016-03-29|Apple Inc.|Mechanism for performing speculative predicated instructions|
US9804839B2|2012-12-28|2017-10-31|Intel Corporation|Instruction for determining histograms|
US10545757B2|2012-12-28|2020-01-28|Intel Corporation|Instruction for determining equality of all packed data elements in a source operand|
US9411592B2|2012-12-29|2016-08-09|Intel Corporation|Vector address conflict resolution with vector population count functionality|
US9372692B2|2012-12-29|2016-06-21|Intel Corporation|Methods, apparatus, instructions, and logic to provide permute controls with leading zero count functionality|
US9411584B2|2012-12-29|2016-08-09|Intel Corporation|Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality|
WO2014150806A1|2013-03-15|2014-09-25|Soft Machines, Inc.|A method for populating register view data structure by using register template snapshots|
KR102063656B1|2013-03-15|2020-01-09|소프트 머신즈, 인크.|블록들로 그룹화된 멀티스레드 명령어들을 실행하기 위한 방법|
US9639503B2|2013-03-15|2017-05-02|Qualcomm Incorporated|Vector indirect element vertical addressing mode with horizontal permute|
US9569216B2|2013-03-15|2017-02-14|Soft Machines, Inc.|Method for populating a source view data structure by using register template snapshots|
US10275255B2|2013-03-15|2019-04-30|Intel Corporation|Method for dependency broadcasting through a source organized source view data structure|
US9886279B2|2013-03-15|2018-02-06|Intel Corporation|Method for populating and instruction view data structure by using register template snapshots|
WO2014150971A1|2013-03-15|2014-09-25|Soft Machines, Inc.|A method for dependency broadcasting through a block organized source view data structure|
EP2972836A4|2013-03-15|2017-08-02|Intel Corporation|A method for emulating a guest centralized flag architecture by using a native distributed flag architecture|
WO2014150991A1|2013-03-15|2014-09-25|Soft Machines, Inc.|A method for implementing a reduced size register view data structure in a microprocessor|
US9904625B2|2013-03-15|2018-02-27|Intel Corporation|Methods, systems and apparatus for predicting the way of a set associative cache|
US9891924B2|2013-03-15|2018-02-13|Intel Corporation|Method for implementing a reduced size register view data structure in a microprocessor|
US10140138B2|2013-03-15|2018-11-27|Intel Corporation|Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation|
US9811342B2|2013-03-15|2017-11-07|Intel Corporation|Method for performing dual dispatch of blocks and half blocks|
US9348589B2|2013-03-19|2016-05-24|Apple Inc.|Enhanced predicate registers having predicates corresponding to element widths|
US9817663B2|2013-03-19|2017-11-14|Apple Inc.|Enhanced Macroscalar predicate operations|
US9552205B2|2013-09-27|2017-01-24|Intel Corporation|Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions|
JP6329412B2|2014-03-26|2018-05-23|株式会社メガチップス|Simdプロセッサ|
US20160026607A1|2014-07-25|2016-01-28|Qualcomm Incorporated|Parallelization of scalar operations by vector processors using data-indexed accumulators in vector register files, and related circuits, methods, and computer-readable media|
CN105159766B|2015-08-31|2018-05-25|安一恒通(北京)科技有限公司|数据的同步访问方法和同步访问装置|
WO2017087001A1|2015-11-20|2017-05-26|Hewlett Packard Enterprise Development Lp|Distributed data shuffling|
CN105487839A|2015-11-24|2016-04-13|无锡江南计算技术研究所|一种面向连续不对界向量数据访问的编译优化方法|
US10152321B2|2015-12-18|2018-12-11|Intel Corporation|Instructions and logic for blend and permute operation sequences|
US10248419B2|2016-03-09|2019-04-02|International Business Machines Corporation|In-memory/register vector radix sort|
US20180005059A1|2016-07-01|2018-01-04|Google Inc.|Statistics Operations On Two Dimensional Image Processor|
US10564964B2|2016-08-23|2020-02-18|International Business Machines Corporation|Vector cross-compare count and sequence instructions|
CN109844730A|2016-09-12|2019-06-04|甲骨文国际公司|对具有多个谓词表达式的查询的高效评估|
US10474461B2|2016-09-22|2019-11-12|Qualcomm Incorporated|Instruction-based synchronization of operations including at least one SIMD scatter operation|
US10268479B2|2016-12-30|2019-04-23|Intel Corporation|Systems, apparatuses, and methods for broadcast compare addition|
US10360034B2|2017-04-18|2019-07-23|Samsung Electronics Co., Ltd.|System and method for maintaining data in a low-power structure|
US20190042253A1|2017-08-01|2019-02-07|Arm Limited|Counting elements in data items in a data processing apparatus|
US10133573B1|2017-12-12|2018-11-20|Google Llc|Multivalue reductions using serial initial reductions in multiple register spaces and parallel subsequent reductions in a single register space|
US10713046B2|2017-12-20|2020-07-14|Exten Technologies, Inc.|System memory controller with atomic operations|
法律状态:
2012-12-13| A977| Report on retrieval|Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20121212 |
2012-12-26| A131| Notification of reasons for refusal|Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20121225 |
2013-03-15| A521| Written amendment|Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20130314 |
2013-08-21| A131| Notification of reasons for refusal|Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130820 |
2013-11-15| A521| Written amendment|Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20131114 |
2013-12-03| TRDD| Decision of grant or rejection written|
2013-12-11| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20131210 |
2014-01-16| A61| First payment of annual fees (during grant procedure)|Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140107 |
2014-01-17| R150| Certificate of patent or registration of utility model|Free format text: JAPANESE INTERMEDIATE CODE: R150 |
2017-01-17| LAPS| Cancellation because of no payment of annual fees|
优先权:
申请号 | 申请日 | 专利标题
[返回顶部]