C++ Eigen多线程中Array操作

标签 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 重新定义所有这些操作会更重。

提前致谢

最佳答案

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/

相关文章:

c++ - 在c++中将长双文字后缀附加到用户输入

c++ - Eigen 中的稀疏矩阵和 vector 加法广播

python - 如何在python中终止正在运行的线程?

c - 使用 C 问题在线程之间传递数据

c++ - 使用 Eigen 以欧拉角旋转四元数

c++ - 如何在 Eigen 中定义 VectorXd 数组

c++ - 命名空间的 UML 图

c++ - 没有匹配函数来调用'bind(<未解析的重载函数类型>, const std::_Placeholder<1>&, int*)

c++ time() 函数在 solaris 中的性能

java - 这种 Spring 单例 bean 线程的设计是否安全?