并行与分布式 第4章 数据级并行:向量体系结构和GPU

文章目录

  • 并行与分布式 第4章 数据级并行:向量体系结构和GPU
    • 4.1 什么叫数据级并行
    • 4.1.1 数据级并行与SPMD
      • 4.1.2数据级并行——传统器件的问题
      • 4.1.3 数据级并行——向量体系结构和GPU
    • 4.2 向量体系结构
    • 4.2.1 向量以及计算方式
    • 4.2.2 向量体系结构
      • 4.2.3 向量运算的执行时间评估
    • 4.3 GPU结构

并行与分布式 第4章 数据级并行:向量体系结构和GPU

4.1 什么叫数据级并行

我们将这些算法称为数据并行算法,是因为他们的并行源于对大型数据集的同时操作,而不是来自多个控制线程。

4.1.1 数据级并行与SPMD

一个SPMD程序如何运行在SISD(或MIMD)上?
请添加图片描述

4.1.2数据级并行——传统器件的问题

• 分析传统的标量CPU流水线可知,取址、译码等操作逻辑复杂,且开销不低
• 对于SPMD任务,无论是在SISD还是MIMD(多核)器件上运行,其取址、译码操作都是有冗余的

数据级并行——SIMD
请添加图片描述

• 更少的Fetch和Decode(甚至其他流水部件)意味着什么?
—— 更少的器件,更低的能耗和时间开销
• 更多的ALU意味着什么?
——一次流水能处理更多数据,速度更快
• 增加数据寄存器的数量来一次存储更多数据,以减少存储器访问延迟

4.1.3 数据级并行——向量体系结构和GPU

请添加图片描述

特点向量体系结构GPU
指令流水线深度
ALU宽度
控制流水线时间能够掩盖不必要的流水线时间流水线相对简单,直接处理更多数据
适用领域特定领域的高性能计算图形渲染、深度学习等并行计算任务

4.2 向量体系结构

4.2.1 向量以及计算方式

向量这种数据结构,以及向量的运算,和我们对SIMD的期待不谋而合

横向计算(以计算D=A×(B+C)为例)
向量计算是按行的方式从左到右横向地进行

请添加图片描述

数据相关:N次 功能切换:2N次 不适合于向量处理机的并行处理。

纵向计算
向量计算是按列的方式从上到下纵向地进行
请添加图片描述
两条向量指令之间:数据相关:1次 功能切换:1次

. 纵横(分组)计算
刚刚的纵向计算方式优化了向量计算的硬件开销,但是每次计算都需要访问到向量中的全部元素考虑到当前计算机体系结构的存储结构往往是层次化的,指令操作数一般都会加载到寄存器中,而寄存器的数量一般不会太多(相比于可以无限增长的向量长度N来说)结合前面两种计算方式,我们可以使用分组计算的方法

请添加图片描述
每组内各用两条向量指令。 数据相关:1次 功能切换:2次

4.2.2 向量体系结构

  • 向量体系结构应当具有很大的(相比传统标量体系结构)顺序寄存器堆 (Register File)(加载更多向量元素以支持纵向计算)
  • 向量体系结构从内存中收集散落的数据,将其放入寄存器堆中,并对寄存器堆中的数据们进行操作,然后将这些结果放回内存(一次传输一组数据,LD/ST流水化)
  • 一条指令能够对一个向量的数据进行操作,也就对向量中诸多独立数据元素进行了操作(纵向计算,功能单元流水化)

刚刚讨论的是向量计算在串行化中尽可能进行优化的结果
从并行的角度去考虑,增加功能单元(ALU)的数量也能大大提升向量的计算速度(多车道)

向量体系结构的一些优势

  • 由于向量的Load与Store是深度流水线化的,大型寄存器堆充当了Buffer的作用,因此其能够掩盖访存延迟并充分利用内存带宽
  • 乱序的超标量处理器往往具有复杂的设计,且乱序程度越高,其复杂性和功耗也会越高,在此方向发展很容易触及PowerWall将顺序的标量处理器扩展为向量处理器则不会带来复杂度和功耗的大幅升高,且开发者也能很容易适应和转换到向量指令

实例RISC-V & VECTOR EXTENSION
• RISC-V是一个免费且开源的基于精简指令集(RISC)的指令集架(ISA)
• RISC-V Vector Extension (RVV)顾名思义是RISC-V的向量扩展,本节全部内容基于 riscv-v-spec-1.0 规范
• RV64G:寄存器宽度为64的RISC-V(标量)架构,包括了RV64I(整型ISA)和F、D扩展(单、双精度浮点ISA)
• RV64V:一种兼容RV64G并包含64bit宽度RVV的(向量)架构

注意:无论寄存器宽度XLEN(传统意义上的字长)是32,64或是128位,在RISC-V中的一个字(word)永远是32位宽。这一点在之后的汇编指令中有体现

RV64结构概览请添加图片描述

RV64V 向量寄存器

  • RVV规定了32个向量寄存器(任何实现都应固定为32个),编号为 v0-v31
  • 不同实现可以有不同的寄存器宽度,但RVV规定每个寄存器宽度VLEN小于2^16bit,这里取VLEN=64bit
  • 寄存器组拥有充足的读写端口

RV64V标量寄存器

  • 和标量RISC-V一样的32个通用整型寄存器(x0-x31)和32个浮点寄存器(f0-f31),寄存器宽度XLEN为64
  • 标量寄存器可以为向量功能单元提供数据,也可以为向量load/store单元提供地址
  • 当向量功能单元从标量寄存器读取标量值时,其输入会将该标量值锁存

RV64V 向量LOAD/STORE单元

  • 假设一次访存时间为6 cycle
  • 假设向量load/store完全流水化,即在初始延迟后,向量寄存器和内存的带宽为每时钟周期1字(XLEN)
  • 该单元也可以对标量进行load/store

RV64V 功能单元

  • 假设功能单元完全流水化,每个时钟周期可以开始一个新操作
  • 需要一个控制单元检测结构冒险和数据冒险

从功能单元入手,提升向量处理器性能的方法

  1. 增加功能单元数量(多车道并行)
  2. 采用链接技术

下面我们着重探讨链接技术
RV64V 功能单元 链接技术

  • 链接(chaining):将具有写后读的两条操作中,前一个功能单元的结果转发给第二个功能单元,这就使得第二个向量操作可以在其源操作数(来自第一个操作的结果向量)中任意元素变为可用时立即开始
  • 像这样把功能单元链接起来流水处理,本质上是把流水线定向的思想引入到向量执行过程

请添加图片描述

进行向量链接的要求
• 保证:无向量寄存器使用冲突和无功能部件使用冲突
• 只有在前一条指令的第一个结果元素送入结果向量寄存器的那一个时钟周期才可以进行链接。
• 当一条向量指令的两个源操作数分别是两条先行指令的结果寄存器时,要求先行的两条指令产生运算结果的时间必须相等,即要求有关功能部件的通过时间相等。
• 要进行链接执行的向量指令的向量长度必须相等,否则无法进行链接。
• 一般链接技术经常出现在向量分组的内部

4.2.3 向量运算的执行时间评估

在前面讲解链接技术时,我们使用了一种细致的时间计算方式,得到的时间往往是 k * 𝑁+𝑏 的形式,其中k、b为常量

一般来讲,在向量处理器上,向量长度N都要远远大于常数b,因此我们应当着重关注式子的前一项 𝑘 * N

对于单车道的RV64V,我们认为执行一个编队的时间就是向量的长度N(单位为时钟周期)(双车道为N/2,以此类推,这里以单车道为例)

如果一串向量指令,含有m个编队,且处理的向量长度为N,则其在单车道处理器上执行的时间约为 m*N clock cycles

请添加图片描述

4.3 GPU结构

请添加图片描述

名词解释

缩写全称解释
ALUArithmetic Logic Unit在计算中,算术逻辑单元(ALU)是一种组合数字电路,对整数二进制数执行算术和位运算。
DRAMDynamic Random Access Memory动态随机存取存储器利用电容内存储电荷的多寡来代表一个二进制比特(bit)是1还是0的存储器件。
GPGPUGeneral-purpose computing on graphics processing units通用图形处理器代表“图形处理单元上的通用计算”,利用GPU的能力来执行传统上由中央处理器(CPU)完成的任务。
SMStreaming Multi-Processor流处理簇是运行CUDA内核的GPU的一部分,每个SM包含共享内存、恒定缓存、纹理缓存和一级缓存等组件。
FPUFloating Point Unit浮点单元(FPU,俗称数学协处理器)是计算机系统的一部分,专门用于对浮点数进行运算。
SFUSpecial Function Unit特殊功能单元用于执行超越指令,如正弦、余弦、倒数和平方根。每个SFU每个线程、每个时钟执行一条指令。
GPCGraphics Processing Cluster图形处理集群是由若干流式多处理器组成的一个流式多处理器簇。
ROPRaster Operation Processor光栅运算处理器获取像素和纹理信息,并通过特定的矩阵和向量操作将其处理为最终像素或深度值,同时执行写入或读取值以及混合操作。
PEProcessing Element处理元件是GPU中的子任务处理模块,可以表现为计算子任务或访存子任务。
GTEGigaThread Engine千兆线程引擎接受对GPU的调用,并根据内核创建任务实例。
DTEData Transfer Engine数据传输引擎使用datamove PBS,在主机内存和设备内存之间传输数据。
PBSPush Buffer StreamsPBS是数据传输引擎使用的一种数据传输机制。
KISKernel Instruction StreamKIS是内核指令流,用于描述GPU执行的内核指令序列。
SPStreaming Processor流处理器用于处理由CPU传输过来的数据,并将其转化为显示器可以识别的数字信号。
PCIePeripheral Component Interconnect ExpressPCIe是一种高速串行计算机扩展总线标准。
SMEMShared Memory共享内存是多个程序可以同时访问的内存,用于在程序之间提供通信或避免冗余副本。
SIMDSingle Instruction Multiple Data单指令多数据流能够复制多个操作数,并将它们打包在大型寄存器的一组指令集。
SIMTSingle Instruction Multiple Threads单指令多线程是一种并行计算的执行模型,将单指令多数据与多线程相结合。
LSULoad-Store Unit加载存储单元是一个专门的执行单元,负责执行所有加载和存储指令,生成加载和存储操作的虚拟地址,并从内存加载数据或存储数据到内存。
SISingle Instruction单指令
MTMulti-Threaded多线程
NVCCNVIDIA CUDA CompilerNVIDIA CUDA编译器驱动程序,用于隐藏CUDA编译的复杂细节。
VDIVirtual Desktop Infrastructure虚拟桌面基础设施是使用虚拟机提供和管理虚拟桌面的技术。

流水线(Pipeline) v.s. 并发(Concurrent)
请添加图片描述

  • CPU擅长执行少量串行线程:
    ·快速顺序执行
    · 低延迟的缓存内存访问
  • GPU擅长执行许多并行线程:
    ·可扩展的并行执行
    ·高带宽的并行内存访问

SIMD VS SIMT

SIMD(Single Instruction Multiple Data)和SIMT(Single Instruction Multiple Threads)都是并行计算的执行模型,但在具体实现上有一些区别。

SIMD是一种并行计算模型,它能够同时对多个数据元素执行相同的指令。在SIMD中,一条指令被广播到一组数据元素上,然后这组数据元素同时执行相同的操作。SIMD通常用于向量处理器或SIMD指令集扩展,如Intel的SSE(Streaming SIMD Extensions)和ARM的NEON(Advanced SIMD)。

SIMT是一种在GPU上广泛使用的并行计算模型。在SIMT中,多个线程同时执行相同的指令,但每个线程可以处理不同的数据。这些线程被分组成线程块(thread block),并在GPU上的多个处理器上并行执行。SIMT执行模型允许不同线程在同一指令周期内执行不同的指令,但它们在执行过程中保持同步。这意味着在SIMT中,所有线程中的所有指令都是在锁步中执行的。

总结来说,SIMD是一种向量化的并行计算模型,通过在多个数据元素上执行相同的指令来提高计算性能。而SIMT是一种在GPU上广泛使用的并行计算模型,通过同时执行多个线程来实现并行计算,但每个线程可以处理不同的数据。

(GPU剩下的看PPT吧,全是图看不懂)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在公网环境下使用内网穿透工具实现用ipad pro进行代码开发

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7. ipad远…

解锁数据库运维秘籍:掌握AntDB-T动态共享内存,提升进程间通信效率

动态共享内存是AntDB数据库通信的重要手段,本文主要阐述AntDB-T数据库动态共享内存的实现原理、实现方式与使用方法。 AntDB-T数据库是一款企业级通用分布式关系型数据库,其数据库内核是基于进程模型实现的,因此进程间通信(IPC&am…

撸源代码破冰杀手锏(一):Spring Security系列

一: 禅悟人生,码砖破冰感悟 二: Spring Security安全阐述 忙着去耍帅,后期补充完整.................

腾讯云服务器标准型S5实例CPU性能如何?配置特性说明

腾讯云服务器CVM标准型S5实例具有稳定的计算性能,CVM 2核2G S5活动优惠价格280.8元一年自带1M带宽,15个月313.2元、2核4G配置748.2元15个月,CPU内存配置还可以选择4核8G、8核16G等配置,公网带宽可选1M、3M、5M或10M,腾…

日期格式转化成星期几部署到linux显示英文

异常收集 原因:解决办法仰天大笑出门去,我辈岂是蓬蒿人 传入一个时间获取这个时间对应的是星期几,在开发环境(window系统)中显示为星期几,部署到服务器(linux系统)中会显示英文的时间…

什么是单片机?聊聊它的历史

前言 1946年2月15日,第一台电子数字计算机 ENIAC问世,这标志着计算机时代的到来。 ENIAC 是电子管计算机,时钟频率虽然仅有 100 kHz,但能在1s 的时间内完成 5000 次加法运算。与现代的计算机相比,ENIAC有许多不足&am…

腾讯云标准型s5和s6有什么区别?CPU处理器有差异吗?

腾讯云服务器CVM标准型S5和S6有什么区别?都是标准型云服务器,标准型S5是次新一代云服务器规格,标准型S6是最新一代的云服务器,S6实例的CPU处理器主频性能要高于S5实例,同CPU内存配置下的标准型S6实例要比S5实例性能更好…

KyLin离线安装OceanBase

去OceanBase下载若干文件 1 首先安装ob-deploy-2.3.1-2.el7.x86_64.rpm rpm -ivh ob-deploy-2.3.1-2.el7.x86_64.rpm# 运行此命令的时候他会报错 RPM should not be used directly install RPM packages, use Alien instead! 这个需要用Alien去转换为deb的包,不…

Linux中,查看Tomcat版本、如何查看Tomcat版本

方法 在tomcat的bin目录下,执行version.sh命令即可 结果

Pytorch完整的模型训练套路

Pytorch完整的模型训练套路 文章目录 Pytorch完整的模型训练套路以CIFAR10为例实践 数据集加载步骤 使用适当的库加载数据集,例如torchvision、TensorFlow的tf.data等。 将数据集分为训练集和测试集,并进行必要的预处理,如归一化、数据增强等…

桌面运维。

Windows运行命令: color 01/02切换字符颜色cls 清屏ipconfig 设备的ip信息ipconfig /all 设备ip的所有信息 破解系统密码: 进PE系统,使用里面的工具破解 vmware workstation安装 网卡 网卡:ncpa.cpl window远程控制 mstsc …

【JavaEE】Spring核心与设计思想(控制反转式程序演示、IoC、DI)

一、什么是Spring? 通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区,这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 …

人工智能对我们的生活影响有多大

随着科技的飞速发展,人工智能已经渗透到我们生活的方方面面,并且越来越受到人们的关注。从智能语音助手到自动驾驶汽车,从智能家居系统到医疗诊断,人工智能技术正在改变着我们的生活方式。那么,人工智能对我们的生活影…

【C++上层应用】5. 文件和流

文章目录 【 1. 打开文件 】1.1 open 函数1.2 open 多种模式的结合使用 【 2. 关闭文件 】【 3. 写入 & 读取文件 】【 4. 文件位置指针 】 和 iostream 库中的 cin 标准输入流和 cout 标准输出流类似,C中另一个库 fstream 也存在文件的读取流和标准写入流。fst…

erlang语言为什么天生支持高并发

Erlang 语言天生支持高并发的主要原因可以归结于它的设计哲学和一些核心特性。以下是 Erlang 支持高并发的几个关键方面: 轻量级进程:Erlang 使用轻量级的并发实体,通常称为“进程”,这些进程在Erlang虚拟机内部运行,而…

腾讯云轻量应用服务器三年租用价格表_免去续费困扰

腾讯云服务器续费贵所以一次性买3年或5年,腾讯云轻量应用服务器3年价格有优惠,CVM云服务器5年有特价,腾讯云3年轻量和5年云服务器CVM优惠活动入口,3年轻量应用服务器配置可选2核2G4M和2核4G5M带宽,5年CVM云服务器可以选…

如何给面试官解释什么是分布式和集群?

分布式(distributed) 是指在多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务。 集群(cluster) 是指在多台不同的服务器中部署相同应用或服务模块,构成一个集群&#…

【开源】基于JAVA的社区买菜系统

项目编号: S 011 ,文末获取源码。 \color{red}{项目编号:S011,文末获取源码。} 项目编号:S011,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1…

redis的高可用

在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99.9% redis的高可用含义更加宽泛,正常服务是指标之一、数据容量的扩展、数据的安全性。 在redis当中实现高可用技术:持久化、主从复制、哨兵模式、cluster集群 持久化是…

时尚女童千金小套装,爱了爱了

自带氛围感的小套装简直不要太好看 红色吸睛又喜庆,显白不挑人穿 谁穿都好看系列!! 厚实的苏两毛羊毛 保暖性能真的非常好 超柔软的手感和触感 显得很高级穿上也很舒适 一整个小公主style,时尚气质感拉满 里面的连衣裙单穿也很nice …
最新文章