在VC中如何让循环作并行处理或向量化的优化?

解决方案 »

  1.   

    for( int  ix = 1; ix <= 5; ix++ )
    {
       float fx = ix * 3.14.59;
       sum += fx; //这里可能会出现先写后读相关,并行程度不会很高,就算能机器可以自动
    //优化也是利用内存读推迟或者是通过相关专用单元来解决。而且循环会增加预判的不确定性。
    }sum += 3,14159 + 2 * 3.14159 + 3 * 3.14159 + 4 * 3.14159 + 5 * 3.14159;
    如果浮点加是+6的时间作完,那么该表达式的计算的时间是, +6--》流水线建立时间,
    以后每过+1出来一个浮加结果,6 + 5 = 11,忽略取指和操作数送运算单元的时间。
    想不出好的例子,以前看过的书上有一些好的例子。
      

  2.   

    就这样而已吗?
    向下面文章里面的优化 在VC里该怎么实现?
    还有,Intel的编译器是不是收费的?
    http://www.csdn.net/develop/Read_Article.asp?Id=18378
      

  3.   

    这是一个提高2倍速的例子func1(size_t n)
    {
      int a;
      size_t i;
      for(i = 0; i < n; i++)
      {
        a = 0;
      }
    }
    func2(size_t n)
    {
      int a;
      int d = n%8;
      int i = n/8;
      switch(d)
      {       do{
      case 7:  a = 0;
      case 6:  a = 0;
      case 5:  a = 0;
      case 4:  a = 0;
      case 3:  a = 0;
      case 2:  a = 0;
      case 1:  a = 0;
      case 0:  a = 0;
      default: ;
    }while(--i != 0);
      }
    }
    int main()
    {
    int i,j,k;
    size_t n = 1000000000;
    i = GetTickCount();
    func1(n);
    j = GetTickCount();
    func2(n);
    k = GetTickCount(); printf("%d,%d\n",j-i,k-j);
    }
    漫长的等待后打印出
    21711,7842
    差不多2.8倍。
    如果加大case分支数,可以得到更好的效果