使用-fopenmp编译时,在C ++中禁用默认的Armadillo

时间:2016-12-25 20:13:10

标签: c++ parallel-processing armadillo

在Armadillo C ++中,有没有办法在使用-fopenmp编译时禁用默认的并行化。我希望并行化在代码的其他部分。

我特别感兴趣的功能是eig_sym()。

非常感谢, 烟台

1 个答案:

答案 0 :(得分:3)

犰狳并没有与OpenMP并行化,但有一些警告:

  • 底层LAPACK或BLAS实现可能会被并列化。如果你使用的是OpenBLAS,那就是。
  • Armadillo gmm_diag实现使用OpenMP。

所以最简单的方法是不要使用OpenBLAS,而是使用单线程BLAS"。但这不是唯一的出路。

听起来我想要禁用嵌套并行性,因此并行化代码的唯一部分位于代码的较高级别而不是eig_sym()。以下是OMP_NESTED的一些文档:

https://docs.oracle.com/cd/E19205-01/819-5270/aewbc/index.html

因此,您可以在运行时将环境OMP_NESTED设置为false,或在代码中将omp_set_nested()设置为。