OpenMP #pragma num_threads

时间:2018-02-26 08:02:59

标签: openmp

我试图稍微了解一下OpenMP,但我很困惑,当它是#pragma的一部分时,我允许在num_threads()中输入变量,#pragma是一个向编译器提供信息的地方。我原以为它不会允许变量作为num_threads的参数,但看起来我可以使用变量。那个怎么样?它是如何工作的?

2 个答案:

答案 0 :(得分:1)

编译器确实将pragma转换为对OpenMP运行时的调用,这就是为什么允许变量的原因。

答案 1 :(得分:1)

不要将硬线程计入代码:-),将其留给运行时来做正确的事情,或者从环境中设置它。 (对LLVM或英特尔编译器使用OMP_NUM_THREADS或KMP_HW_SUBSET)。

当然从不放入num_threads(常量)。

或者至少在你做之前考虑一些问题......

如何选择合适的线程数? 如果您回答:"它是我机器中的核心数量",好的,下一个问题

  1. 你会一直使用那台机器吗?只有那台机器?
  2. 没有其他人会使用此代码吗?
  3. 如果你回答:"它是表现最佳的数字",下一个问题:

    1. 如上所述:您使用过的所有机器都是如此吗?在其他人用来运行代码的机器上?
    2. 这样回答意味着您已经开始进行扩展研究,这显然需要更改线程数。如果您硬连接(使用常量),如何在不编辑和重新编译的情况下再次运行它们...
相关问题