Tensor core原理

news2024/11/16 22:21:37

什么是Tensorcore

Tensor core是nvidia底层执行运算的硬件单元,不同于nvidia以往的cuda core(全浮点型),Tensor core是近几年推出来的、混合精度的、将累加和累乘放在一起的计算硬件;

什么是混合精度

混合精度指的是在输入、输出的时候使用FP16,计算的时候使用FP32;
在这里插入图片描述

什么是GPU当中的kernel

在GPU编程中,"kernel"一词有特定的含义,与计算机操作系统中的内核不同。

在GPU编程中,"kernel"是指在并行计算中由多个线程同时执行的函数。它是在GPU上执行的并行计算任务的入口点。每个线程都独立地执行相同的代码,但可能使用不同的数据或索引来处理不同的任务或数据元素。
然而操作系统中kernel指的是操作系统与硬件之间的桥梁,用于管理操作系统对硬件和软件的访问和控制;

什么是SP/SM

GPU就是由显存+计算单元构成;
在这里插入图片描述

sp

streaming processor,最基本的处理单元,也就是cuda core
在这里插入图片描述
sm
streaming multiprocessors,由sp组成,每个SM包含的sp个数依据不同的GPU架构有所不同,从32~128不等,以上整个大图就是一个SM的示意图;

什么是warp

thread、block、grid、warp都是软件层面上的概念;
thread:一个CUDA的并行程序会被以许多个threads来执行。
block:数个threads会被群组成一个block,同一个block中的threads可以同步,也可以通过shared memory通信。
grid:多个blocks则会再构成grid。
warp:GPU执行程序时的最小调度单位,用于线程管理,目前一个warp可以管理32个线程,同在一个warp的线程,以不同数据资源执行相同的指令,这就是所谓 SIMT(单指令多线程)。
下图反应了block和grid之间的关系:
在这里插入图片描述

那么block和grid之间有什么区别呢?
Block(块):
Block是最基本的并行执行单元,它是一组线程的集合。这些线程可以协同工作来执行相同的操作。
在编写GPU kernel时,可以将问题划分为多个块,每个块独立地执行特定的计算任务。
每个块中的线程可以通过共享内存进行通信和协作。
块内的线程可以使用索引来访问自己的数据。
Grid(网格):
Grid是由多个块组成的集合,它表示了整个GPU上的并行计算任务。
Grid中的块可以相互独立地执行,彼此之间没有直接的通信和协作。
块之间可以通过全局内存进行数据交换。
网格中的块可以具有不同的块大小(线程数),因此可以根据任务的要求进行动态配置。
总结来说,Block(块)是GPU上最小的并行执行单位,它由一组线程组成,可以协同工作来执行特定的计算任务。Grid(网格)是由多个块组成的集合,表示了整个GPU上的并行计算任务。块内的线程可以通过共享内存进行通信和协作,而块之间可以通过全局内存进行数据交换。使用块和网格的组织方式可以实现高效的并行计算和数据共享。

关于SM和wrap,二者并没有直接的对应关系,解释如下:
在NVIDIA的GPU架构中,“SM”(Streaming Multiprocessor)和 “warp” 是两个相关但不完全相同的概念。

SM(Streaming Multiprocessor):

SM是GPU架构中的基本并行处理单元,也被称为流多处理器或多处理器。
一个GPU芯片通常包含多个SM,每个SM可以同时执行多个线程。
SM包含一组CUDA核心(也称为CUDA核),如CUDA Core或流处理器,用于执行指令和计算任务。
Warp(线程束):

Warp是SM中执行的最小调度单元,它是一组连续的线程。
在NVIDIA的GPU架构中,一般将32个线程组成一个warp。
当一个SM执行一条指令时,它会将指令分派给一个warp中的所有线程同时执行。
这意味着一个SM在同一时钟周期内会同时执行warp中的32个线程。
因此,可以说每个SM中的warp是并行执行的最小单元。SM将指令分派给warp,并且这些线程会同时执行,利用SIMD(Single Instruction, Multiple Data)并行性。这种并行性是通过在一个warp内执行相同的指令,但使用不同的数据来实现的。

需要注意的是,不同GPU架构可能具有不同的warp大小和SM配置。例如,现代的NVIDIA GPU架构如Turing和Ampere中的warp大小为32,而早期的架构如Kepler和Maxwell中的warp大小为64。因此,具体的warp大小和SM配置取决于GPU架构和型号。

下图反映了软硬件方面的对应关系:
在这里插入图片描述

GEMM

GEMM指的是对于矩阵相乘的优化;针对不同的硬件架构和计算需求,有多种优化的GEMM实现,如基于CPU的优化、基于GPU的优化(使用CUDA、OpenCL等编程模型),以及专用的张量处理单元(TPU、NPU)等。这些优化方法通常利用并行计算、向量化指令和数据局部性等技术,以提高矩阵乘法的计算性能。
在这里插入图片描述

cuda core和Tensor core之间的区别

cuda core的话把乘和加分开执行,把数据放到寄存器,执行乘操作,得到的结果再放到寄存器,执行加操作,再将得到的结果放到寄存器;(ALU指的就是计算单元)

在这里插入图片描述
Tensor core处理的是4*4的矩阵
在这里插入图片描述
在这里插入图片描述
下图反应了反向传播的过程中梯度的计算用的是Fp16,但是对于参数的更新计算用的是Fp32~
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
直接对于Tensorcore进行操作的话,颗粒度太小,所以把多个Tensorcore聚集起来放到一个wrap level的层面进行调度;

以下是一个执行cuda运算的基础例子:
在这里插入图片描述
具体当输入图片是224224,卷积核的大小是77的时候,如何转换成底层的运算呢?
如下图,会将大的矩阵运算划分成一个个fragment,现在软件层面可以把它们划分到一个个thread block里面去,然后再warp调度,放在一个个Tensorcore去执行;
在这里插入图片描述
如下图所示,计算得到D某个元素的过程就是Tensorcore FMA指令的执行结果;

在这里插入图片描述
以下例子说明了GEMM矩阵相乘的具体执行过程,其会将大的矩阵块划分成一个个的fragment,每一个fragment的矩阵相乘对应一个thread
block,每一个thread block又可以划分成多个wrap,每一个wrap下面可以执行多个thread,每一个thread里面循环执行Tensor core的操作;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

电脑出现0xC1900101错误怎么办?

在更新或安装Windows操作系统时,有时系统会提示出现了0xC1900101错误。这个错误的出现通常是源于与驱动程序相关的错误所致。那么当电脑出现0xC1900101错误时该怎么办呢? 为什么会出现错误代码0xC1900101? 通常情况下,有以下几个…

Java重点:反射机制的使用

目录 一、概念 二、类类 1、类类的获取方式 1)类名.Class 2)对象.getClass() 3)Class.forName() 三、反射实例化 1、调用一个公有的无参构造方法 2、调用一个公有的一个参构造方法 3、调用一个公有的两个参构造方法 4、调用一个私有…

gitee(码云)如何生成并添加公钥

一,简介 在使用Gitee的时候,公钥是必须的,无论是克隆还是上传。本文主要介绍如何本地生成和添加公钥到服务器。供参考。 二,步骤介绍 2.1 本地生成公钥 打开git bash 输入以下代码回车三次: # 替换为你自己的邮箱…

opencv特征检测 HOG特征算法

1 HOG特征简介 Hog 算法的工作原理是创建图像中梯度方向分布的柱状图,然后以一种非常特殊的方式对其进行归一化。这种特殊的归一化使得Hog 能够有效地检测物体的边缘,即使在对比度很低的情况下也是如此。这些标准化的柱状图被放在一个特征向量&#xff…

51单片机的数字时钟系统【含仿真+程序+报告】

51单片机的数字时钟系统【含仿真程序报告】 1、 系统组成2、功能概述3、仿真4、程序代码5、报告6、资源链接 1、 系统组成 该系统由AT89C51单片机DS1302时钟模块按键模块DS18B20LCD显示模块构成。 2、功能概述 可显示实时的日期 包括 年-月-日 时分秒 星期 农历时间DS18B20室…

将图像2D转换为3D--LeiaPix Converter

LeiaPix Converter是一款免费的在线图像处理工具,可帮助用户将2D图像实时转换为精美的3D光场图像。 它使用由Leia开发的专有算法,为照片、插画和艺术作品等2D图像添加深度和立体感,目前是完全免费的。 LeiaPix Converter 的特点 多格式转换…

安全多方计算、联邦学习和可信执行环境

目录 隐私计算的三大技术流派:联邦学习、安全多方计算、可信计算 隐私计算的三大技术流派:联邦学习、安全多方计算、可信计算 1.多方安全计算,由姚期智院士于1982年首次提出,通过设计特殊的加密算法和协议,在无可信第…

Java 已知文件路径参数,用两种方法获取文件名

一、先获取带扩展名的fileName String filePath "D:\\manage\\uploadFile\\2023-06-28283\\初测.xlsx"; File file new File(filePath); // 或者 Path path Paths.get(filePath);String fileName1 file.getName(); System.out.println(fileName1);Path fileName…

Jmeter线程组配置

目录 前言: 一、线程组配置字段说明 二、线程组配置示例 前言: JMeter是一款开源的压力测试工具,被广泛应用于测试Web应用程序的性能和负载能力。其中线程组是JMeter中最基本、最重要的功能之一。线程组用于模拟多个并发用户对目标应用程…

Bryntum Scheduler Pro 5.3.5 Crack-专业调度组件

BRYNTUM Scheduler Pro调度程序专业版 专业的日程安排小部件 一个专业有大脑的调度UI组件。Scheduler Pro 可帮助您安排任务,同时考虑资源和任务的可用性。 连接您的任务 让 Scheduler Pro 处理剩下的事情。它将根据您定义的链接安排您的任务并遵守任何任务限制。这…

echarts——折线图点击线触发函数getZr()——技能提升

今天看到技术群里在讨论echarts中的折线图,有人遇到一个功能就是点击折线要触发点击事件,但是官网上的click点击事件只针对折线的拐点。 但是有人提出是可以通过getZr()方法来实现 网上也确实有大神提出一样的解决方法,链接如下&#xff1…

属鸡的脾气性格怎么样?

有的人认为属鸡的人脾气暴躁,而有的认为属鸡的人性格温和, 其实属鸡的人都有两面性,对好人善良温情,对坏人则腹黑邪恶,是不是很惊讶?古人认为鸡有预报能力,此种预言能力在鸡年生的人身上也会出现…

Stable Diffusion 使用outpainting扩展图像

通常SD可以应用绘制的图像是固定分辨率的,但是如果想要超出这个分辨率的话那就要使用一些方法,并且如果还想保持这些图片的连贯性,例如背景就要使用到outpainting。 文章目录 操作流程准备图像 操作流程 准备图像 首先将需要扩展边缘的图像…

能查看历史记录的好用的笔记app是哪款?

当我回顾自己经常做笔记的习惯时,我发现一个问题困扰着我:如何方便地查看和管理历史记录?因为对于我这样一个频繁记录学习和工作笔记的人来说,回顾过去的记录是一种宝贵的学习和反思机会。能查看历史记录的好用的笔记app是哪款&am…

Junit基本使用

文章目录 0. 了解Junit51. 注解2. 断言3. 用例执行顺序4. 测试套件(Suite)5.参数化 0. 了解Junit5 Java版本最低要求为8。Junit是一个开源的java语言的单元测试框架。java方向使用最广泛的单元测试框架。使用java开发者都应当学习Junit并且掌握单元测试…

CDH 之 Sentry 安装失败 Unable to find the MySQL JDBC driver

安装报错如下: 详细日志: Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driverat com.cloudera.cmf.service.hive.HiveMetastoreDbUtil.countTables(HiveMetastoreDbUtil.java…

stm32GPIO点亮led的小发现

偶然发现点亮led的小困惑,现在解决了。我们知道stm32中,GPIO端口的内部一般是接高电平(3.3v),其外部就是我们肉眼所看到的PA1等标号。 1、写法一 led的正极接3.3v,这样当A1引脚输出低电平0(即GPIO_ResetBi…

vs中编译时出现error LNK1104: 无法打开文件*.exe

因为此时有一个VS工程在运行了,将其关闭就可以了。 参考:vs中编译时出现error LNK1104: 无法打开文件*.exe

云原生|kubernetes|centos7下的kubeadm部署的集群内在线部署kubesphere(外部etcd)

前言: 本文将主要就在centos7操作系统下已有的一个利用kubeadm部署的集群内在线安装kubesphere做一个介绍,该kubernetes集群是使用的etcd外部集群。 kubernetes集群的搭建本文不做过多介绍,具体的搭建流程见我的博客: 云原生|k…

卷积层|Convolution|知识补充

CNN中增加了Convolution层和Pooling层; CNN中层的连接顺序是“Convolution-ReLu-Pooling”。 全连接层存在的问题: 数据的形状被“忽视”了,比如,输入的数据是一个三维的图像信息,但是在向全连接层输入时,…