問題タブ [sse]
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.
assembly - エラー A2070: SSE MASM64 の命令オペランドが無効です
これを ml64.exe 64 ビット (masm64) でコンパイルすると、SSE コマンドでエラーが表示されます。SSE コマンドを 64 ビットに含めるにはどうすればよいですか?
エラーが発生します:
assembly - SSE2/SSSE3の16ビット要素の8つのレジスタを転置します。
(私はSSE / asmの初心者です、これが明白または冗長である場合はお詫びします)
24個のunpck[lh]psと8/16+シャッフルを実行し、8個の追加レジスタを使用するよりも、16ビット値を含む8個のSSEレジスタを転置するためのより良い方法はありますか?(最大SSSE 3命令、Intel Merom、別名SSE4のBLEND *がないものを使用していることに注意してください。)
レジスタv[0-7]があり、補助レジスタとしてt0-t7を使用するとします。疑似組み込みコードの場合:
各unpck*は3サイクルのレイテンシー、または相互スループットの場合は2サイクルかかります(Agnerによる報告)。これは、このレジスタダンスが要素ごとにほぼ1サイクルかかるため、SSE(このコード)を使用することによるパフォーマンス向上の大部分を殺します。x86転置用のx264のasmファイルを理解しようとしましたが、マクロを理解できませんでした。
ありがとう!
assembly - VC++ 2K8 での SSE コーディングのための組み込み関数とインライン ASM の比較
以前に SSE のインライン ASM コーディングを行ったことがありますが、ASM を知らない人でもそれほど難しくはありませんでした。しかし、MS はそのような特別な命令の多くをラップする組み込み関数も提供していることに注意してください。
特定のパフォーマンスの違い、または一方を他方の上に使用する必要があるその他の強い理由はありますか?
タイトルから繰り返しますが、これは VC++ 2008 によって公開されたアンマネージ ネイティブ C++ の組み込み関数を具体的にカバーしています。
openmp - OpenMP + SSE はスピードアップしない
私の教授は、SSE と OpenMP を使用した 3D 線形分離可能なカーネル畳み込みのこの興味深い実験を発見し、私たちのシステムの統計をベンチマークするタスクを私に与えました。著者は、シリアル アプローチから 18 倍のスピードアップを達成したと主張しています。常にではないかもしれませんが、これをデュアル コア Intel で実行すると、少なくとも 2 ~ 4 倍のスピードアップが期待されていました。
残念ながら、スピードアップはまったく見つかりませんでした。OpenMP の有無にかかわらず、シリアル コードのパフォーマンスは常に向上します。
私は Linux を使用していますが、特定の傾向を観察しました...システムで他のプロセスが実行されていない場合、しばらくすると loadavg が増加し始め、%CPU 使用率が低下します。
私が誤って遭遇した別の誤検知の可能性...私はプログラムを開始し、すぐに一時停止しました。次に、bg を使用してバックグラウンドで実行したところ、2 倍以上のスピードアップが見られました。これは常に発生します。
どんなアドバイスも素晴らしいでしょう。
ありがとう、サヤン
c++ - SSEを使用して利益を得るには、どのくらいの労力を費やす必要がありますか?
ケース1
あなたが小さなクラスを持っているとしましょう:
SSEを単純に使用すると、これらの関数本体をいくつかの組み込み関数を使用するように置き換えるだけです。しかし、これが大きな違いを生むと期待できるでしょうか?MMXは、高価な州のcahnges IIRCを含むために使用されましたが、SSEですか、それとも他の指示と同じですか?また、直接の「SSEの使用」オーバーヘッドがない場合でも、値をSSEレジスタに移動してから元に戻すと、実際に高速になりますか?
ケース2
代わりに、OOベースの少ないコードベースで作業しています。Point3Dオブジェクトの配列/ベクトルではなく、単純にフロートの大きな配列があります。
ここでのSSEの使用はどうですか?何か良いですか?
結論は
SSEを使用して単一ベクトル演算を最適化しようとすることは実際に価値がありますか、それとも一括演算を行う場合にのみ本当に価値がありますか?
hash - CRC32Cをベースとして「良い」ハッシュ関数を構築できますか?
SSE 4.2(Intel Core i7およびi5パーツ)にCRC32命令が含まれていることを考えると、より高速な汎用ハッシュ関数を構築できるかどうかを調査することは合理的と思われます。これによると、CRC32の16ビットのみが均等に分散されます。では、それを克服するために他にどのような変革を適用するでしょうか?
更新 これはどうですか?ハッシュ値には16ビットのみが適しています。罰金。テーブルが65535以下の場合は、すばらしいです。そうでない場合は、Nehalem POPCNT(ポピュレーションカウント)命令を介してCRC値を実行し、設定されているビット数を取得します。次に、それをテーブルの配列へのインデックスとして使用します。これは、テーブルが1mmエントリの南にある場合に機能します。最高のパフォーマンスのハッシュ関数よりも安くて速いと思います。GCC 4.5にはCRC32が組み込まれているので、テストは簡単です...私がそれに取り組むための十分な時間がある場合に限ります。
デビッド
c - GCC - スタックを再調整する方法は?
pthreads と __m128 SSE タイプを使用するアプリケーションを構築しようとしています。GCC マニュアルによると、デフォルトのスタック アラインメントは 16 バイトです。__m128 を使用するには、16 バイトのアラインメントが必要です。
私のターゲット CPU は SSE をサポートしています。ランタイム スタックの再配置をサポートしていない GCC コンパイラを使用しています (例: -mstackrealign)。他の GCC コンパイラ バージョンは使用できません。
私のテストアプリケーションは次のようになります:
アプリケーションは例外を生成して終了します。簡単なデバッグ (printf "%p", &y) の後、変数 y が 16 バイトでアラインされていないことがわかりました。
私の質問は、GCC フラグと属性を使用せずに (役に立たない) スタックを適切に (16 バイト) 再調整するにはどうすればよいですか? このスレッド関数 f() 内で GCC インライン アセンブラーを使用する必要がありますか?
visual-studio-2008 - Visual Studio 2008 で SSE3/SSE4.1 命令セットを有効にするにはどうすればよいですか?
私は従おうとしました:
[プロジェクト] > [プロパティ] > [構成プロパティ] > [C/C++] > [コード生成] > [拡張命令セットを有効にする]
しかし、私が得た唯一のオプションは、SSEまたはSSE2でした。
ありがとう。
c - 論理 SSE 組み込み関数の違いは何ですか?
異なるタイプの論理 SSE 組み込み関数に違いはありますか? たとえば、OR 演算を使用する場合、3 つの組み込み関数_mm_or_psが_mm_or_pdあり_mm_or_si128ます。私の質問:
1つまたは別の組み込みを使用することに違いはありますか(適切な型キャストを使用)。特定の状況で実行時間が長くなるなどの隠れたコストはありませんか?
porこれらの組み込み関数は、3 つの異なる x86 命令 ( 、orps、 ) にマップされますorpd。Intelが同じことを行ういくつかの命令のために貴重なオペコードスペースを浪費している理由を知っている人はいますか?
c++ - 複数の SIMD 命令セットを同時に使用する利点
マルチスレッドの高度に並列化されたアプリケーションを作成しています。私はすでに SSE アクセラレーション スレッド クラスを作成しています。MMX アクセラレーション スレッド クラスを記述した場合、両方を同時に実行すると (コアごとに 1 つの SSE スレッドと 1 つの MMX スレッド)、パフォーマンスは著しく向上しますか?
この設定はメモリの待ち時間を隠すのに役立つと思いますが、時間を費やす前に確認したいと思います.