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を使ってこれらのすべてを再定義することは重くなります。事前
実際、私はこのページを見ました(私の記事を参照)。私はあなたが意味することを理解していません "これはSIMD操作を排除しないので、それらはまだ使用されます。"ということは、配列操作がEigenのマルチスレッドをサポートするためSIMD操作を意味するのでしょうか?ありがとう – Odin
彼はおそらくあなたがまだ各スレッド内にSIMD(ベクトル)操作を持っていることを意味します。 – Cantfindname
ありがとう、ありがとう。少なくとも、それが行や列で並列化されていれば、私は推測する純粋に連続した計算よりも効率的になりますか? – Odin