当前位置:网站首页>高性能计算(2)——万丈高楼平地起

高性能计算(2)——万丈高楼平地起

2022-06-10 10:48:00 华为云

存储方式

从物理划分上 共享内存和分布式内存是两种基本的并行计算机存储方式 除此之外 分布式共享内存也是一种越来越重要的并行计算机存储方式

指令和数据

  • [小粒度]根据一个并行计算机能够同时执行的指令与处理数据的多少 可以把并行计算机分为 SIMD Single-Instruction Multiple-Data 单指令多数据并行计算机和MIMD Multiple-Instruction Multiple-Data 多指令多数据并行计算机
  • [大粒度]按同时执行的程序和数据的不同 又提出了SPMD Single-Program Multuple-Data 单程序多数据并行计算机和MPMD Multiple-ProgramMultiple-Data 多程序多数据并行计算机

并发和并行

并行类型

几种并行区分



程序、线程、进程和超线程

  • 程序程序是一组指令的有序集合。它本身没有任何运行的含义,只是存在于计算机系统的硬盘等存储空间中一个静态的实体文件。比如Linux系统下的binary excutable,windows系统下的exe
  • 进程进程是处于动态条件下由操作系统维护的系统资源管理实体。进程具有自己的生命周期, 反映了一个程序在一定的数据集上运行的全部动态过程。需要加载到内存中,点开一个exe就是开启了一个进程
  • 线程。线程则是进程的一个实体,是比进程更小的能独立运行的基本单位,是被系统调度和分配的基本单元。线程自身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源 (如程序计数器、一组寄存器和调用堆栈), 但它与同属一个进程的其他线程共享所属进程所拥有的全部资源,同一个进程的多个线程可以并发执行,从而提高了系统资源的利用率
  • 超线程超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单颗CPU都能进行线程级并行计算,进而兼容多线程操作系统和软件。一般一个CPU对应一个线程,通过超线程可以达到比如8核16线程

老生常谈,线程和进程的区别和联系

  1. 一个程序的执行至少有一个进程,一个进程至少包含一个线程(主线程)。
  2. 线程的划分尺度小于进程,所以多线程程序并发性更高。
  3. 进程是系统进行资源分配和调度的一个独立单位,线程是CPU调度和分派的基本单位。同一进程内允许多个线程共享其资源。
  4. 进程拥有独立的内存单元,即进程之间相互独立;同一进程内多个线程共享内存。因此,线程间能通过读写操作对它们都可见的内存进行通信,而进程间的相互通信则需要借助于消息的传递。
  5. 每个线程都有一个程序运行的入口,顺序执行序列和程序运行的出口,但线程不能单独执行,必须依存于进程中,由进程控制多个线程的执行
  6. 进程比线程拥有更多的相应状态,所以创建或销毁进程的开销要比创建或销毁线程的开销大得多。因此,进程存在的时间长,而线程则随着计算的进行不断地动态地派生和缩并。
  7. 一个线程可以创建和撤销另一个线程。而且同一进程中的多个线程共享所属进程所拥有的全部资源;同时进程之间也可以并行执行,从而更好地改善了系统资源的利用率。

线程绑定

计算机系统是由一个或多个物理处理器和内存组成,运行的程序会将内存分为两个部分,一部分是共享变量使用的存储区域, 另一部分供各线程的私有变量使用的存储区域。线程绑定是将线程绑定在固定的处理器上, 从而在线程与处理器之间建立一对一的映射关系。如果不进行线程绑定,线程可能在不同的时间片运行在不同的处理器上我们知道,每个处理器是有自己的多级缓存的,如果线程切来切去,那么cache命中率肯定不高,程序性能也会受到影响。通过线程绑定,程序能够获得更高的cache利用率从而提高程序性能。c++中如何进行线程绑定可以参考https://www.cnblogs.com/wenqiang/p/6049978.html

并行算法评价

理论上来说,n个相同的cpu理论上能提供n倍的计算能力。

但是在实际过程中,并行开销会导致总的执行时间无法线性地减少。这些开销分别为:

  1. 线程的建立和销毁、 线程和线程之间的通信、 线程间的同步等因素造成的开销。
  2. 存在不能并行化的计算代码,造成计算由单个线程完成, 而其他线程则处于闲置状态。
  3. 为争夺共享资源而引起的竞争造成的开销
  4. 由于各cpu工作负载分配的不均衡和内存带宽等因素的限制,一个或多个线程由于缺少工作或因为等待特定事件的发生无法继续执行而处于空闲状态。

并行加速比(加速比)

加速比的定义是顺序程序执行时间除以计算同一结果的并行程序的执行时间

R s = t s t p R_s = \frac{t_s}{t_p}

式中, t s t_s 为一颗CPU程序完成该任务所需串行执行时间; t p t_p 为n颗CPU并行执行完成该任务所需时间。由于串行执行时间 t s t_s 为n颗CPU并行执行完成该 和并行执行时间 t p t_p 有多种定义方式。 这样就产生了五种不同的加速比的定义,即相对加速比、实际加速比、绝对加速比、渐近实际加速比和渐近相对加速比

在实际应用中,影响并行加速比的因素主要是串行计算、并行计算和并行开销三方面。一般情况下, 并行加速比小于CPU的数量。但是,有时会出现一种奇怪的现象,即并行程序能以串行程序快n倍的速度运行,称为超线性加速比。产生超线性加速的原因在于CPU访问的数据都驻留在各自的高速缓存Cache中, 而高速缓存的容量比内存要小, 但读写速度却远高于内存。
衡量并行算法的另一个主要标准是并行效率,它表示的是多颗CPU在进行并行计算时单颗CPU的平均加速比。

R p = R s n R_p = \frac{R_s}{n}

理想并行效率为1表明全部CPU都在满负荷工作。通常情况下,并行效率会小于1, 且随CPU数量的增加而减小。

原网站

版权声明
本文为[华为云]所创,转载请带上原文链接,感谢
https://bbs.huaweicloud.com/blogs/358745