对于x86_64,哪个是更快的Sum Array Rows或Sum Array Cols?

时间:2018-12-10 03:42:20

标签: c arrays x86-64

因此,有两种方法可以通过首先迭代第一维或第二维来计算二维数组。但是,对于x86_64机器体系结构,获得二维数组之和的哪个更快?

这是求和数组行的C代码

int sum_array_rows(double a[16][16]){
    int i, j;
    double sum = 0;
    for (i = 0; i < 16; i++)
        for (j = 0; j < 16; j++)
            sum += a[i][j];
    return sum;
}

这是求和数组cols

int sum_array_cols(double a[16][16]){
    int i, j;
    double sum = 0;
    for (j = 0; j < 16; j++)
        for (i = 0; i < 16; i++)
            sum += a[i][j];
    return sum;
}

1 个答案:

答案 0 :(得分:2)

这两个函数的复杂度是相同的。

但是,当CPU在其缓存中加载内存页面时,它可以更快地访问相邻单元(Spectre和Meltdown攻击基于此优化)。

数组是16行16列,在内存中就像

d[0][0]|d[0][1]|...|d[0][15]|d[1][0] ...

因此,理论上第一个应该更快。但是考虑到数组本身很小(在内存中),因此差异(如果有的话)应该很小。