ganzhi.blogspot.com
使用OpenMP中的parallel for时,我们可以根据任务的特点来为期指定不同的调度方式。其中,static的调度方式将把循环的各个叠代尽可能平均的分配给各个线程。而 dynamic的调度方式将根据任务的运行情况动态的给各个线程分配任务。如果某个线程率先完成手头的任务,那么它将立刻获得新的任务。下面的代码采用了静态的方式调度:
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <omp.h>
4
5 const int COUNT = 100;
6
7 int in_thread0=0;
8 int in_thread1=0;
9
10 int main(int argc, char **argv) {
11
12 #pragma omp parallel
13 {
14 double BUFFER[COUNT];
15 for (int i=0;i<COUNT;i++)
16 BUFFER[i] = 0;
17
18 #pragma omp for schedule(static)
19 for (int i=0;i<COUNT;i++){
20 BUFFER[i]=i;
21 }
22
23 printf("%p/n", BUFFER);
24
25 if (omp_get_thread_num()==0){
26 for (int i=0;i<COUNT;i++){
27 printf("%lf/n", BUFFER[i]);
28 }
29 }
30 }
31 }
程序运行结果如下(格式经过调整):
0.000000 1.000000 2.000000 3.000000 4.000000
5.000000 6.000000 7.000000 8.000000 9.000000
10.000000 11.000000 12.000000 13.000000 14.000000
15.000000 16.000000 17.000000 18.000000 19.000000
20.000000 21.000000 22.000000 23.000000 24.000000
25.000000 26.000000 27.000000 28.000000 29.000000
30.000000 31.000000 32.000000 33.000000 34.000000
35.000000 36.000000 37.000000 38.000000 39.000000
40.000000 41.000000 42.000000 43.000000 44.000000
45.000000 46.000000 47.000000 48.000000 49.000000
0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000