問題タブ [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++ - __m256dレジスタの使用
どのように使用します__m256d
か?
3〜64ビット精度のコンポーネント(、、、および)を_mm256_add_pd
持つ単純なクラスでIntelAVX命令を使用したいとします。これを使用する正しい方法は何ですか?Vector3
double
x
y
z
x
、はクラスのメンバーなのでy
、 _変数を使用して宣言できますか?z
Vector3
union
__m256d
それなら私は行くことができます:
それはうまくいくでしょうか?または、一時的なものを宣言する必要がありますか?
編集
私はこの例を思いついた、
問題は、ロード操作を自動的に実行するのか、それとも、レジスターを使用場所に近いローカルとして宣言しない と、何かが混乱するのかということだと思います。(ホテルの部屋/机の引き出しタイプの問題が怖いです)_mm256_add_pd
__m256d
編集2:
かなり大きなプロジェクトにレジスターを追加してみた__m256
ところ、たくさんの
エラーC2719:'value':__declspec(align( '32'))を含む正式なパラメーターは整列されません
エラー、それはあなたがクラス内にレジスタを保持することはできないと私に信じさせます__m256
、代わりにそれらはローカルとして宣言されるべきですか?
c++ - コンパイラを打ち負かす
インテルの組み込み関数を使用して、コンパイラーに最適化されたコードを打ち負かそうとしています。できることもあればできないこともあります。
問題は、なぜコンパイラを打ち負かすことができるのか、そうでないのかということだと思います。インテルの組み込み関数を使用した場合は0.006秒operator+=
(ベアC ++を使用した場合は0.009秒)でしたが、operator+
組み込み関数を使用した場合は0.07秒でしたが、ベアC++はわずか0.03秒でした。
編集
なぜ私はこれをしているのですか?VS 2012プロファイラーは、私のベクトル算術演算で調整を使用できると言っています。
c - 256ビットpsベクトルのコンポーネントにアクセスする方法
256ビットベクトルの要素に効率的にアクセスするにはどうすればよいですか?たとえば、ドット積を次のように計算しました
それでは、cの値にアクセスするにはどうすればよいですか?上位部分と下位部分の両方を取得する必要があります。最初に次のように128ビット部分を抽出する必要があることを正しく理解していますか。
そして、フロートを抽出します。
c - 最新のマシンでプリフェッチを使用する必要があるのはいつですか?
重複の可能性:
プリフェッチの例?
多くの場合、プリフェッチ命令は最新のマシンでパフォーマンスを低下させるように見えます。これは、通常、いくつかの異なるハードウェア プリフェッチ ユニットがあるためです。
プリフェッチ命令を使用すると常に役立つ特定のケースはありますか?
c++ - __m128、__m128d、__m256 などは C++ の組み込み型ですか?
struct
C++ 標準では、組み込み型とまたは型が区別されclass
ます。後者の場合、適切な演算子が言語によって提供されている場合、 +
、*=
、またはなどの演算子をオーバーロードでき&
ますが、組み込み型の場合は許可されません。私の知る限り、SSE/AVX タイプは標準で言及されていないため (ただし、私を修正してください)、これらの演算子を宣言できるはずです。GCC では許可されていませんが、ICC では許可されています。どちらが正しいですか?
本当にビット単位の操作 ( など&=
) が必要ですが、厄介なことに、GCC はそれらを提供しておらず ( for __m128
)、宣言することもできません。
c - __m256 と 2 つの __m128 の配列との結合
このような組合を持てますか
256 ビット レジスタの 2 つの 128 ビット部分に瞬時にアクセスするには?
編集:このアプローチのパフォーマンスへの影響を理解するよう求めていました。
vectorization - _mm_broadcast_ssは_mm_set1_psよりも高速ですか?
このコードは
このコードよりも常に速い
?
ではなくa
として定義された場合はどうなりますか?static const float a = ...
float a = ...
sse - __m256 を水平方向に合計するには?
__m256
AVX 命令を使用して、ベクトルのコンポーネントを水平方向に合計したいと考えています。SSEで使用できます
ベクトルの最初のコンポーネントで結果を取得しますが、これは関数の 256 ビット バージョンではスケーリングされません ( _mm256_hadd_ps
)。
__m256
ベクトルの水平方向の合計を計算する最良の方法は何ですか?
xcode - AVXが有効になっている場合、Clangはより遅いコードを生成しますか?
Xcode4.5.2を「AppleLLVMCompiler4.1」(Clang)で使用しています。
AVXが有効になっている(_mm256 *関数と__m256変数がまだない)SSE組み込み関数に大きく依存するコードをコンパイルしようとしましたが、SSE4.2のみが有効になっている場合に取得するコードが遅くなりました。
これについての合理的な説明はありますか?
c - 単一のAVX組み込みを使用して、doubleを含むAVXレジスタを反転します
4つのdoubleを含むAVXレジスタがあり、その逆を別のレジスタに格納したい場合、単一の組み込みコマンドでこれを実行できますか?
例:SSEレジスタに4つのフロートがある場合、次を使用できます。
多分、これを使用してこれを行うことはできます_mm256_permute2f128_pd()
か?上記の組み込みを使用して、個々のダブルに対処することはできないと思います。