Parallel Computing - 一文讲懂并行计算

news2024/10/1 19:30:24

目录

  • Throughput/Latency
  • Serial Computing
  • Parallel Computing
  • Types of parallel computers
  • Simple 4-width SIMD
  • Amdahl's law
  • Types of parallelism
    • **Data Parallel Model**
    • Task parallel
  • Partitioning
    • Domain Decomposition
    • Functional Decomposition
  • Communications
    • Example that does not need communication
    • Example that need communication
  • Synchronization
    • Barrier
  • Granularity
    • Fine-grain Parallelism
    • Coarse-grain Parallelism
  • How expensive is memory I/O
  • Solving the problem
    • Just add more stuff for the GPU to do
    • Latency Hiding
  • Coalesced Global memory access
  • Host/Device Transfers and Data Movement
    • Avoid transfers
    • Pinned Host Memory

在本章中,我们将回顾一些有关并行计算的概念。但更加强调 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)
  • Lock/semaphore 锁/信号量
  • Synchronous communication operations 同步通讯操作

Barrier

这是一种同步机制,每个任务都执行其工作,直到到达屏障。然后它会停止或“阻塞”,直到所有任务都到达同一点。当最后一个任务到达屏障时,所有任务都会同步。

Granularity

这是关于计算和通信之间的比率。有 2 种粒度

Fine-grain Parallelism

通信多于计算
在这里插入图片描述

Coarse-grain Parallelism

计算多于沟通
在这里插入图片描述
最有效的粒度取决于算法及其运行的硬件环境。但是……通常通信的延迟比计算的延迟更大。例如,将数据复制到 GPU 或从 GPU 复制数据。所以我们更喜欢粗粒度,这意味着大量的计算和很少的 GPU/CPU 通信。

How expensive is memory I/O

正如心理实验一样,想象一个处理元素(节点/任务)在 1 秒内做出语句(即 V:=1+2+3/4)。但如果需要读/写 GPU 全局内存,则需要更多时间。考虑下表。
顺便说一句,我们考虑到数据已经在 GPU 上,将数据发送到 GPU 是另一个问题。
在这里插入图片描述在此表中,我们有不同的内存类型,其中全局内存是 GPU 内存,私有内存和本地内存是位于每个核心内部的内存,常量也是全局内存,但专门用于读取速度更快。现在检查以下示例。
在这里插入图片描述
在这种情况下,我们的计算结果是 整个时间的 1 86 \frac{1}{86} 861 。这很糟糕,这意味着我们的 ALU 工作在 A L U e f i c i e n c y ALU_{eficiency} ALUeficiency= 1 86 ∗ 100 \frac{1}{86}*100 861100 A L U e f i c i e n c y ALU_{eficiency} ALUeficiency=1.1%。
现在想象一下,我们需要处理更多的数据,而不是 int(4 字节)x,y 将是 long(8 字节)。
在这里插入图片描述
现在情况变得更糟了。我们的计算结果是整个时间的 1 172 \frac{1}{172} 1721 。这很糟糕,这意味着我们的 ALU 工作在 A L U e f i c i e n c y ALU_{eficiency} ALUeficiency= 1 172 ∗ 100 \frac{1}{172}*100 1721100 A L U e f i c i e n c y ALU_{eficiency} ALUeficiency=0.58%。

如果我们想与某些原始顺序算法相比提高性能,这可能意味着两件事:

  • 原来的顺序算法一定比这个内存I/O延迟慢很多。
  • 您需要在 GPU 内执行更多操作才能稀释该时间。

Solving the problem

Just add more stuff for the GPU to do

我们可能想到的第一件事是添加更多要完成的处理,这实际上会花费比内存延迟更多的时间。同样,如果处理时间加上内存延迟小于原始顺序 CPU 版本,您将获得加速。
在这里插入图片描述在这种情况下,您现在拥有 100% 的 Alu 效率,但这仅在现实生活中当您处理令人尴尬的并行问题时才会发生。例如大矩阵乘法、密码分析等…

Latency Hiding

更好的技术是使用 GPU 上下文切换机制来隐藏此延迟。这是通过向 GPU 发出并行代码标志来实现的,表明它正在等待可用的内存请求。当这种情况发生时,等待可用内存的处理元素组将进入池。与此同时,GPU 可以启动另一个工作组来执行,但最终会暂时停止。这个想法是,当这种情况发生时,一些工作项将具有可用的内存,这将具有最小化整个延迟的效果。
在这里插入图片描述
所以我们用工作组(work group)来溢出我们的计算单元
在这里插入图片描述
然后,我们隐藏内核访问全局内存的长内存延迟时间,因为当 GPU 分配要执行的工作组时,有些工作组可能是可用的。顺便说一句,当您的工作组位于波前(或warp)内时,这将起作用.
在这里插入图片描述

Coalesced Global memory access

主机向GPU发送数据后,内存将位于全局内存上,每个线程(计算单元)都会访问数据。我们已经讨论过这很慢,但有时您需要这样做。每次内核在全局内存上读/写时,它实际上是在访问一块内存。合并访问是指访问相邻地址上的数据。
在这里插入图片描述
因此,这意味着使用较少的线程消耗相邻内存块来访问内存比使用大量的线程消耗随机地址更快。

Host/Device Transfers and Data Movement

到目前为止,我们仅考虑数据已位于 GPU(全局内存)上时的性能。这忽略了 GPU 编程中最慢的部分,即从 GPU 获取数据和从 GPU 取出数据。
在这里插入图片描述
我们不应该仅使用内核的 GPU 执行时间相对于其 CPU 实现的执行时间来决定是运行 GPU 还是 CPU 版本。当我们最初将代码移植到 GPU 时,我们还需要考虑通过 PCI-e 总线移动数据的成本。
因为 GPU 是插入 PCI-e 总线的,所以这很大程度上取决于 PCI 总线的速度以及有多少其他东西正在使用它。

host/device transfer latency 是尝试在 GPU 上加速算法时的主要困难。

发生这种情况是因为,如果您的顺序算法计算的时间小于此主机/设备传输的时间,则无需做太多事情。但有一些…

Avoid transfers

这是最明显的一个,但您至少需要一个,对吗?因此,宁愿进行一次大传输,也不愿进行多次小传输,特别是在程序循环中。

Pinned Host Memory

默认情况下,主机 (CPU) 数据分配是可分页的。 GPU 无法直接从可分页主机内存访问数据,因此当调用从可分页主机内存到设备内存的数据传输时。发生这种情况是因为操作系统为其所有设备提供了虚拟地址,并且您的驱动程序需要使用这些页面来获取真实地址。 GPU 驱动程序必须首先分配一个临时页面锁定或“固定”主机数组,将主机数据复制到固定数组,然后将数据从固定数组传输到设备内存,如下所示。
在这里插入图片描述
如图所示,固定内存用作从设备到主机传输的暂存区域。我们可以通过直接在固定内存中分配主机阵列来避免可分页和固定主机阵列之间的传输成本。
您不应该过度分配固定内存。这样做会降低整体系统性能,因为它会减少操作系统和其他程序可用的物理内存量。很难提前判断多少才算是太多,因此与所有优化一样,测试您的应用程序及其运行的系统以获得最佳性能参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1484748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 基础入门 基础简介

1. 观察App运行日志 2.Android 开发设计的编程语言 koltin Java c c 3.工程目录结构 4.Gradle 5.build.gradle 文件解析 plugins {id("com.android.application")//用了哪些插件 主配置文件版本控制 所以这里不用写版本 }android {namespace "com.tiger.myap…

unity学习(44)——选择角色菜单——顺利收到服务器的数据

本节的思路参考自,内容并不相同:13ARPG网络游戏编程实践(十三):角色选择UI及创建面板制作(四)_哔哩哔哩_bilibili 现在的代码写在MessageManager.cs中,函数名UserHandler(是从OnMess…

mongodb 图形界面工具 -- Studio 3T(下载、安装、连接mongodb数据库)

目录 mongodb 图形界面工具 -- Studio 3T下载安装第一次使用:注册添加一个连接(连接 mongodb 数据库)1、点击【添加新连接】,选择【手动配置我的连接设置】2、对 Server 设置连接数据3、连接的用户认证设置(创建数据库…

【系统分析师】-需求工程

一、需求工程 需求工程分为需求开发和需求管理。 需求开发:需求获取,需求分析,需求定义、需求验证。 需求管理:变更控制、版本控制、需求跟踪,需求状态跟踪。(对需求基线的管理) 1.1需求获取…

BUGKU 网站被黑

打开环境,什么都没发现,使用蚁剑扫描一下,发现shell.php,打开 使用BP抓包,进行爆破 得到密码:hack 进去得到flag

【python】1.python3.12.2和pycharm社区版的安装指南

欢迎来CILMY23的博客喔,本篇为【python】1.python3.12.2和pycharm社区版的安装指南,感谢观看,支持的可以给个一键三连,点赞关注收藏。 目录 一、python3.12.2的下载与安装 1.1下载 1.2安装 二、pycharm的安装 2.1下载安装 2…

Home-credit海外贷款信贷产品源码/线上贷款产品大全/贷款平台软件源码/海外借贷平台

测试环境:Linux系统CentOS7.6、宝塔、PHP7.3、MySQL5.6,根目录public,伪静态laravel5,开启ssl证书 语言:中文简体、英文 laravel框架的程序有点多,这个团队估计主要就是搞laravel开发的,基本上…

Redis持久化+Redis内存管理和优化+Redis三大缓存问题

Redis持久化Redis内存管理和优化Redis三大缓存问题一、Redis高可用二、Redis持久化1、RDB持久化1.1 触发条件(1) 手动触发(2) 自动触发(3) 其他自动触发机制 1.2 执行流程1.3 启动时加载 2、AOF持久化2.1 开启AOF2.2 执行流程(1) 命令追加(append)(2) 文件写入(write)和文件同步…

Leetcode630. 课程表 III

Every day a Leetcode 题目来源:630. 课程表 III 解法1:反悔贪心 经验告诉我们,在准备期末考试的时候,先考的课程先准备。同理,lastDay 越早的课程,应当越早上完。但是,有的课程 duration 比…

MATLAB环境下基于图像处理的计算病理学图像分割(MATLAB R2021B)

人工智能是病理学诊断和研究的重要新兴方法,其不仅可用于病理形态数据分析,还可整合免疫组化、分子检测数据和临床信息,得出综合的病理诊断报告,为患者提供预后信息和精准的药物治疗指导。计算病理学是病理学与AI、计算机视觉等信…

DSI2协议之BTA行为理解

概念: DSI协议spec支持总线控制权在master和slave之间发生交换,即通过bus turn around来实现; BUS TURN AROUND: BTA 的实现是通过controller—>cdphy的turnrequest信号来实现; 关于控制器发出turnrequest给phy,phy通过lvds/trio线输出turnaround sequence如下图中…

设计一基于Text generation web UI的语言模型部署与远程访问的方案​

前言 Text generation web UI可为类ChatGPT的大型语言模型提供能够快速上手的网页界面,不仅可以提高使用效率,还可满足私有化部署,或对模型进行自定义。目前,该Web UI已经支持了许多流行的语言模型,包括LLaMA、llama.…

ABAP - SALV教程06 - 列的设置(隐藏、修改、优化列宽)

SAVL要想像Function ALV或OO ALV那样设置Fieldcat,也是有方法的。通过取得全体列的类引用 CL_SALV_COLUMNS来进行修改 METHOD set_columns.* 取得全部列的对象DATA(lo_cols) co_alv->get_columns( ).* 设置自动优化列宽度lo_cols->set_optimize( X ).T…

js监听网页iframe里面元素变化其实就是监听iframe变化

想要监听网页里面iframe标签内容变化,需要通过监听网页dom元素变化,然后通过查询得到iframe标签,再通过iframe.contentWindow.document得到ifram内的document,然后再使用选择器得到body元素,有了body元素,就…

mamba-ssm安装building wheel卡着不动后error...避坑解决方法

文章目录 方法1、下载whl文件到本地后pip install安装成功后验证: 方法2、拉取Docker镜像 对于项目中用到MambaIR的小伙伴,需要pip安装 causal_conv1d和 mamba-ssm两个包及其依赖: torch packing transformersMambaIR-Github主页&#xff0…

【管理】管理岗位的通道:技术型PM,项目经理,管培生

【管理】管理岗位的通道:技术型PM,项目经理,管培生 文章目录 1、管理岗位什么是管理岗位互联网管理岗 2、项目经理(互联网)项目经理岗位要求项目经理 VS 程序员项目经理 VS 产品经理 3、市场销售(管培生&am…

小实验:ESP32实现流水灯控制

文章目录 代码代码说明 ESP32提供了多路IO接口,下面的这个小试验实现了一个简单的流水灯控制,可以控制6个灯珠,当然也可以更多,可以根据情况增加和减少。 代码 将代码命名为main.py,上传到开发板,接好电路…

机器学习笔记 探索性数据分析(EDA) 中的配对图详述

一、介绍 在数据科学领域,理解和分析数据的第一步涉及全面的探索性数据分析(EDA)。这个过程对于识别模式、识别异常和建立假设至关重要。在 EDA 可用的众多工具中,配对图作为一种基本可视化技术脱颖而出,可提供多方面的数据视图。本文探讨了机器学习中的配对图,并解释了如…

springboot+vue学生网上请假系统

学生网上请假系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了学生网上请假系统的开发全过程。通过分析学生网上请假系统管理的不足,创建了一个计算机管理学生网上请假系统的方案。文章介绍了…

Mybatis plus扩展功能-Db静态工具

目录 1 前言 2 使用方法 2.1 Db静态工具拥有的部分方法 2.2 举例 1 前言 在我们的服务层中,有时为了实现一个方法需要引入其它的Mapper层方法,但是,这样可能出现循环依赖。虽然Spring已经给我们解决了简单的循环依赖问题,但是…