問題タブ [sse4]
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.
x86 - C のインライン アセンブラ コード、値を配列から xmm にコピー
2 つの配列があり、内積を取得したいと考えています。vek と vec の値を xmm0 と xmm1 に取得するにはどうすればよいですか? そして、「printf」に使用できるように、xmm1 (??) に立っている値を取得するにはどうすればよいですか?
x86 - SSE 乗算 16 x uint8_t
SSE4 で 16 個の符号なし 8 ビット整数のオブジェクトを乗算したいのですが__m128i
、16 ビット整数を乗算する組み込み関数しか見つかりませんでした。などはありません_mm_mult_epi8
か?
opencv - Visual C++ で SSE4.2 命令セットを有効にするにはどうすればよいですか?
Visual C++ 2010 の OpenCV で BRIEF 記述子を使用して、2 つの画像の点を一致させています。
ブリーフ記述子に関する論文では、物事をスピードアップすることが可能であると書かれています。
「BRIEF 記述子はハミング距離を使用します。これは、最新の SSE 命令セットの場合のように、XOR またはビット カウント操作を実行するための特定の命令を提供することが多い最新の CPU で非常に高速に実行できます。」
SSE4.2 を有効にすると、速度が向上するはずです。私の質問は、単に Visual C++ でこれを行う方法ですか?
別の方法として、SSE4 をサポートする別のコンパイラを選択することもできます。たとえば、Intel の ICC です。これは本当に必要ですか?
string - SSE 4.2でテーブルを比較する2つの文字列を文字ごとに取得するにはどうすればよいですか?
CでSSE 4.2組み込み関数を使用してテーブルを比較する2つの文字列を文字ごとに取得するにはどうすればよいですか?
_mm_cmpistrm 重要なビットのマスクを返します。つまり、表の処理結果を比較して char ごとに関数を集計します。
集計関数を呼び出さずに、テーブルを比較する文字ごとに文字を抽出する方法は? (おそらく_SIDD_UNIT_MASK...)
例:
私が実際に必要とするこのテーブル。
_mm_cmpistrm (特定のモード Equal_each で) の結果はマスクです:
c++ - SSE4ラッパーによる文字列の比較
SSE4をサポートするマシン上の2つのストリングをすばやく比較する必要があります。アセンブラインサートを作成せずにそれを行うにはどうすればよいですか?
のようないくつかのラッパーlong long bitmask = strcmp(char* a, char* b)
は完璧でしょう。
.net - .NET Framework 4.5 は SSE4/AVX をサポートしていますか?
聞いたことはあると思いますが、場所がわかりません。
更新:JiTについて話しました
c - ベクトル化のためのIntelSSE組み込み関数を使用したコードの最適化
SSE組み込み関数を扱うのはこれが初めてです。Intel SSE組み込み型(SSE4.2まで)を使用して、単純なコードをより高速なバージョンに変換しようとしています。いくつかのエラーが発生したようです。
コードのスカラーバージョンは次のとおりです:(単純な行列の乗算)
これは私のバージョンです:私は含まれています#include <ia32intrin.h>
私はこれでどこが間違っているのですか?次のようなエラーが発生します。
mm_vec.c(84):エラー:タイプ「int」の値をタイプ「__m128d」のエンティティに割り当てることはできませんa_i = __mm_load_ps(&A [n * i + k]);
これが私がコンパイルしている方法です:icc -O2 mm_vec.c -o vec
誰かがこのコードを正確に変換するのを手伝ってくれませんか。ありがとう!
アップデート:
あなたの提案によると、私は次の変更を加えました:
しかし、今はセグメンテーション違反が発生しているようです。おそらく、配列A、B、Cの配列添え字に適切にアクセスしていないため、これを知っています。私はこれに非常に慣れていないので、これをどのように進めるかわかりません。
このコードを処理するための正しいアプローチを決定するのを手伝ってください。
x86 - SSE2を使用したpackusdw機能のシミュレーション
Intel [pdf]で説明されているアルゴリズムに従って、 pixmanに高速のx888->565ピクセル変換関数を実装しています。彼らのコードは、私が565に変換したいのに、x888-> 555に変換します。残念ながら、565に変換すると、上位ビットが設定されます。つまり、signed-saturationpack命令を使用できません。unsigned pack命令は、SSE4.1まで追加されませんでした。SSE2でその機能を実装するか、これを行う別の方法を見つけたいと思います。packusdw
この関数は、それぞれ4つの32ビットピクセルを含む2つのXMMレジスタを受け取り、8つの変換されたRGB565ピクセルを含む1つのXMMレジスタを出力します。
私が考えたアイデア:
0x8000を減算
_mm_packs_epi32
し、各565ピクセルに0x8000を再度追加します。私はこれを試しましたが、これを機能させることができません。データをパックする代わりにシャッフルします。MMXで機能しますが、SSE 16ビットシャッフルは高または低64ビットでのみ機能するため、面倒になります。
上位ビットを保存し、それらをゼロに設定し、パックを実行し、後でそれらを復元します。かなり散らかっているようです。
これを行うことができる他の(うまくいけばより効率的な)方法はありますか?
assembly - Is it reasonable to have SSE 4.2 on 64-bit processor?
SSE 4.2 perform comparation on two operands of 16 bytes at a time. But it is also possible to compare two operands of 8 bytes at a time with the ordinary processor instructions.
Difference is not so large, to have the special hardvare realization of such comparison. Is SSE 4.2 so irrelevance, or I missed something?
x86 - __popcnt()と_mm_popcnt_u32()の違いは何ですか?
MS Visual C ++は、SSE4.2を搭載したCPUで2種類のpopcnt命令をサポートしています。
私が見つけた唯一の違いは、のドキュメントが__popcnt()
「Microsoft固有」としてマークされ_mm_popcnt_u32()
ており、固有のコマンド名(MS固有ではない)のように見えることです。
これが唯一の違いであり、MS__popcnt()
はHWを呼び出すだけ_mm_popcnt_u32()
ですか?