Any*_*orn 2 c c++ optimization performance
我有以下循环:
for (int ij = begin; ij < ni*nj; ij += step) {
int j = ij/ni;
int i = ij - j*ni;
...
}
Run Code Online (Sandbox Code Playgroud)
i,j没有div/mod 可以计算什么其他选项?
展开循环不是一种选择.
我用两个变量.在进入循环之前,你必须使用除法和模数
begin并且可能step(取决于有多大step),但它们在循环中不是必需的.如果
step小于和除数ni,那么以下应该做的伎俩:
int end = ni;
int i = begin % ni;
int firstJ = begin / ni;
int j = firstJ;
while ( i < ni ) {
// ...
j += step;
if ( j >= nj ) {
++ i;
j = firstJ;
}
}
Run Code Online (Sandbox Code Playgroud)
如果step不是倍数nj - firstJ,你将不得不做一些关于处理其余事情的事情j >= nj.
我认为i并且j用于索引数据.根据数据的结构方式,可以更简单地预先添加begin(如果有指针),或者迭代忽略begin,begin在每次访问时添加.(如果你这样做,不要忘记纠正
ni并nj相应地.)