A White Paper on Neural Network Deployment
  • ❤️‍🔥A White Paper on Neural Network Deployment
    • ❤️‍🔥A White Paper on Neural Network Deployment
    • 🤠CUDA
      • 🤑CPU|GPU程序执行流程
      • 🤗QiuckLearnFromPicture
      • 🤒GPU编程模型
      • 🫣线程束和线程束分化|Warp
      • 🤭Reduction|并行规约
      • 🤔全局内存(Global Memory)访问模式
      • 🫢Share Memory|共享内存|Bank Conflicts
      • 😷CUDA流和事件
      • 🫡Nsight system和Nsight compute
      • 🤫Grid-Stride Loops
    • 😄ONNX
      • 😉ONNX中的各类Proto
      • 🤔onnx->torch
      • 🥳0x00自定义算子
      • 😕0x01自定义算子
      • 🥴ONNX 模型的修改与调试
      • 😆ONNX中的一些概念
      • 😍用python操作ONNX
      • 🥹ONNX中的广播机制
      • 🤣外部数据
      • 🥰ONNX Model hub
      • 😘ONNX IR(Intermediate Representation)
      • 🥳ONNX后端
      • 🥸概述
    • 🐶TensorRT
      • 🐱TensorRT快速入门指南
      • 🐭文档简介
      • 🐹TensorRT的功能
      • 🐰TensorRT的C++接口解析
      • 🦊TensorRT的Python接口解析
      • 🐻TensorRT如何工作
      • 🐼trtexec的使用
      • 🐻‍❄️实战:解析onnx模型保存为engine文件|from scratch
      • 🐨实战:加载engine文件并执行推理|from scratch
      • 🐯手撕TensoRT源码|0x00
    • 🫶模型量化和剪枝
      • 🖕IEEE754标准
      • 🫰浮点运算产生的误差
      • 🤲映射和偏移
      • 🫴quantization from scratch|python
      • 👏动态量化范围
      • 🤝量化粒度
      • 👍校准
      • 👊Post-Training Quantization
      • ✊Quantization-Aware Training
      • 🤞pytorch-quantization使用文档
      • ✌️Polygraphy-Cheatsheet
    • 🤺杂文不杂
      • 😾Roofline_model
      • 🤖模型部署的几大误区
      • 😽手算Ampere架构各个精度的Throughout
      • 😻Tensor Core VS CUDA Core
      • 😺PNNX计算图结构剖析
      • 🎃融合BN和Conv层
      • 👾深度神经网络编译器原理简介
      • 👽在WSL2上安装CUDA_cuDNN_TensorRT
    • 🍀CPP
      • 🪵lamda表达式|C++11
      • 🌴智能指针|C++11
      • 🌲右值引用|移动语义|完美转发|C++11
      • 🫑emplace_back 减少内存拷贝和移动|C++11
      • 🥬多线程|互斥锁|条件变量|C++11
      • 🥒异步操作|C++11
      • 🍆原子变量|CAS操作|内存顺序|C++11
      • 🍏对象生存期和资源管理|RAII设计思想
      • 🍎Pimpl设计模式|编译防火墙
      • 🌶️std::variant|C++17
      • 🫛std::any|C++17
    • 🩷部署实战
      • ❤️yolov8Multitask
      • 💚yolov5
      • 🧡pointpillars
      • 💛centerpoint
      • 🩵deepstream
      • 💜BEVfusion
      • 💙BEVLane
      • 🖤Occupancy
    • ☯️重点参考书籍
Powered by GitBook
On this page
  • 相关数据
  • FP64 CUDA Core
  • FP32 CUDA Core
  • FP16 CUDA Core
  • INT8 CUDA Core
  • FP16 Tensor core
  • INT8 Tensor Core

Was this helpful?

Edit on GitHub
  1. A White Paper on Neural Network Deployment
  2. 杂文不杂

手算Ampere架构各个精度的Throughout

Previous模型部署的几大误区NextTensor Core VS CUDA Core

Last updated 1 year ago

Was this helpful?

相关数据

FP64 CUDA Core

使用CUDA Core的FP64最好理解 一共32个计算FP64的CUDA Core,每一个clk(时钟周期)计算一个FP64

  • 频率:1.41 GHz • SM数量:108

  • 一个SM中计算FP64的CUDA core的数量: 32

  • 一个CUDA core一个时钟周期可以处理的FP64: 1

  • 乘加: 2

Throughput = 1.41 GHz * 108 * 32 * 1* 2 = 9.7 TFLOPS

FP32 CUDA Core

使用CUDA Core的FP32跟FP64差不多 一共64个计算FP32的CUDA Core,每一个clk计算一个FP32

  • 频率:1.41 GHz

  • SM数量:108

  • 一个SM中计算FP32的CUDA core的数量: 64

  • 一个CUDA core一个时钟周期可以处理的FP32: 1

  • 乘加: 2

Throughput = 1.41 GHz * 108 * 64 * 1* 2 = 19.4 TFLOPS

FP16 CUDA Core

Ampere中没有专门针对FP16的CUDA core,而是将FP32的CUDA Core和FP64的CUDA Core一起使用来计算FP16。我们暂且说一个 SM中计算FP16的CUDA core的数量是: 256 ( = 32 * 4 + 64 * 2 )

  • 频率:1.41 GHz

  • SM数量:108

  • 一个SM中计算FP16的CUDA core的数量: 256

  • 一个CUDA core一个时钟周期可以处理的FP16: 1

  • 乘加: 2

Throughput = 1.41 GHz * 108 * 256 * 1 * 2 = 78 TFLOPS

INT8 CUDA Core

Ampere中没有专门针对INT8的CUDA core,而是用INT32的CUDA Core计算INT8。我们暂且说一个SM中计算INT8的CUDA core的数量 是: 256 ( = 64 * 4 )

  • 频率:1.41 GHz • SM数量:108

  • 一个SM中计算INT8的CUDA core的数量: 256

  • 一个CUDA core一个时钟周期可以处理的INT8: 1

  • 乘加: 2

Throughput = 1.41 GHz * 108 * 256 * 1 * 2 = 78 TOPS

FP16 Tensor core

我们来分析Tensor Core Ampere架构使用的是第三代Tensor Core,可以一个clk完成一个 1024 ( = 256 * 4)个FP16运算。准确来说是4x8的矩阵与8x8的矩阵的 FMA

  • 频率:1.41 GHz

  • SM数量:108

  • 一个SM中计算FP16的Tensor core的数量: 4

  • 一个Tensorcore一个时钟周期可以处理的FP16: 256

  • 乘加: 2

Throughput = 1.41 GHz * 108 * 4 * 256 * 2 = 312 TFLOPS

INT8 Tensor Core

我们来分析Tensor Core Ampere架构使用的是第三代Tensor Core,可以一个clk完成一个 2048 ( = 256 * 2 * 4)个INT8运算。准确来说是4x8的矩阵与8x8的矩 阵的FMA

  • 频率:1.41 GHz • SM数量:108

  • 一个SM中计算INT8的Tensor core的数量: 4

  • 一个Tensorcore一个时钟周期可以处理的INT8: 512

  • 乘加: 2

Throughput = 1.41 GHz * 108 * 4 * 512 * 2 = 624 TOPS

❤️‍🔥
🤺
😽