• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
常春藤的博客
   首页    新随笔       管理    订阅  订阅

OpenMP的调度

schedule(static, size) 这是静态调度,如果没有设置size, 默认是根据任务书来决定, 比如我电脑是8核,有26个任务,那么分配后结果是4 4 3 3 3 3 3 3. 因为先分配的先调度,所以把没对齐部分分配给先调度的任务。 这种调度适合每个任务运行时间都差不多的情况。 size一般不用写,默认即可。

schedule(static, size)

这是静态调度,如果没有设置size, 默认是根据任务书来决定, 比如我电脑是8核,有26个任务,那么分配后结果是4 4 3 3 3 3 3 3. 因为先分配的先调度,所以把没对齐部分分配给先调度的任务。

这种调度适合每个任务运行时间都差不多的情况。

size一般不用写,默认即可。

schedule (dynamic, size)

这是动态调度,刚开始以为size如果是默认的话,每个块的大小是平均的,结果试了下发现默认size是1,导致调度消耗比较大。如果任务数不是很大,可以使用默认size,如果任务数很大,最好自己计算size的大小。

    #pragma omp parallel for schedule(dynamic)
    for(int i=0; i<26; i++)
    {
        _sleep(i);
        int j =10000000;
        while(j--);
        #pragma omp critical
        cout <<omp_get_thread_num() << " " << i << " " <<  endl;
    }

上面是测试代码,运行结果是

5 0
1 1
6 2
4 3
3 4
2 5
0 6
7 7
5 8
1 9
6 10
4 11
3 12
2 13
0 14
7 15
5 16
1 17
6 18
4 19
3 20
2 21
0 22
7 23
5 24
1 25

可以发现,默认size是1. 如果改成2。结果在下面

5 0
5 1
6 2
1 4
6 3
3 6
0 8
1 5
2 10
4 12
3 7
7 14
0 9
5 16
2 11
6 18
4 13
7 15
1 20
5 17
3 22
0 24
6 19
1 21
3 23
0 25

可以发现,没有对齐部分也是按照size来分配的,导致没有对齐部分的其它cpu都空闲。

posted @ 2014-04-17 13:16  常春藤的博客  阅读(284)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3