2017-08-16 5 views
3

_mm512_storenrngo_pd_mm512_storenr_pdの違いは何ですか?_mm512_storenr_pdと_mm512_storenrngo_pd

_mm512_storenr_pd(void *型MT、__m512d V):に無読みヒントとメモリアドレスMTに Vから倍精度(64ビット)浮動小数点要素を詰め

店舗プロセッサー。

ノーリードヒントの意味はわかりません。それは、非キャッシュ一貫性書き込みであることを意味しますか?再利用はより高価であるか、一貫性がないという意味ですか?

_mm512_storenrngo_pd(ボイド* MT、__m512d V):

格納パックド倍精度(64ビット)なし読み取りヒントと使用のメモリアドレスMTに対するV から浮動小数点要素弱い順序の メモリ一貫性モデル(この関数で実行されるストアは、グローバルに順序付けされた ではなく、同じスレッドからの後続のストアは、それらの前に観察される になる可能性があります)。

storenr_pdと基本的に同じ、それは弱い一貫性モデルを使用するので、このプロセスは、他のプロセッサの前に、自身の書き込みを見ることができることを意味します。しかし、別のプロセッサへのアクセスは、非コヒーレントであるか、またはより高価ですか? Intel® Xeon Phi™ Coprocessor Vector Microarchitectureから

答えて

3

引用:一般的に

、キャッシュラインに書き込むためには、Xeonプロセッサフ​​ァイ™コプロセッサは、それに書き込む前にキャッシュラインに読み取る必要があります。これは所有権(RFO)として知られています。この実装の1つの問題は、書き込まれたデータが再利用されないことです。非時間データを読み取るためにBWを不必要に使用します。インテル®Xeon Phi™コプロセッサーは、データがストリーミング・ストアである場合、データを読み取らない命令をサポートします。これらの命令VMOVNRAP *、VMOVNRNGOAP *は、データを最初に読み取らずにデータを書き込む必要があることを示すことができます。 Xeon Phi ISAでは、VMOVNRAPS/VMOVNRPD命令は、不要な読み出しステップを経ないことによってキャッシュミスの場合にメモリBWを最適化することができます。

VMOVNRNGOAP *命令は、プログラマがアプリケーションデータの弱い書き込み順序を許容する場合、つまりこれらの命令によって実行されるストアがグローバルに順序付けられていない場合に便利です。これは、VMOVNRNGOAP命令が実行される前に、同じスレッドによる後続の書き込みが観察できることを意味します。複数のスレッドが同じ場所に読み書きしている場合は、メモリフェンシング操作をこの操作と組み合わせて使用​​する必要があります。

それは「無読みヒント」、「ストリーミングストア」ようだと、「非一時的なストリーム/ストア」複数のリソースに交換可能に使用されます。

Knights Corner(KNC、vmovnrap *とvmovnrngoap *の両方が所属しています)では、ストアがL2キャッシュになりますが、キャッシュのすべてのレベルをバイパスするわけではありません。

としては、上記の引用で説明し、vmovnrngoap *ので、弱く順序付けられたメモリ一貫性モデルは「VMOVNRNGOAP命令がが実行される前に、同じスレッドによって次の書き込みを観察することができる」可能にvmovnrap *から特別ですはい、別のスレッドまたはプロセッサのアクセスは非コヒーレントであり、フェンシング操作を使用する必要があります。 CPUIDはフェンシング操作として使用できますが、より良いオプションは "LOCK ADD [RSP]、0"(ダミーアトミックアド)またはXCHG(ストアとフェンスを組み合わせたもの)です。

少数の詳細:KNCオン

NR店舗【選択NRストア命令(vmovnr)から

  • より引用符を常に安全に使用することができる標準的なベクトルストア命令です。ローカル・キャッシュでミスしたNRストア命令は、リモート・キャッシュ内のキャッシュ・ラインのすべての潜在的コピーを無効にし、ローカル・キャッシュで排他的に割り当てられる(初期化されない)キャッシュ・ラインと、キャッシュラインに書き込まれる命令。メインメモリからのデータ転送はありません。これはメモリ帯域幅を節約します。 NRストア命令および同じスレッドからの他のロード命令および/またはストア命令は、グローバル順序付けされている。つまり、この命令列のすべてのオブザーバは常に同じ固定実行順序を参照する。

    NR.NGO(非全体的に秩序)ストア命令(vmovnrngo)が緩和NRストアinstruction.This緩和のグローバルな順序制約は、NR.NGOの指示を行うNRinstructionより低いレイテンシーを持って、そのことができますストリーミングストアの大規模なアプリケーションでより高いパフォーマンスを達成するために使用することができます。しかしながら、この制限を取り除くことは、NR.NGOストア命令、および同じスレッドからの他のロード命令および/またはストア命令が、2人の観察者によって2つの異なる順序を有することが観察されることを意味する。 NR.NGOストア命令の使用は、これらの命令の順序を並べ替えることが結果を変更しないことが確認された場合にのみ安全です。そうしないと、NR.NGOストアを使用すると誤った実行につながる可能性があります。私たちのコンパイラは、非一時的な振る舞いを持つと識別するストア命令のためのNR.NGOストア命令を生成することができる。例えば、コンパイラによって非時間的であると検出される並列ループは、NR.NGO命令を利用することができる。そのようなループが終了すると、グローバルでないすべての未処理のストアが完了し、すべてのスレッドが一貫したメモリビューを持つように、コンパイラはループの後にフェンス(ロック命令)を生成します。このフェンスは、後続のコードフラグメントの実行を続行する前にすべてのスレッドがまったく同じメモリビューを持つようにするために必要です。

  • 一般的な経験則は、即時の将来再利用されない非一時的なストアメリットメモリアクセスブロックです。どちらの場合も、再利用が高価になります。

    +0

    '' vmovnrngoaps'の後で、 '' buffer_ready ''フラグへの後のストアでの並べ替えを停止するのに十分ではないでしょうか?それともKNCは違うの?通常のCPUでは、[vmovntps [payload]、ymm0'/'sfence' /' mov [flag]、1'で十分です。](https://stackoverflow.com/a/44866652/224132)。 (そして、 'CPUID'でも十分ですか?ストアがリタイアした後もデータはストアバッファに残っている可能性があります。また、アウトオブオーダーパイプラインをシリアル化するCPUIDはストアキューとNTストアバッファをフラッシュしません。 Line-Fill Buffers)、そうですか?) –

    +0

    'vmovnrngoaps'はAVX/AVX512' vmovntps'/'_mm512_stream_ps'と同じように発音します。ああ、KNCはSFENCEやMFENCEを持っていないのですか?あなたの最後の引用符には*私たちのコンパイラがフェンス(ロック命令)*を生成するものが含まれています。私はKNCについてよく読んだことはありません。 Agner Fogのmicroarchガイドにはセクションがありません。 –

    +1

    私はKNCがそれらをサポートしていないと思います。 「インテル®Xeon®プロセッサー・ソフトウェア開発者ガイド」の第4.2.18.1項に記載されているとおり、「インテル®Xeon®プロセッサー・プロセッサーは、より厳密なメモリー発注モデルの結果、SFENCE、LFENCE、およびMFENCE命令をサポートしていません。他のインテル・プロセッサー上のメモリー順序を制御する効率的な方法です。 – veritas

    関連する問題