2017-04-20 52 views
1

我有一个关于特征阵列操作的问题(基本上是矩阵元素操作)。阵列操作中的C++特征多线程

这些操作(+, - ,*,/)是否在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重新定义所有这些操作会更加沉重。

在此先感谢

回答

0

本征web site列出了需要多线程的优势少数情况下。

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

一般密集矩阵 - 矩阵产品
PartialPivLU
行主要稀疏*密集向量/矩阵产品
共轭梯度与下| Upper作为UpLo模板参数。
BiCGSTAB具有行主稀疏矩阵格式。
LeastSquaresConjugateGradient

这并不排除SIMD操作,所以那些仍然使用。

+0

的确,我看了一下这个页面(c.f.我的文章)。我不明白你的意思是什么“这不排除SIMD操作,所以仍然会使用这些操作。”,你的意思是SIMD操作作为数组操作支持Eigen中的多线程吗?谢谢 – Odin

+0

他可能意味着你将在每个线程中仍然有SIMD(向量)操作 – Cantfindname

+0

好的,谢谢。至少,如果它在行或列上并行化,它会比纯粹的顺序计算更有效率,我猜? – Odin