OpenMP自学笔记(二) 最简单的并行计算程序

从串行到并行

我们知道,一个正常的C语言程序,从main函数开始,以return 0为结束,就像人的一天

起床—吃饭—工作—睡觉(return 0)

OpenMP程序,往往是串行-并行-串行的一个结构,
就像人的早晨

睁眼-下床-刷牙-洗脸
以上这些操作都是串行的

但是人工作时往往是并行的

写代码-查文档
写代码-和女朋友商量约会时间

OpenMP程序亦是如此。
从起床(串行区)开始,中间工作时(并行区)派生出多个线程处理工作,最后可能睡觉(再回到串行区)
所以说,OpenMP程序通常采用串行→并行→串行→并行→串行,而不是整个程序都采用并行机制去运行。

for循环的并行化

先回顾一下,OpenMP的相关语句

omp_set_num_threads(3); //设置启用3个线程

#pragma omp paralle // 并行编译指导语句,代表着并行区域的开始
tid=omp_get_thread_num(); //获取当前的进程号
nthreads=omp_get_num_threads(); //获取总进程数

循环的并行化,是比较独立和重要的,也是最简单有效的并行。举个例子,如果循环100次,我们采用1个线程跑100次,和4个线程个跑25次,需要的时间肯定是后者要短,而且要短的多。

#pragma omp for

通过上述指令,就可以对循环进行并行化,来达到加速程序的目的。

简单的并行计算程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值