图7列出了使用SIMD技术的多种方法,我们先按从上至下的顺序简要介绍每一种,然后重点介绍汇编语言方法。

图7 使用SIMD技术的多种方法
第一种方法是使用著名的IPP库,IPP的全称是Intel Integrated Performance Primitives, 是英特尔公司开发的一套跨平台软件函数库,提供了非常广泛的功能,包括各种常用的图形图像、音视频处理函数。因为其中的很多函数都已经使用SIMD技术做了优化,所以使用这个库是使用SIMD技术的一个快捷途径。通过链接https://software.intel.com/en-us/intel-ipp/ 可以访问IPP的官方介绍,了解更多信息。
第二种方法是使用编译器的自动向量化(Auto-vectorization)支持。比如图8是在Visual Studio(C++)中通过项目属性对话框启用自动向量化的截图。
图8 在Visual Studio中启用自动向量化支持
经笔者分析,这样启用后编译好的程序中确实使用了一些SIMD指令,比如图9右侧蓝色加亮那一行使用的便是SSE2中的cvtsi2sd指令,它可以将源操作数中的有符号双字整数转换成目标操作数中的双精度浮点值。
图9 观察编译器自动向量化产生的SIMD指令
如果使用GCC编译器,那么可以使用类似这样的命令行来编译:
代码1

本文介绍了C++中使用SIMD技术的六种方法,包括Intel IPP库、编译器自动向量化、编译器指示符、Cilk技术、内建函数以及直接使用汇编语言。通过实例展示了如何使用SIMD指令进行图像处理,强调了SIMD技术在提升计算速度方面的显著优势。
最低0.47元/天 解锁文章
9945





