数组运算中的C ++ Eigen多线程

时间:2017-04-20 09:43:31

标签: c++ multithreading eigen

我有一个关于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重新定义所有这些操作会更重。

提前致谢

1 个答案:

答案 0 :(得分:0)

Eigen web site列出了少数利用多线程的案例。

  

目前,以下算法可以使用多线程:

     一般致密基质 - 基质产品
     PartialPivLU
     行 - 主 - 稀疏*密集矢量/矩阵乘积
     具有Lower | Upper的ConjugateGradient作为UpLo模板参数      具有行主稀疏矩阵格式的BiCGSTAB      LeastSquaresConjugateGradient

这不排除SIMD操作,因此仍将使用这些操作。