如何在Eigen中禁用并行化

时间:2019-01-06 18:17:37

标签: c++ openmp eigen3

想要编写自己的并行代码,或者至少尝试手动并行化我的某些代码是否比让Eigen使用自己的内部并行例程快。 我一直遵循本指南here,并在头文件的顶部添加了以下指令(但也在main的顶部尝试过):

#define EIGEN_DONT_PARALLELIZE

但是,当我要求Eigen通过Eigen::nbThreads打印它一直在使用的线程数时,我始终得到两个。我试图用initParallel()方法来解决这个问题,该方法是为用户定义的并行区域设计的,但无济于事。是否可能需要将预处理器令牌放置在其他位置?我正在使用gcc 8.1,带有CMake的CLion。我还尝试用setNbThreads(0).强制解决此问题,以最终将OpenMP包含在我自己的代码中,我遵循推荐的here包含OpenMP并将其添加到我的CMakeLists.txt中: target_link_libraries(OpenMP::OpenMP_CXX).

也许Eigen告诉我原则上有多少个内核可用,这听起来不像文档中写的那样。

编辑:不确定这是否重要,但是CLion(编辑)抱怨MACRO EIGEN_DONT_PARALLELIZE从未使用过。我查看了Eigen / Core,发现它仅以if语句的条件形式使用,因此我忽略了此编辑器警告,但也许我不应该这样做?

我现在用一个较小的例子重现了这种行为。

非常感谢您!

0 个答案:

没有答案