Programming Tensor Cores: NATIVE VOLTA TENSOR CORES WITH CUTLASS

PROGRAMMING TENSOR CORES: NATIVE VOLTA TENSOR CORES WITH CUTLASS 源自于 GTC Silicon Valley-2019: cuTENSOR: High-performance Tensor Operations in CUDA,介绍了 CUTLASS 1.3 中基于 Volta Tensor Core 实现高效矩阵乘法计算的策略。主要内容为以下三点:

  • CUDA 10.1中mma.sync指令介绍;
  • Global Memory–>Shared Memory–>RF 的128 bit 访问实现;
  • Shared Memory 上的无冲突转置。

双缓冲内容缺失。

mma

无论是 slides 中的介绍还是源码实现均是采用自底向上的思路,根据硬件规格确定每个层次上的分块策略。Volta Tensor Core 计算能力是4x4x4,HMMA.884.F16.F16需要两个 Tensor Core 计算两遍。

在这里插入图片描述
CUTLASS 中封装的 mma 指令计算 m16n16k4的矩阵乘法。

在这里插入图片描述
参考 Modeling Deep Learning Accelerator Enabled GPUs 中的介绍。Warp 内四个连续线程划分为一个 threadgroup,两个 threadgroup 组成一个 octet。每个 octet 串行计算一个 Quad Pair。计算不同 QP 时是具备数据复用的,如下图所示:

在这里插入图片描述
下图展示了 QP0中线程与数据的对应关系。

在这里插入图片描述

Permuted Shared Memory Tiles

对于全局内存上的列优先矩阵 A,每个线程加载8个元素则可以加载 m64k4的分块。然而根据前面介绍的线程和数据的映射关系,直接保存到 Shared Memory 的话,线程取用时会出现 bank 冲突。CUTLASS 中采用了一种无冲突共享内存排列来实现数据转置。

在这里插入图片描述在这里插入图片描述
第二组线程

在这里插入图片描述第三组线程

在这里插入图片描述
第四组线程

在这里插入图片描述

Pointer Offsets For Permuted Shared Memory

Volta884Multiplicand 中定义了被乘数( A 和 B)的迭代器:

  • TileLoadIterator:从 Global Memory 循环读取数据到寄存器;
  • Volta884ThreadblockMultiplicandStoreIterator:负责 Permuted Shared Memory 的摆放,Volta884ThreadblockMultiplicandStoreIterator::ThreadOffset 与下图对应;
  • Volta884WarpMultiplicandLoadIterator:从 Shared Memory 取数据。

在这里插入图片描述

Conflict-Free Shared Memory Loads

从 Shared Memory 上加载数据到线程寄存器,仍然分为4步。前两步线程访问的数据相同,因此共计加载 32x4的 A 矩阵。Shared Memory 上的数据可供使用两次。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

Spatially Interleaved

如前所述,每个线程从 Shared Memory 读取8个元素。而执行mma指令时,每个线程提供4个元素。因此计算输出会出现空间交错。对 A 和 B 矩阵进一步分块,一次加载可以支持4次计算。

在这里插入图片描述在这里插入图片描述

参考资料:

  • # [DOC] Where does cutlass’ detailed GEMM kernel? #526
  • Dissecting the NVIDIA Volta GPU Architecture via Microbenchmarking
  • Modeling Deep Learning Accelerator Enabled GPUs
  • gpgpu-sim_distribution
  • 理解Tensor Core
  • Flexible Performant GEMM Kernels on GPUs
  • CUDA Tensor Core编程
  • PROGRAMMING TENSOR CORES: NATIVE VOLTA TENSOR CORES WITH CUTLASS
  • The NVIDIA Titan V Deep Learning Deep Dive: It’s All About The Tensor Cores
  • 9.7.13.4.1. Matrix Fragments for mma.m8n8k4 with .f16 floating point type
  • Numerical Behavior of NVIDIA Tensor Cores
  • CUDA Ampere Tensor Core HGEMM 矩阵乘法优化笔记 —— Up To 131 TFLOPS!
  • If we have two or four memory requests by a warp, do they need coalesced access/contiguity? #328
  • Do bank conflicts increase when using more shared memory?
  • How does parameter computeType affect the computation?
  • 2.1.10. GEMM Algorithms Numerical Behavior
  • cuBLAS的使用
  • RAFT在Knowhere上的一些评估测试[1]
  • How does parameter computeType affect the computation?
  • cudnn-frontend/tree/main/samples/samples/conv_sample.cpp
  • Is a union in C++ actually a class?
  • A Generalized Micro-kernel Abstraction for GPU Linear Algebra
  • Implementing Strassen’s Algorithm with CUTLASS on NVIDIA Volta GPUs
  • Double-buffering in shared memory, details? #227
  • Efficient GEMM in CUDA
  • Thread synchronization with syncwarp
  • Using CUDA Warp-Level Primitives
  • CUDA微架构与指令集(3)-SASS指令集分类
  • VOLTA Architecture and performance optimization
  • How to Optimize a CUDA Matmul Kernel for cuBLAS-like Performance: a Worklog
  • Determining registers holding the data after executing LDG.E.128

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

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

相关文章

Python函数式编程:让你的代码更优雅更简洁

概要 函数式编程(Functional Programming)是一种编程范式,它将计算视为函数的求值,并且避免使用可变状态和循环。 函数式编程强调的是函数的计算,而不是它的副作用。 在函数式编程中,函数是第一类公民&a…

【Vue3】解决Vue打包后上传服务器 资源路径加载错误

问题: 我这里在打包Vue之后将打包后的dist 上传至服务器站点根目录内子目录 名为 "adminstore" , 但是当我通过域名打开站点后发现 资源加载路径内并没有携带 子目录 "adminstore" 文件名称 错误:http://your website domain/js/app…

Java 开发常用的 Linux 命令汇总(建议收藏)

虽然平时大部分工作都是和Java相关的开发, 但是每天都会接触Linux系统, 尤其是使用了Mac之后, 每天都是工作在黑色背景的命令行环境中. 自己记忆力不好, 很多有用的Linux命令不能很好的记忆, 现在逐渐总结一下, 以便后续查看. 基本操作 Linux关机,重启 # 关机 shutdown -h n…

面试Java笔试题精选解答

文章目录 热身级别数组中重复的数字思路:使用map或HashSet来遍历一遍就可以找出重复的字符样例解答 用两个栈实现队列思路:Stack1正向进入,队头在栈底,用于进队列操作;Stack2是Stack1倒栈形成,队头在栈顶&a…

学生成绩管理系统(C++实现)

问题描述 实现学生成绩管理系统: 学生信息包括:学号、姓名、性别、年龄、班级等信息。除了包括学生所有信息外,还包括专业、英语、程序设计和高等数学等课程。 设计一程序能够对学生成绩进行管理,应用到继承、抽象类、虚函数、虚…

基于5G+物联网+SaaS+AI的农业大数据综合解决方案:PPT全文44页,附下载

关键词:智慧农业大数据,5G智慧农业,物联网智慧农业,SaaS智慧农业,AI智慧农业,智慧农业大数据平台 一、智慧农业大数据建设背景 1、应对全球人口快速增长带来的粮食生产压力,未来的粮食生产力必…

宣传技能培训1——《新闻摄影技巧》光影魔法:理解不同光线、角度、构图的摄影效果,以及相机实战操作 + 新闻摄影实例讲解

新闻摄影技巧 写在最前面摘要 构图与拍摄角度景别人物表情与叙事远景与特写 构图与拍摄角度案例 主体、陪体、前景、背景强调主体利用前景和背景层次感的创造 探索新闻摄影中的构图技巧基本构图技巧构图技巧的应用实例实例分析1. 黄金分割和九宫格2. 三角型构图3. 引导线构图4.…

1)业务平台集成电子签章平台

1.前言 电子签章平台随着企业数字化转型逐步渗透到日常运营项目中,如合同盖章/规章制度发布/法审意见等场景下引入电子章解决盖章需求。 作为特定业务下的统一处理方案,需要在业务管理平台与电子签章平台之间构建一个桥梁,简化电子签章平台…

Spring配置其他注解Spring注解的解析原理

Spring配置其他注解 Primary注解用于标注相同类型的Bean优先被使用权,Primary是Spring 3.0引入的,与Component和Bean一起使用,标注该Bean的优先级更高,则在通过类型获取Bean或通过Autowired根据类型进行注入时,会选用优…

【C++11并发】future库 笔记

简介 C11之前&#xff0c;主线程要想获取子线程的返回值&#xff0c;一般都是通过全局变量&#xff0c;或者类似机制。C11开始为我们提供了一组方法来获取子线程的返回值&#xff0c;并保证其原子性。 头文件 #include <future>std::promise 在promise中保存了一个值…

Python 的字符串格式化指南

字符串格式化 Python 中控制字符串格式通常有三种形式&#xff1a; % 占位符&#xff08;格式化符&#xff09;str.format() 函数f-string 内嵌式 Python 最先开始格式化字符串是用 %&#xff0c;但它的致命缺点是支持的类型有限制&#xff0c;只支持 int&#xff0c;str&am…

【从零开始实现意图识别】中文对话意图识别详解

前言 意图识别&#xff08;Intent Recognition&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的一个重要任务&#xff0c;它旨在确定用户输入的语句中所表达的意图或目的。简单来说&#xff0c;意图识别就是对用户的话语进行语义理解&#xff0c;以便更好地回答用户…

XUbuntu22.04之解决gpg keyserver receive failed no data(一百九十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

DevExpress WinForms TreeMap组件,用嵌套矩形可视化复杂分层数据

DevExpress WinForms TreeMap控件允许用户使用嵌套的矩形来可视化复杂的平面或分层数据结构。 DevExpress WinForms有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风…

中文rlhf数据集50w条数据解析

中文rlhf数据集50w条数据解析 解析代码数据名代码解析 解析代码 import jieba from tqdm import tqdm import re import pandas as pd import numpy as npdef find_non_english_text(text):pattern re.compile(r[^a-zA-Z])return pattern.sub(, text)def find_chinese_text(t…

教育数字化转型:塑造未来学习新范式

在国家教育数字化战略行动指引下&#xff0c;我国正积极推动数字化赋能教育高质量发展&#xff0c;以塑造教育发展的新优势。如今&#xff0c;随着科技新基建的普及和数字化赋能教育的深入推进&#xff0c;未来的教育模型正在逐渐形成。 在新的教育模型中&#xff0c;数字化学…

算法基础(python版本)

第二章 算法设计思想 一、搜索排序 1.排序算法 https://visualgo.net/zh/sorting (1)冒泡排序 # 思路&#xff1a; # (1)比较相邻元素&#xff0c;如果第一个比第二个大&#xff0c;则交换他们 # (2)第一轮下来&#xff0c;可以保证最后一个数一定是最大的&#xff1b;第二…

2023最全的Web自动化测试介绍

做测试的同学们都了解&#xff0c;做Web自动化&#xff0c;我们主要用Selenium或者是QTP。 有的人可能就会说&#xff0c;我没这个Java基础&#xff0c;没有Selenium基础&#xff0c;能行吗&#xff1f;测试虽然属于计算机行业&#xff0c;但其实并不需要太深入的编程知识&…

介绍一个功能强大的shopify app——TINYIMG

各位观众老爷&#xff0c;南来的北往的&#xff0c;东去的西走的&#xff0c;今天给大家推荐一个功能很强大的shopify app 当当当 那就是 tinyimg 这个app有多牛逼呢&#xff0c;且听我慢慢道来 首先这个app可以用来优化图片大小&#xff0c;给你的网站提提速 然后这个app还可…

Android使用AIDL+MemoryFile传递大数据

Android进程间通信经常会使用AIDL&#xff0c;简单方便&#xff0c;但是数据量有限制&#xff0c;超过一定值会报错&#xff1a; E !!! FAILED BINDER TRANSACTION !!! (parcel size 2073744) 可以通过使用AIDLMemoryFile传递大数据 新建AIDL接口&#xff1a; interface On…