并行程序设计复习笔记【1】

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

传统的单核系统编写的程序无法有效利用多核处理器,而并行程序设计利用了多核,提高了处理器的利用效率。

  1. 并行程序的基本思想:数据并行和任务并行。任务并行是指将完成的任务分配给不同的核,如每个助教更改一份试卷的不同题目,而数据并行则是将处理的数据分配给不同的核,如不同助教更改相同份试卷。

  1. 并行程序设计的不同扩展:MPI(Message-Passing Interface,消息传递接口)、Pthreads(POSIX threads,POSIX线程)、OpenMP等等。

  1. 并行系统:共享式内存和分布式内存:

  1. 并发计算:一个程序的多个任务可以在同一个时间段内同时执行;并行计算:一个程序通过多个任务紧密协作来解决某个问题;分布式计算:一个程序需要与其他程序相结合来解决某个问题。

  1. 冯诺依曼结构:

经典的冯诺依曼结构包括主存、中央处理单元(Central Process Unit,CPU)以及主存和CPU之间的互连结构(通常是总线,包括数据和指令)。CPU分为控制单元和算术逻辑单元(Algorithm Logic Unit ,ALU),控制逻辑单元决定执行程序中的哪些指令,而ALU负责执行指令。控制单元有一个特殊的寄存器,程序计数器,用来存放下一条指令的地址。

当数据或指令从主存传送到CPU,我们称数据或指令从内存中取出或读出。主存和CPU之前的分离,导致CPU执行指令的速度受到主存的约束,被称为冯诺依曼瓶颈。

  1. 操作系统(Operating System,OS)一种用来管理计算机软硬件的主要软件。当用户运行一个程序时,操作系统创建一个进程(运行着的程序的一个实例)。

现代操作系统大多数都是多任务的,在一个多任务的操作系统当中,如果一个进程需要等待某个资源,他会阻塞。一个进程可以分为多个线程,当一个线程阻塞可以执行其他任务。线程存在派生(fork)和合并(join)。

  1. 缓存即Cache,是解决冯诺依曼瓶颈使用的方法之一。程序访问完一个存储区域往往会访问接下来的区域,这个原理被称为局限性。当CPU需要数据或者指令时,首先访问cache,如果cache中有相关信息,cache命中,访问信息不存在,cache未命中。当cpu更新了cache数据后,cache和主存就会出现不一致的问题。通常有两种策略:写直达(当cpu更新cache中的数据后,cache会立刻更新主存)和写回(cache块只有在将被替换的时候写入主存,已更改而未更新的行会被标记脏(dirty))。

  1. cache映射:

(1)全相联Cache(fully associative):每个高速缓存块能够被放置在cache中的任意位置

(2)直接映射Cache(directed mapped):每个高速缓存块被放置在cache中的唯一位置

(3)n路组相联(n-way set associated):每个高速缓存块被放置在n个不同区域中的一个

cache的替换策略最常使用的是最近最少使用策略(least recently used,LRU)

  1. 虚拟存储器(虚拟内存):利用了时间和空间的局部性,作为主存的辅助存储,存储大型程序暂时用不到的部分(交换空间,swap space)。页表用来将虚拟地址转换为物理地址。

  1. 使用页表会增加整体程序的运行时间,为了解决这一问题,引入转译后备缓冲区(Translation-Lookaside Buffer,TLB)。TLB在快速存储介质中存储了一些页表的条目(通常为16~512条),利用时间和空间局部性,减少主存中页表的访问。

  1. 指令级并行(Instruction-Level parallelism,ILP):通过让多个处理器不见或者功能单元同时执行指令来提高处理器性能。其实现方式主要包括:流水线和多发射。流水线通过将功能分成多个单独的硬件或者功能单元,并把它们按顺序串接来提高性能;多发射处理器通过复制功能单元来同时执行程序中的不同指令(如第一个加法器计算z0,第二个z1,第三个z2以此类推)。如果功能单元是在编译时调度,静态多发射,如果是在运行时调度的,动态多发射。一个支持动态多发射的处理器称为超标量(superscalar)。

  1. 线程级并行(Thread-Level Parallelism,TLP):通过同时执行不同线程来提供并行性,粗粒度并行。

  1. 在细粒度(fine-grained)的多线程中,处理器在每条指令执行完后切换线程,从而跳过阻塞的线程。其缺点:执行一段长指令的线程在执行每条指令后都需要等待。而粗粒度(coarse-grained)只切换那些需要等待长时间才能完成操作而阻塞的线程,其优点:不需要线程间的立即切换,缺点:处理器在短阻塞仍空闲,且需要上下文切换。

  1. 同步多线程(Simultaneous Multithreading,SMT)是细粒度多线程的变种,通过允许多个线程同时使用多个功能单元来利用超标量处理器的性能。

  1. 单指令多数据流(Single Instruction Multiple Data,SIMD)通常是同步

多指令多数据流(Multiple Instruction Multiple Data,MIMD)通常是异步

  1. MIMD系统两种主要的类型:共享内存系统和分布式内存系统。

(1)共享内存系统中:一组自治的处理器通过互联网络与内存系统相互连接,每个处理器能够访问每个内存区域。处理器通过访问共享的数据结构来通信。一致性内存访问(Uniform Memory Access,UMA)

(2)分布式内存系统:每个处理器有自己私有内存空间,处理器-内存对之间通过互联网络相互通信。所以在分布式系统中,处理器之间是通过发送消息或者使用特殊函数来访问其他处理器内存。非一致性访问(Nonuniform Memory Access,NUMA),最广泛使用的分布式内存系统称为集群。

  1. 互连网络:

目前最常用的两种互联网络是总线(bus)和交叉开关矩阵(crossbar)。总线是由一组并行通信线和控制对总线访问的硬件组成。

分布式内存互连网络通常分为两种:直接互连和间接互连。如果有p个处理器,在环面需要链路3p,环中2p。

  1. 等分宽度(bisection width): 用一截面将网络划分成对等的两半时(或者两个结点数目都相同的子网)时,穿过该截面的最大传输率。

△一个正方形二维环面网络的等分宽度为(设有p=q²个节点)2q。

链路的带宽(bandwidth)是指它传输数据的速度。等分带宽(bisection width)通常用来衡量网络的质量。最理想的直接互联网络是全相连网络,等分宽度为p²/4,总链路数目为:C(p,2)。

  1. 间接互连网络(交换器不一定与处理器直接连接)。常见的如交叉开关矩阵和omega网络。

对于交叉开关矩阵来说,需要用到p²个交换器,对于omega网络来说,总共需要用到p/2log2(P)个omega网络交换器,其中交换器为2×2交叉矩阵交换器,所以总共使用了2plog2(p)个交换器。

  1. 延迟(latency)是指从发送源开始传送数据到目标源接受数据之间的时间,带宽是指目标源接收数据后接收数据的速率。如果一个互连网络延迟是l秒,带宽是b字节每秒,传输n字节所需花费t=l+n/b。

  1. Cache一致性问题:当一个处理器更新Cache中的某一变量的副本时,其他处理器应该知道该变量已经更新且更新相应的Cache值。

解决Cache一致性问题:(1)监听Cache一致性协议:基于总线监听,当一个核更新副本后,在总线上广播,其他核接收消息进行更新。(2)基于目录的Cache一致性协议:通过存储每个内存航状态的目录数据结构来实现,当一个核更新时,会先查询目录,并将所有包含更新内容的高速缓存标记为非法。

  1. 将串行程序或者算法转换为并行程序的过程被称为并行化(parallelization),转换的时候需要考虑每个进程/线程获得的工作量大致相当,被称为负载均衡。而不同线程的执行时间不定,可能由于竞争而导致访问发生错误。一次只能被一个线程执行的代码块被称为临界区。保证互斥执行的最常用机制是互斥锁(mutual exclusion lock)或者互斥量(mutex)、信号量(semaphore)。临界区增加了代码的串行性。监视器(monitor)能够在更高层次提供互斥执行。

  1. 性能:

(1)对于一个有p个核的系统,最佳预期为T并行=T串行/p,如果能达到被称为线性加速比(linear speedup)。并行程序的加速比为S=T串行/T并行,加速效率为E=S/p。

(2)阿姆达尔定律:

对于一个程序,假设有p可以进行并行化,用q个核,最大加速比为:

S=1/((1-p)+p/1)

(3)可扩展性:增加某程序所用的进程/线程数,如果在输入规模也以相应增长率增加的情况下,效率值一直都是E,则称该程序是可扩展的。

  1. 计时:

(1)墙上时钟:代码开始执行到执行结束的总耗费时间。

(2)关于计时函数,可能会存在分辨率的问题,分别率是指计时器的时间测量单位,是计时器在计时过程之中最短的非零时间跨度。路障函数(barrier),同步所有的进程/线程。当多次执行同一个程序时,每次运行所花费的时间可能是不同的。

  1. 并行化步骤:

  1. 当一个代码块被多个线程运行并且运行的结果正确时,称之为线程安全。

  1. 单向通信:一个进程通过某些函数来反访问其他进程的数据,划分全局地址空间是指将分布式内存统一编址来实现共享内存的功能。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值