【问题标题】:Intel SSE intrinsics: Difference between si64 si64x英特尔 SSE 内在函数:si64 si64x 之间的区别
【发布时间】:2013-09-08 02:02:12
【问题描述】:

我刚刚注意到 SSE2 指令集中有一个 _mm_cvtsd_si64 和一个 _mm_cvtsd_si64x 内在函数。根据英特尔内在函数指南,两者的作用完全相同。那么区别在哪里,或者,如果没有,为什么会有两个相同的内在函数?

这只是一个例子,还有更多带有 si64 和 si64x 版本的内在函数似乎做同样的事情。

【问题讨论】:

    标签: intel sse intrinsics


    【解决方案1】:

    这可能是历史性的,可以追溯到 MMX/SSE 的早期,并且可能在不同的内在函数集之间存在一些差异。

    请注意,即使现​​在一些内部函数也有 6464x 版本,因为它们采用不同的参数类型,即使它们做同样的事情,例如

    __m128i _mm_set1_epi64x (__int64 a)
    

    __m128i _mm_set1_epi64 (__m64 a)
    

    【讨论】:

    • 英特尔列出了_mm256_permute2f128_si256_mm256_permute2x128_si256,我可以看到它们之间的唯一区别是第一个使用int imm,第二个使用const int imm。第二个需要 AVX2,但它们都调用完全相同的指令。我不明白2x128 版本的意义。
    • 别在意我的最后评论。他们实际上调用了不同的指令。一种作用于浮点域,一种作用于整数域。区别和这个问题一样stackoverflow.com/questions/25684454/…
    【解决方案2】:

    两者不一样。 __m64 是 MMX 寄存器,在 x86_64 上不推荐使用 MMX。 MMX 寄存器与 x87 共享寄存器文件,操作系统不会在 x86_64 上的上下文切换之间保留这些寄存器文件。当然,MMX 仍然可以在 32 位进程中使用。 __int64 是 Microsoft 的 64 位有符号整数 ALU 寄存器的 typedef(在 32 位模式下模拟)。由于这些原因,在 64 位程序上首选 64x 格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多