首页 > 解决方案 > 通过编写循环优化 C 中的基本嵌套循环

问题描述

当前循环是:

#define N 3000
...
int i, j;
int a[N][N], b[N][N], c[N]; 
// Fill in b and c with random values

for (i = 0; i < n; ++i) {
  for (j = 0; j < n; ++j) {
    a[i][j] = b[i][j] / c[i];
  }
}

我的优化版本展开了外循环和内循环:

for (int i = 0; i < N; i += 2) {
    for (int j = 0; j < N; j += 2) {
      a[i][j] = b[i][j] / c[i];
      a[i][j + 1] = b[i][j + 1] / c[i];
      a[i + 1][j] = b[i + 1][j] / c[i + 1];
      a[i + 1][j + 1] = b[i + 1][j + 1] / c[i + 1];
    }
  }

但是,我的导师说第二个循环没有优化得很好。c(i) 的指示应该从 j 上的循环中取出。通过更改索引的顺序来优化循环。这样,您可以在内部循环中对内存进行一次扫描,而不是进行曲折类型的搜索。

我仍然不确定他的意思,因为更改索引的顺序仍然会使循环以之字形遍历。这种情况下的正确解决方案应该是什么?

标签: cloopsoptimizationnested-loops

解决方案


放入int ci = c[i];外循环,内循环除以ci.注意,任何合理的编译器都会为您执行此操作。


推荐阅读