問題タブ [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.
optimization - YMMレジスタの下位64ビットを効率的に一定に設定する
最小のクロックサイクル数で、YMMレジスタの下位64ビットを定数に設定するにはどうすればよいですか?SSE命令とAVX命令を使用してこれを行うことができるさまざまな方法を知っていますが、VBROADCASTSD
どちらの方法で最良の結果が得られるかはわかりません。
編集:64ビット部分を設定した後も完全なYMMレジスタを使用する必要があります。
ご協力いただきありがとうございます!
x86 - AVX命令で水平ベクトル和を行う最速の方法
4つの64ビット浮動小数点値のパックされたベクトルがあります。
ベクトルの要素の合計を取得したいと思います。
SSEを使用すると(および32ビットフロートを使用して)、次のことができます。
残念ながら、AVXは_mm256_hadd_pd命令を備えていますが、SSEバージョンとは結果が異なります。これは、ほとんどのAVX命令が、128ビットの境界を越えることなく、128ビットの下位および上位ごとに別々にSSE命令として機能するためだと思います。
理想的には、私が探しているソリューションは次のガイドラインに従う必要があります
。1)AVX/AVX2命令のみを使用します。(SSEなし)
2)2〜3回以内の指示でそれを行います。
ただし、(上記のガイドラインに従わなくても)効率的でエレガントな方法は常に受け入れられています。
助けてくれてありがとう。
-ルイジカステッリ
x86 - 256 ビット AVX ベクトルで水平方向の最大値を見つける方法
4 つの 64 ビット浮動小数点値でパックされた __m256d ベクトルがあります。
ベクトルの要素の水平方向の最大値を見つけて、結果を倍精度スカラー値に格納する必要があります。
私の試みはすべて、ベクトル要素のシャッフルを大量に使用することになり、コードはあまりエレガントでも効率的でもありませんでした。また、AVX ドメインだけにとどまることは不可能であることがわかりました。ある時点で、SSE 128 ビット命令を使用して最終的な 64 ビット値を抽出する必要がありました。ただし、この最後のステートメントで私が間違っていることを証明したいと思います。
したがって、理想的なソリューションは次のとおりです
。1) AVX 命令のみを使用します。
2) 命令の数を最小限に抑えます。(私は 3-4 以上の命令を望んでいません)
そうは言っても、上記のガイドラインに準拠していなくても、エレガントで効率的なソリューションは受け入れられます。
助けてくれてありがとう。
-ルイージ
gcc - MacOSXでAVX/pclmulqdqを使用する方法
新しいIntelプロセッサに搭載されているpclmulqdq命令を使用するプログラムをコンパイルしようとしています。macportsを使用してGCC4.6をインストールしましたが、プログラム(組み込みの_mm_clmulepi64_si128を使用)をコンパイルすると、次のようになります。
GCCは本能から正しいアセンブリコードを生成できるようですが、アセンブラは命令を認識しません。
macportsを使用してbinutilsをインストールしましたが、問題は解決しません。gccが使用しているアセンブラを知るにはどうすればよいですか?XCodeアセンブラはおそらくそれをサポートしていませんが、binutilsアセンブラはサポートする必要があります。
c++ - AVX-Vector-wrapper-class-object-arrayの要素に割り当てると、アクセス違反エラーが発生するのはなぜですか?
私はいくつかのベクトルを実行しようとしており、オーバーロードされた演算子を使用するためにimmintrin.hからm256dデータ型のラッパーを作成しました。次の例は、基本的な考え方を示しています。
クラス定義
vwrapオブジェクトの配列
動的に割り当てられるvwrapの配列を想像してみましょう。
アクセス違反エラー
mm256-set-function ...を含むvwrapオブジェクトの関数を使用すると、アクセス違反エラーが発生します。
mm256-set-functionを使用してdを割り当てる場合にも同じことが起こります(別のm256d-objectの割り当ても機能しません)。
別のオブジェクトからのデータのコピーも機能していません。
動作するもの
m256dオブジェクトは問題なく操作できます。
通常のクラスインスタンスの場合、割り当ては機能しています。
問題はありません。クラス配列の場合、なぜ_mm256関数を使用できない(またはm256dオブジェクトを割り当てられない)のですか?私の唯一のアイデアは、mm256関数の使用を避け、double値を直接操作することです。しかし、これは私が意図的にやりたかったことではありません。
delphi - インテル® アドバンスト・ベクトル・エクステンションの可用性を調べる方法は?
Delphi 2007 を使用して、ボックスが AVX 対応であることを確認するにはどうすればよいですか。
私の質問は、CPU でのサポートの問い合わせに限定されています(OS は OK / Windows 7 SP1 であると仮定しています)。
Chris Lomont によるIntel® Advanced Vector Extensions の紹介というタイトルの PDF ドキュメントでは、その方法を説明し、コードの実装例を C++ で提供しています。
このページからも入手できます。
sse - AMD FMA 4 組み込み関数のリファレンスはどこにありますか?
SSE (128 ビット) 呼び出しを使用するコードを変更して、Bulldozer Opteron で 256 ビット FMA 機能を使用しようとしています。これらの呼び出しの組み込み関数が見つからないようです。
このフォーラムのいくつかの質問では、これらの組み込み関数が使用されています (例: 256 ビット AVX ベクトルで水平方向の最大値を見つける方法) 。
これを見つけました:
http://msdn.microsoft.com/en-us/library/gg445140.aspx
およびhttp://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/ compiler_c/index.htm#intref_cls/common/intref_avx_fmadd_ps.htm
しかし、AMD 開発者向けドキュメントには何も見つからないようです。
c++ - Intel AVX: 倍精度浮動小数点変数の内積の 256 ビット バージョン
Intel Advanced Vector Extensions (AVX) は、倍精度浮動小数点変数の 256 ビット バージョン (YMM レジスタ) で内積を提供しません。「なんで?」質問は、別のフォーラム (ここ) とスタック オーバーフロー (ここ) で非常に簡単に扱われています。しかし、私が直面している問題は、この不足している命令を他の AVX 命令に効率的に置き換える方法です。
256 ビット バージョンの内積は、単精度浮動小数点変数用に存在します (ここを参照)。
アイデアは、この不足している命令に相当する効率的なものを見つけることです。
__m128
より具体的には、 (4 つの float) から(4 つの double)に変換したいコードでは__m256d
、次の命令を使用します。
このコードの結果は、と、 、 、、との間_m128
の内積の結果を含む 4 つの float のベクトルです。val1
val0
val2
val0
val3
val0
val4
val0
多分これは提案のためのヒントを与えることができますか?
c++ - AVX ymm レジスタ内の 8 つの位置すべてに単一の 32 ビット浮動小数点をロードする方法は?
単一の 32 ビット浮動小数点を AVX 256 ymm レジスタにロード/変換して、8 つの浮動小数点すべてが単一のソース浮動小数点からのものになるようにするにはどうすればよいですか?
以前は、AVX 128 xmm レジスタを使用して、1 つの float を 4 つのパックされた float にロードしていました。
assembly - sqrtのavx3つのオペランド?
avx sqrt(パックされていない)命令に3つのオペランドがあるのはなぜですか?
これは次のような意味xmm1=xmm2=sqrt(xmm3)
ですか?
編集:以下の詳細な回答ですが、要するに組立ラインは次のことを意味します: