我需要使用openMP比较不同调度类型和线程号的循环执行时间。
我可以通过直接在pragma宏中传递int
变量来动态设置线程数:
int threads_number = 4;
#pragma omp parallel for num_threads(threads_number)
但我正在尝试对schedule
执行相同操作,我需要比较static
,dynamic
和guided
类型。但似乎我不能使用int作为枚举,也不能使用char*
作为此名称。
有没有办法动态选择它,或者我是否必须编写循环3次并选择使用if
调用哪一个,这看起来有点脏?
答案 0 :(得分:3)
您可以在应用的时间表为runtime
时设置时间安排类型。
当指定调度(运行时)时,有关调度的决定将推迟到运行时。通过设置环境变量OMP_SCHEDULE,可以在运行时选择块的调度类型和大小。如果未设置此环境变量,则生成的计划是实现定义的。指定schedule(运行时)时,不能指定chunk_size。 - OpenMP-4.5 Specification
这是通过函数void omp_set_schedule(omp_sched_t kind, int chunk_size);
可用的计划种类在omp.h
中定义,如下面的枚举
typedef enum omp_sched_t {
omp_sched_static = 1,
omp_sched_dynamic = 2,
omp_sched_guided = 3,
omp_sched_auto = 4
} omp_sched_t;