并行程序设计导论 概念总结

article/2025/9/13 16:39:29

Parallel Programing

caiyi 2021/6/17

第一章

1.为什么要构建并行系统?

电路晶体管密度过大会使处理器能耗增加,散热的问题使通过继续增快集成电路密度提高处理器性能不再现实,因此集成电路商决定构建多核处理器。

2.为什么要编写并行程序?

之前的串行程序适合之前的传统处理器,为了充分发掘多核处理器的性能,必须对常见串行结构进行并行化以提高性能。

3.如何编写并行程序?

基本思想是把任务分配给各个核,主要有两种方法:任务并行和数据并行。

任务并行指的是把各个的任务分配给不同的核

数据并行指的是将待处理的数据分配给各个核进行处理。

任务并行很可能每个核执行的任务不一样,数据并行分配给每个核的往往是相同的任务。

在并行计算中,需要注意协调过程,包括通信、负载平衡、同步

通信:在不同核把计算结果发送给其他核
负载平衡:每个核的计算的工作量应该大致相等
同步:同步每个核的运算时间

例子1:求累加的n项和
假设把数据分为n组分别累加,有一个接收数据累加和的变量x。正常情况下需要等变量的初始化在往其传数据。
如果变量还没初始化但其他的部分和已经送我来,会导致数据丢失等等。(没有同步的情况)
解决方案:写一个函数给他们一个同步函数(提出要求),让其他的核等,等x初始化后,在传数据(同步)

4.怎么做?

利用消息传递接口(MPI)、POSIX线程和OpenMP来编写基本的并行程序

MPI和Pthread是C语言的扩展库,可以在C程序中使用扩展的类型定义、函数、宏,而OpenMP包含了一个扩展库以及对C编译器的部分修改

共享内存系统:各个核能够共享访问计算机的内存,可以通过检测和更新共享内存中的数据来协调各个核

分布式内存系统:每个核拥有自己的私有内存,核之间的通信是显式的必须使用类似在网络中发消息的机制

Pthreads和OpenMP是共享内存系统,MPI是分布式内存系统

IMG_6751

image-20210618181843501 image-20210618182150166 image-20210618182349637

5. 并发、并行、分布式

并发(concurrent):一个程序的多个任务在同一时间段内可以同时执行

并行(parallel):一个程序通过多个任务协同工作去解决一个问题

分布式(distributed):一个程序需要与其他程序协作解决一个问题

并行程序和分布式程序都是并发的

6. 为什么实现并行程序很难

  • Amdahl’s Law 必须并行化大部分计算
  • 数据局部性
  • 通讯与同步
  • 负载不平衡

第二章 并行硬件和并行软件

1.冯诺依曼结构

经典的冯诺依曼结构包括主存、中央处理单元(CPU)以及主存之间的互连结构(总线)

CPU分为控制单元和算术逻辑单元ALU

主存和CPU之间的分离叫做冯诺依曼瓶颈,互连结构限制了指令和数据访问的速率

IMG_6752

2.改进冯诺依曼结构

3. 并行硬件

能够通过修改源代码而开发并行性或者必须修改源代码来开发并行性,叫并行硬件。

4. 性能计算

Some definitions:
Token : A group of inputs processed to produce a group of outputs
Latency : Time for one token to pass from start to end
Throughput : The number of tokens that can be produced per unit time

5. 并行算法

竞争:当执行结果取决于两个或多个事件的时间时,存在竞争条件

数据依赖:对必须保留以保持正确性的一对内存操作的排序

同步:用于对线程之间的控制进行排序或对并行代码中的数据访问进行排序

原子性:一组操作是原子的,如果它们同时执行或都不执行。 因此,无法查看部分执行的结果

互斥:最多有一个线程可以随时执行代码

互斥锁的方法有锁争用和粒度差的缺点

如何增加并行粒度:每个线程使用它自己的私有变量,并独立于其他内核执行此代码块。

image-20210619125107851

任务并行性:将解决问题的各种任务划分到内核之间。
数据并行:在核心之间划分用于解决问题的数据,每个核心对其数据的一部分执行类似的操作

image-20210619125317262 image-20210619125332670 image-20210619125622880

总结:如何导出顺序算法的并行版本

  1. Computation Partitioning 计算分区
  2. Preserving Dependences using Synchronization 使用同步保留依赖关系
  3. Reduction Computations减少计算
  4. Overheads费用

四个步骤设计一个并行程序:

  1. 将问题的解决方案划分成多个任务
  2. 在任务间识别出需要的通信信道
  3. 将任务聚合成复合任务
  4. 在核上分配复合任务

6. 数据依赖

定义:如果两个内存访问可能引用相同的内存位置并且其中一个引用是写操作,则它们涉及数据依赖

数据依赖是对必须保留以保持正确性的一对内存操作的排序
数据依赖可以在两个不同的程序语句之间,也可以在同一程序语句的两个不同的动态执行之间

image-20210619130914838 image-20210619131534822 image-20210619131554728 image-20210619131822216

7. 习题解答

第四章 Pthreads

1.介绍

共享内存编程(线程)

​ 启动单个进程和 fork 线程

​ 线程执行工作

​ 线程通过共享内存进行通信

​ 线程通过同步(也通过共享内存)进行协调

分布式内存编程(进程)

​ 在多个系统上启动多个进程

​ 流程执行工作

​ 进程通过消息传递进行通信

​ 进程通过消息传递或同步(生成消息)进行协调

动态线程

有一个主线程,并且在任何给定时刻都有一个(可能是空的)工作线程集合。

主线程通常等待工作请求,当一个新的请求到达时,它会fork一个工作线程,该线程执行请求,当该线程完成工作时,它终止并加入主线程。

这种范例有效地利用了系统资源,因为线程所需要的资源只在线程实际运行时才会被使用

静态线程

在主线程进行任何必要的设置之后会fork出所有的线程,这些线程一直运行直到所有的工作完成。在线程加入主线程后,主线程可能会做一些清理(例如,释放内存),这样被fork出来的线程也会终止。

在资源使用方面效率较低,如果一个线程是空闲的,它的资源都不能被释放。

优点是,它更接近于最广泛使用的分布式内存编程范例

线程安全

如果一个函数或库在被多个同时执行的线程调用时能够“正确”操作,那么它就是线程安全的。

由于多个线程通过共享内存进行通信和协调,因此线程安全代码会使用适当的同步来修改共享内存的状态。

2.Pthread

POSIX: Portable Operating System Interface for UNIX,是UNIX的可移植操作系统接口

PThreads: POSIX线程接口。系统调用来创建和同步线程

PThreads支持创建并行性、同步,但不支持显式通信,因为共享内存是隐式的


http://chatgpt.dhexx.cn/article/1Zuf507I.shtml

相关文章

cuda 并行计算

1 简介 2006年,NVIDIA公司发布了CUDA,CUDA是建立在NVIDIA的GPU上的一个通用并行计算平台和编程模型,基于CUDA编程可以利用GPU的并行计算引擎来更加高效地解决比较复杂的计算难题。CUDA是NVIDIA公司所开发的GPU编程模型,它提供了GP…

数据 并行

first 含义是计算机内包含一组处理单元(PE),每一个处理单元存储一个(或多个)数据元素。当机器执行顺序程序时,可对应于全部或部分的内部处理单元所存的数据同时操作。 将并行处理技术引入信息检索领域 把数…

并行的常见问题和注意事项

关于Oracle中的并行,可以说是一把双刃剑,用得好,可以充分利用系统资源,提升数据库的处理能力,用得不好,可能会适得其反。 并行的基本使用方法,对于大部分SQL开发者和DBA来说,并行的一…

并发和串行、并行的概念

先抛开语言不管,只聊概念,说起并发,就很容易想到它和串行、并行的区别。 串行:一次只能取得一个任务并执行这个任务,这个任务执行完后面的任务才能继续; 并发:指的是在同一个时间段内&#xf…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(二)

发现问题 之前有一篇博客是因为存储过程中没有添加相应的函数,导致出现了“过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,但未提供该参数”,这次继续出现了这样一个问题,但是出现的错误就不再过程函数中了,而…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(三)

发现问题 这篇博客是建立在“牛腩新闻发布–过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,但未提供该参数(二)”,因为在那篇博客中说出了我当时遇到的“过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,…

【牛腩】-'T_news_selectByCaId' 需要参数 '@caid',但未提供该参数。”

问题截图 解决方案: 改动存储过程 BEGINselect n.id,n.title,n.createTime,c.[name],n.caId from T_news ninner join T_category c on n.caIdc.id and n.caIdcaidorder by n.createTime desc END检查传参是或否正确如果以上都没有错误,那就看一下是否…

【重要补充】关于第三方潜在SDK导致的5.1.2Data use sharing

接上一篇《关于IDFA、CAID和「5. 1.2 - Data use & sharing」》后,我们发现,苹果在14.5出来前,对于IDFA替代方案之数据收集的审核打击力度越来越大。 因5.1.2条款被拒,目前可以确认的原因有以下两大: 一、如果你…

spring笔记⑬——spring事务

事务的四个特征 CAID是事务的四个特征,所有事务都必须满足以下特性。 原子性(Atomicity):一个事务要么全部执行,要么不执行一致性(Consistency):事务的运行并不改变数据库中数据的一致性隔离性&#xff0…

SQL查询语句(内联,as,in,通配符)

最近在学习牛腩新闻发布系统,正如牛老师所说,作为一个优秀的.NET开发人员,对SQL语句不熟怎么能行呢,接下来就总结下牛老师写的存储过程中SQL语句,挺经典,举一反三 首先先展示出来适用于系统的三张表 新闻类…

【微信小程序 | 实战开发】配置微信小程序APPID并快速接入

写在前面: 你是否想要掌握人工智能的最新技术和应用?你是否想要成为未来社会的创新者和领导者?你是否想要和全球的优秀导师和同学一起学习和交流?如果你的答案是肯定的,那么欢迎来到床长人工智能教程网站,这里是你实现梦想的起点! 个人名片: 🐼作者简介:一名大一在校…

获取苹果收集设备ID的方法

目录 问题 解决 问题 如果我们想要通过工具获取苹果手机 iPhone 或者 iPad 的设备 ID,也就是 UDID。这个时候,很多人可能会问 UDID 是什么,UDID 是 iOS 设备的一个唯一识别码,每台 iOS 设备都有一个独一无二的编码,…

浅谈大数据广告下个人隐私保护,开发者视角的广告原理

本文已收录于 Github CodeClass 和 Gitee CodeClass 致力于打造高质量编程学习课堂,内含百篇原创技术文章,千本计算机开源电子书,谷歌、阿里大神开源 LeetCode 题解,各类编程学习资源,欢迎 star ,一起学习&…

简单理解MySQL的存储引擎

1、什么是存储引擎? 在说明存储引擎之前,首先你需要简单了解MqSQL的整体架构。 从上图可知,存储引擎位于整体架构的最底层。 存储引擎真正负责了MySQL中数据的存储和提取。 可以这样理解: 其实我们平时写的各种SQL语句相当于指…

iOS隐私新规如何破局?盗版SKAdnetwork可行吗?

背景:   在2020年的开发者大会上,苹果宣布iOS14设备将会在App首次打开时主动弹窗请求是否选择允许广告追踪,即被获取设备的IDFA。这也就意味着新系统需要用户手动选择允许,而旧系统是手动选择关闭,这一关键改变无异…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(一)

发现问题 今天敲击牛腩,在敲击Web页面的List.aspx之后,点击Ctrl+F5运行,发现运行不了,首先是数据库中调取数据有问题,因为这个数据是用存储过程调取的,所以需要修改存储过程,这时候只需要改成如下代码就行: 将这个更改完之后就可以在数据库中调取到应需要的数据了,但是…

【牛腩】DELETE 语句与 REFERENCE 约束“FK_news_category“冲突。该冲突发生于数据库“newssystem“,表“dbo.news“, column ‘caId‘

【前言】 牛腩中删除类别的时候会提示受到主外键的约束,导致无法删除这个类别。 【问题描述】 DELETE 语句与 REFERENCE 约束"FK_news_category"冲突。该冲突发生于数据库"newssystem",表"dbo.news", column ‘caId’。…

【牛腩】过程或函数 ‘news_selectByCaId‘ 需要参数 ‘@caid‘,但未提供该参数

【前言】 在运行牛腩的时候会有提示过程或者函数缺少参数。这个是因为存储过程中写的缺少参数,添加相应的参数就可以了。 【问题描述】 过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,但未提供该参数 过程或函数 ‘news_selectByContent’ 需要…

关于IDFA、CAID和「5. 1.2 - Data use sharing」

今天,2021年3月18日,突然收到了之前从未遇到过的拒审邮件,邮件原文如下: 发件人 Apple 5. 1.2 - Data use & sharing Please review this information carefully as it impacts your app’s availability on the App Store a…

中国广告协会的CAID方案

前些时间看到一个消息,腾讯、百度和字节跳动测试工具绕开苹果的ATT(AppTrackingTransparency,简称 ATT,旨在保护用户隐私的应用追踪透明度框架),估计这个应该是在测试CAID。 过一两天又出现一个消息&#x…