使用Intel 向量化编译器优化性能(3)

使用Intel 向量化编译器优化性能(3) 本文节选翻译自Intel编译器文档 1.       向量化循环中的数据类型在整形的循环中,MMX和SSE技术都为多数使用8/16/32bits长度数据的算法和逻辑操作提供了相应的SIMD指令,如果一个使用整数的算法把结果保存在一个有足够精度的变量中,那么这个算法就可能被向量化,举例说,一个运算的结果是32位整数,但却被保存在一个16
摘要由CSDN通过智能技术生成

使用Intel 向量化编译器优化性能(3)

 

本文节选翻译自Intel编译器文档

 

1.       向量化循环中的数据类型

在整形的循环中,MMXSSE技术都为多数使用8/16/32bits长度数据的算法和逻辑操作提供了相应的SIMD指令,如果一个使用整数的算法把结果保存在一个有足够精度的变量中,那么这个算法就可能被向量化,举例说,一个运算的结果是32位整数,但却被保存在一个16位的整数中,那么这么操作就不能被向量化,不是所有整形操作都能够被向量化的.

32位或64位浮点数的循环中,SSE指令集不光为加减乘除等运算提供了相应的SIMD指令,而且也提供了诸如MAX/MIN/SORT这样的操作的SIMD指令,其它的一些数学运算,比如三角函数SIN/COS/TANSIMD版本也已经在和编译器一起提供的向量数学库中得到了支持.

 

2.       展开循环

         编译器会自动对循环进行分析,并生成展开后的代码,这就是说你不需要自己去展开循环重新编写循环操作,在很多情况下,这能够使你获得更多的向量化操作.

看下面的循环

int i = 0;

     while(i < k)

     {

         a[i] = b[i] + c[i];

         ++i;

}

              向量化后就生成这样2个循环操作

                                   while(i < (k - k % 4))

  {

    a[i] = b[i] + c[i];

    a[i + 1] = b[i + 1] + c[i + 1];

    a[i + 2] = b[i + 2] + c[i + 2];

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值