【发布时间】:2013-06-13 11:14:55
【问题描述】:
我有以下代码
for(i=0;i<16;i++)
for(j=0;j<16;j++)
{
in=(i+u*j+rl+rc)&15;
jn=(v*i+(u*v+1)*j+rc)&15;
x1[i*16+j]=x2[in*16+jn];
}
一些注意事项:
-
rl,rc,u和v是随机值,范围从 0 到 15 -
x1和x2是 256 个值的数组,每个数组值的范围在 0 到 255 之间 - 如果我想使用查找表实现此代码需要 16MB 和这么大的内存
【问题讨论】:
-
这里有什么问题?
-
家庭作业?如果没有,请不要打扰 - 现代编译器会解决这个问题。保持代码可读,直到您有空闲时间或怀疑性能问题时对其进行分析。它被称为源代码,因为人类阅读它。
-
为什么要关闭?我认为这是一个没有很好问的有效问题。我认为这里有优化的空间。 LUT 和更智能的数学的某种组合。不过还没想出解决办法。
-
一般来说,如果没有深入了解底层硬件,手动优化任何东西是没有意义的。在 for 循环的情况下,如果不深入了解缓存内存硬件(如果存在于特定系统上),它尤其没有任何意义。
-
...另外,如果你反复选择带有1-2个晦涩字母的变量名,并且有在同一行写5个或更多运算符的习惯,并且用十进制表示法编写位掩码,那么程序性能至少是您的问题之一......
标签: c performance optimization for-loop