ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

OpenMP 教程(一) 深入剖析 OpenMP reduction 子句 前言

2022-11-11 13:51:53  阅读:247  来源: 互联网

标签:openMP 教程 剖析 Reduction 代码 数据


从并发求和开始

我们的任务是两个线程同时对一个变量 data 进行 ++操作,执行 10000 次,我们看下面的代码有什么问题:


 
  #include <stdio.h>
  #include <omp.h>
  #include <unistd.h>
   
  static int data;
   
  int main() {
  #pragma omp parallel num_threads(2) // 使用两个线程同时执行上面的代码块
  {
  for(int i = 0; i < 10000; i++) {
  data++;
  usleep(10);
  }
  // omp_get_thread_num 函数返回线程的 id 号 这个数据从 0 开始,0, 1, 2, 3, 4, ...
  printf("data = %d tid = %d\n", data, omp_get_thread_num());
  }
   
  printf("In main function data = %d\n", data);
  return 0;
  }

在上面的代码当中,我们开启了两个线程并且同时执行 $pragma 下面的代码块,但是上面的程序有一个问题,就是两个线程可能同时执行 data++ 操作,但是同时执行这个操作的话,就存在并发程序的数据竞争问题,在 OpenMP 当中默认的数据使用方式就是

标签:openMP,教程,剖析,Reduction,代码,数据
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有