OpenMP中的静态和动态调用方式

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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值