新手 openmp编程求解

轩晔 2011-04-25 10:37:13
加精
#include <omp.h>
#include <stdio.h>
int main(int argc ,char *argv[])
{
printf("hello the serial");
int i,j;
//开始并行执行
for(i=0;i<2;i++)
#pragma omp parallel
for(j=6;j<10;j++)
printf("i=%d,j=%d\n",i,j);
printf("Hello from serial again.\n");
return(0);
}
以上是源程序,
运行结果
i=0,j=6
i=0,j=6
i=0,j=7
i=0,j=8
i=0,j=9
i=1,j=6
i=1,j=6
i=1,j=7
i=1,j=8
i=1,j=9
Hello from serial again.
为什么 j=6 连续打印两次
求解释,很迷茫。。。
...全文
407 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yqwang2006 2011-07-03
  • 打赏
  • 举报
回复
你用#pragma omp parallel的话说明下面的语句是用多个线程执行的,每个线程都会执行该语句块,所以你的代码中第二个for循环会被执行两次,也就有两个6出现了。
如果用#pragma omp parallel for的话,是用多个线程并行一个for循环,会将不同的j分到不同的线程去做,多个线程合作完成一个循环,所以有性能提升……
lxmaomao99 2011-04-28
  • 打赏
  • 举报
回复
试试看吧
gwemail2003 2011-04-27
  • 打赏
  • 举报
回复
可以。。。
litaopro 2011-04-26
  • 打赏
  • 举报
回复
试试看吧
lemonlinger 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 intel_iclifort 的回复:]
说明你的机器有两个处理器/核,因此自动生成两个OMP线程完成并行

你把 #pragma omp parallel 改成 #pragma omp parallel for 再试试就知道差别了
[/Quote]

我想可能你的本意是想使用 #pragma omp parallel for 吧!

#pragma omp parallel 使以下的代码块并行执行
#pragma omp parallel for 使下面的for 循环并行执行
lemonlinger 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 intel_iclifort 的回复:]
说明你的机器有两个处理器/核,因此自动生成两个OMP线程完成并行

你把 #pragma omp parallel 改成 #pragma omp parallel for 再试试就知道差别了
[/Quote]

我想可能你的本意是想使用 #pragma omp parallel for 吧!

#pragma omp parallel 使以下的代码块并行执行
#pragma omp parallel for 使下面的for 循环并行执行
ndm3613651 2011-04-25
  • 打赏
  • 举报
回复
说明你的机器有两个处理器/核,因此自动生成两个OMP线程完成并行

intel_iclifort 2011-04-25
  • 打赏
  • 举报
回复
说明你的机器有两个处理器/核,因此自动生成两个OMP线程完成并行

你把 #pragma omp parallel 改成 #pragma omp parallel for 再试试就知道差别了

565

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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