openmp - 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 标志中,我可以在编译时看到它们。
解决方案
设置线程数不会使您的代码并行化,因此,正如所写,您正在设置下一个并行区域将使用的线程数,然后打印当前正在使用的线程数,这确实会,成为一个,因为你没有平行。
一般来说,强制线程数量没有意义,因为任何正常的 OpenMP 运行时(当然是 GCC 和 LLVM)都会默认使用所有可用的线程。
只需打印omp_get_max_threads()
以查看将使用什么。
当然,在运行代码时从外部查看机器负载也是一种检查方法!
推荐阅读
- ansible - Ansible group_vars 引用和加载另一个 var 文件
- java - 在android的适配器中处理数据库中的值
- docker - 无法从谷歌云构建访问 pip 主机
- android - Flutter App 构建发布问题(Firestore)
- sapply - 在 sapply 中访问向量的先前值
- ios - 应用因隐私而被应用商店拒绝 - 数据收集和存储
- java - 如何在java中使用密钥接口作为密钥?
- assembly - SPARC v8:本地寄存器使用
- python - 如何使用套接字编程将字典数据从客户端发送到 python 服务器以与 df2 进行比较?
- go - Golang 中的 Google Pay PaymentMethodTokenRecipient 函数实现