我试图稍微了解一下OpenMP,但我很困惑,当它是#pragma的一部分时,我允许在num_threads()中输入变量,#pragma是一个向编译器提供信息的地方。我原以为它不会允许变量作为num_threads的参数,但看起来我可以使用变量。那个怎么样?它是如何工作的?
答案 0 :(得分:1)
编译器确实将pragma转换为对OpenMP
运行时的调用,这就是为什么允许变量的原因。
答案 1 :(得分:1)
不要将硬线程计入代码:-),将其留给运行时来做正确的事情,或者从环境中设置它。 (对LLVM或英特尔编译器使用OMP_NUM_THREADS或KMP_HW_SUBSET)。
当然从不放入num_threads(常量)。
或者至少在你做之前考虑一些问题......
如何选择合适的线程数? 如果您回答:"它是我机器中的核心数量",好的,下一个问题
如果你回答:"它是表现最佳的数字",下一个问题: