如果设置omp_set_dynamic(1)
,gcc如何确定最佳线程数? OpenMP让它实现了定义,但我很想知道gcc是如何实现它的。
谢谢!
答案 0 :(得分:4)
GCC使用libgomp
运行时库实现OpenMP。它是编译器的一部分,其源代码可以在GCC使用的相同GPL许可下免费获得。您可以下载GCC的某个点版本并检查libgomp
文件夹,也可以浏览source code online。此链接适用于GCC 4.8.3的最新稳定版本。从GCC 4.9开始,libgomp
实现了OpenMP 4.0功能,这使得源代码更难理解。
实现动态线程数的逻辑可以在parallel.c的gomp_resolve_num_threads()
中找到。基本上它只支持动态设置parallel sections
组合构造的线程数,并尝试将团队中的线程数设置为等于构造内不同部分的数量。