問題タブ [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.
c - __m128i へのキャスト中の奇妙なエラー
符号なしの短い配列を次のようにキャストしようとしてい__m128i
ます:
最初のキャスティングは問題なく動作しますが、2 番目のキャスティングはうまくいきません。私が持っている:
どうしたの?誰か助けてくれませんか?
d - SSE2 movddup Not Moving Values
Can't someone explain to me why the output of this program is [nan, nan]
? The code is supposed to load the value of d
into the high and low 64-bits of the XMM1 register and then move the contents of XMM1 into a
. Because a
is not initialized to a set of specific values, D initializes each element to nan
. If the movupd
instruction was not in the objdump, I would understand the result, but the instruction is there. Thoughts?
Here is the objdump of the main function:
assembly - SSE と SSE2 を使用して 128 ビット幅の整数を作成することは可能ですか?
SSE2 の機能をもう少し理解したいと思っています。また、加算、減算、XOR、および乗算をサポートする 128 ビット幅の整数を作成できるかどうかを知りたいですか?
c - __m128d simdベクトルの内容をユニオンとしてアクセスせずにdoubleとして保存するにはどうすればよいですか?
最適化したいコードは基本的に単純ですが大きな算術式です。コードを自動的に分析して独立した乗算/加算を並列に計算するのはかなり簡単なはずですが、自動ベクトル化はループに対してのみ機能することを読みました。
ユニオンまたは他の方法を介したベクトル内の単一要素へのアクセスは絶対に避け、代わりに_mm_shuffle_pdに置き換える必要があることを何度も読みました(私はdoubleのみに取り組んでいます)...
__m128dベクトルのコンテンツを、ユニオンとしてアクセスせずにdoubleとして格納する方法がわからないようです。また、このような操作は、スカラーコードと比較した場合にパフォーマンスの向上をもたらしますか?
また、2つの組合はばかげて醜いように見えますが、
indexXをdvecとして宣言しようとすると、コンパイラはdvecが宣言されていないと文句を言いました。
x86 - SSSE3 フラグ付きの ROS (ロボット オペレーティング システム)
私は最近 ROS を使い始めましたが、1 つの問題に行き詰まりました。SSE2、SSE3、および SSSE3 CPU 拡張機能を必要とするいくつかのクラスを使用する必要があります。
ROS パッケージの manifest.xml ファイルを次のように編集しようとしました
しかし、うまくいきませんでした!
コードは "Not-ROS-project" で正常に動作しましたが、何らかの理由で cflags がコンパイラから無視されているようです。
私は LinuxMint (ubuntu 12.04) に取り組んでおり、チップ拡張をサポートしています。
フラグはどこに置く必要がありますか?
c - SSE2を使用して配列内のすべての要素を追加するにはどうすればよいですか?
次のような非常に単純なコードがあるとします。
基本的にSSE2を使って同じ操作をしたいです。どうやってやるの?
c - MMX SSE から C コードへの変換時に画質が低下する
MMX SSE を同等の C コードに変換しています。ほとんど変換しましたが、画質が適切ではないか、画像にノイズが入っていることがわかります。過去 5 日間のコードをデバッグしていますが、その理由がわかりません。皆さんが問題を調べて私を助けてくれたら、とてもうれしいです。
元の SSE コード:
変換したコードを以下に示します
コードが読みにくい場合は申し訳ありません。幅と高さを表しますw
。とは、後で他の目的に使用される 2 つのパラメーターです。h
out_h
out_v
x86 - SSE2 を使用して 16 x 8 ビット整数をロードする方法
__m128i
16 個の 8 ビット整数があり、それらを次のようにSSE2 を使用してロードしたいとします。
を使用してこれを静的に行うことができますが、_mm_set_epi8
これを動的に行いたいと思います。値は実行時に決定されます。
これどうやってするの?
c++ - 配列からのショーツの特定パターンのベクトル化された抽出、および新しい配列への挿入
値の半分を取得し、半分のサイズの新しい配列に入れたいショーツの配列があります。各ブロックが 128 ビット (8 ショート) である、この種のパターンで特定の値を取得したいと考えています。これは私が使用する唯一のパターンです。「一般的なパターン」である必要はありません!
白の値は破棄されます。私の配列サイズは常に 2 の累乗になります。
私はこのようなものから始めました:
マスクを繰り返し実行_mm_and_si128
して、探している値を取得し、 と組み合わせて_mm_or_si128
、結果を に入れることができますnewdata128[i]
。ただし、物事を「圧縮」して白の値を削除する方法がわかりません。それができれば、仮面はまったくいらない気がする。
どうすればそれができますか?
とにかく、最終的には、この操作の逆も行い、2 倍のサイズの新しい配列を作成し、その中に現在の値を分散させたいと思います。
また、白いブロックに挿入する新しい値もあります。これは、元のデータのショーツの各ペアで繰り返し計算する必要があります。この計算はベクトル化できませんが、結果の値の挿入はベクトル化する必要があります。現在の値を新しい配列に「広げる」にはどうすればよいですか? また、計算された値を挿入する最良の方法は何でしょうか? 128 ビットの反復ごとにすべてを計算し、それらを独自の一時ブロック (64 ビット? 128 ビット?) に入れてから、一括して挿入する必要がありますか? __m128i
それとも、コストは一時的に入れるのと同等であるように思われるので、ターゲットに直接配置する必要がありますか? もしそうなら、私の他の価値観を台無しにすることなく、どうすればそれを行うことができますか?
これにはせいぜいSSE2操作を使用したいと思います。
c++ - SSE:double**を_m128d**にキャストします
通常のdouble*を_m128d*にキャストするのは非常に簡単でわかりやすいです。次のような配列があるとします。
すると、_m128d
プレゼンテーションは次のようになります。
あなたがそれを言うことができるならば、常に2つの値が保存されるので(それは私がそれを想像する方法です)。しかし、代わりに3x3マトリックスを使用すると、値はどのように分割されますか?例えば:
マトリックス内のすべての値を合計しようとしていますが、SSEを使用してこれを効果的に行う方法がわからないため、マトリックスがどのように処理されるかを理解する必要があり_m128d**
ます。誰か知っていますか?