美文网首页
OpenMP 共享内存编程

OpenMP 共享内存编程

作者: 磊宝万岁 | 来源:发表于2017-10-30 19:35 被阅读0次

梯形积分法

菜包的总结

首次撸OpenMP示例程序,==关键问题在于C语言的语法及基础知识的不足;
其次对于OpenMP编程模型的掌握还不熟练;

知识点

  1. scanf()输入%lf-->double;%f-->float;%d-->int; …
    其中后半部分是&a,不能写变量名称;
  2. openMP 基本块:
    -并行部分: # pragma omp parallel ...;
    -互斥部分: # pragma omp critical...;
源码:
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>

void Trap(double a,double b,int n,double* res);
double f(double d);

int main(int argc,char* argv[]){
  int thread_count = strtol(argv[1],NULL,10);
  int n;
  double a,b;
  double res=0.0;

  printf("Please input a, b and n\n");
  scanf("%lf,%lf,%d",&a,&b,&n);
  printf("a is: %f, b is: %f, n is %d \n ", a,b,n); 

# pragma omp parallel num_threads(thread_count)
  Trap(a,b,n,&res);

  printf("Result is %lf !\n",res);
  return 0;
}

void Trap(double a,double b,int n,double* res){
  double h,x,my_res;
  double local_a,local_b;
  int i,local_n;
  int rank = omp_get_thread_num();
  int thread_count = omp_get_num_threads();

  h=(b-a)/n;
  local_n = n/thread_count;
  local_a = a+h*rank*local_n;
  local_b = local_a+local_n*h;
  my_res = (f(local_a)+f(local_b))/2.0;

  for(i=1;i<local_n;i++){
    x = local_a+i*h;
    my_res+=f(x);
  }
  my_res = my_res*h;

# pragma omp critical
  *res+=my_res;
}

double f(double d){
  return d*d;
}
运行及结果
> gcc -g -Wall -fopenmp -o Tixing Tixing.c  
> ./Tixing 5 
Please input a, b and n
0.0,10.0,1000
a is: 0.000000, b is: 10.000000, n is 1000 
 Result is 333.333500 !

相关文章

  • OpenMP 共享内存编程

    梯形积分法 菜包的总结 首次撸OpenMP示例程序,==关键问题在于C语言的语法及基础知识的不足;其次对于Open...

  • openMP 函数总结(并行程序设计导论)

    本篇文章只是记录api的用法和回顾,方便记忆 openMP openMP提供“基于指令”的共享内存API。这就意味...

  • GoLang并发编程3

    并发编程有两个模式 共享内存 消息 共享内存,以C语言举例 换成 GoLang

  • go并发通信

    go并发编程时,请记住:“不要通过共享内存来通信,而应该通过通信来共享内存” channel是Go语言在语言级别提...

  • linux -11-IPC(共享内存和消息队列)

    XSI IPC之共享内存 和 消息队列(有固定的套路) 共享内存/消息队列/信号量集 遵循相同的规范,因此编程上有...

  • java内存模型

    java内存模型基础 并发编程,两个关键问题:线程通信和线程同步通信机制:共享内存和消息传递 java并发采用共享...

  • OpenMP并行编程

    目前很多移动端的深度学习前向运算框架都用到openmp,如ncnn、paddlelite、mace等。所以这篇来介...

  • C++速度很快

    测试内存访问密集型 计算10亿个整型数的和,开了OpenMP,花费时间是700毫秒,不开OpenMP则更快,150...

  • 2.Java内存模型

    1.java并发编程的线程间通信及线程间如何同步线程间通信分为:共享内存,消息传递。线程间同步:共享内存是代码指定...

  • java内存模型

    java内存模型的基础 并发编程模型的两个关键问题 线程之间如何通信 共享内存:线程之间共享程序的公共状态,通过写...

网友评论

      本文标题:OpenMP 共享内存编程

      本文链接:https://www.haomeiwen.com/subject/cnjmpxtx.html