优化3D循环(C)
发布时间:2020-12-16 09:43:21 所属栏目:百科 来源:网络整理
导读:我正在使用C中的多重网格解算器,现在我正在努力提高串行性能.最耗时的部分是更平滑,在我的例子中是一个连续的过度放松求解器.这看起来如下(我希望它非常自我解释): int idx; int strideY = stride_[level][0];int strideZ = stride_[level][1];for(int i =
我正在使用C中的多重网格解算器,现在我正在努力提高串行性能.最耗时的部分是更平滑,在我的例子中是一个连续的过度放松求解器.这看起来如下(我希望它非常自我解释):
int idx; int strideY = stride_[level][0]; int strideZ = stride_[level][1]; for(int i = 0; i < steps; ++i) { for(int z = 1; z <= innerGridpoints_[level][2]; ++z) { for(int y = 1; y <= innerGridpoints_[level][1]; ++y) { idx = getIndexInner(level,1,y,z); for(int x = 1; x <= innerGridpoints_[level][0]; ++x,++idx) { grid[idx] = (1. - omega) * grid[idx] + omega * 1./6. * (grid[idx+1] + grid[idx-1] + grid[idx + strideY] + grid[idx - strideY] + grid[idx + strideZ] + grid[idx - strideZ] - spacing_[level] * spacing_[level] * rhs[idx]); } } } } 我已经做了一些优化:循环定位使得内部循环给出最多的本地条目(即相邻元素沿x维度),以及idx的预先计算(即使这是一个内联函数,它节省了很多时间这样). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容