Nim*_*rab 1 c++ parallel-processing qt multithreading eigen
我在库中使用多线程时遇到问题Eigen。这是我的代码:
#include <QCoreApplication>
#include <iostream>
#include "Eigen/Core"
#include <QDebug>
using namespace Eigen;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Eigen::setNbThreads(6);
qDebug() << Eigen::nbThreads( );
int n = 1000;
MatrixXd A = MatrixXd::Ones(n,n);
MatrixXd B = MatrixXd::Ones(n,n);
MatrixXd C = MatrixXd::Ones(n,n);
C.noalias() += A*B;
std::cout << C.sum() << "\n";
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
无论我做什么Eigen::nbThreads( )总是返回 1 无论我使用什么数字Eigen::setNbThreads(6)!
我读到这里,但它实际上并没有清楚地说明我们如何在不存在的情况下实际Eigen以并行模式运行!OpenMP
我也做了很多搜索,但它们都与OpenMP!
刚刚发生了什么?是Eigen只支持OpenMP多线程还是也有内置的多线程?
提前致谢!
Eigen 的内置多线程仅适用于激活的 OpenMP。如果您没有使用 OpenMP 进行编译,则Eigen::setNbThreads(6);基本上不执行任何操作,否则它本质上相当于调用omp_set_num_threads(从 Eigen 的角度来看)。
您可以在本身是多线程的应用程序中使用 Eigen(要注意的主要警告是调用setRandom()和相关,如您链接到的页面上所述)。
另外,如果您自己的多线程基于 OpenMP,但您不希望 Eigen 利用多线程,则可以在编译时通过定义禁用它EIGEN_DONT_PARALLELIZE,或在本地通过设置 来禁用它Eigen::setNbThreads(1);。