1、在for的任务分担中有几种不同的调度方式:静态调度和动态调度,非正式的解释静态调度就是每个线程分固定的任务,而动态调度可以理解为通过CPU进行调度,那个线程做完了,那个线程可能就会有新的任务,是动态分配任务的。
2、静态调度:
#pragma omp parallel for schedule(static) num_threads(2)
for(int i = 0; i < 4; i++ )
{
printf("i = %d, thread_num = %d\n", i, omp_get_thread_num());
}
以上代码的运行结果是什么呢………………结果是0号线程输出的i = 0和1,而1号线程输出的i = 2和3,这也就意味着每个线程是静态的划分了n/t次连续的任务(我们这里每个任务就是指一次循环输出,n代表循环的总次数,t并行域中总共的线程数)
3、静态调度:
#pragma omp parallel for schedule(static, 1) num_threads(2)
for(int i = 0; i < 4; i++ )
{
printf("i = %d, thread_num = %d\n", i, omp_get_thread_num());
}
后面加上参数2,表示每个线程分配2个连续的任务。