OpenMp sections只有2个线程如何设置?

vivigiggle4096 2010-07-12 11:21:26
请问下面一个例子:
void main(int argc, char *argv)
{
#pragma omp parallel sections
{ #pragma omp section
printf(“section 1 ThreadId = %d\n”, omp_get_thread_num());
#pragma omp section
printf(“section 2 ThreadId = %d\n”, omp_get_thread_num());
#pragma omp section
printf(“section 3 ThreadId = %d\n”, omp_get_thread_num());
#pragma omp section
printf(“section 4 ThreadId = %d\n”, omp_get_thread_num());
}
原文作者:执行后将打印出以下结果: section 1 ThreadId = 0 section 2 ThreadId = 2 section 4 ThreadId = 3 section 3 ThreadId = 1
我的在VS2010上运行的结果是: section 1 ThreadId = 0 section 2 ThreadId = 1 section 4 ThreadId = 0 section 3 ThreadId = 1 为什么我的只有2个线程,请问该怎么设置才能实现4个线程。

...全文
238 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
vivigiggle4096 2010-07-15
  • 打赏
  • 举报
回复
通过学习,除了根据核数系统默认的线程外,可以在并行区外添加 omp_set_num_threads(4);可以实现四个线程。
omp_set_num_threads(4);
#pragma omp parallel sections
{
......
}
fcly1981826ly 2010-07-12
  • 打赏
  • 举报
回复
学习学习学习
icansaymyabc 2010-07-12
  • 打赏
  • 举报
回复
你有2个线程,说明你用的是双核CPU,这种情况下2个线程是最高效的。

如果你用4核CPU,自然就是4个线程了;用8核CPU,OMP就给你8个线程。

你在2核CPU上启动4个线程毫无意义,因为既没有利用到空闲的计算资源,还要消耗系统资源来做多余的线程切换,反而会降低效率。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧