X86平台下的SIMD运算
SSE
的全称是 Sreaming SIMD Extensions, 它是一组Intel CPU指令,用于像信号处理、科学计算或者3D图形计算一样的应用。
1 | #include <mmintrin.h> //MMX 64bits |
immintrin.h
: (Intel(R) AVX compiler intrinsics 256bit)emmintrin.h
: Principal header file for Intel(R) Pentium(R) 4 processor SSE2 intrinsics
XMM、SSE、AVX关系??
MMX
是由英特尔开发的一种SIMD多媒体指令集,共有57条指令。SSE
(Sreaming SIMD Extensions)是继MMX的扩充指令集。SSE 指令集提供了 70 条新指令。AVX
(Advanced Vector Extensions) 是Intel的SSE延伸架构,如IA16至IA32般的把暂存器XMM 128bit提升至YMM 256bit,以增加一倍的运算效率。
数据类型
关键字 | 说明 | 备注 |
---|---|---|
__m64 | 64位紧缩整数(MMX) | 一个MMX寄存器,表示封装了8个8bit,4个16bit,2个32bit,1个64bit的整数 |
__m128 | 128位紧缩单精度(SSE) | 封装4个32bit的单精度浮点数 |
__m128d | 128位紧缩双精度(SSE2) | 封装2个64bit的双精度浮点数 |
__m128i | 128位紧缩整数(SSE2) | |
__m256 | 256位紧缩单精度(AVX) | |
__m256d | 256位紧缩双精度(AVX) | |
__m256i | 256位紧缩整数(AVX) |
注: 紧缩整数包括了8位、16位、32位、64位的带符号和无符号整数。
SSE指令集
- 数据传输:Data movement instructions
- 算术运算:Arithmetic instructions
- 倒数运算:Reciprocal instructions
- 比较运算:Comparison instructions
- 数据转换:Conversion instructions
- 逻辑运算:Logical instructions
- 整数运算:Additional SIMD integer instructions (SSE Primer)
- 字节乱排:Shuffle instructions
- 状态管理:State Management instructions
- 缓存控制:Cacheability Control instructions
指令函数
Intel intrinsic
操作码汇总表中的指令列
- mm — An MMX register. The 64-bit MMX registers are: MM0 through MM7.
- xmm — An XMM register. The 128-bit XMM registers are: XMM0 through XMM7; XMM8 through XMM15 are
available using REX.R in 64-bit mode. - ymm — A YMM register. The 256-bit YMM registers are: YMM0 through YMM7; YMM8 through YMM15 are
available in 64-bit mode.
参考
- SSE2 Intrinsics各函数介绍
- GCC中SIMD指令的应用方法
- mmintrin.h与MMX指令集 Intrinsics函数
- SIMD指令初学
- SSE指令集学习:Compiler Intrinsic
- 深入浅出指令编码之四:指令核心
- An evaluation of the automatic generation of parallel X86 SIMD
- Intel® 64 and IA-32 ArchitecturesSoftware Developer’s Manual