由于我的研究涉及大型矩阵产品,我正在尝试为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),这应该有效......?