【GPU】冲击高性能

计算量估计

卷积神经网络复杂度分析

卷积神经网络CNN中的参数量(parameters)和计算量(FLOPs )

Roofline Model

Roofline Model与深度学习模型的性能分析

有了上面这些基础知识,再来往下分析会更有收获

发现问题 — 矩阵乘法

思路

根据 Roof-line-Model 理论,我们可以从两个角度入手计算该模型运算的时间

① Memory-bound

② Compute-bound

Memory-bound

RTX 4090 1.01 TB/s (理论)

实测本机带宽

cuda-samples/Samples/1_Utilities/bandwidthTest at master · NVIDIA/cuda-samples (实测)

矩阵乘访存量

  • 读取数据量(输入) input_0 = 600x200x8x1x64x sizeof(float32)

input_1 = 600x1x8x64x1x sizeof(float32)

  • 写入数据量(输出) output = 600x200x8x1x1x sizeof(float32)

  • 总访存量

      Total = input_0 + input_1 + output = 250828800

Band_width_TBs(4090实际带宽) = 0.92 TB/s

Memory_time = Total / Band_width_TBs = 0.248 ms

Compute-bound

The NVIDIA GeForce RTX 4090 offers a peak single-precision (FP32) performance of 82.6 TFLOPS . (理论)

实测本机FLOPS

FLOPS = 78.65 TFLOPS (实测)

下面是计算过程

input_channel=512, output_channel=512, kenel_size=5, W=256, H=256

import torch
import torch.nn as nn
import onnxclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(512, 512, kernel_size=5, stride=1, padding=2, bias=False)def forward(self, x):x = self.conv1(x)return xnet = Net().eval()
x = torch.randn(1, 512, 256, 256)  with torch.no_grad():torch.onnx.export(net,                x,                  'conv.onnx',        opset_version=11,   input_names=['input'],  output_names=['output'],  dynamic_axes={'input': {0: 'batch_size'},  'output': {0: 'batch_size'}})

卷积核计算量公式

FLOPs = 2×Cin×Hout×Wout×Cout×K2

FLOPs = 858993459200

mean = 10.9218 ms

FLOPS(实际) = FLOPs / percentile = 78.65 TFLOPS

矩阵乘计算量

M=600x200x8,N=1,K=64 (gemm)TFLOPs = 2MNK = 2 x 12x10^4 x 8 x 64 / 10^12

Compute_time = TFLOPs / FLOPS(实际) = 0.0000156 ms

gemm计算耗时

gemm_time = MAX(Memory_time, Compute_time) = 0.248 ms

我们算出来gemm的理论计算时间是 0.248ms,为什么trtexec这里平均用了 202.962ms 呢?

时间都去哪了?

Nsight system

# 先保存一份带有详细信息的engine,这样system 才能看到细节
trtexec --onnx=gemv.onnx --profilingVerbosity=detailed --saveEngine=gemv.engine 

【trtexec】trtexec命令大全

# 用Nsystem分析
nsys profile -o gemv_profile --stat=true --capture-range cudaProfilerApi trtexec --loadEngine=gemv.engine --warmUp=0 --duration=0 --iterations=50

【NsightSystem】Nsight System命令大全

从gpukernsum可以看出,gemm的实现是通过sm50架构的算子实现的, 这是NVIDIA第一代统一虚拟内存的架构;而本机4090的已经是最新架构Ada Lovelace,所以要解决这个问题,就需要手写Kernel算子,选择合适的并行方式去计算;

解决问题

写插件 - - ~ 

后续如何,下文分解

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

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

相关文章

六、数据呈现

目录 6.1 理解输入输出 6.1.1 标准文件描述符 1 STDIN (0) 2 STDOUT (1) 3 STDERR(2) 6.1.2 重定向错误 1 只重定向错误 2 重定向错误和数据 6.2 在脚本中重定向输出 6.2.1 临时重定向 6.2.2 永…

汇智知了堂学员风采:网络安全学习之路,我们在行动

在这个数字化浪潮汹涌的时代,网络安全已经成为维护国家安全、社会稳定和个人隐私的重要一环。汇智知了堂深知网络安全人才的重要性,因此我们致力于培养具备扎实技术功底和创新能力的网络安全人才。 近日,我们网络安全培训班74部的学员们迎来…

QT联合Opencv进行车辆的计数

QT联合Opencv进行车辆的计数 前言初始界面展示运行界面展示视频展示 前言 ⭐️⭐️⭐️这个项目旨在利用Qt和OpenCV技术,实现一个车辆计数系统。⭐️⭐️⭐️ 🌎通过结合Qt的用户界面设计和OpenCV的图像处理功能,系统能够对输入的交通视频进…

R-Tree原理及朴素实现代码

R树是用于空间访问方法的树数据结构,即用于索引多维信息,例如地理坐标、矩形或多边形。 NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 -…

实打实好用!微信客户高效管理神器大揭秘!

如果你的微信里的客户很多,每次回复消息都不及时,或是有遗漏,那么,你一定要试试这个微信客户高效管理神器——微信管理系统,能够让你事半功倍,提高工作效率。 首先,让我们来看看这款微信管理系…

掼蛋残局技巧

一、根据对手张数出牌 口诀:十打二来九打一,打成八张不着急; 对手七张或八张,可以反手打一夯; 五打二来六打三,打得对手把眼翻; 枪不打四; 两张:出两张以上的牌&#xff…

【嵌入式】SD NAND:小身躯蕴含大能量的新型嵌入式存储解决方案

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

Day16_学点儿JavaEE_实践_基于IDEA2023的简易JavaWeb项目、Tomcat输出乱码解决

0 JavaWeb项目目录 └──JavaWeb├──resources│ └──db.properties├──src│ └──com.sdust.web│ ├──servlet│ │ └──StudentServlet│ ├──pojo│ │ └──Student│ └──util│ └──JDBCUtil├──web│ ├──st…

使用icpc tool进行滚榜操作

前言 参加ACM的同学都知道,比赛非常有趣的环节就是赛后的滚榜环节,所以为了一个比赛的完整性,自己办比赛时也想要加入滚榜的操作,经过一段时间的研究学习,已经可以将滚榜程序与domjudege程序成功完成融合,…

2024.4.15

代码&#xff1a;uart4.c #include "uart4.h"void uart4_config() {//使能GPIO\GPIOG\UART4的外设时钟RCC->MP_AHB4ENSETR | (0x1<<1);RCC->MP_AHB4ENSETR | (0x1<<6);RCC->MP_APB1ENSETR | (0x1<<16);//设置PB2和PG11为管脚复用功能//P…

【C/C++】什么是内存泄漏?如何检测内存泄漏?

一、内存泄漏概述 1.1 什么是内存泄漏 内存泄漏是在没有自动 gc 的编程语言里面&#xff0c;经常发生的一个问题。 自动垃圾回收&#xff08;Automatic Garbage Collection&#xff0c;简称 GC&#xff09;是一种内存管理技术&#xff0c;在程序运行时自动检测和回收不再使用…

淘宝商品详情API数据采集接口|如何快速采集淘宝商品数据?

如何快速采集淘宝商品数据 无论是谁&#xff0c;如果单凭人工的方式去收集淘宝、天猫等平台的商品数据信息&#xff0c;工作量是巨大的&#xff0c;如果借助有采集软件的第三方公司操作&#xff0c;则可实现对大数据的轻松掌握&#xff0c;但是外包给第三方公司需要支付一定的…