2012-12-10 25 views
1

我在上個月一直在進行計算機矩陣乘法運算,並且使用openMP和eigen3進行了一些測試。Eigen3矩陣乘法性能取決於處理器?

測試在後續的機器製造:

電腦1:

英特爾酷睿i7-3610QM CPU @ 2,30GHz/6 GB DDR3

電腦2:

六核AMD Opteron(tm)處理器2435 2.60 GHz(2個處理器)/ 16 GB

對於OPENMP後續矩陣的矩陣乘法算法用於:

void matrix4openmp(void) 
{ 
    int j; 

#pragma omp parallel for 
for (j=0;j<N; j+=2){ 
    double v1[N],v2[N]; 
    int i,k; 
    for (i=0;i<N; i++){ 
    v1[i]=b[i][j]; 
    v2[i]=b[i][j+1]; 
    } 

    for (i=0; i<N;i+=2){ 
    register double s00,s01,s10,s11; 
    s00=s01=s10=s11=0.0; 
    for (k=0;k<N;k++){ 
     s00 += a[i] [k] * v1[k]; 
     s01 += a[i] [k] * v2[k]; 
     s10 += a[i+1][k] * v1[k]; 
     s11 += a[i+1][k] * v2[k]; 
    } 
    c[i] [j] =s00; 
    c[i] [j+1] =s01; 
    c[i+1][j] =s10; 
    c[i+1][j+1] =s11; 
    } 
} 

結果表明後續:

_________________________Computer 1__________Computer 2

序貫________ 232,75600 ___________ 536,21400

OpenMP____________2, 75764 ____________ 7,62024

Eig EN3 _____________ 3,35090 ____________ 1,92970

*的時間以秒爲單位。

*矩陣尺寸爲2700 X 2500和2500×2700

*順序算法是不一樣的OMP,它的M-m個相乘的最簡單的版本,可以在這裏看到:http://pastebin.com/Pc9AKAE8

*對於eigen3測試,激活SSE2指令。

OpenMP的*使用默認的核心,即窗口檢測,包括虛擬的這個所有的核心。

正如你可以看到OpenMP的版本是第一臺計算機(I7),比eigen3版本上更快。然而,對於計算機2(2個Opteron),eigen3的性能完全超過了OpenMP版本加上在計算機1中進行的所有測試。

任何想法爲什麼我得到這個結果以及爲什麼eigen3在計算機中速度不快1在電腦2中?

+1

你能否讓所有的實現都使用SSE2? Opteron具有更多,更快的內存原始內存時鐘抽取,這使得這是一個明顯不均衡的測試。我會建議至少均衡指令集(通過編譯)和使用的內核數量。 ('taskset')。 –

+0

@高性能標記我忘記補充說,順序版本不使用我發佈它的相同算法,它使用最簡單的版本,它不使用任何優化。這是這個:http://pastebin.com/Pc9AKAE8這就是爲什麼它可能慢得多,因爲它應該只使用緩存和寄存器的ram intead。 – RandomGuy

+0

@ Steve-o我會嘗試在順序和OpenMP中啓用SSE並將其報告給您。所使用的核心數是openMP的默認值,這是Windows在每臺計算機上檢測到的所有虛擬處理器(computer_1中的8個和computer_2中的12個)。當你的意思是「原始記憶時鐘泵」時,你是在談論ram-cpu數據傳輸? – RandomGuy

回答

1

感謝您的回答。

順序和並行版本之間的巨大差異是由於要使用不同的算法。順序版本使用通常簡單的O(N^3)而沒有任何優化,而並行版本是優化版本 - 使用塊。使用相同的算法,順序版本時間大約是10(計算機1)和50(計算機2) - 抱歉應該把這些值放在第一篇文章中。

OpenMP的VS性能在第一和第二計算機Eigen3性能之間的差異似乎是由於推出的VS可用的物理處理器數量的線程數。我們發現如果啓動的線程數量大於可用的物理處理器數量,則Eigen3的性能會變差,並且OpenMP的情況並非如此

在測試中,兩種情況下啓動的線程數等於總處理器數量(虛擬+物理)。

在計算機1中,Eigen3性能更差,因爲總處理器數量(虛擬+物理 - 由於超線程)大於物理處理器數量。

在計算機2中,Eigen3的性能更好,因爲處理器的總數與物理處理器的數量相同。如果我們對線程數使用物理處理器數量的兩倍,Eigen3的性能也會降低,而openMP實際上會有所提高。