我必須找到在表示爲2D陣列和函數原型的矩陣的對角線的區別是使用緩存局部性改進C函數性能?
int diagonal_diff(int x[512][512])
我必須使用一個二維數組,並且數據是512×512。這是在SPARC機器上測試的:我目前的時間是6ms,但我需要在2ms以下。
的樣本數據:
[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;
但這種算法保持訪問列,行,列,行等,導致緩存使用效率低下。
有沒有辦法改善我的功能?
你有沒有基準或資料這個?真正的矩陣有多大?任何4乘4矩陣都適用於緩存,並且與訪問項目的順序無關。 –
即使您每秒執行50,000,000次這樣的操作,即使是低端的現代CPU也不會打破汗水。即使函數調用abs()也會被大多數編譯器(包括GCC和VC++)固有的優化掉。 –
array的大小是512x512,我必須使用2D數組。接口規範是固定的,我只需要填寫implements.int diagonal_diff(int x [512] [512],int y [512] [512]) –