問題タブ [sse2]

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 投票する
2 に答える
2221 参照

c++ - SSE / SSE2命令のデータのパックおよびアンパック?

SSE / SSE2がどのように機能するかについてもっと知りたい:SSE / SSE2は128ビット(16バイト)のサイズのmmxレジスタを使用し、通常これらのレジスタには4つのフロートセルがあり、パッキングによってフロートを格納できることを知っています。結果を得る前に、「それらを開梱」する必要があります。

私の質問は、私は初心者なので、なぜこれらの値をxmmレジスタにパックする必要があるのか​​、そしてなぜそれらをアンパックする必要があるのか​​ということです。これの利点は何ですか?

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

c++ - SQRT vs RSQRT vsSSE_mm_rsqrt_psベンチマーク

このテーマについて明確なベンチマークが見つからなかったので、作成しました。誰かが私のようにこれを探している場合に備えて、ここに投稿します。

質問が1つあります。SSEは、ループ内の4 fpu RSQRTよりも4倍高速であると想定されていませんか?高速ですが、わずか1.5倍です。SSEレジスタへの移行は、多くの計算を行わず、rsqrtのみを行うため、これほど大きな影響がありますか?または、SSE rsqrtの方がはるかに正確であるため、sse rsqrtの反復回数を確認するにはどうすればよいですか?2つの結果:

編集

/GS- /Gy /fp:fast /arch:SSE2 /Ox /Oy- /GL /OiAMD Athlon IIX2270でMSVC11を使用してコンパイル

テストコード:

フロートタイプを使用した結果:

私の結論は、4つ以上の変数で計算を行わない限り、SSE2を気にする価値がないということではありません。(おそらくこれはここではrsqrtにのみ適用されますが、コストのかかる計算であるため(複数の乗算も含まれます)、おそらく他の計算にも適用されます)

また、sqrt(x)は2回の反復でx * rsqrt(x)よりも高速であり、1回の反復でx * rsqrt(x)は距離計算には不正確すぎます。

したがって、いくつかのボードでx * rsqrt(x)がsqrt(x)よりも高速であるという記述は間違っています。したがって、1 / x ^(1/2)が直接必要でない限り、sqrtの代わりにrsqrtを使用することは論理的ではなく、精度を失う価値はありません。

SSE2フラグなしで試行しました(通常のrsqrtループにSSEを適用した場合、同じ結果が得られました)。

私のRSQRTは、地震rsqrtの修正された(同じ)バージョンです。

0 投票する
4 に答える
2539 参照

c++ - 2 つの配列間の等しいバイト数の高速カウント

int compare_16bytes(__m128i lhs, __m128i rhs)SSE 命令を使用して 2 つの 16 バイトの数値を比較する関数を作成しました。この関数は、比較の実行後に等しいバイト数を返します。

ここで、上記の関数を使用して、任意の長さの 2 つのバイト配列を比較したいと思います。長さが 16 バイトの倍数ではない可能性があるため、この問題に対処する必要があります。以下の関数の実装を完了するにはどうすればよいですか? 以下の機能を改善するにはどうすればよいですか?

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

c++ - XMM0 レジスタとメモリ フェッチ (C++ コード) を使用すると、XMM レジスタのみを使用する ASM よりも 2 倍高速です。なぜですか?

SSE を利用するために、(Visual Studio 2012 C++ コードで) インライン アセンブラーを実装しようとしています。1e9回の7つの数字を追加したいので、RAMからCPUのxmm0からxmm6レジスタに配置しました。次のコードを使用して、Visual Studio 2012 でインライン アセンブリを使用すると、次のようになります。

C++ コード:

私のASMコード:

これは、コード 'resVal+=val1+val2+val3+val4+val5+val6+val7' の C++ コンパイラから逆アセンブルされたコードです。

ご覧のとおり、コンパイラは xmm0 レジスタを 1 つだけ使用し、それ以外の場合は RAM から値をフェッチしています。

両方のコード (私の ASM コードと C++ コード) の答えは同じですが、C++ コードの実行時間は私の asm コードの約半分です!

CPUレジスタについて読んだところ、それらを使用する方がメモリよりもはるかに高速です。この比率が正しいとは思えません。asm バージョンの C++ コードのパフォーマンスが低いのはなぜですか?

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

optimization - SSE2/SSE3/SSE4 で 24 ビット 3 チャンネルのカラー画像を処理するには?

画像処理の SS2 最適化を使い始めたばかりですが、3 チャンネルの 24 ビット カラー画像についてはわかりません。BGR BGR BGR ... ,unsigned char 8-bi で配置された私の pix データなので、SSE2/SSE3/SSE4 の命令 C/C++ fun で Color2Gray を実装したい場合、どうすればよいですか? 私のpixデータを整列(4/8/16)する必要がありますか? 私は記事を読みました: http://supercomputingblog.com/windows/image-processing-with-sse/ しかし、それは ARGB 4 チャネル 32 ビット カラーであり、毎回 4 色の pix データを正確に処理します。ありがとう!

//RGB->グレー: Y=0.212671*R + 0.715160*G + 0.072169*B

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

assembly - 64ビット整数を倍精度SSE2レジスタにロードする最良の方法は?

xmm32ビットモードでSSE2レジスタに64ビット整数値をロードするための最良/最速の方法は何ですか?

64ビットモードでcvtsi2sdは使用できますが、32ビットモードでは32ビット整数のみをサポートします。

これまでのところ、私はそれ以上のものを見つけていません。

  • を使用fildfstpてスタックし、次に登録movsdしますxmm
  • 上位32ビット部分をロードし、2 ^ 32を掛けて、下位32ビットを追加します

最初の解決策は遅く、2番目の解決策は精度の低下をもたらす可能性があります(編集:そして、下位32ビットを符号なしとして変換する必要があるため、とにかく遅いです...)

より良いアプローチはありますか?

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

assembly - xmm3 の 4 つの float をメモリ内の 4 つの int に変換する

私は sse の初心者で、それを見つけるのに苦労しています。xmm3 レジスターにある 4 つのパックされた float を 4 つの int に変換 ("(int) float_" のように切り捨て) する良い方法を教えてください。メモリ(「movaps oword [edx+32]、xmm3」などの保存は明確ですが、変換方法がわかりません)

0 投票する
0 に答える
276 参照

c++ - cppでマルチスレッドアルゴリズムを使用したsse2乗算ベクトルXおよびY

したがって、スレッドの私のコードは次のとおりです。

フラグメントの主な機能があります:

loc_N は、各スレッドの要素数です。ベクトル x と y の N サイズ。ntimes - 繰り返しアルゴリズムの数です。threadNo - スレッド番号。

スレッドが 3 つあるときにプログラムが ry0 = _mm_load_pd (ptrDat-> y + i); でクラッシュする理由がわかりません。

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

x86 - 整数を逆順にロードする SSE2 命令

逆の順序で、バッファから128 ビットintベクトル レジスタをロードする SSE2 命令はありますか?int