【发布时间】:2016-03-14 14:58:09
【问题描述】:
我一直在尝试优化我的 C 代码中的一个循环,以使其更有效地使用缓存。我有几个问题。我不能 100% 确定我是否正确地编写代码来循环块,因为我没有看到程序运行时间的速度增加。代码如下:
for(int k = 0; k < N; k+=b){
for (int i = k; i<MIN(N,i+b); ++i) {
a1[i] = 0.0f;
a2[i] = 0.0f;
for (int j = 0; j < N; j++) {
x = x[j] - x[i];
y = y[j] - y[i];
2 = x*x + y*y + eps;
r2inv = 1.0f / sqrt(r2);
r6inv = r2inv * r2inv * r2inv;
s = m[j] * r6inv;
ax[i] += s * x;
ay[i] += s * y;
}
}
}
我还有一个问题。如何选择正确的块大小?我了解到您希望加载足够的内容以填充 l1 缓存。
提前感谢您的帮助。
【问题讨论】:
标签: c loops optimization