首页 > 其他分享 >初识openMP

初识openMP

时间:2023-10-03 23:00:12浏览次数:40  
标签:变量 并行程序 并行 初识 线程 串行 openMP

openMP

关于并行程序

我写的一个程序运行效率太低了,等不了。所以尝试并行。目前流行的并行程序设计方法是:分布式内存结构上使用MPI,共享内存结构上使用Pthreads或OpenMP。
我这个场合是使用openMP。多个线程的执行顺序是不能保证的。
我们一般并不是要对相同代码在多个线程并行执行,而是,对一个计算量庞大的任务,对其进行划分,让多个线程分别执行计算任务的每一部分,从而达到缩短计算时间的目的。
因为比较赶时间,我只看了最简单的粗暴用法,其中踩到了很多坑,记录在下边了,没有解决的问题也留个记录,以后解决了再修改更新。

正常的openMP

只要正常的程序前边加上以下语句就可以:

# pragma omp parallel

对于需要并行的for循环,在循环之前加上如下语句:

# pragma omp parallel for

运行时需要在编译语句后加上:

-fopenmp

踩过的坑

每次参与运算的线程数目不同。有的线程不参加部分运算

所有的变量都需要在并行的区域里边初始化。如果在外部初始化那么就会出现问题,导致运算结果和非并行情况不一致并且很奇怪。(原理暂且还不清楚)

共享变量与私有变量的问题

计算出来的结果与串行的结果不一样。个人目前分析是因为程序在逻辑上是多个线程执行的,但是他们使用的同样的内存。这就需要搞明白一个事情:在循环内部创造的变量是为每个进程分配一个内存空间还是说仍然是所有进程共用一个同名的内存空间。个人认为是后者,否则计算出来的结果没道理和串行程序有所不同。所以将循环内的变量全部以数组的形式创建,令每个进程占用一个数组的一个小空间。
但是结果还是有小小的不一样,但是误差太小了,可能是精度的问题?

运行时间并没有得到减少

并行程序花费的时间大小与串行程序没有太大的差别。猜想原因可能是产生等待。即在并行程序中,同一时间只允许一个线程访问一个内存那么就会导致线程等待。

标签:变量,并行程序,并行,初识,线程,串行,openMP
From: https://www.cnblogs.com/jia-t-t/p/17741793.html

相关文章

  • 初识c++
    C++之父-本贾尼·斯特劳斯特卢普示例代码#include<iostream>//C++标准输入输出流的头文件等同于C语言stdio.husingnamespacestd;//为了减少命名冲突intmain(intargc,charconst*argv[]){ cout<<"helloworldc++"<<endl; return0;}作用域控制符......
  • 初识HTML
    超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用来结构化Web网页及其内容的标记语言。网页内容可以是:一组段落、一个重点信息列表、也可以含有图片和数据表。正如标题所示,本文将对HTML及其功能做一个基本介绍。HTML到底是什么?HTML不是一门编程语言,而......
  • 模块化打包工具-初识Webpack
    1.为什么需要模块化打包工具在上一篇文章中提到的ESModule可以帮助开发者更好地组织代码,完成js文件的模块化,基本解决了模块化的问题,但是实际开发中仅仅完成js文件的模块化是不够的,尤其是面对一个较为庞大的工程项目的时候,主要仍有以下几个问题需要解决:ESModule是ES6新语法,一......
  • uniCloud初识
    uniCloud是什么?uniCloud是DCloud联合阿里云、腾讯云,为开发者提供的基于serverless模式和js编程的云开发平台onLoad(){//前端不再用uni.request请求数据,而是调用云函数拿数据. uniCloud.callFunction({ name:"get_content", data:{ num:3}//前端传递给服务......
  • 初识Redis
    Redis简介Redis(REmoteDIctionaryServer)是一个由SalvatoreSanfilippo写的key-value存储系统。Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以......
  • Map类初识
    我们在前面的文章中已经简短的介绍了下Map,作为开始,我们再更深的了解一下,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示:下面针对各个实现类的特点做一些说明:(1)HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位......
  • Spring boot初识
    最近在看《SpringBoot实战》,对书中内容做了一些笔记,在此分享给大家。SpringBoot精要SpringBoot将很多魔法带入了Spring应用程序的开发之中,其中最重要的是以下四个核心。自动配置:针对很多Spring应用程序常见的应用功能,SpringBoot能自动提供相关配置。起步依赖:告诉SpringBoot需......
  • List类初识
     先看javaApi的中文文档:有序的collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与set不同,列表通常允许重复的元素。更确切地讲,列表通常允许满足 e1.equals(e2) 的......
  • 【1.0】Pandos初识
    【一】Pandas是什么Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基础上构建而来,享有数据分析“三剑客之一”的盛名(NumPy、Matplotlib、Pandas)。Pandas已经成为Python数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分析工具......
  • 初识结构体
    前言......