特征中的多线程(不使用 OpenMP)
Multi-Threading in Eigen (OpenMP is not used)
我在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();
}
无论我做什么Eigen::nbThreads( )
无论我在Eigen::setNbThreads(6)
中使用什么数字,总是返回 1!
我在这里阅读,但它实际上并没有清楚地说明当OpenMP
不存在时我们如何以并行模式实际运行Eigen
!
我也做了很多搜索,但所有这些都与OpenMP
一起使用!
刚刚发生了什么?Eigen
是只支持多线程的OpenMP
,还是也具有内置的多线程?
提前感谢!
Eigen的内置多线程仅适用于激活的OpenMP。如果你没有使用 OpenMP 编译,那么Eigen::setNbThreads(6);
基本上什么都不做,否则它基本上等同于调用omp_set_num_threads
(从 Eigen 的角度来看(。
您可以在本身是多线程的应用程序中使用 Eigen(需要注意的主要警告是对 setRandom()
和相关调用,如您链接到的页面中所述(。
此外,如果您自己的多线程基于 OpenMP,但您不希望 Eigen 利用多线程,则可以在编译时通过定义 EIGEN_DONT_PARALLELIZE
或在本地通过设置 Eigen::setNbThreads(1);
来禁用它。
相关文章:
- 在C++中使用cURL和多线程
- 多线程双缓冲区
- 为什么我的多线程作业队列崩溃
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- OpenMP:共享同一算法的单线程和多线程实现
- 特征中的多线程(不使用 OpenMP)
- 多线程MKL OpenMP用GCC编译
- for 循环内的多线程 - OpenMP
- 随机密码生成器上的 OpenMP 多线程
- c++中的多线程递归函数,已编辑.使用OpenMP的速度比以前慢
- 多线程环境 (OpenMP) 中的 OpenCV 会导致分段错误
- C++ STL 算法(列表排序)OpenMP/多线程实现
- 多线程 (openMP) - 多少个并行线程
- 顺序比多线程- OpenMp - c++更快
- 多线程两个功能使用openMP
- OpenMP,更多线程导致减速的原因?(没有分享/没有rand()(我认为))
- 如何在MPI + openmp中启动多线程
- 在c++中使用openmp进行多线程处理
- 使用openMP在多线程for循环中创建线程