OpenMP中的Schedule子句

Say*_*yan 7 openmp

我有一段代码(它是应用程序的一部分),我正在尝试使用OpenMP进行优化,我正在尝试各种调度策略.就我而言,我注意到该schedule(RUNTIME)子句优于其他子句(我没有指定chunk_size).我有两个问题:

  1. 当我没有指定chunk_size时,schedule(DYNAMIC)和之间有区别schedule(GUIDED)吗?

  2. OpenMP如何确定存储在OMP_SCHEDULE变量中的默认特定于实现的调度?

我了解到如果没有指定调度方案,则默认schedule(STATIC)使用.因此,如果我不修改OMP_SCHEDULE变量,并schedule(RUNTIME)在我的程序中使用,调度方案是否schedule(STATIC)一直都是,或者OpenMP是否有一些智能的方法来动态设计调度策略并不时更改它?

Hig*_*ark 5

  1. 是的,如果你没有指定块大小,那么DYNAMIC将使所有块的大小为1.但GUIDED将使最小块大小为1,但其他块大小将依赖于实现.也许你可以通过运行一些实验或阅读文档来弄清楚你的情况.

  2. 据我了解情况:如果未设置环境变量OMP_SCHEDULE,则运行时调度与实现有关.我认为,如果没有为每次执行该计划选择相同的时间表,那将是非常奇怪的.我不认为OpenMP是一组编译时指令,它可以了解程序的运行时性能并根据这些信息选择计划.