問題タブ [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.

0 投票する
1 に答える
501 参照

optimization - YMMレジスタの下位64ビットを効率的に一定に設定する

最小のクロックサイクル数で、YMMレジスタの下位64ビットを定数に設定するにはどうすればよいですか?SSE命令とAVX命令を使用してこれを行うことができるさまざまな方法を知っていますが、VBROADCASTSDどちらの方法で最良の結果が得られるかはわかりません。

編集:64ビット部分を設定した後も完全なYMMレジスタを使用する必要があります。

ご協力いただきありがとうございます!

0 投票する
3 に答える
26330 参照

x86 - AVX命令で水平ベクトル和を行う最速の方法

4つの64ビット浮動小数点値のパックされたベクトルがあります。
ベクトルの要素の合計を取得したいと思います。

SSEを使用すると(および32ビットフロートを使用して)、次のことができます。

残念ながら、AVXは_mm256_hadd_pd命令を備えていますが、SSEバージョンとは結果が異なります。これは、ほとんどのAVX命令が、128ビットの境界を越えることなく、128ビットの下位および上位ごとに別々にSSE命令として機能するためだと思います。

理想的には、私が探しているソリューションは次のガイドラインに従う必要があります
。1)AVX/AVX2命令のみを使用します。(SSEなし)
2)2〜3回以内の指示でそれを行います。

ただし、(上記のガイドラインに従わなくても)効率的でエレガントな方法は常に受け入れられています。

助けてくれてありがとう。

-ルイジカステッリ

0 投票する
3 に答える
9062 参照

x86 - 256 ビット AVX ベクトルで水平方向の最大値を見つける方法

4 つの 64 ビット浮動小数点値でパックされた __m256d ベクトルがあります。
ベクトルの要素の水平方向の最大値を見つけて、結果を倍精度スカラー値に格納する必要があります。

私の試みはすべて、ベクトル要素のシャッフルを大量に使用することになり、コードはあまりエレガントでも効率的でもありませんでした。また、AVX ドメインだけにとどまることは不可能であることがわかりました。ある時点で、SSE 128 ビット命令を使用して最終的な 64 ビット値を抽出する必要がありました。ただし、この最後のステートメントで私が間違っていることを証明したいと思います。

したがって、理想的なソリューションは次のとおりです
。1) AVX 命令のみを使用します。
2) 命令の数を最小限に抑えます。(私は 3-4 以上の命令を望んでいません)

そうは言っても、上記のガイドラインに準拠していなくても、エレガントで効率的なソリューションは受け入れられます。

助けてくれてありがとう。

-ルイージ

0 投票する
5 に答える
8908 参照

gcc - MacOSXでAVX/pclmulqdqを使用する方法

新しいIntelプロセッサに搭載されているpclmulqdq命令を使用するプログラムをコンパイルしようとしています。macportsを使用してGCC4.6をインストールしましたが、プログラム(組み込みの_mm_clmulepi64_si128を使用)をコンパイルすると、次のようになります。

GCCは本能から正しいアセンブリコードを生成できるようですが、アセンブラは命令を認識しません。

macportsを使用してbinutilsをインストールしましたが、問題は解決しません。gccが使用しているアセンブラを知るにはどうすればよいですか?XCodeアセンブラはおそらくそれをサポートしていませんが、binutilsアセンブラはサポートする必要があります。

0 投票する
1 に答える
2665 参照

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値を直接操作することです。しかし、これは私が意図的にやりたかったことではありません。

0 投票する
1 に答える
1167 参照

delphi - インテル® アドバンスト・ベクトル・エクステンションの可用性を調べる方法は?

Delphi 2007 を使用して、ボックスが AVX 対応であることを確認するにはどうすればよいですか。

私の質問は、CPU でのサポートの問い合わせに限定されています(OS は OK / Windows 7 SP1 であると仮定しています)。

Chris Lomont によるIntel® Advanced Vector Extensions の紹介というタイトルの PDF ドキュメントでは、その方法を説明し、コードの実装例を C++ で提供しています。

このページからも入手できます。

0 投票する
3 に答える
1771 参照

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 開発者向けドキュメントには何も見つからないようです。

0 投票する
3 に答える
15567 参照

c++ - Intel AVX: 倍精度浮動小数点変数の内積の 256 ビット バージョン

Intel Advanced Vector Extensions (AVX) は、倍精度浮動小数点変数の 256 ビット バージョン (YMM レジスタ) で内積を提供しません。「なんで?」質問は、別のフォーラム (ここ) とスタック オーバーフロー (ここ) で非常に簡単に扱われています。しかし、私が直面している問題は、この不足している命令を他の AVX 命令に効率的に置き換える方法です。

256 ビット バージョンの内積は、単精度浮動小数点変数用に存在します (ここを参照)。

アイデアは、この不足している命令に相当する効率的なものを見つけることです。

__m128より具体的には、 (4 つの float) から(4 つの double)に変換したいコードでは__m256d、次の命令を使用します。

このコードの結果は、と、 、 、、との間_m128の内積の結果を含む 4 つの float のベクトルです。val1val0val2val0val3val0val4val0

多分これは提案のためのヒントを与えることができますか?

0 投票する
2 に答える
2556 参照

c++ - AVX ymm レジスタ内の 8 つの位置すべてに単一の 32 ビット浮動小数点をロードする方法は?

単一の 32 ビット浮動小数点を AVX 256 ymm レジスタにロード/変換して、8 つの浮動小数点すべてが単一のソース浮動小数点からのものになるようにするにはどうすればよいですか?

以前は、AVX 128 xmm レジスタを使用して、1 つの float を 4 つのパックされた float にロードしていました。

0 投票する
1 に答える
1503 参照

assembly - sqrtのavx3つのオペランド?

avx sqrt(パックされていない)命令に3つのオペランドがあるのはなぜですか?

これは次のような意味xmm1=xmm2=sqrt(xmm3)ですか?

編集:以下の詳細な回答ですが、要するに組立ラインは次のことを意味します: