2017-04-20 47 views
1

我有一個關於特徵陣列操作的問題(基本上是矩陣元素操作)。陣列操作中的C++特徵多線程

這些操作(+, - ,*,/)是否在Eigen中並行化(使用OpenMP時)?文檔沒有指定它(c.f. here),但是這樣的操作預計會被並行化,因爲我猜它會非常簡單。

例子:

MatrixXd A = MatrixXd::Zero(100,100); 
MatrixXd B = MatrixXd::Ones(100,100); 

MatrixXd C = A.array() + B.array(); // element-wise addition 
MatrixXd D = A.array()/B.array(); // element-wise division 

,如果它是並行這將是巨大的。在我的代碼中,我有很多這些基於元素的操作,使用OpenMP重新定義所有這些操作會更加沉重。

在此先感謝

回答

0

本徵web site列出了需要多線程的優勢少數情況下。

目前,以下算法可以利用多線程:

一般密集矩陣 - 矩陣產品
PartialPivLU
行主要稀疏*密集向量/矩陣產品
共軛梯度與下| Upper作爲UpLo模板參數。
BiCGSTAB具有行主稀疏矩陣格式。
LeastSquaresConjugateGradient

這並不排除SIMD操作,所以那些仍然使用。

+0

的確,我看了一下這個頁面(c.f.我的文章)。我不明白你的意思是什麼「這不排除SIMD操作,所以仍然會使用這些操作。」,你的意思是SIMD操作作爲數組操作支持Eigen中的多線程嗎?謝謝 – Odin

+0

他可能意味着你將在每個線程中仍然有SIMD(向量)操作 – Cantfindname

+0

好的,謝謝。至少,如果它在行或列上並行化,它會比純粹的順序計算更有效率,我猜? – Odin