c++ - 在SIMD、SSE2中,很多指令名为 "_mm_set_epi8","_mm_cmpgt_epi8 "等等, "mm" "epi"是什么意思?

标签 c++ simd sse intrinsics sse2

我看到很多带有简写的指令,例如“_mm_and_si128”。我想知道“mm”是什么意思。

最佳答案

参见 What are the names and meanings of the intrinsic vector element types, like epi64x or pi32? 对于元素类型。


_mm_ 函数命名很可能代表 MMX 或多媒体,或者汇编中的 mm0-7 寄存器命名。 Intel 通过为 x86 引入的第一个 SIMD 扩展开始了 C 内在函数的命名方案,MMX ,它使用 64 位 vector (在寄存器 mm0-7 中,或 C 内部类型 __m64)。

从官方角度来看,这显然是作为一种让他们注册 MMX 商标的法律辩护,这并不是一个更长的缩写词。但非正式地,它被广泛认为是多媒体扩展。


SSE2 使用 SSE1 引入的 XMM0-7 寄存器(64 位模式下的 XMM0-15)添加了这些整数 SIMD 指令的 128 位版本,其中主要在这些寄存器中添加了单精度浮点,还有一些MMX 寄存器上的新整数指令。 (SSE2 还在 XMM 规则中添加了标量和打包 double 。)请参阅标签 wiki,https://stackoverflow.com/tags/sse/info ,了解更多历史记录。

英特尔继续其命名模式,例如将 _mm_add_epi8 作为 MMX _mm_add_pi8 的 SSE2 128 位版本,而不将简介更改为 _xmm_add 或诸如此类的事情。正如 What are the names and meanings of the intrinsic vector element types, like epi64x or pi32? 中所讨论的,扩展的 e 表示它是一个比 64 位打包 i8 或 u8 或其他内容更宽的 vector 。


__m64/__m128i 类型名称似乎不代表任何东西,但与 _mm__mm256 的命名类似 函数名称显然是为了关联。

关于c++ - 在SIMD、SSE2中,很多指令名为 "_mm_set_epi8","_mm_cmpgt_epi8 "等等, "mm" "epi"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74831784/

相关文章:

c++ - 是否可以更改 C++ std::set 的比较器?

c++ - 从 Visual Studio 2017 引用静态库有多简单?

c++ - 奇怪的食人魔错误和一个不存在的文件

c++ - 在 gdb 调试器中打印 __m128 数据类型的值

c++ - shufps 比内存访问慢吗?

c# - 浮点范围缩减

c++ - 找不到 qgsapplication.h 和其他头文件

c - 相对于标准代码测试 simd 加速的正确方法是什么

c++ - 反转 __m512i 寄存器中的值

C++ SIMD : accumulate POPCOUNTs of uint64_t elements in an array