OpenMP多线程不适用于Eigen库

时间:2016-01-06 16:57:14

标签: c++ multithreading matrix openmp eigen

由于我的研究涉及大型矩阵产品,我正在尝试为Eigen启用OpenMP多线程功能。不幸的是,到目前为止我还没有运气。

我使用Xcode 7和以下编译器:gcc --version

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.2.0
Thread model: posix

之后我通过设置export OMP_NUM_THREADS=4配置了我想要使用的OpenMP线程数。然后我使用以下标志编译我的程序:-O3 -fopenmp=libomp -DNDEBUG。但是,尝试设置或打印Eigen使用的线程数始终返回1。所以看起来只使用了一个线程:

#include <Eigen/Dense>
...
Eigen::initParallel();
Eigen::setNbThreads(4);
int nthreads = Eigen::nbThreads( );
std::cout << "THREADS = " << nthreads <<std::ends; // returns '1'

任何人都知道为什么Eigen只使用一个线程?根据Eigen网站上的步骤(http://eigen.tuxfamily.org/dox/TopicMultiThreading.html),这应该有效......?

0 个答案:

没有答案