2017-04-20 15 views
1

Eigenの配列演算(基本的には行列要素演算)に関する質問があります。C++配列操作の固有マルチスレッディング

このような操作(+、 - 、*、/)はEigen(OpenMPを使用している場合)で並列化されていますか?ドキュメントでは指定していませんが(c.f. 012.)、このような操作は並列化されることが予想されますが、それはわかりやすいでしょう。

例:

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
行メジャー疎*密ベクトル/行列積
ConjugateGradient下付き -

一般密行列:現在

、次のアルゴリズムは、マルチスレッドを利用することができ| UpLoテンプレートパラメータとしての上限。
行主なスパース行列形式のBiCGSTAB。
LeastSquaresConjugateGradient

これは、SIMD演算を排除するものではないので、それらはまだ使用されます。

+0

実際、私はこのページを見ました(私の記事を参照)。私はあなたが意味することを理解していません "これはSIMD操作を排除しないので、それらはまだ使用されます。"ということは、配列操作がEigenのマルチスレッドをサポートするためSIMD操作を意味するのでしょうか?ありがとう – Odin

+0

彼はおそらくあなたがまだ各スレッド内にSIMD(ベクトル)操作を持っていることを意味します。 – Cantfindname

+0

ありがとう、ありがとう。少なくとも、それが行や列で並列化されていれば、私は推測する純粋に連続した計算よりも効率的になりますか? – Odin