問題タブ [avx512]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Intel MIC - 組み込みベクトル要素の合計
__m512d 組み込みベクトルがあり、その要素の合計が必要です。これを行う簡単な方法はありますか?私は計算のパフォーマンスに集中しているので、この操作をすばやく行う必要があります。組み込みに関する私の知識は、自分で行うには十分ではないため、あなたの助けが必要です。
ありがとう :)
c - XeonPhi で AVX インライン アセンブリを使用した Vector Sum
XeonPhi Intel コプロセッサーを初めて使用します。AVX 512 ビット命令を使用して、単純なベクトル和のコードを書きたいと考えています。k1om-mpss-linux-gcc をコンパイラとして使用し、インライン アセンブリを記述したいと考えています。ここに私のコードがあります:
しかし、プログラムを実行すると、asm 部分からセグメンテーション違反が発生しました。誰かがそれを手伝ってくれますか???
ありがとう
c - 組み込みとアセンブリを使用した埋め込みブロードキャスト
Intel Architecture Instruction Set Extensions Programming Referenceのセクション 2.5.3「Broadcasts」では、AVX512 (および Knights Corner) が
一部のロード操作命令、つまり、メモリからデータをロードし、何らかの計算またはデータ移動操作を実行する命令のデータ ブロードキャストをエンコードするためのビット フィールド。
たとえば、Intel アセンブリ構文を使用して、格納されているアドレスでスカラーをブロードキャストrax
し、16 個の浮動小数点数で乗算して、結果を次のようzmm2
に書き込むことができます。zmm1
ただし、これを実行できる組み込み関数はありません。したがって、組み込み関数を使用すると、コンパイラは折りたたむことができるはずです
単一の命令に
しかし、私はGCCがこれを行っていることを観察していません。これに関する GCC バグ レポートを見つけました。
GCC を使用した FMA で同様のことを確認しました。たとえば、GCC 4.9 は_mm256_add_ps(_mm256_mul_ps(areg0,breg0)
、-Ofast
. ただし、GCC 5.1 では現在、単一の fma に折りたたまれています。少なくとも、FMA でこれを行う組み込み関数があります_mm256_fmadd_ps
。しかし、例えば_mm512_mulbroad_ps(vector,scalar)
本質的なものはありません。
GCC はいずれこれを修正するかもしれませんが、それまではアセンブリが唯一の解決策です。
私の質問は、GCC のインライン アセンブリでこれを行う方法ですか?
上記の例の GCC インライン アセンブリの正しい構文を思いついたかもしれません (ただし、よくわかりません)。
私は本当にこのような機能を探しています
どこで ifb
はメモリ内にあり、その中のポイントがrax
生成されます
その中にある場合b
はxmm1
生成されます
GCC はすでにvbroadcastss
組み込み関数を使用して -from-register ケースを実行しますが、メモリ内にある場合は、これをfrom メモリb
にコンパイルします。vbroadcastss
メモリ内にある場合、clang はブロードキャスト メモリ オペランドを使用b
します。
assembly - AVX512 ベクトル長と SAE コントロール
私の質問は、VMIN*、VCVTT*、VGETEXT*、VREDUCE*、VRANGE* などの SAE 制御 (Suppress All Exceptions) を可能にするセマンティックを丸めずに EVEX でエンコードされたパックされた reg-reg 命令に関するものです。 512 ビットのベクトル長、たとえば
しかし、xmm または ymm レジスターが使用されている命令に SAE を適用できなかった理由がわかりません。
Intel Instruction Set Extensions Programming Referenceの 4.6.4 章の 表 4-7 は、セマンティック ビット EVEX.b を丸めない命令では、SAE が適用されることを指定し、ビット EVEX.L'L は明示的なベクトル長を指定すると述べています。
したがって、それらの組み合わせは合法でなければなりません。
ただし、NASMvminpd zmm1,zmm2,zmm3,{sae}
は 62F1ED185DCB、つまり EVEX.L'L=00b、EVEX.b=1 としてアセンブルし、NDISASM 2.12 によって逆アセンブルされます。vminpd xmm1,xmm2,xmm3
NASM はアセンブルvminpd ymm1,ymm2,ymm3,{sae}
を拒否し、NDISASM は 62F1ED385DCB (EVEX.L'L=01b、EVEX.b=1) を次のように逆アセンブルします。vminpd xmm1,xmm2,xmm3
Knights Landing CPU はどのように実行されるのだろうかVMINPD ymm1, ymm2, ymm3{sae}
(62F1ED385DCB、EVEX.L'L=01b、EVEX.b=1 としてアセンブル) :
- CPU が例外をスローします。Intel doc の表 4-7 は誤解を招くものです。
- SAE が有効で、CPU はスカラー演算と同様に xmm のみで動作します。NASM と NDISASM は正しく機能しますが、Intel のドキュメントは間違っています。
- SAE は無視され、CPU は Intel doc の VMINPD 仕様に従って 256 ビットで動作します。NASM と NDISASM は間違っています。
- SAE が有効で、CPU は命令コードで指定された 256 ビットで動作します。NASM と NDISASM が間違っています。インテルのドキュメントでは、xmm/ymm 命令を {sae} で補足装飾する必要があります。
- SAE が有効です。CPU は、静的丸め {er} が許可されている場合と同様に、EVEX.L'L に関係なく、暗黙のフル ベクター サイズ 512 ビットで動作します。NDISASM と Intel doc の表 4-7 は間違っています。
c - Knights Landing CPU (Xeon Phi) はバイト/ワード整数コードを高速化しますか?
Intel Xeon Phi "Knights Landing" プロセッサは、AVX-512 をサポートする最初のプロセッサになりますが、"F" (SSE2 なしの SSE、または AVX2 なしの AVX など) のみをサポートするため、主に浮動小数点が使用されます。
組み込み関数を介して最大 SSE4.1 命令を使用して、バイトとワード (8 ビットおよび 16 ビット) で動作するソフトウェアを作成しています。
AVX-512F にすべて/大部分の SSE4.1 命令の EVEX エンコード バージョンが存在するかどうか、また、これは私の SSE コードが EVEX 拡張命令を自動的に取得し、すべての新しいレジスタにマップできることを意味するかどうかについて混乱しています。
ウィキペディアは次のように述べています。
SIMD レジスタ ファイルの幅が 256 ビットから 512 ビットに増加し、合計 32 個のレジスタ ZMM0 ~ ZMM31 が含まれます。これらのレジスターは、AVX 拡張機能の 256 ビット YMM レジスターおよびストリーミング SIMD 拡張機能の 128 ビット XMM レジスターとしてアドレス指定できます。EVEX を使用する場合、従来の AVX および SSE 命令を拡張して、16 個の追加レジスター XMM16-XMM31 および YMM16-YMM31 で動作させることができます。エンコードされたフォーム。
残念ながら、AVX512 対応の SSE4 コードをコンパイルすると、AVX2 にコンパイルした場合と同じ (驚くべき) 高速化が得られるかどうかは明確ではありません (レガシー命令の VEX コーディング)。
AVX-512F 用に SSE2/4 コード (C 組み込み関数) をコンパイルするとどうなるか知っている人はいますか? バイトおよびワード命令の AVX1 の VEX コーディングのようなスピード バンプを期待できますか?
c - Intel Knights Corner (KNC、Xeon Phi Gen 1) で 8 ビットの符号なし整数を浮動小数点数に変換します。
Knights Corner (KNC) CPU が実行するプログラムを作成しています。命令セットとして AVX512 のプロトタイプがあるようですが、Intel Intrinsic Guide には、さまざまな整数幅間の変換に関する指示は見つかりませんでした。
具体的には、KNC で操作できるように、8 ビット整数 (符号なし) を 32 ビット整数に変換しようとしています。KNCでこれを行うにはどうすればよいですか? _mm512_cvtepu8_epi32()
8 ビットから 32 ビットに移行し、32 ビットから 8 ビットに戻るために、AVX512-F に相当するものはあり_mm512_cvtu[s]epi32_epi8()
ますか?