1 背景

在基于深度学习卷积网络的图像处理领域,作为计算密集型的卷积算子一直都是工程优化的重点,而卷积计算一般转化为矩阵乘运算,所以优化矩阵乘运算自然成为深度学习框架最为关心的优化方向之一。鉴于此,Nvidia官方给出了一套硬件解决方案,即Tensor Core,可加速矩阵乘运算,实现混合精度计算,在保持准确性的同时提高吞吐量。

2 硬件单元

同CUDA Core一样,Tensor Core也是一种运算单元,专门处理矩阵乘运算。如下图为Turing TU102/TU104/TU106的SM内部结构图,分为4个processing blocks,每个processing block包含16个FP32 Cores、16个INT32 Cores、2个Tensor Cores、1个Warp Scheduler和1个Dispatch Unit。

3 架构

自Volta架构推出第一代Tensor Core以来,后续在每一代的架构升级中,Tensor Core都有比较大的改进,支持的数据类型也逐渐增多。

3.1 Volta Tensor Core

第一代Tensor Core支持FP16和FP32下的混合精度矩阵乘法,可提供每秒超过100万亿次(TFLOPS)的深度学习性能,是Pascal架构的5倍以上。与Pascal相比,用于训练的峰值teraFLOPS(TFLOPS)性能提升了高达12倍,用于推理的峰值TFLOPS性能提升了高达6倍,训练和推理性能提升了3倍。

3.2 Turing Tensor Core

第二代Tensor Core提供了一系列用于深度学习训练和推理的精度(从FP32到FP16再到INT8和INT4),每秒可提供高达500万亿次的张量运算。

3.3 Ampere Tensor Core

第三代Tensor Core采用全新精度标准Tensor Float 32(TF32)与64位浮点(FP64),以加速并简化人工智能应用,可将人工智能速度提升至最高20倍。

3.4 Hopper Tensor Core

第四代Tensor Core使用新的8位浮点精度(FP8),可为万亿参数模型训练提供比FP16高6倍的性能。FP8用于 Transformer引擎,能够应用FP8和FP16的混合精度模式,大幅加速Transformer训练,同时兼顾准确性。FP8还可大幅提升大型语言模型推理的速度,性能较Ampere提升高达30倍。

4 调用

除了使用CUDA生态库里的API调用Tensor Core,如cublas、cudnn等,Nvidia还提供了以下几种方式调用Tensor Core。

4.1 WMMA (Warp-level Matrix Multiply Accumulate) API

对于计算能力在7.0及以上的CUDA设备,可以使用CUDA C++ API调用Tensor Core,支持形如D = AB + C的混合精度的矩阵乘运算。
template<typename Use, int m, int n, int k, typename T, typename Layout=void> class fragment;

void load_matrix_sync(fragment<...> &a, const T* mptr, unsigned ldm);
void load_matrix_sync(fragment<...> &a, const T* mptr, unsigned ldm, layout_t layout);
void store_matrix_sync(T* mptr, const fragment<...> &a, unsigned ldm, layout_t layout);
void fill_fragment(fragment<...> &a, const T& v);
void mma_sync(fragment<...> &d, const fragment<...> &a, const fragment<...> &b, const fragment<...> &c, bool satf=false);
  • fragment:Tensor Core数据存储类,支持matrix_a、matrix_b和accumulator
  • load_matrix_sync:Tensor Core数据加载API,支持将矩阵数据从global memory或shared memory加载到fragment
  • store_matrix_sync:Tensor Core结果存储API,支持将计算结果从fragment存储到global memory或shared memory
  • fill_fragment:fragment填充API,支持常数值填充
  • mma_sync:Tensor Core矩阵乘计算API,支持D = AB + C或者C = AB + C

4.2 WMMA PTX (Parallel Thread Execution)

对于计算能力在7.0及以上的CUDA设备,也可以使用WMMA PTX指令调用Tensor Core,支持形如D = AB + C的混合精度的矩阵乘运算。
wmma.load.a.sync.aligned.layout.shape{.ss}.atype r, [p] {, stride};
wmma.load.b.sync.aligned.layout.shape{.ss}.btype r, [p] {, stride};
wmma.load.c.sync.aligned.layout.shape{.ss}.ctype r, [p] {, stride}; wmma.store.d.sync.aligned.layout.shape{.ss}.type [p], r {, stride}; wmma.mma.sync.aligned.alayout.blayout.shape.dtype.ctype d, a, b, c;
  • wmma.load:Tensor Core数据加载指令,支持将矩阵数据从global memory或shared memory加载到Tensor Core寄存器
  • wmma.store:Tensor Core结果存储指令,支持将计算结果从Tensor Core寄存器存储到global memory或shared memory
  • wmma.mma:Tensor Core矩阵乘计算指令,支持D = AB + C或者C = AB + C

4.3 MMA (Matrix Multiply Accumulate) PTX

对于计算能力在7.0及以上的CUDA设备,还可以使用MMA PTX指令调用Tensor Core,支持形如D = AB + C的混合精度的矩阵乘运算。
ldmatrix.sync.aligned.shape.num{.trans}{.ss}.type r, [p];

mma.sync.aligned.m8n8k4.alayout.blayout.dtype.f16.f16.ctype  d, a, b, c;
mma.sync.aligned.m16n8k8.row.col.dtype.f16.f16.ctype d, a, b, c;
mma.sync.aligned.m16n8k16.row.col.dtype.f16.f16.ctype d, a, b, c;
  • ldmatrix:Tensor Core数据加载指令,支持将矩阵数据从shared memory加载到Tensor Core寄存器
  • mma:Tensor Core矩阵乘计算指令,支持D = AB + C或者C = AB + C

4.4 SASS

根据SASS指令集学习。
 

Nvidia Tensor Core初探的更多相关文章

  1. NVIDIA Tensor Cores解析

    NVIDIA Tensor Cores解析 高性能计算机和人工智能前所未有的加速 Tensor Cores支持混合精度计算,动态调整计算以加快吞吐量,同时保持精度.最新一代将这些加速功能扩展到各种工作 ...

  2. NVIDIA深度学习Tensor Core性能解析(下)

    NVIDIA深度学习Tensor Core性能解析(下) DeepBench推理测试之RNN和Sparse GEMM DeepBench的最后一项推理测试是RNN和Sparse GEMM,虽然测试中可 ...

  3. NVIDIA深度学习Tensor Core性能解析(上)

    NVIDIA深度学习Tensor Core性能解析(上) 本篇将通过多项测试来考验Volta架构,利用各种深度学习框架来了解Tensor Core的性能. 很多时候,深度学习这样的新领域会让人难以理解 ...

  4. Tensor Core技术解析(下)

    Tensor Core技术解析(下) 让FP16适用于深度学习 Volta的深度学习能力是建立在利用半精度浮点(IEEE-754 FP16)而非单精度浮点(FP32)进行深度学习训练的基础之上. 该能 ...

  5. Tensor Core技术解析(上)

    Tensor Core技术解析(上) NVIDIA在SIGGRAPH 2018上正式发布了新一代GPU架构--Turing(图灵),黄仁勋称Turing架构是自2006年CUDA GPU发明以来最大的 ...

  6. 用NVIDIA Tensor Cores和TensorFlow 2加速医学图像分割

    用NVIDIA Tensor Cores和TensorFlow 2加速医学图像分割 Accelerating Medical Image Segmentation with NVIDIA Tensor ...

  7. Asp.net Core 初探(发布和部署Linux)

    前言 俗话说三天不学习,赶不上刘少奇.Asp.net Core更新这么长时间一直观望,周末帝都小雨,宅在家看了下Core Web App,顺便搭建了个HelloWorld环境来尝尝鲜,第一次看到.Ne ...

  8. jenkins部署net core初探

    一步一步,小心翼翼吖.看了好几个博客,摸索了两天了,才搭建成功,不容易,先写篇文章记下来,hhhhhhhhhhhh 相关环境配置 服务器:centos7 源代码管理器:git 技术选型:net cor ...

  9. ASPNET CORE初探

    ASP.NET Core 开发-中间件(Middleware)   ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件 ...

  10. linux环境上运行.net core 初探

    1.安装 .net core 环境 rpm --import https://packages.microsoft.com/keys/microsoft.ascsh -c 'echo -e " ...

随机推荐

  1. CSS 选择器-认识并应用选择器

    在内嵌式和外部css中,要想将CSS样式应用于特定的HTML元素,首先需要找到该目标元素,这时需要用到CSS中的选择器. 选择器:选择要添加样式的 HTML 标签的一种方法.模式. 首先学习 css2 ...

  2. hdu:Shape of HDU(判断多边形凹凸)

    Problem Description话说上回讲到海东集团推选老总的事情,最终的结果是XHD以微弱优势当选,从此以后,"徐队"的称呼逐渐被"徐总"所取代,海东集 ...

  3. NodeJS - XSS-Attribute

    参考:https://owasp-skf.gitbook.io/asvs-write-ups/cross-site-scripting-attribute-xss-attribute/kbid-3-x ...

  4. 9、http cache管理器

    jmeter决定是否缓存的功能  2.操作步骤:

  5. pip install keras==2.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

    pip install keras==2.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

  6. 一道测试Java值传递的题目

    请给出下列代码的执行结果: public class T3 { public static void main(String[] args) { T3 t3 = new T3(); t3.first( ...

  7. Windhill获取团队角色、用户

    //获取容器团队里的用户和角色,也可以获取容器团队里某一角色的用户 WTContainer pContainer = project.getContainer(); if (pContainer in ...

  8. Python第七章实验报告

    一.实验名称:<零基础学Python>第7章 面向对象程序设计 二.实验环境:IDLE Shell 3.9.7 三.实验内容:5道实例.4道实战 四.实验过程: 实例01 创建大雁类并定义 ...

  9. tcpdump在wlan抓包时的可用过滤器

    抓包前使用iw命令创建一个监听模式(monitor)的接口 iw phy phy0 interface add mon0 type monitor tcpdum抓包命令: tcpdump -nei m ...

  10. 函数XLOOKUP

    这个公式非OFFICE 365用户需要选中执行范围后 按Ctrl+Shift+Enter三键 (因为不支持公式溢出) XLOOKUP函数的基本结构是: =XLOOKUP(lookup_value,lo ...