Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 失去对循环变量的依赖-循环优化_C_Optimization - Fatal编程技术网

C 失去对循环变量的依赖-循环优化

C 失去对循环变量的依赖-循环优化,c,optimization,C,Optimization,我有以下嵌套循环计算: int aY=a*Y,aX=a*X; for(int i=0; i<aY; i+=a) { for(int j=0; j<aX; j+=a) { xInd=i-j+offX; yInd=i+j+offY; if ((xInd>=0) && (xInd<X) && (yInd>=0) && (yInd<Y

我有以下嵌套循环计算:

int aY=a*Y,aX=a*X;
for(int i=0; i<aY; i+=a)
{
    for(int j=0; j<aX; j+=a)
    {
        xInd=i-j+offX;
        yInd=i+j+offY;
        if ((xInd>=0) && (xInd<X) &&
            (yInd>=0) && (yInd<Y) )
            {
             z=yInd*X+xInd;
            //use z
            }
     }
}
int-aY=a*Y,aX=a*X;

对于(int i=0;i如果我们假设offX和offY为0,并替换你的“如果我们将问题理解为如何最小化循环中的迭代次数,我们可以采用以下方法

制约因素:

(xInd>=0) && (xInd<X)
(yInd>=0) && (yInd<Y)
修复
i
允许我们将第二个循环边界重写为:

for(int i=0; i<aY; i+=a) {
    int lower = (max(i + offX - X, -i - offY) / a) * a; //factored out for clarity.
    int upper = min(i + offX, Y - i -offY);
    for(int j=lower; j<=upper; j+=a) {

你能说明
a
Y
X
的性质吗?如果它们是常量或变量,答案会有所不同。为什么没有乘法很重要。你的目标是什么架构?迭代的顺序必须保持完全相同吗?这可以并行化吗?你是否缺少一对brackets?@cmh它们是常数。a是角度,X,Y分别是图像的宽度和高度。这是一个优化练习。我们已经了解到乘法是一个相对昂贵的操作。这可以在乘法速度较慢的系统上进行测试
0 <= i - j + offX <= X
0 <= i + j + offY <= Y
for(int i=0; i<aY; i+=a) {
    int lower = (max(i + offX - X, -i - offY) / a) * a; //factored out for clarity.
    int upper = min(i + offX, Y - i -offY);
    for(int j=lower; j<=upper; j+=a) {
int indicies[Y * X];
int index = 0;
for(...){
    for(...){
        ...
        indicies[index++] = z;
    }
}
// sort indicies
for(int idx = 0; idx < index; idx++){
    z = indicies[idx];
    //do stuff with z
}