C++ 中的 ALSA 外部插件和 openmp

ALSA external plugin and openmp in C++

我正在使用 gtkIOStream ALSAExternalPlugin class 创建一个 ALSA 外部模块。

在我的外部插件代码中,我调用了必要的 openmp 调用:

  omp_set_num_threads(omp_get_max_threads());
  printf("omp_get_num_threads()=%d\n", omp_get_num_threads());

我也在使用必要的 openmp 标志和库(-fopenmp 和 -gomp)进行编译。

然而,当我 运行 我的代码使用“aplay -DexternalPlugin 文件”时,系统报告只有一个线程在使用,而不是 20 个线程。

我是不是漏掉了什么?

编译外部插件的链接标志如下: -fopenmp -lgomp -module -avoid-version -export-dynamic -no-undefined

-fopenmp 也在 CPP 标志中,我可以在编译时看到它们。

设置线程数不会使您的代码并行,因此,如所写,您正在设置下一个并行区域将使用的线程数,然后打印当前使用的线程数,确实会是一个,因为你还没有并行。

一般来说,强制线程数没有意义,因为任何正常的 OpenMP 运行时(当然是 GCC 和 LLVM)都会默认使用所有可用线程。

打印omp_get_max_threads()看看会用到什么。

当然,运行你的代码在外部查看机器负载也是一种检查方法!