一部の組み込み関数では、接尾辞x
を_mm256_set1_epi64x
のように使用します。それの意味はなんですか?参考のために、_mm256_set1_epi32
にはこの接尾辞が付いていません。"_mm256_set1_epi64x"のような組み込み関数の接尾辞 "x"の意味
答えて
TL:DR: MMX-> SSE2変換組み込み関数は、-x_mm_set/set1_epi64
の名前をとっています。
これは、現在の関数名、知られている歴史、そしていくつかのコンパイラの動作に基づいて、すべての当て推量です:
最初のIntel SIMD組み込み関数は、MMXのためでした。 __m64
は、SSE2 __m128i
およびAVX2 __m256i
のMMXに相当します。当時は64ビットのx86 CPUはなかったため、最も幅広いset
の組み込み関数は__m64 _mm_set_pi32 (int e1, int e0)
でした。固有ファインダによれば、依然としてmovq mm0, rax
の固有値は存在しない。 int64_t
から__m64
にキャストしてください。 (私が最後の1年ほど前に実験したが、gccやclang(どちらが忘れているか)はMMX asmを最適化するうえで貧弱な仕事でしたが、新しいプロジェクトのためにMMXを避けるもう一つの理由です。 SSE2が導入されたのはin 2001で、まだAMD64/x86-64はリリースされておらず、数年前からIntelによってサポートされていませんでした。 (当時、彼らはIA-64/Itaniumが将来x86となることを望んでいた)。私は古いマニュアルをチェックしていませんが、
__m128i _mm_set1_epi64 (__m64 a)
が利用可能だったと思います。
__m128i _mm_set1_epi64x (__int64 a)
おそらくそうではありませんでした。 (__int64
が<stdint.h>
からint64_t
ではないことに注意してください。しかし、それは、64ビット整数型で、何も心配することはありません。)拡張(?)パックド整数のため
epi
スタンド。 pi
の代わりにepi
を指定すると、それはSSE組み込み関数であり、MMX組み込み関数ではありません。ある要素幅から別の要素幅に変換する組み込み関数の場合、インライン展開では、(少なくとも見たものに対して)その動作を明確に識別できる場合は、ソース幅を使用します。例えば_mm_packs_epi32
(packssdw
)または_mm_unpackhi_epi16
(punpckhwd
)である。ありますのでPMOVZXは、両方の数字を必要と_mm_cvtepu8_epi32
(pmovzxbd
)、_mm_cvtepu8_epi64
(pmovzxbq
など
コンパイラは、32ビットモードでのコースのサポート、64ビットの整数でなかったので、Intelが含まれることが理にかなっているだろうただし、IIRC、コンパイラでは、64x
の組み込み関数は、64ビットコードをコンパイルするときにのみ使用できます。64x
は、スカラー64ビット整数との変換にのみ関連しています。 x
のバージョン_mm_add_epi64
などです。
これは、コンパイラによっては_mm256_set1_epi64x
の場合はまだ存在するかもしれませんが、どちらの方法でも64x
の理由が説明されていますが、32x
ではありません。
(申し訳ありませんが、私は怠け者だと-m32
と現在のコンパイラをチェックするためにGodboltで一緒に実験を入れていない。あなたが__m64
にint64_t
をキャストし、固有_mm_set
を使用してから取得したASMの種類を見るのは興味深いかもしれません32ビットコードで)
- 1. U接尾辞の意味
- 2. 組み込み関数/組み込み関数のテスト
- 3. C++で()を持つ組み込み型の意味
- 4. 組み込み関数IIF
- 5. 組み込み関数の変更
- 6. python組み込み関数の原理?
- 7. コードビルドプロセスと組み込み関数
- 8. OpenGLのGPU組み込み関数
- 9. Racketのプリミティブと組み込み関数
- 10. 組み込み関数の再定義
- 11. 組み込み関数のPHPソースコード
- 12. システム組み込み関数のエラー
- 13. Netbeans組み込みPHP関数のコードハイライト
- 14. CythonのAES-NI組み込み関数?
- 15. エクセルで接頭辞と接尾辞を組み合わせる方法は?
- 16. 読み込みと読み込みの意味上の相違
- 17. TBBとSSE2の組み込み関数を組み合せる
- 18. Octaveで組み込み関数をオーバーロードするときの組み込み関数の不一致
- 19. 組み込み関数内の関数へのアクセス
- 20. カスタムGoogle App関数での組み込み関数の使用
- 21. 組み込み関数が組み込まれていない並べ替え
- 22. モンキーパッチはユニットテストのための組み込み関数ですか?
- 23. Clojure組み込み関数の関数定義:def vs defn
- 24. AMD HCC Swizzle組み込み関数
- 25. postgresql組み込み関数return
- 26. Delphi組み込みコールバック関数
- 27. 再定義パイソン組み込み関数
- 28. SSE3組み込み関数:山車
- 29. テーブルロードVBA vs組み込み関数
- 30. bash組み込み関数bashソースコード
I * think * "x"は、64ビットターゲットでのみ使用できる組み込み関数(および対応する命令)を意味します。しかし、私はそれを確信していません。私は何の証明もできません。それは私が数回気づいたパターンです。あなたがここで尋ねるもう1つの質問は、本当に話題にはなりません。私たちは外部のリソースに対する要求をしません。 –
@CodyGray、ロードマップのリクエストを削除しました。 –
本来、「歴史的な」変種とそれに続くより有用な変種の2種類があります。 '_mm_set1_epi64'は' __m64'パラメータをとり、 '_mm_set1_epi64x'は' int64_t'をとります。 –