首页 > 解决方案 > ALSA 外部插件和 C++ 中的 openmp

问题描述

我正在使用gtkIOStream ALSAExternalPlugin 类创建一个 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 标志中,我可以在编译时看到它们。

标签: openmpalsa

解决方案


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

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

只需打印omp_get_max_threads()以查看将使用什么。

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


推荐阅读