首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

不优化编译器情况下代码C/C++代码优化,该怎么处理

2013-04-02 
不优化编译器情况下代码C/C++代码优化请教下各位,不考虑编译器优化的情况下,请问怎样写才能是次数最少的方

不优化编译器情况下代码C/C++代码优化
请教下各位,不考虑编译器优化的情况下,请问怎样写才能是次数最少的方式,立马给分,谢谢.
for( i = 1; i < 720; i++ )
{
for( j = 1; j < 1280; j++ )
{
   pix = (pY[(i - 1) * 1280+ j - 1] * v1) +
                  (pY[(i - 1) * 1280+ j    ] * v1) +
                  (pY[(i - 1) * 1280+ j + 1] * v1) +
                  (pY[(i    ) * 1280+ j - 1] * v1) +
                  (pY[(i    ) * 1280+ j    ] << v2) +
                  (pY[(i    ) * 1280+ j + 1] * v1) +
                  (pY[(i + 1) * 1280+ j - 1] * v1) +
                  (pY[(i + 1) * 1280+ j    ] * v1) +
                  (pY[(i + 1) * 1280+ j + 1] * v1);

}  
}
优化?c/++
[解决办法]
最简单的把(i - 1) * 1280,i*1280, (i + 1) * 1280放在循环外边计算:
int a1=(i - 1) * 1280;
int a2=a1+1280;
int a3=a2+1280;
里面用这三个替换就可以了
而且里面乘v1可以先加后乘
[解决办法]
少作点儿乘法呗.


for( i = 1; i < 720; i++ )
{
 auto const p0 = pY + (i-1)*1280;
 auto const p1 = p0 + 1280;
 auto const p2 = p1 + 1280;
 for( j = 1; j < 1280; j++ )
 {
  pix =(p0[j-1]+p0[j]+p0[j+1]+
        p1[j-1]+      p1[j+1]+
        p2[j-1]+p2[j]+p2[j+1])*v1+
        p1[j]<<v2;
 }
}

我看这就是个 sliding window operation,印象中有个快速算法。回头帮你翻翻,找到了的话就发上来。
[解决办法]
LZ你这个是不是在做图像里面的模板滤波?
楼上几个说的是种方法。不过我估计不会快到哪去。
你的这种情况还只是3*3的模板,如果在模板特别大的情况,比如10*10的模板做滤波,就得使用FFT快速离散傅里叶变换来优化速度。但是对于小模板来说估计怎么优化也快不到哪去吧。
或者考虑用Opencl/cuda借助GPU来加速。

热点排行