C++中使用SIMD

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

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

图1  使用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 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值