在哪里可以看到 OMP schedule(auto) 选择了什么?
Where to see what OMP schedule(auto) picks?
有没有办法找出 OMP 运行时为 schedule(auto)
选择的调度方案?我发现(并且直觉上它是有道理的)对于我的问题 schedule(static)
是最快的,所以我想知道这是否是运行时在设置 schedule(auto)
时选择的(它们同样快)。
是的。您可以将环境变量 OMP_DISPLAY_ENV
设置为 TRUE
以在 运行 您的程序之前获取此信息。它应该在初始化 OpenMP 运行时时打印 OMP_SCHEDULE
变量。例如,在我的系统上,GOMP (GCC) 默认选择 DYNAMIC
而 IOMP (Clang/ICC) 默认选择 static
。您可以通过自己设置环境变量OMP_SCHEDULE
来select这个默认值。您还可以使用 OpenMP 函数 omp_get_schedule
.
在程序运行时检索信息
除非您知道一个计划从根本上优于另一个计划(例如由于算法本身),否则最好让默认(基于运行时)行为。实际上,两个 OpenMP 运行时或两台机器之间的结果可能会截然不同。例如,动态调度在理论上可能比静态调度更好,但一个运行时的开销可能如此之高,以至于它似乎是一个非常糟糕的选择,而这对于另一种实现来说可能不是问题。核心数量及其布局(例如 NUMA 系统)也是影响不同调度策略性能的重要参数。
有没有办法找出 OMP 运行时为 schedule(auto)
选择的调度方案?我发现(并且直觉上它是有道理的)对于我的问题 schedule(static)
是最快的,所以我想知道这是否是运行时在设置 schedule(auto)
时选择的(它们同样快)。
是的。您可以将环境变量 OMP_DISPLAY_ENV
设置为 TRUE
以在 运行 您的程序之前获取此信息。它应该在初始化 OpenMP 运行时时打印 OMP_SCHEDULE
变量。例如,在我的系统上,GOMP (GCC) 默认选择 DYNAMIC
而 IOMP (Clang/ICC) 默认选择 static
。您可以通过自己设置环境变量OMP_SCHEDULE
来select这个默认值。您还可以使用 OpenMP 函数 omp_get_schedule
.
除非您知道一个计划从根本上优于另一个计划(例如由于算法本身),否则最好让默认(基于运行时)行为。实际上,两个 OpenMP 运行时或两台机器之间的结果可能会截然不同。例如,动态调度在理论上可能比静态调度更好,但一个运行时的开销可能如此之高,以至于它似乎是一个非常糟糕的选择,而这对于另一种实现来说可能不是问题。核心数量及其布局(例如 NUMA 系统)也是影响不同调度策略性能的重要参数。