并行程序设计导论期末复习

article/2025/9/13 16:37:55

任务并行、数据并行的应用

任务并行

将待解决问题所需要执行的各个任务分配到各个核上执行。

数据并行

将待解决问题所需要处理的数据分配给各个核,每个核在分配到的数据集上执行大致相似的操作。

冯诺依曼体系结构的瓶颈及改进,Flynn分类法涉及的几种模型及其特点

冯诺依曼体系结构的瓶颈及改进

瓶颈:CPU和主存分离

改进:使用 cache

局部性:在访问完一个内存区域(指令或者数据),程序会在不久的将来(时间局部性)访问邻近的区域(空间局部性)。

Flynn分类法涉及的几种模型及其特点

Flynn 分类法的模型

SISD(单指令单数据流)

一次执行一条指令,一次存取一个数据项。

SIMD(单指令多数据流)

  • 通过在处理器之间划分数据而实现的并行性

缺点:

  • 所有ALU都需要执行相同的指令,或者保持空闲状态。

  • 在经典设计中,它们还必须同步运行。

  • ALU不能进行指令存储。

  • 对于大型数据并行问题有效,但对于其它更复杂的并行问题无效。

MISD(多指令单数据流)

MIMD(多指令多数据流)

支持多个数据流上同时运行多个指令流

一致内存访问(Uniform Memory Access):
在这里插入图片描述

特点:每个核访问内存中任何一个区域的时间都相同

非一致内存访问(Nonuniform Memory Access):

在这里插入图片描述

特点:

Cache的特点,Cache缺失、Cache命中、Cache一致性及解决方法、伪共享、流水线、多发射

缓存的问题

当CPU写数据到cache时,cache中的值可能与主存中的值不一致,有两种解决方法。

  • 写直达(Write-through caches)当CPU向cache写数据时,高速缓存行会立即写入主存中。
  • 写回(Write-back caches)将缓存中的数据标记为脏数据。当缓存行(cache line)被内存中的新缓存行替换时,脏缓存行被写入内存。

伪共享

两个线程可能访问同一个内存中不同的位置,但是当这两个位置属于同一缓存行时,缓存一致性硬件所表现出来的处理方式就好像这两个线程访问的是内存中的同一位置,如果其中一个线程更新了它所访问的主存地址的值,那么另外一个变量试图读取它要访问的主存地址时,它不得不从主存获取该值。也就是说,硬件强制该线程表现得好像它共享了变量,因此这种情况称为伪共享,这会大大降低共享内存程序的性能。

Cache缺失、Cache命中

cache 命中:处理器所要访问的存储块在高速缓存中的现象。

cache 缺失:处理器所要访问的存储块不在高速缓存中的现象。

流水线、多发射

指令级并行:通过让多个处理器部件或者功能单元同时执行指令来提高处理器的性能。

流水线:将功能单元分阶段安排。

多发射:让多条指令同时启动。

静态多发:计算单元是在编译时被安排的

动态多发:功能单元是在运行时被安排的

Cache一致性及解决方法

Cache一致性:程序员无法控制缓存和何时更新。在多核系统中,各个核的Cache存储相同变量的副本,当一个处理器更新Cache中该变量的副本时,其他处理器应该知道该变量已经更新,其他处理器中Cache的副本也应该更新。这是Cache一致性问题。

解决方法:监听Cache一致性协议、基于目录的Cache一致性协议。

加速比、效率、阿姆达尔定律

加速比 S = T 串 行 T 并 行 S= \frac{T_{串行}}{T_{并行}} S=TT

效率 E = S P = T 串 行 P × T 并 行 E = \frac{S}{P} = \frac{T_{串行}}{P\times T_{并行}} E=PS=P×TT

阿姆达尔定律(Amdahl’s law):除非所有的串行程序都能够并行,否则无论可用的核的数量再多,加速将非常有限。

例子:

90%的串行程序可以并行化;无论使用多少核p,并行化都是“完美的”; T s e r i a l T_{serial} Tserial= 20 秒;
可并行部分运行时间为: 0.9 × T s e r i a l / p = 18 / p 0.9 \times T_{serial} / p = 18 / p 0.9×Tserial/p=18/p
不可并行化”部分的运行时间为: 0.1 × T s e r i a l = 2 0.1 \times T_{serial} = 2 0.1×Tserial=2
总的运行时间为: T p a r a l l e l = 0.9 × T s e r i a l / p + 0.1 × T s e r i a l = 18 / p + 2 T_{parallel} = 0.9 \times T_{serial} / p + 0.1 \times T_{serial} = 18 / p + 2 Tparallel=0.9×Tserial/p+0.1×Tserial=18/p+2
加速比: S = T s e r i a l 0.9 × T s e r i a l / p + 0.1 × T s e r i a l = 20 18 / p + 2 S =\frac{T_{serial}}{0.9\times T_{serial} / p +0.1\times T_{serial}}=\frac{20}{18/p+2} S=0.9×Tserial/p+0.1×TserialTserial=18/p+220

静态线程、动态线程、伸缩性/可扩展性、数据依赖的识别、任务划分方式及应用

静态线程、动态线程

动态线程

主线程通常等待工作请求,当一个请求到达时,它派生出一个工作线程来执行该请求。当工作线程完成任务,就会终止执行再合并到主线程中。这种模式充分利用了系统的资源,因为线程需要的资源只在线程实际运行时使用。

特点:资源的有效使用,但是线程的创建和终止非常耗时。

静态线程

创建线程池并分配任务,但线程不被终止直到被清理。

特点:性能更好,但可能会浪费系统资源。

可扩展性

可扩展性

如果一个技术可以处理规模不断增加的问题,那么它就是可扩展的

强可扩展性

如果在增加进程或线程的数量时,可以维持固定的效率,却不增加问题规模,那么程序被称为强可扩展的

弱可扩展性

如果在增加进程或线程的数量时,只能以相同倍率增加问题的规模才能使效率值保持不变。

任务划分方式及应用

Foster的方法

  1. 划分(Partitioning):将要执行的指令和数据按照计算拆分为多个小任务。 这一步的关键在于识别出可以并行执行的任务。
  2. 通信(Communication):确定前一步所识别出来的任务之间需要执行哪些通信。
  3. 聚集或聚合(Agglomeration or aggregation):将第一步中确定的任务和通信合并成更大的任务。 例如,如果任务A必须在任务B执行之前执行,那么将它们聚合为单个复合任务可能更为明智。
  4. 分配(Mapping):将上一步聚合好的任务分配给进程/线程。这一步还要使通信最小化,使得每个进程/ 线程得到的工作量大致均衡(负载均衡)。

http://chatgpt.dhexx.cn/article/YsarsZuj.shtml

相关文章

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

Parallel Programing caiyi 2021/6/17 第一章 1.为什么要构建并行系统? 电路晶体管密度过大会使处理器能耗增加,散热的问题使通过继续增快集成电路密度提高处理器性能不再现实,因此集成电路商决定构建多核处理器。 2.为什么要编写并行程序&#xf…

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…