0

我試圖計算可以並行化的代碼的分數P,應用Amdahl定律並觀察理論最大加速比。Amdahl定律:矩陣乘法

我的代碼大部分時間花在乘法矩陣上(使用庫Eigen)。我應該認爲這部分是完全可並行的嗎?

回答

0

如果您的矩陣足夠大,比如說大於60,那麼您可以使用OpenMP進行編譯(例如,使用gcc -fopenmp),並且產品將爲您並行化。但是,最好儘可能在最高級別進行並行處理,特別是如果矩陣不是很大。那麼這取決於您是否可以在算法中識別獨立的任務。

0

首先,考慮特徵庫如何處理矩陣乘法是合適的。

然後,矩陣(MXN)維矢量(NX1)乘法無徵可以這樣寫:

1 void mxv(int m, int n, double* a, double* b, double* c) 
2 { //a=bxc 
3 int i, j; 
4 
5 for (i=0; i<m; i++) 
6 { 
7  a[i] = 0.0; 
8  for (j=0; j<n; j++) 
9  a[i] += b[i*n+j]*c[j]; 
10 } 
11 } 

正如你所看到的,因爲沒有兩個產品的計算結果向量的相同元素[],並且由於計算i = 0 ... m的元素a [i]的值的順序不會影響答案的正確性,所以這些計算可以獨立於i的索引值執行。

然後像前一個循環是完全可並行化的。在這樣的循環中使用OpenMP進行並行實現會相對簡單。