2013-01-20 28 views
0

我做了一個檢查矩陣效率的應用程序。我使用各種方法(例如更改循環,2/3循環,openmp等)。還有一件事:我必須檢查數據預取。如何更改此C代碼預取一些數據?

代碼:

#define SIZE 5000 

for(int i=0;i<SIZE;i++) 
for(int j=0;j<SIZE;j++) 
    mul+=tab[i][j] 

通常處理器prefetch數據本身(當我們在單排和增量j),但並非總是如此(例如tab[0][0]是從未prefeched或者當我們去到下一行(loop i++ ,tab[i][0] ))。如何修改這段代碼以幫助procprefetch來自tab[0][0], tab[1][0],tab[2][0],tab[3][0]的數據等等,然後我們會對它們進行計數?

+0

您正在使用哪種編譯器/平臺? – Hasturkun

+0

我使用openMP的visual studio – asss

回答

1

您可以使用預取內建函數:

無效_m_prefetch(void *的);

您希望在您所在位置之前預取至少128個字節。您可能需要展開循環,以便在每次預取之間執行適當的工作量,否則會浪費實際預取指令的時鐘週期。

然而,我懷疑處理器本身會做預取的體面工作,因爲你正在讀取內存「直線前進」[假設tab是一個二維編譯時數組,而不是運行時建立陣列]。