Что является более быстрым Sum Array Rows или Sum Array Cols для x86_64? - PullRequest
0 голосов
/ 10 декабря 2018

Таким образом, существует два способа вычисления двумерного массива путем итерации первого измерения или второго измерения первым.Но какой из них быстрее получить сумму двумерного массива для архитектуры машины 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 голосов
/ 10 декабря 2018

Сложность обеих функций одинакова.

Однако ЦП имеет более быстрый доступ к смежным ячейкам, поскольку загружает страницу памяти в свой кэш (атаки на основе Spectre и Meltdown основаны на этой оптимизации).

Массив состоит из 16 строк по 16 столбцов, что в памяти выглядит примерно так:

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

Итак, теоретически первый должен быть быстрее.Но учитывая, что сам массив довольно мал (в памяти), разница, если таковая имеется, должна быть минимальной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...