我在自学用VC做个包含图像处理的小程序,想提高图片处理的效率,在网上查到了很多,比如透明混合方面有很多使用MMX和SSE2编写的,但是我看VC编译优化里面有SSE2选项以及最快优化,不知道优化的算法+编译优化能代替或接近那些汇编的效率吗?或者说用什么样的方式写代码能生成一样或接近完全用SSE2编写的代码?比如for循环里采用并行优化+SSE2编译优化能吗?如果可行,那研究优化算法比现学汇编语言更好些。

解决方案 »

  1.   

    其实编译优化、代码优化和SSE并不是做比较的,其实都可以看成是优化的一种手段,你在编译优化、代码优化的同时也能做SSE的
      

  2.   

    也可以考虑使用OpenMP提高效率
      

  3.   

    谢谢楼上各位的回答,我现在还希望有人能用代码证明下,因为我还不会汇编及SSE2,也不会编译后查看汇编代码。我先打个比方:
    double array[20] = {0.0};
    //赋值省略
    for(int i = 0; i < 20; i += 4)
    {
        array[i] = array[i] * 12.5 + 54;//仅表示算法相同
        array[i + 1] = array[i + 1] * 12.5 + 54;//
        array[i + 2] = array[i + 2] * 12.5 + 54;//
        array[i + 3] = array[i + 3] * 12.5 + 54;//
    }
    不知这点代码算不算简单的并行运算,通过VC编译器SSE2优化后的汇编码与直接采用SSE2指令编写的代码编译后的汇编码是否接近,或是效率接近?
    希望哪位仁兄能帮忙验证下,或有更合适的代码证明下,先谢了
      

  4.   

    VC的sse2优化效果不明显,基本上选o2就是最大速度了。要用sse请使用intel c++
      

  5.   

    同意楼上。
    1、你那个代码,仅算法上应该只是符合并行运算的概念,编译后运行快也应该主要是流程加长循环减少的缘故,类似内联的作用,但是如果你的那个算法较复杂,加入多线程才是真正意义的并行运算。
    2、纯CPU运算的情况下,使用SSE2寄存器运算,同时处理多位,达到并行运算的效果,但更适用于连续、字节对齐并有相同算法的情况,有必要的情况下首先优化算法,然后考虑是否加入多线程,然后考虑个别适用SSE加速的算法。
    3、VC包含SSE指令的C++头文件,学一下,在原有算法的基础上替代优化很好理解
    4、并行运算能力GPU比CPU强多了,图形方面可以利用DirectX,科学计算方面利用流处理,推荐NVIDIA的CUDA编程。