索引和替换的计算成本

时间:2019-03-16 01:02:09

标签: c++ matrix

说我有以下代码用于退换

for (int i = n - 1; i >= 0; i--) {
    double temp = b[i];
    if (i != n - 1) {
        for (int j = i + 1; j < n; j++) 
            temp -= A[i][j] * b[j];
    }
    b[i] = temp/A[i][i];
}

但是对于我作为编程新手来说,以下内容似乎更简单:

for (int i = n - 1; i >= 0; i--) {
    if (i != n - 1) {
        for (int j = i + 1; j < n; j++) 
            b[i] -= A[i][j] * b[j];
    }
    b[i] /= A[i][i];
}

,每次从b[i]迭代到j = i+1时都需要索引j = n - 1。但是此b[i]是固定数量,因为此迭代不依赖于i的值。

但是我不确定编译器更喜欢哪一个。有帮助吗?

1 个答案:

答案 0 :(得分:2)

定义double temp = b[i];鼓励编译器将计数temp保留在CPU的寄存器之一中。使用您的其他代码,编译器可能会将计数保留在主存储器中。 ,不适合存储数组的寄存器。

除非非常大,否则数组可能会保留在高速缓存中,因此它仍然相当快;但是寄存器更快。