Mar*_*uen 1 multithreading openmp multiprocessing
如何在运行时检查openmp时间表?
我使用并行循环和运行时计划来编译代码
#pragma omp parallel for schedule(runtime) collapse(2)
for(j=1;j>-2;j-=2){
for(i=0;i<n;i++){
//nested loop code here
}
}
Run Code Online (Sandbox Code Playgroud)
然后指定环境变量OMP_SCHEDULE=dynamic,50
。
如何在运行时检查我的程序实际使用了OMP_SCHEDULE
变量?
我在gcc 4.7.3中使用openmp 3.1
我下载了http://www.openmp.org/wp-content/uploads/openmp-4.5.pdf
然后转到“ C / C ++存根例程”部分,找到了
void omp_get_schedule(omp_sched_t *kind, int *chunk_size)
{
*kind = omp_sched_static;
*chunk_size = 0;
}
Run Code Online (Sandbox Code Playgroud)
然后做这个测试
/*
typedef enum omp_sched_t {
omp_sched_static = 1,
omp_sched_dynamic = 2,
omp_sched_guided = 3,
omp_sched_auto = 4
} omp_sched_t;
*/
#include <omp.h>
#include <stdio.h>
int main(void) {
omp_sched_t kind;
int chunk;
omp_get_schedule(&kind, &chunk);
printf("%d %d\n", kind, chunk);
}
Run Code Online (Sandbox Code Playgroud)
并编译
gcc -fopenmp -O3 foo.c
Run Code Online (Sandbox Code Playgroud)
然后
export OMP_SCHEDULE=static,50
./a.out
1 50
export OMP_SCHEDULE=dynamic,100
2 100
Run Code Online (Sandbox Code Playgroud)
注意,omp_get_schedule
仅报告运行时调度定义OMP_SCHEDULE
。如果您使用例如更改计划
#pragma omp parallel for schedule(static,1)
Run Code Online (Sandbox Code Playgroud)
然后定义,OMP_SCHEDULE=dynamic,100
然后omp_get_schedule
仍然报告动态调度和块大小100。