問題タブ [avx]
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 - avx で _mm_loaddup_pd に相当する関数を実行する最も簡単な方法は何ですか?
メモリに次の double がある場合、次のことを実行できるようにしたい (順番に):
A-> a1| b1| a2| b2
私が考えることができる1つの方法は次のとおりです。
AVX には _mm_loaddup_pd() または _mm_load1_pd() がありません。それで、これを実行できる最も速い方法は何ですか(必ずしも命令の数ではなく、レイテンシの観点から)?
vectorization - Intel の MIC の zgemm
MIC の 512 ビット ベクトル ユニットを使用して、次のことを達成する必要があります。
私が考えた方法は、Intel が SSE に対して提案したものと同様で、AVX でも機能します。
_mm512_swizzle_pd()
関数を使用して以下を形成します。
m0 = |a4|a4|a3|a3|a2|a2|a1|a1| および m0_t = |b4|b4|b3|b3|b2|b2|b1|b1| in0 = |d4|c4|d3|c3|d2|c2|d1|c1| in0_r = |c4|d4|c3|d3|c2|d2|c1|d1|
上記の 2 つを乗算し、MIC の addsub_pd() に似たものを使用します。しかし、対応する組み込み関数はないようです。
これを達成する方法について何か提案はありますか?
Intel の MIC (Xeon Phi) には、fmadd、fmsub、fnmadd、fnmsub などのいくつかの FMA 組み込み関数もあり、この状況に役立つはずであり、次の 2 つのアプローチがあります。
より良いアプローチはありますか?これらのアプローチの欠点はありますか?
vectorization - XeonPhiのloaddup_pd/unpacklo_pd
Xeon Phiレジスタのように、512幅のSIMDベクトルに次のdoubleがある場合:
それを次のようにすることは可能ですか?
単一の命令を使用しますか?また、doubleのビット単位の組み込み関数がないため、これは上記を達成するための有効な方法ですか?
vectorization - インテル Xeon Phi の順列
Xeon Phi レジスタに次の 4 つの double のベクトルがあるとします。
それらを次のように並べ替えたい:
目標は取得することです:
最小数の命令/サイクルで上記を達成するにはどうすればよいですか?
vectorization - XeonPhiでの散布/収集
Xeon Phi命令セットに関するIntelのマニュアルを参照していましたが、スキャッター/ギャザー命令がどのように機能するかを理解できませんでした。
次のdoubleのベクトルがあるとします。
次のように4つのベクトルを作成することは可能ですか?
これらの手順を使用しますか?これを達成する他の方法はありますか?
c++ - AVX による乗算
AVX を使用するのはこれが初めてで、倍精度の数値で単純な乗算を実行しようとしていますが、すべての結果が正しいわけではありません。
最初の 4 つの結果だけを取得し、他は専門用語です。
c - SSE/AVX を使用した OpenMP による削減
OpenMP と SIMD を使用して配列を削減したいと考えています。OpenMP の削減は次と同等であると読みました。
このアイデアは次のリンクから得ました: http://bisqwit.iki.fi/story/howto/openmp/#ReductionClause しかし、atomic は複雑な演算子もサポートしていません。私がしたことは、アトミックをクリティカルに置き換え、次のように OpenMP と SSE で削減を実装することでした。
ただし、この機能は期待どおりには機能しません。Visual Studio 2012 Express を使用しています。SSE のロード/追加を数回アンロールすることでパフォーマンスを少し改善できることはわかっていますが、それでも期待したほどではありません。
スレッドの数に等しい配列のスライスを実行することで、パフォーマンスが大幅に向上します。
}
OpenMP でより複雑な演算子を使用してリダクションを行うより良い方法があるかどうか誰かが知っていますか?
cpu - Sandy-BridgeおよびHaswellSSE2/ AVX/AVX2のサイクルあたりのフロップ
Sandy-BridgeとHaswellを使用して、コアごとに1サイクルあたり何フロップを実行できるかについて混乱しています。SSEで理解しているように、SSEの場合はコアあたり1サイクルあたり4フロップス、AVX/AVX2の場合はコアあたり1サイクルあたり8フロップスである必要があります。
これはここで確認されているよう です。サイクルあたり理論上の最大4FLOPを達成するにはどうすればよいですか? 、そしてここでは、 Sandy-BridgeCPU仕様。
ただし、以下のリンクは、Sandy-bridgeがコアあたりサイクルあたり16フロップス、Haswellがコアあたりサイクルあたり32フロップスを実行できることを示しているようです http://www.extremetech.com/computing/136219-intels-haswell-is-an-unprecedented -threat-to-nvidia-amd。
誰かが私にこれを説明できますか?
編集:私は今、なぜ私が混乱したのか理解しました。FLOPという用語は単精度浮動小数点(SP)のみを指すと思いました。サイクルあたり理論上の最大4FLOPを達成するにはどうすればよいですか?実際には倍精度浮動小数点(DP)上にあるため、SSEの場合は4 DP FLOP /サイクル、AVXの場合は8DPFLOP/サイクルを達成します。SPでこれらのテストをやり直すのは興味深いことです。