GPU学习(1)

server/2025/1/11 11:00:42/

在这里插入图片描述

GPU_1">一、为什么要GPU

我们先看一个基本的神经网络计算 Y=F(x)=Ax+B
这就是一次乘法一次加法 ,也叫FMA,(fused multiply-add)
如果矩阵乘,就是上面的那个式子扩展一下,所以又用了这张老图

在这里插入图片描述

比如你要多执行好几个y=Ax+B,可能比较简单的方法就是这个
在这里插入图片描述
上面能用,但是一个线程效率低
在一个处理器周期里面是可以处理多个指令的,这个时候引入了线程的概念来做这个事,也就是所谓的并发。
在这里插入图片描述

并发能大大提升处理器处理任务的效率,在一个时间段执行多个任务,但是请注意,这并不意味着这些任务是同时执行的,虽然都在这个时间段执行,比如一个时钟周期,但是任务都会被随时中断,供其他任务运行。

能不能自己弄自己的不要有别人打扰,在同一时刻

在这里插入图片描述

那就得上并行了,上了并行开启了多进程,然后进程分布在不同的硬件core上,大家互不打扰,执行效率就高。总之,在同一时刻,大家互不打扰的一个方式就是多core,自己玩自己的。

比如CPU来讲它多少core呢?我看过前几天发布会有至强6的E系列最高288core的,那GPU呢,上一代H100是1万8。
刚才我们聊了,要把矩阵运算要是分解为多个这种FMA(Y=AX+B),最高效率肯定是多进程来实现并行。
就因为这个原因,CPU从根上就不太可能和GPU相比

当然CPU也不是不能做矩阵乘,就是效率低,虽然现在也有多向量化支持的指令集,甚至出现了AMX这种的指令集,但是硬件上的限制还是决定了它的上限,这也是硬件架构决定的,比如下面的这张老图。

在这里插入图片描述
不同于CPU要处理好多复杂逻辑和上下文,GPU就属于天生不能干细活,但是擅长并行计算的那一趴了(人家CPU本来就不是发明出来要干这个事的)。

GPU_33">二、GPU的架构

这东西其实一开始也不是用于AI的,它只要就是用来给游戏算多边形的,后来吴恩达发现用GPU的多核能力运行AI的训练推理效果非常好,再加上CUDA推出,GPU编程简单了一大半,GPU才慢慢从AI学界逐渐走向产业界。

在这里插入图片描述
他们之间的层级关系为:GPC > TPC > SM > CORE,当然还有什么sram寄存器啥的也不在这里每个都点了,我们玩AI的话呢,从大面上讲主要就是玩SM,SM最早是在G80的时候被定义出来的,目前也是被沿用。
在这里插入图片描述

一个SM里面包含了很多的东西

在这里插入图片描述
刚我们讲了并发和并行的区别,肯定并行处理单位时间处理能力更高,但是在一个processor(或者更高一级的概念)内部,我们肯定还是会调用thread来实现并发,而GPU/CUDA玩的核心理念也叫SIMT,就是单指令多线程。

不同于有的core级别设计的线程管理,NV的GPU是SM级别的SIMT,这些线程的调度是要靠Warp Scheduler来实现的。

简单说就是:
因为表面上看起来是N(N个硬件SKU有关)个Threads来实现并行,但是同一时刻因为硬件的限制,也不可能。所以就要求一个 Warp 调度N个Threads来实现并行之间的调度,这N个 Threads 以锁步的方式执行同一条指令,其中任何一个单独的 Thread会使用自己的 Data 执行指令分支,就通过这个方法,让GPU同一时刻能实现超大的数据和指令处理能力。
当然这些都是硬件层面的,软件层面要和CUDA配合。
先写到这,下节来讲CUDA的软件层面怎么和硬件层面配合。


http://www.ppmy.cn/server/46836.html

相关文章

【前端开发--css学习笔记】CSS超详细的学习笔记。前端开发css学习笔记(非常详细,适合小白入门)

二&#xff0c;CSS学习笔记 1&#xff0c;CSS语法 1-1 CSS 实例 CSS声明总是以分号 ; 结束&#xff0c;声明总以大括号 {} 括起来: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title…

MySQL 连接池在 Python 中的深度探索与实践

MySQL 连接池在 Python 中的深度探索与实践 在 Python 中&#xff0c;高效地管理数据库连接是一个关键任务&#xff0c;尤其是在处理大量并发请求时。MySQL 连接池作为优化数据库连接管理的工具&#xff0c;显得尤为重要。本文将从四个方面、五个方面、六个方面和七个方面&…

MybatisPlus @TableField之SqlCondition源码解析

应用对象&#xff1a;模型&#xff0c;作用&#xff1a;调用IService接口&#xff0c;使用查询包装器实现灵活的条件查询。 TableField(conditionSqlCondition.LIKE) 注解使用逻辑 com.baomidou.mybatisplus.extension.service.IService.page(分页对象&#xff0c;查询包装器…

VScode中对git的学习笔记

1.git是什么&#xff1f; Git是一个功能强大的分布式版本控制系统&#xff0c;由Linux内核的创始人Linus Torvalds在2005年创建。它以其速度、数据完整性和支持大型项目的能力而闻名&#xff0c;被广泛应用于软件开发中。Git允许开发者在本地机器上拥有完整的代码库副本&#x…

自动评论自动私信引流系统,自动化时代的挑战与机遇

随着科技的飞速发展&#xff0c;自动化技术已经渗透到我们生活的方方面面。从工业生产线上的机械臂到家庭中的智能助手&#xff0c;自动化不仅改变了我们的工作方式&#xff0c;也在重塑着社会的面貌。然而&#xff0c;在享受自动化带来的便利和效率的同时&#xff0c;我们也必…

桃金娘T2T基因组-文献精读17

Gap-free genome assembly and comparative analysis reveal the evolution and anthocyanin accumulation mechanism of Rhodomyrtus tomentosa 无缺口基因组组装及比较分析揭示了桃金娘的进化和花青素积累机制 摘要 桃金娘&#xff08;Rhodomyrtus tomentosa&#xff09;是…

Java 异常

一、异常的继承体系图 如图 二、Throwable类常用的方法 1.获取异常的信息 public String getMessage() {return detailMessage; } 2.获取异常的原因 // 获取异常的原因 public String getLocalizedMessage() {return getMessage(); } 3.打印异常信息 // 打印异常信息 publi…

微信小程序的服务调取

微信小程序的服务调取概述 微信小程序允许开发者通过网络请求与服务器进行交互&#xff0c;从而实现数据的上传和下载。这是通过小程序提供的API&#xff0c;如wx.request、wx.downloadFile、wx.uploadFile等来完成的。这些API使得小程序可以从远程服务器获取数据&#xff0c;…