x86架构下的优化有多种手段,常见的有纯汇编优化、inline汇编、Intrinsic优化。前两种对编译器的依赖比较大,跨平台(windows\linux等)编译问题比较多,例如纯汇编:win32、win64、linux64下函数形参入栈规则都不一样,且需要保护的寄存器也有较大区别,此外还有汇编重定位问题等等;而inline汇编在windows下是intel格式,在linux下是AT&T格式。intrinsic入门快,且没有以上诸多问题,比较适合初学者,但是其性能相对纯汇编或Inline汇编,会差一些。本文就intrinsic优化作一些简单的介绍,具体需结合实践理解学习。
指令集类型 | 所占位数 |
---|---|
– MMX | : Multi Media Extensions 8 x 64bit (1997) |
– SSE/SSE2/SSE3/SSSE3/SSE4.x | : Streaming SIMD Extensions 8 x 128bit (1999) |
– AVX/AVX2/FMA | : Advanced Vector Extensions 16 x 256 bit (2008) |
– AVX-512/KNC | : Advanced Vector Extensions 32 x 512 bit (2012) |
备注:第二列8*64代表MMX寄存器有8个,每