我对 Eigen 中的数组运算有疑问(基本上是矩阵元素运算)。
这些操作(+、-、*、/)是否在 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 重新定义所有这些操作会更重。
提前致谢
最佳答案
Eigen web site列出了利用多线程的少数情况。
Currently, the following algorithms can make use of multi-threading:
general dense matrix - matrix products
PartialPivLU
row-major-sparse * dense vector/matrix products
ConjugateGradient with Lower|Upper as the UpLo template parameter.
BiCGSTAB with a row-major sparse matrix format.
LeastSquaresConjugateGradient
这不排除 SIMD 操作,因此仍将使用这些操作。
关于C++ Eigen多线程中Array操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43515872/