openMP编程探索2——循环并行化

本文详细介绍了如何使用OpenMP进行循环并行化编程,包括编译指导语句、for循环并行化规则及实例。通过示例展示了`#pragma omp parallel for`的使用,并解释了数据作用域子句如`private`、`firstprivate`和`lastprivate`,以及`reduction`规约操作。最后,文章提供了多个代码示例,帮助理解线程间数据交互和并行执行的效果。
摘要由CSDN通过智能技术生成

    openMP并不是只能对循环来并行的,循环并行化单独拿出来说是因为它在科学计算中非常有用,比如向量、矩阵的计算。所以我单独拿出这一部分给大家讲讲。这里主要讲解的是for循环。

编译指导语句:

    一般格式:

    #pragma omp parallel for [clause[clause…]]

    for(index = first; qualification; index_expr)

    {…}

    第一句中[]的部分是可选的,由自己的程序并行特点而定。大家先不要把精力放到这里面。后面的文章中会继续讲解的。

并行化for的编写规则

    1、index的值必须是整数,一个简单的for形式:for(int i = start; i < end; i++){…} 。

    2、start和end可以是任意的数值表达式,但是它在并行化的执行过程中值不能改变,也就是说在for并行化执行之前,编译器必须事先知道你的程序执行多少次,因为编译器要把这些计算分配到不同的线程中执行。

    3、循环语句只能是单入口但出口的。这里只要你避免使用跳转语句就行了。具体说就是不能使用goto、break、return。但是可以使用continue,因为它并不会减少循环次数。另外exit语句也是可以用的,因为它的能力太大,他一来,程序就结束了。

例子讲解

例1、for循环并行

#include
#include "omp.h"
int main(int argc, char* argv[])
{
    int i;
    #pragma omp parallel for
    for (i = 0; i < 12; i++)
    {        printf("i = %d  %d/n", i, omp_get_thread_num());    }
    return 0;
}

例1的执行结果如图1所示:

image

图1、例1的执行结果

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值