【GPU原理】1.线程和缓存的关系

一、GPU如何做并行计算

1.简单的串行计算

对于如上的运算AX+Y,每次运算我们需要从内存读取两个数据,一个是x[i],一个是y[i],最后存回y[i]。这里面有一个FMA的操作(融合乘加(FMA)指令是RISC处理器中的常见指令),把乘法和加法融合在一起。之后进行N次的迭代。这就是在CPU的一段串行,按顺序执行的程序。

以Intel Exon 8280芯片为例,内存带宽是113GB/s,内存延时是89ns ,那么每次,也就是89ns里面,我们有11659个byte去执行,当然这只是峰值的算力。

 实际上在89ns的延迟时间内,我们只移动了16个byte,此时内存利用率≈0.14%。

我们99%以上的时间都花在了内存搬运上。

2.利用并发

 咱们把刚才的程序展开,每次执行0~7数据,迭代8次。这样就利用了并发,使得总线处于忙碌状态。这样我们每次就可以执行11659/(8+8)=729次请求。

但仍然存在问题。

  • 编译器很少对循环展开100次以上
  • 一个线程每次执行的指令数量是有限的,不可能会执行非常非常多的并发数量
  • 一个线程很难去直接处理700多个计算的负荷。

3.并行循环展开

通过并行处理器/多个线程去执行AX+Y,同样可以是总线处于忙碌状态当中。每次进行729次迭代,但不一样的是,我们每个线程独立去负责相关的运算,每个线程都去计算一次AX+Y。我们要进行729次计算,那么我们就需要进行729个线程,这时候我们的瓶颈变为了线程数量和内存请求。 

二、并发与并行

并行指我们能同时处理多个相同的任务。

并发指我们能处理多个任务的功能,但不一定是同时。

利用多线程去对循环进行展开提高整体硬件利用率,这就是GPU的主要原理。

以上面三款芯片参数为例,我们看看我们需要多少线程才能解决内存时延的问题。可以看到GPU的时延比CPU高很多 ,而线程数是GPU比CPU高很多很多,这就是GPU的特点,它拥有大量的线程专门为大量大规模并行任务设计。

因此GPU相当于一个大型吞吐机,有的线程等待着数据,有的线程等待被激活运算,有的线程处于计算当中。指令执行的延迟和数据搬运的延迟通常不是GPU设计考虑的首要任务,主要目的是增加线程。

而CPU相当于一个延迟机,它希望一个线程里面完成所有的工作,所以要想办法在减少延时上。首要任务是优化线程的执行速率和效率。

三、GPU缓存机制

Cache大家应该都很熟悉,在CPU里,它起到了提高查询速率的作用。缓存对GPU同样的重要。

GPU有着一块独立的高带宽内存,也就是我们通常所说的显存。

可以看到GPU缓存的内存时延是逐级递增的,而如果要用CPU去搬运数据,时延则更长。

显存的作用就是防止内存向显卡传输数据的速度跟不上计算的速度。

可以距离SM越近的缓存,运算操作越少,运算强度越低。反观PCIe,带宽很低,时延很高,计算强度也很高,算力利用率也会很低

带宽增加的同时,我们的线程数也需要增加,这样才能处理并行操作。每个线程都执行一个对应的数据才能把算力利用率提升上去。只有线程数足够多才能让整个系统的内存处于忙碌状态,让我们的计算也处于忙碌的状态。 

四、GPU线程机制

上图所示左,为GPU的一个简单的基本架构,其中包含非常多的SM,SM(Streaming Multiprocessor 多流处理器),可以被认为是GPU内部一个基本的运算单元。

在GPU一个时钟周期内,我们可以执行多个warp,在这里一个SM里面有64个warp,每次warp可以进行一次并发的执行,GPU主要就是通过增加线程增加warp来掩盖延时问题,而不是减少延时时间。

可以看到A100芯片有22W个线程,线程可以在不同的warp上进行调度。大部分时候,应用程序是用不完这么多线程的,并且并不是所有线程都在进行运算,有些在搬运数据,有些在等待下次计算,所以GPU的算力利用率并不是很高,但因为超配额的线程,我们并不会觉得慢。

参考:

深入GPU原理:线程和缓存关系【AI芯片】GPU原理01_哔哩哔哩_bilibili

Efficient dual-precision floating-point fused-multiply-add architecture - ScienceDirect

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

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

相关文章

五月份0day/1day/nday漏洞汇总

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

Windows通过cmd运行快速启动应用

Windows如何通过cmd运行快速启动应用? 在Windows操作系统中,可以通过配置环境变量的方式将文件的路径配置到环境变量的path中,配置完成后可以在cmd中输入对应的应用名称即可启动应用,具体操作如下: 1. 添加应用程序路径…

C语言数据结构排序、插入排序、希尔排序等的介绍

文章目录 前言打印数组函数一、插入排序二、希尔排序总结 前言 C语言数据结构排序、插入排序、希尔排序等的介绍 打印数组函数 打印数组函数定义 // 打印数组 void PrintArray(int* a, int n) {int i 0;for (i 0; i < n; i){printf("%d ", a[i]);}printf(&qu…

掘金AI 商战宝典-高阶班:如何用AI制作视频(11节视频课)

课程目录&#xff1a; 1-第一讲用AI自动做视频&#xff08;上&#xff09;_1.mp4 2-第二讲用AI自动做视频&#xff08;中&#xff09;_1.mp4 3-第四讲A1做视频实战&#xff1a;店铺宣传_1.mp4 4-第五讲Al做视频实战&#xff1a;商品带贷1.mp4 5-第六讲Al做视频实战&#x…

卷积神经网络——为什么卷积哪儿都能用?

两个函数的卷积 本质上就是先将一个函数翻转&#xff0c;然后进行滑动叠加。 在连续情况下&#xff0c;叠加指的是对两个函数的乘积求积分。 在离散情况下就是加权求和。 它在不同的领域有着不同的解释 在热力系统中&#xff0c;卷积通常用来计算持续添加的燃料&#xff0c…

台灯怎么选对眼睛好?六个步骤告诉你台灯怎么选!

在这个信息爆炸的时代&#xff0c;孩子们的学习压力越来越大&#xff0c;视力问题也日益凸显。尽管没有详细的地域数据&#xff0c;但整体而言&#xff0c;中国青少年的近视率已经高居世界第一位&#xff0c;且不同地区的近视率可能存在一定的差异。为了让孩子在学习的道路上走…

处理3D数据的强大工具 CloudCompare (多平台兼容)

CloudCompare 是一个开源的3D点云&#xff08;Point Cloud&#xff09;和网格&#xff08;Mesh&#xff09;处理软件&#xff0c;广泛应用于地理信息系统&#xff08;GIS&#xff09;、计算机图形学、测绘、考古、建筑和工程等领域。自2004年由Daniel Girardeau-Montaut开发以来…

Buffer Pool运行机制理解

Buffer Pool机制理解 一、为什么使用Buffer Pool&#xff1f; 众所周知&#xff0c;磁盘数据是以数据页的形式来去读取的&#xff0c;一个数据页默认大小 16K&#xff0c;也就是说你本意只想读取一行数据&#xff0c;但是它会给你加载一页的数据到buffer pool里面。这样的话就…

智能报警器——物联网应用创新

一、项目的目的、意义 我国自2020年至11月起共接报火灾23.3万起&#xff0c;亡1335人&#xff0c;伤837人&#xff0c;直接财产损失36.12亿元&#xff0c;其中&#xff0c;因电线短路、过负荷及电气设备故障等电气原因引起的火灾共40481起&#xff0c;占火灾总数的30.7%&#…

小红书图片视频下载利器,无水印!

在刷小红书时&#xff0c;总能看到一些博主发的好看的壁纸或者视频&#xff0c;想下载下来做头像或者设置为手机电脑的桌面。不过众所周知&#xff0c;直接保存的图片和视频都是有水印的&#xff0c;那如何去掉水印呢&#xff1f; 有些朋友肯定说&#xff0c;我知道有去水印的…

长城电脑压缩文件丢失了怎么办?怎么解决

在数字化时代&#xff0c;电脑已成为我们日常生活和工作中不可或缺的设备。长城电脑作为国内知名品牌&#xff0c;以其稳定可靠的性能赢得了广大用户的信赖。然而&#xff0c;即便是可靠的电脑&#xff0c;也难免会遇到一些问题。其中&#xff0c;压缩文件丢失无疑是一个令人头…

Leetcode - 周赛399

目录 一&#xff0c;3162. 优质数对的总数 I 二&#xff0c;3163. 压缩字符串 III 三&#xff0c;3164. 优质数对的总数 II 四&#xff0c; 3165. 不包含相邻元素的子序列的最大和 一&#xff0c;3162. 优质数对的总数 I 假设 x 是 nums1 数组中的值&#xff0c;y 是 nums2…

大模型微调常见方法

0&#xff0c; prefix tuning prefix-tuning 跟 soft prompt tuning 类似&#xff0c;只不过&#xff0c;soft prompt tuning 仅仅针对 transformer模型的输入进行&#xff0c;而prefixt-tuning 是针对 每一个 transformer block进行 soft prompt tuning 跟 hard prompt tunin…

c++ string模拟实现

模拟实现string类&#xff0c;里面包含四个成员变量&#xff0c;第一个是指向字符数组的指针&#xff0c;第二个变量是目前存放了多少个字符&#xff0c;第三个变量为这个字符数组的容量的大小。最后一个为静态成员变量npos。 注意&#xff1a;一个const 修饰的整型&#xff0…

项目更换服务器时间少8小时

时区错误 输入 date 查看当前的linux系统时间 hwclock --show 查看当前linux硬件时间 如果发现系统时间和硬件时间不同步&#xff0c;而且硬件时间是正确的&#xff0c;可以用以下命令&#xff1a;hwclock --hctosys 把硬件时间同步到系统时间 mysql时区错误可以参考这位大…

云服务器重启后无法访问phpMyAdmin的解决方案

一、背景 我在解决另一问题的时候&#xff0c;重启了云服务器。当我想再次访问phpMyAdmin时&#xff0c;出现了如下报错。 HTTPConnectionPool(host127.0.0.1, port888): Max retries exceeded with url: /phpmyadmin_609a02b02423214c/index.php?langzh_cn (Caused by Ne…

嵌入式知识学习分享~~

欢迎关注小徐的个人微信公众号&#xff0c;感觉微信的文章排版不错&#xff0c;后续会继续分享一些新的学习记录以及和大家共同进步~

基于广义极大极小凹惩罚的心电信号降噪方法(MATLAB R2021B)

凸优化是数学最优化的一个子领域&#xff0c;研究定义于凸集中的凸函数最小化问题。由于心电信号降噪的过程可以理解为求信号的稀疏近似解&#xff0c;因此基于凸优化和稀疏性表达的去噪方法可用于心电信号处理。在凸优化的数学模型中&#xff0c;惩罚项的选取对最终结果会产生…

如何在测试/线上环境页面访问本地接口?

文章目录 一、前言二、分析三、搭建1、搭建nginx&#xff0c;监听http请求转发2、监听https请求转发 四、总结 一、前言 在工作中&#xff0c;开发完的接口&#xff0c;一般测试的话&#xff0c;基本是使用Postman&#xff0c;如果要到页面测试&#xff0c;就要发版进行测试&a…

年中汇报季?——一文教会你如何进行数据分析

一、常见的数据分析报告类型 数据分析报告通常可以分为三类&#xff1a;日常分析报告、专题型分析报告和综合性分析报告。前两者是以数据结论建议的格式去撰写&#xff0c;综合性分析报告则是&#xff1a;行业环境调研&#xff08;竞品类产品数据分析&#xff09;自身产品数据…