并行处理及分布式系统期末总结笔记

article/2025/9/13 16:36:50

并行处理及分布式系统期末总结笔记

  • 1、任务并行、数据并行的应用
  • 2、冯诺依曼体系结构的瓶颈及改进,Flynn分类法涉及的几种模型及其特点
  • 3、Cache的特点,Cache缺失、Cache命中、Cache一致性及解决方法、伪共享、流水线、多发射
  • 4、加速比、效率、阿姆达尔定律
  • 5、静态线程、动态线程、伸缩性/可扩展性、数据依赖的识别、任务划分方式及应用
  • 6、链表操作及分析
  • 7、MPI常用的API及其应用
  • 8、Pthreads常用的API及其应用,互斥锁、忙等待的实现及应用
  • 9、OpenMP常用的编译指令及其子句应用
  • 10、课本典型案例:矩阵向量乘、曲边梯形面积计算、通过数学求和公式计算π、蒙特卡洛方法计算π、奇偶交换排序

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

任务并行:将许多可以解决问题的任务分割,然后分布在一个或者多个核上进行程序的执行。
数据并行:将可以解决问题的数据进行分割,将分割好的数据放在一个或者多个核上进行执行;每一个核对这些数据都进行类似的操作。

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

冯诺依曼体系结构的瓶颈:主存和CPU之间的分离。
改进措施:缓存(caching),虚拟存储器(虚拟内存),低层次并行
Flynn分类法
SIMD(单指令流单数据流):典型的冯诺伊曼系统,一次执行一条指令,一次存取一个数据项。
SIMD:对多个数据执行相同的指令,实现数据并行。
缺点:所有ALU都需要执行相同的指令,或者保持空闲状态。在经典设计中,它们还必须同步运行。ALU不能进行指令存储。对于大型数据并行问题有效,但对于其它更复杂的并行问题无效。
MIMD:支持多个数据流上同时运行多个指令流。通常由一组完全独立的处理单元或核心组成,每一个核心都有自己的控制单元(CU)和计算单元(ALU)
共享内存系统:隐式通信
共享内存系统

分布式内存系统:显式通信
分布式内存系统

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

1)缓存(cache):内存位置集合,可以在比其它存储器有更短的访问开销。CPU缓存通常与CPU位于同一芯片上,访存开销比普通内存更快。
局部性原理:在访问完一个内存区域,程序会在不久的将来(时间局部性)访问邻近的区域(空间局部性)。
空间局部性(Spatial locality ):访问临近的位置。
时间局部性(Temporal locality ):最近访问的位置,在不久的将来还会访问。
cache命中:当向cache查询信息时,如果cache中有信息,则称为cache命中。
cache缺失:如果信息不存在,则称为cache缺失。
当CPU写数据到cache时,cache中的值可能与主存中的值不一致.
写直达:通过在写入到缓存时,更新主存中的数据来解决这个问题
写回:将缓存中的数据标记为脏数据。当缓存行(cache line )被内存中的新缓存行替换时,脏缓存线被写入内存。
cache映射:
全相联:一个新cache line可以放在缓存的任何位置
直接映射:每一条高速缓存线在高速缓存中有一个唯一的位置,它将被分配到那里
n路相联:每条高速缓存线可以被放置在n个不同的位置中的一个
Cache一致性问题:单核处理器系统的 Cache 对如下情况没有提供保证:在多核系统中,各个核的 Cache 存储相同变量的副本,当一个处理器新 Cache 中该变量的副本时,其他处理器应该知道该变量己更新,即其他处理中 Cache 的副本也应该更新。
解决方法:监听cache一致性协议,基于目录的cache一致性协议
伪共享:缓存系统中是以缓存行(cache line)为单位存储的,当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。
2)虚拟内存
虚拟内存的功能是作为二级存储器的高速缓存。
它利用了时空局部性原理.
它只把正在运行的程序的活动部分保存在主存中
Swap 空间:那些空闲的部分被保存在一个二级存储块中。
分页(Pages):数据块和指令块。
3)指令级并行
通过让多个处理器或功能单元同时执行指令来提高处理器性能。
流水线:将功能单元分阶段安排。例如将浮点加法器分成7个单独的硬件或功能部件。第一个单元获取两个操作数,第二个单元比较指数,等等。一个功能部件的输出作为下一个功能部件的输入
多发:多个指令同时启动执行。多发处理器复制计算单元,同时执行程序中的不同指令。
静态多发:功能单元在编译时被安排
动态多发:功能单元在运行时被安排

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

p:核数
加速比(S):在这里插入图片描述

效率(E):在这里插入图片描述

并行开销的影响:在这里插入图片描述

问题规模变大时,加速比和效率增加;问题规模变小时,加速比和效率降低。
阿姆达尔定律:除非所有的串行程序都能够并行,否则无论可用的核的数量再多,加速比都会受限。

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

1)动态线程:主线程等待任务,有任务时派生新线程,当新线程完成时任务后,结束新线程,资源的有效使用,但是线程的创建和终止非常耗时。
静态线程:派生出所有线程并分配任务,但线程不被终止直到被清理,性能更好,但可能会浪费系统资源。
2)可拓展性:问题规模增加的倍率与进程/线程数增加的倍率相同,效率E恒定,则程序是可拓展的。
如果在增加进程/线程的数量时,可以维持固定的效率,却不增加问题规模,那么程序称为强可扩展(strongly scalable)。
如果在增加进程/线程数量的同时,只有以相同倍率增加问题规模才能使效率值保持不变,那么程序就称为弱可扩展的(weakly scalable)
3)数据依赖的识别:有依赖关系的语句,其中至少一条语句会有序地写或更新变量。因此为了检测循环依赖,我们只需要重点观察被循环体更新的变量,即我们应该寻找在一个迭代中被读或被写,而在另一个迭代中被写的变量。
4)并行程序设计步骤:
划分(Partitioning):将要执行的指令和数据按照计算拆分为多个小任务。
通信(Communication):确定前一步所识别出来的任务之间需要执行哪些通信。
聚集或聚合(Agglomeration or aggregation):将第一步中确定的任务和通信合并成更大的任务。
分配(Mapping):将上一步聚合好的任务分配给进程/线程.
在这里插入图片描述
在这里插入图片描述

6、链表操作及分析

Member:查找遍历
Insert:在这里插入图片描述
Delete在这里插入图片描述
多线程链表:互斥锁:任何时候只允许一个线程访问整个链表。
细粒度锁:任何时候只允许一个线程访问任一给定结点。
读写锁:多个线程可以通过调用读锁函数同时获得锁,而只有一个线程可以通过调用写锁函数获得锁。

7、MPI常用的API及其应用

图太多了
MPI_Init定义由用户启动的所有进程所组成的通信子称为MPI_COMM_WORLD
在这里插入图片描述
在这里插入图片描述
msg_buf_p:指向包含消息内容的内存块的指针;
msg_size:消息大小;
msg_type:消息类型;
dest:接收消息的进程的进程号;
tag:消息标签(标识消息);
MPI_Comm:通信子,指定通信范围

在这里插入图片描述
source:发送消息的进程的进程号;
MPI_Status:通常赋予MPI_STATUS_IGNORE

在这里插入图片描述

8、Pthreads常用的API及其应用,互斥锁、忙等待的实现及应用

pthread_create()

int pthread_create(
pthread_t *restrict tidp, //新创建的线程ID指向的内存单元。
const pthread_attr_t *restrict attr, //线程属性,默认为NULL
void *(*start_rtn)(void *), //新创建的线程从start_rtn函数的地址开始运行
void *restrict arg //默认为NULL。若上述函数需要参数,将参数放入结构中并将地址作为arg传入。
);
停止线程pthread_join
int pthread_join(
pthread_t tid, //需要等待的线程,指定的线程必须位于当前的进程中,而且不得是分离线程
void **status //线程tid所执行的函数返回值(返回值地址需要保证有效),其中status可以为NULL
);
忙等待:在忙等待中,线程不停地测试某个条件,但实际上,直到某个条件满足之前,不会执行任何有用的工作。
应用:使用忙等待求全局和。
互斥锁(互斥量):互斥量(互斥锁)是一种特殊类型的变量,它可以限制每次只允许一个线程访问临界区。
应用:使用互斥量求全局和

9、OpenMP常用的编译指令及其子句应用

pragma omp parallel:最基本的 parallel 指令,运行结构化代码块的线程数由运行时系统决定。
子句:是一些用来修改指令的文本
# pragma omp parallel num_threads ( thread_count ):num_threads子句添加到 parallel 指令中,允许程序员指定执行代码块的线程数
归约子句:归约是一种重复地对操作数序列应用相同的归约操作符以获得一个唯一结果的计算。
在这里插入图片描述

Parallel for指令:在这里插入图片描述

default子句:使用这个子句,编译器将要求我们指定在块中使用的每个变量的作用域和已经在块之外声明的变量的作用域。
Schedule子句:在这里插入图片描述

Atomic 子句: 在这里插入图片描述

10、课本典型案例:矩阵向量乘、曲边梯形面积计算、通过数学求和公式计算π、蒙特卡洛方法计算π、奇偶交换排序

矩阵向量乘法(MPI)
在这里插入图片描述
在这里插入图片描述
矩阵向量乘法(Pthreads)
在这里插入图片描述
曲边梯形面积计算(MPI)
在这里插入图片描述
在这里插入图片描述
曲边梯形面积计算(OpenMP)
在这里插入图片描述
在这里插入图片描述
通过数学求和公式计算π
在这里插入图片描述
蒙特卡洛方法计算π
number_in_circle = 0;
for(toss = 0; toss < number_of_tosses; toss++){
x = random double between - 1 and 1;
y = random double between - 1 and 1;
distance_squared = x * x + y * y;
if(distance_squared <= 1) number_in_circle++;
}
pi_estimate = 4 * number_in_circle / ((double) number_of_tosses);

奇偶交换排序(MPI)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
奇偶交换排序(OpenMP)
在这里插入图片描述


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

相关文章

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

任务并行、数据并行的应用 任务并行 将待解决问题所需要执行的各个任务分配到各个核上执行。 数据并行 将待解决问题所需要处理的数据分配给各个核&#xff0c;每个核在分配到的数据集上执行大致相似的操作。 冯诺依曼体系结构的瓶颈及改进&#xff0c;Flynn分类法涉及的几…

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

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

cuda 并行计算

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

数据 并行

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

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

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

并发和串行、并行的概念

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

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

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

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

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

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

问题截图 解决方案&#xff1a; 改动存储过程 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检查传参是或否正确如果以上都没有错误&#xff0c;那就看一下是否…

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

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

spring笔记⑬——spring事务

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

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

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

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

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

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

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

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

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

简单理解MySQL的存储引擎

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

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

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

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

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

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

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

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

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