首页 文章

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

提问于
浏览
-1

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

这是sum数组行的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;
}

这是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 回答

  • 2

    两种功能的复杂性是相同的 .

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

    该数组是16行16列,在内存中是类似的

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

    所以,理论上第一个应该更快 . 但是考虑到阵列本身非常小(在内存中),差异(如果有的话)应该是最小的 .

相关问题