gpt4 book ai didi

c - 提高 C 循环的效率

转载 作者:行者123 更新时间:2023-11-30 20:53:39 25 4
gpt4 key购买 nike

我有一些可以工作的 C 代码,我希望它们能提高效率。我知道最好避免循环中的 if 语句,但是我正在努力解决这个问题。谁能建议我如何使以下代码更高效?

for(iy=0;iy<Ny;iy++) {
for(ix=0;ix<Nx;ix++) {


if (ix==0) {
pudx = (u[1][iy] + u[Nx-1][iy] - 2.0*u[0][iy])/(calc1);
} else if (ix==Nx-1) {
pudx = (u[0][iy] + u[Nx-2][iy] - 2.0*u[Nx-1][iy])/(calc1);
} else {
pudx = (u[ix+1][iy] + u[ix-1][iy] - 2.0*u[ix][iy])/(calc1);
}

if (iy==0) {
pudy = (u[ix][1] + u[ix][Ny-1] - 2.0*u[ix][0])/(calc2);
} else if (iy==Ny-1) {
pudy = (u[ix][0] + u[ix][Ny-2] - 2.0*u[ix][Ny-1])/(calc2);
} else {
pudy = (u[ix][iy+1] + u[ix][iy-1] - 2.0*u[ix][iy])/(calc2);
}


u_new[ix][iy] = 2.0*u[ix][iy] - u_old[ix][iy] + calc*(pudx+pudy);

}
}

我知道这种优化可以通过编译器完成,但我想使用 -o 标志来提高效率(无编译器优化)。

最佳答案

@JohnBollinger 之后:(显然未经测试)

<小时/>
unsigned ix, iy;
for(iy=0;iy<Ny;iy++) {
unsigned yl,yh;

yl = (iy -1) %Ny; yh = (iy +1) %Ny;
for(ix=0;ix<Nx;ix++) {
unsigned xl,xh;

xl = (ix -1) %Nx; xh = (ix +1) %Nx;
yl = (iy -1) %Ny; yh = (iy +1) %Ny;

pudx = (u[xh][iy] + u[xh][iy] - 2.0*u[ix][iy])/(calc1);
pudy = (u[ix][yh] + u[ix][yl] - 2.0*u[ix][iy])/(calc2);

u_new[ix][iy] = 2.0*u[ix][iy] - u_old[ix][iy] + calc*(pudx+pudy);

}
}

关于c - 提高 C 循环的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47142992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com