小编Chr*_*ans的帖子

使用缓存局部性提高C函数性能?

我必须在表示为2d数组的矩阵中找到对角线差异,函数原型是

int diagonal_diff(int x[512][512])
Run Code Online (Sandbox Code Playgroud)

我必须使用2d数组,数据是512x512.这是在SPARC机器上测试的:我当前的时间是6ms,但我需要不到2ms.

样本数据:

[3][4][5][9]
[2][8][9][4]
[6][9][7][3]
[5][8][8][2]
Run Code Online (Sandbox Code Playgroud)

不同之处是:

|4-2| + |5-6| + |9-5| + |9-9| + |4-8| + |3-8| = 2 + 1 + 4 + 0 + 4 + 5 = 16
Run Code Online (Sandbox Code Playgroud)

为此,我使用以下算法:

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;
Run Code Online (Sandbox Code Playgroud)

但是这种算法不断访问列,行,列,行等,这使得缓存的使用效率低下.

有没有办法改善我的功能?

c optimization matrix

6
推荐指数
1
解决办法
1509
查看次数

标签 统计

c ×1

matrix ×1

optimization ×1