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()
看看会用到什么。
当然,运行你的代码在外部查看机器负载也是一种检查方法!
我正在使用 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()
看看会用到什么。
当然,运行你的代码在外部查看机器负载也是一种检查方法!