当前位置: 首页 > news >正文

Tensor Core的一些概念理解

        英伟达的GPU产品架构发展如下图,Tensor Core是从2017年的Volta架构开始演变的针对AI模型大量乘加运算的特殊处理单元。本文主要梳理一些关于Tensor Core的一些基础概念知识。

什么是混合精度?

        混合精度在底层硬件算子层面,使用半精度(FP16)作为输入和输出,使用全精度(FP32)进行中间结果计算从而不损失过多精度的技术。这个底层硬件层面其实指的就是Tensor Core,所以GPU上有Tensor Core是使用混合精度训练加速的必要条件。

CUDA Core和Tensor Core的区别

        对CUDA Core来说,GPU并行模式实现深度学习模型的功能过于通用,比如常见的conv/GEMM操作,被编码为FMA(fused multiply-add)实现,硬件层面会把数据按照:寄存器-ALU-寄存器-ALU-寄存器,方式来回搬运。并且一个时钟周期完成一个FMA。

        Tensor Core则对深度学习模型常见的conv/GEMM 提供可编程矩阵乘法和累加单元(matrix-multiply-and-accumulate units),可为AI训练和推理提供较高的Tensor TFLOPS算力。一个时钟周期可以完成多个FMA操作。

什么是CUDA中的bank冲突?

共享内存和bank: 在CUDA架构中,共享内存是一个非常快速的内存类型,它位于每个线程块内部并为该线程块内的所有线程提供服务。为了实现高吞吐量的访问,共享内存被划分为多个独立的存储区域,称为“banks”。每个bank可以在单个时钟周期内独立地服务一个线程。

bank冲突: 当两个或更多的线程同一时钟周期内尝试访问同一个bank中的不同地址时,就会发生bank冲突。由于每个bank在一个时钟周期内只能服务一个线程,因此这些访问会被序列化,导致延迟。

例如,假设有两个线程在同一时钟周期内访问第一个bank中的不同地址。第一个线程的访问会被立即处理,而第二个线程的访问则需要等待下一个时钟周期。这就导致了额外的延迟,从而降低了性能。

避免bank冲突: 为了避免bank冲突,程序员需要仔细设计数据的访问模式和数据的布局。理想的情况是,同一时钟周期内的所有线程访问的地址分布在不同的banks上,这样每个线程的访问都可以在一个时钟周期内被处理,从而实现最大的吞吐量。

参考:

Releases · chenzomi12/DeepLearningSystem · GitHub

CUDA 中的 bank 冲突 是什么? - 知乎

http://www.lryc.cn/news/280450.html

相关文章:

  • Git与VScode联合使用详解
  • SQL Server 加密 view文本
  • Linux查看物理CPU个数、核数、逻辑CPU个数
  • python使用单例模式加载config.ini配置文件
  • 牛刀小试---二分查找(C语言)
  • k8s-数据卷
  • Linux学习记录——사십삼 高级IO(4)--- Epoll型服务器
  • 6.4、SDN在云数据中心的应用案例分析
  • SpringBoot整合ES
  • Pandas实战100例 | 案例 10: 应用函数 - 使用 `apply`
  • 《C++大学教程》4.13汽油哩数
  • OpenGL排坑指南—贴图纹理绑定和使用
  • Electron中 主进程(Main Process)与 渲染进程 (Renderer Process) 通信的方式
  • 企业微信forMAC,如何左右翻动预览图片
  • Android Firebase (FCM)推送接入
  • Neo4j恢复
  • ZZULIOJ 1114: 逆序
  • Linux前后端项目部署
  • GPT-4与DALL·E 3:跨界融合,开启绘画与文本的新纪元
  • 聊聊PowerJob的Alarmable
  • 系列三十五、获取Excel中的总记录数
  • VMware workstation安装debian-12.1.0虚拟机并配置网络
  • centos下系统全局检测工具dstat使用
  • 无人机群ros通信
  • LeetCode刷题:142. 环形链表 II
  • Laravel 使用rdkafka_laravel详细教程(实操避坑)
  • 439 - Knight Moves (UVA)
  • 数据结构(c)冒泡排序
  • 并发编程之并发容器
  • K8s---存储卷(动态pv和pvc)