問題タブ [mmx]
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.
syntax - AT&T 構文は、他のニーモニックとオペランド サイズの接尾辞の間のあいまいさに対して何をしますか?
AT&T 構文では、多くの場合、命令の末尾に適切なオペランド サイズ ( q
64 ビット オペランドの操作用) を付ける必要があります。ただし、MMX と SSE にはmovq
命令もありq
、元の Intel ニーモニックにあり、追加の接尾辞はありません。
では、これは AT&T ではどのように表現されるのでしょうか? 次のような別のq
接尾辞が必要ですか
か否か?
paddd
また、AT&T サフィックス ( 、 など) のように終わる命令が他にある場合slld
、それらは同じように機能しますか?
assembly - MMX から SSE2 asm へのコード フラグメントの移植
MMX から SSE2 にいくつかのコードを移植しようとしていますが、その際に少し問題があります。
MMX の場合:
SSE2 の場合:
私はそれが正しいとは信じていません。SSE2 をサポートするために oneBytes を変換する適切な方法は何ですか? ありがとう!
simd - MMX に pmulluw、pslad、pslaw コマンドがないのはなぜですか?
MMX に pmulluw、pslad、pslaw コマンドがないのはなぜですか? movb コマンドと movw コマンドがないのはなぜですか?
simd - MMX セットに mоvb および mоvw 命令がないのはなぜですか?
mоvq と mоvd はありますが、mоvb と mоvw はありません。なんで?バイトやワードを移動する必要はありませんか?
c++ - SSE による整数/浮動小数点値
整数のベクトルを他の整数のベクトルで乗算し、その結果 (つまり整数のベクトル) を浮動小数点値のベクトルで加算する必要があります。
整数に MMX または SSE4 を使用する必要がありますか、それともこれらすべての値で (整数がある場合でも) SSE を使用して整数を __m128 レジスタに入れることはできますか?
実際、私は __m128 レジスタで整数を使用することがよくありますが、時間を無駄にしている (暗黙のキャスト値) のか、それとも同じことなのかわかりません。
-O3 オプションを付けてコンパイルしています。
x86 - SSE 組み込み関数: 32 ビット浮動小数点数を UNSIGNED 8 ビット整数に変換
SSE 組み込み関数を使用して、0 から 255 の範囲にクランプされ、最も近い整数に丸められた 4 つの 32 ビット浮動小数点数のベクトルを取得しました。これらの 4 つをバイトとして書き出したいと思います。
_mm_cvtps_pi8
32 ビットを 8 ビットのsigned int に変換する組み込み関数がありますが、127 を超える値はすべて 127 にクランプされるという問題があります。符号なし 8 ビット値にクランプする命令が見つかりません。
私がやりたいことは、_mm_cvtps_pi16
とそれに_mm_shuffle_pi8
続く move 命令を組み合わせて、気になる 4 バイトをメモリに入れることだという直感があります。それが最善の方法ですか?シャッフル コントロール マスクをエンコードする方法を見つけられるかどうかを確認します。
更新: 以下は、私が望むことを正確に行うようです。より良い方法はありますか?
UPDATE2: ハロルドの回答に基づいたさらに優れたソリューションを次に示します。
x86 - 異なる mmx、sse、および avx バージョンは相互に補完的またはスーパーセットですか?
x86 SIMD 拡張に慣れる必要があると考えています。しかし、始める前に私はトラブルに遭遇しました。それらのどれがまだ関連しているかについての良い概要が見つかりません。
x86 アーキテクチャは、数十年にわたって多くの数学/マルチメディア拡張機能を蓄積してきました。
- MMX
- 3Dナウ!
- SSE
- SSE2
- SSE3
- SSSE3
- SSE4
- AVX
- AVX2
- AVX512
- 私は何かを忘れましたか?
新しいものは古いもののスーパーセットですか、またはその逆ですか? それとも補完的なものですか?
それらのいくつかは非推奨ですか?これらのうち、まだ関連しているのはどれですか? 「レガシー SSE」への言及を聞いたことがあります。
それらのいくつかは相互に排他的ですか?つまり、同じハードウェア部品を共有していますか?
最新の Intel / AMD CPU でハードウェアの使用率を最大化するには、どちらを併用する必要がありますか? 議論のために、命令の適切な用途を見つけることができると仮定しましょう... CPU で私の家を暖房します。
assembly - コンパイラが 64 ビット操作を行うときに movq を movd に変更するのはなぜですか?
私は次のようにプログラミングしています:
この場合、値を rax から mm1 に移動します。どちらも 64b レジスタです (qword 値をあるレジスタから別のレジスタに移動します)。しかし、コードをコンパイルすると、次のように表示されます。
コードを 64 ビット モードでコンパイルしていますが、64 ビット操作を 32 ビットに変更する理由がわかりません。
c - _m_empty と _mm_empty の違いは何ですか?
MMX 関数を探しているときに、そのうちの 2 つ と_m_empty
が_mm_empty
まったく同じ定義であることに気付きました。
では、なぜ両方が存在するのでしょうか。そのうちの 1 人はもう 1 人より年上ですか? マニュアルに記載されていない違いはありますか?
c++ - __m64 参照を使用して C++ プロジェクトを x64 に変換する
そのため、変換を開始してターゲットを「x64」に設定すると、未解決の外部が 7 つ得られます。2 つの例:
そこで、これらをもう少し詳しく調べてみたところ、ヘッダー ファイル内の __m64 が気に入らないことがわかりました。具体的には、mmintrin.h (他にもある可能性があります)。C++ のアマチュア時間に、何年も C++ をいじっていないので (私は通常 C# 部門にいます)、ヘッダー ファイルを編集して、__m64 を __m128i ??!! に置き換えようとしました。これと他の DLL を MachineX64 に対してコンパイルするための正しいルートがわからない。ヘッダーのソースを編集してローカル ディレクトリに配置した後も、右クリックでコンパイルできません... 再び-アマチュア時間。似たような質問をした人が何人かいますが、私は自分にぴったりの質問を見つけることができませんでした.
これは、サポートされていない __m64 を含む「mmintrin.h」のサンプルです...