問題タブ [simd]
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++ - c ++SSESIMDフレームワーク
オープンソースのC++x86 SIMD組み込み関数ライブラリを知っている人はいますか?
Intelは、統合されたパフォーマンスプリミティブライブラリで必要なものを正確に提供していますが、著作権がいたるところにあるため、それを使用することはできません。
編集
私はすでにコンパイラーによって提供される組み込み関数を知っています。私が必要としているのは、それらを使用するための便利なインターフェースです。
gcc - gcc、simd 組み込み関数、高速数学の概念
みなさん、こんにちは :)
浮動小数点、SIMD/数学組み込み関数、および gcc の高速数学フラグに関するいくつかの概念を理解しようとしています。より具体的には、x86 CPU で gcc v4.5.0 で MinGW を使用しています。
私はしばらくの間検索してきましたが、それが私が(私が思うに)現時点で理解していることです:
フラグなしでコンパイルすると、fp コードは標準の x87 になり、simd 組み込み関数はなくなり、math.h 関数は msvcrt.dll からリンクされます。
mfpmath、mssen、および/またはmarchを使用して mmx/sse/avx コードを有効にすると、gcc はOnやftree-vectorizeなどの最適化フラグも指定した場合にのみsimd 命令を実際に使用します。その場合、組み込み関数は gcc によって自動的に選択され、一部の数学関数 (math.h の標準の数学関数についてまだ話している) は組み込み関数になるか、インライン コードによって最適化されますが、他のいくつかは msvcrt から取得されます。 dll. 最適化フラグを指定しない場合、これは変更されますか?
特定の simd データ型 ( v4siやv8qiなどの gcc 拡張機能として利用できるもの) を使用する場合、組み込み関数を直接呼び出すか、自動決定を gcc に任せるかを選択できます。適切なフラグを介して simd 命令を有効にしない場合でも、Gcc は標準の x87 コードを選択できます。繰り返しますが、最適化フラグを指定しない場合、これは変化しますか?
私の発言のいずれかが間違っている場合は、私を修正してください:p
今質問:
- 組み込み関数を使用するために x86intrin.h を含める必要はありますか?
- libm をリンクする必要はありますか?
- 速い数学は何かと関係がありますか? それがIEEE標準を緩和することは理解していますが、具体的にはどのように?その他の標準機能は使用されていますか? 他のライブラリがリンクされていますか?それとも、いくつかのフラグがどこかに設定されているだけで、標準の lib の動作が異なるのでしょうか?
助けてくれる人に感謝します:D
terminology - SPMD と SIMD の違いは何ですか?
私はそれらの違いが何であるかを理解できません...
SPMD はプログラミング レベルにあり、SIMD はハードウェア レベルにありますか?
例は良いでしょう!
ありがとう
c++ - 色変換のためのいくつかのSSE2組み込み関数の高速化
YCbCrからBGRAへの画像の色変換を実行しようとしています(Aビットについては聞かないでください、そのような頭痛の種です)。
とにかく、これはできるだけ速く実行する必要があるので、SSE2を利用するためにコンパイラ組み込み関数を使用して記述しました。これはSIMDランドへの私の最初のベンチャーであり、私は基本的に初心者なので、非効率的にやっていることがたくさんあると確信しています。
実際の色変換を行うための私の算術コードは特に遅いことが判明し、IntelのVTuneはそれを重大なボトルネックとして示しています。
だから、私は次のコードをスピードアップすることができますか?一度に4ピクセルの32ビットで実行されます。私はもともと(上のループのように)一度に8ビット、16ピクセルでそれを実行しようとしましたが、計算によって整数のオーバーフローが発生し、変換が失敗します。Intel jpegデコードを含むこのプロセス全体は、フルHDの単一フィールドで最大14ミリ秒かかります。少なくとも12ミリ秒、理想的には10ミリ秒まで下げることができれば素晴らしいと思います。
ヘルプやヒントをいただければ幸いです。ありがとう!
assembly - SSE2コードをさらに改善するのを手伝ってください
私はcore2CPUでこの双一次スケーリングsse2コードを改善するためのいくつかの助けを探しています
私のAtomN270とi7では、このコードはmmxコードよりも約2倍高速です。しかし、core2 cpusの下では、mmxコードと同じです。
コードは次のとおりです
c++ - SSE セット (_mm_set_ps) が引数の順序を逆にするのはなぜですか?
ということに最近気づきました
float 配列にキャストするときに、4 つの float を逆の順序にします。
また、同じことが起こりunion { _m128 m; float[4] a; }
ます。
SSE 操作がこの順序付けを使用するのはなぜですか? 大したことではありませんが、少し混乱します。
そして、フォローアップの質問:
インデックスによって配列内の要素にアクセスする場合、順序0..3
または順序でアクセスする必要があり3..0
ますか?
cuda - CUDAはSIMD拡張機能を使用できますか?
私は少しググってみましたが、CUDAでプログラムされた一部のGPUが、SSE SIMD拡張命令と同様の命令を利用できるのか、それとも使用できるのかはわかりません。たとえば、フロートの2つのベクトルを2倍の精度で合計できるかどうか、それぞれに4つの値があります。もしそうなら、ベクトルの前の4つの値のそれぞれにもっと軽いスレッドを使用するのが良いのか、それともSIMDを使用するのが良いのだろうかと思います。
c - sse simd の天井/床
float
SSE4.1 以前の SIMD を使用して床/天井を計算する高速な方法を提案できる人はいますか? float
32 ビット int で表現できない値がある場合など、すべてのコーナー ケースを正しく処理する必要があります。
現在、次のコードに似たものを使用しています (明確にするために asm に変換された C 組み込み関数を使用しています)。
float 値が 32 ビット int に対して大きすぎないかどうかを確認するより効率的な方法はありますか?
c - SSEを使用した定数によるベクトルの乗算
4Dベクトルで動作するコードがいくつかあり、現在SSEを使用するように変換しようとしています。私は64bLinuxでclangとgccの両方を使用しています。
ベクトルのみを操作することは、すべて問題なく把握できます。しかし、今度は、ベクトル全体に単一の定数を掛ける必要がある部分があります-次のようなものです:
このようなものに:
どこ:
もちろん、これは、互換性のないデータ型の乗算を実行しようとしているため、機能しません。
今、私は次のようなことをすることができます:
float4 a1 = (v4sf){25.0/216.0, 25.0/216.0, 25.0/216.0, 25.0/216.0}
しかし、これを行うためのマクロを書いたとしても、私はばかげていると感じさせます。また、それが非常に効率的なコードにならないことはかなり確信しています。
これをグーグルで検索しても、明確な答えは得られませんでした(ロード定数がSSEレジスタにフロートするを参照)。
では、ベクトル全体に同じ定数を掛ける最良の方法は何でしょうか。