Parallel Computing - 一文讲懂并行计算


在本章中,我们将回顾一些有关并行计算的概念。但更加强调 GPU。

Throughput/Latency

在讨论性能之前,我们先回顾一下一些概念。

  • 吞吐量:单位时间内计算任务的数量。即:一分钟内 1000 笔信用卡付款。
  • 延迟:调用操作和获得响应之间的延迟。即:处理信用卡交易所需的最长时间为 25 毫秒。
    在优化性能时,一个因素(例如吞吐量)的改进可能会导致另一因素(例如延迟)的恶化。

Serial Computing

这是老办法,我们遇到一个问题,我们把它们分解成一个个小块,然后一个接一个地解决。
在这里插入图片描述

Parallel Computing

从最简单的意义上来说,并行计算是同时使用多个计算资源来解决计算问题。
在这里插入图片描述

Types of parallel computers

根据弗林分类法,并行计算机有 4 种不同的分类方法。
下面是一些经典的例子

  • SISD:非常旧的计算机(PDP1)
  • MIMD:超级计算机
  • SIMD:Intel 处理器、Nvidia Gpus
  • MISD:确实很少见。
    对于 GPU,它们通常是 SIMD 类型的处理器。不同的处理单元执行相同的指令,但在共享内存的不同部分。
    在这里插入图片描述

Simple 4-width SIMD

下面我们有一个 4 宽度的 SIMD。这里的所有处理器都在同时执行“add”指令。
在这里插入图片描述当您听说 GPU 有 5000 个核心时,请不要被愚弄,它可能只是说它有 5000 个 ALU(算术逻辑单元)。 GPU 可同时执行的最大任务数通常在 Nvidia 上称为“warp size”,在 AMD 上称为“wavefront”,通常是按块/网格组织的 32 宽 SIMD 单元。

可能发生的一个有趣的问题是,如果您有一条分支(if)指令,并且每个处理元素决定不同的事情。如果发生这种情况,您将受到处理处罚。这种效应称为发散。为了解决这个问题,您必须尝试尽量减少波动前(cuda 中的wrap)上分支指令的使用。
如果您需要这种分支分配,您可以使用 opencl 中的“select”来编译为单个指令(原子),这样就不会发生发散问题。
在这里插入图片描述

Amdahl’s law

Amdahl’s Law指出潜在的程序加速(理论延迟)由可以并行化的代码 p 的比例定义:
在这里插入图片描述

  • S : 整个任务执行延迟的理论加速
  • p: 可以并行化的代码的一部分。
  • 处理器数量
    从该定律可以得到:加速受到不可并行工作部分的限制,即使使用无限数量的处理器,速度也不会提高,因为串行部分会受到限制。
    在这里插入图片描述
    程序的总执行时间T分为两类:
  • 执行不可并行串行工作所花费的时间
  • 进行可并行工作所花费的时间
    这里还缺少一些重要的东西。阿姆达尔定律没有考虑内存延迟等其他因素。

Types of parallelism

Data Parallel Model

在此模型上,共享内存对所有节点都是可见的,但每个节点都处理该共享内存的部分内容。这就是我们通常使用 GPU 要做的事情
在这里插入图片描述
数据并行方法的主要特点是编程相对简单,因为多个处理器都运行相同的程序,并且所有处理器大约在同一时间完成其任务。当每个处理器正在处理的数据之间的依赖性最小时,此方法是有效的。例如,向量加法可以从这种方法中受益匪浅。

Task parallel

任务并行方法的主要特点是每个处理器执行不同的命令。与数据并行方法相比,这增加了编程难度。由于处理时间可能会根据任务的分割方式而有所不同,因此需要一些同步。如果任务完全不相关,问题就会容易得多。
在这里插入图片描述

Partitioning

设计并行程序的第一步是将问题分解为可以分配给多个任务的离散工作“块”。这称为分解或划分。有两种在并行任务之间划分计算工作的基本方法:

  • 域分解:
  • 功能分解。

Domain Decomposition

在这种类型的分区中,与问题相关的数据被分解。然后,每个并行任务都处理一部分数据。
在这里插入图片描述

Functional Decomposition

在这种方法中,重点是要执行的计算,而不是计算所操纵的数据。问题根据必须完成的工作进行分解。然后,每个任务执行整体工作的一部分。
在这里插入图片描述

Communications

通常一些并行问题需要节点(任务)之间进行通信。这又是一个与问题相关的问题。需要考虑的一些要点:

  • 通信总是意味着开销
  • 通信频繁需要节点(任务)同步,需要较大的开销
    当您需要将数据发送到 GPU 来执行某些计算,然后将结果传回 CPU 时,就意味着需要进行通信。

Example that does not need communication

某些类型的问题可以分解并并行执行,几乎不需要任务共享数据。例如,想象一下图像处理操作,其中黑白图像中的每个像素都需要反转其颜色。图像数据可以轻松地分配给多个任务,然后这些任务彼此独立地完成各自的工作。这些类型的问题通常被称为“尴尬并行”,因为它们非常简单。需要很少的任务间通信。

Example that need communication

大多数并行应用程序并不是那么简单,并且确实需要任务彼此共享数据。例如,3-D 热扩散问题需要任务了解具有相邻数据的任务计算出的温度。相邻数据的更改会直接影响该任务的数据。

Synchronization

管理工作顺序和执行工作的任务是大多数并行程序的关键设计考虑因素。同步总是会影响性能,但当任务需要通信时总是需要同步。
同步类型

  • Barrier(用于 OpenCl&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的码泰君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值