Повысить производительность функции C с помощью локальности кеша?

Мне нужно найти диагональную разницу в матрице, представленной как 2d-массив, а прототип функции -

int diagonal_diff(int x[512][512])

Я должен использовать 2d-массив, и данные имеют размер 512x512. Это проверено на машине SPARC: мое текущее время составляет 6 мс, но мне нужно быть менее 2 мс.

Пример данных:

[3][4][5][9]
[2][8][9][4]
[6][9][7][3]
[5][8][8][2]

Разница в следующем:

|4-2| + |5-6| + |9-5| + |9-9| + |4-8| + |3-8| = 2 + 1 + 4 + 0 + 4 + 5 = 16

Для этого я использую следующий алгоритм:

int i,j,result=0;
for(i=0; i<4; i++)
    for(j=0; j<4; j++)
        result+=abs(array[i][j]-[j][i]);

return result;

Но этот алгоритм продолжает обращаться к столбцу, строке, столбцу, строке и т. Д., Что неэффективно. кеша.

Есть ли способ улучшить мою функцию?

6
задан Christoper Hans 12 October 2011 в 08:41
поделиться