如何理解GPU Kernel Grid/Block与SM占用率的关系?什么是Tail Effect?
背景 在运行kernel时,需要设置kernel的Grid、Block值,我们一般都希望充分利用GPU的资源,达到最优性能。那么有如下问题: Grid、Block与SM占用率是什么关系? 如果想性能最优,该如何设置Grid、Block值? Grid、Block与SM占用率的关系 既然要探索二者的关系,直接写代码实验即可,有以下代码: #includ…
|
1437 字
|
11 分钟
如何优雅地测量GPU占用率?(nsys gpu-metrics-devices使用)
背景 做GPU性能优化时,一种思路是先找到GPU占用率低的环节,然后做针对性优化,把GPU占用率提上去,那么问题就来了: 哪些指标可以表征GPU占用率? 如何测量GPU的占用率? nsys profile gpu-metrics-devices 一番搜索后,发现nsys从 2021.2.4开始profile时开始支持gpu-metrics-devi…
|
1191 字
|
8 分钟
如何优雅地测量GPU CUDA Kernel耗时?(三)- nsys统计kernel耗时
背景 文一,文二介绍了常用的GPU性能分析手段,聚焦单个kernel的耗时分析。而实际应用中,还可能需要统计多个kernel耗时数据,比如: kernel在不同时刻的耗时可能不一样,只观测一个具体kernel不够准确,所以需要统计kernel耗时分位值。 优化性能需要找到耗时大户,这就需要统计各种kernel的耗时占比。 解析Nsys SQLite…
|
834 字
|
8 分钟
如何优雅地测量GPU CUDA Kernel耗时?(二)- 精确测量
背景 上文介绍了kernel常用的测量方法,而实际应用中,还会遇到其他的问题,比如: 1. 为什么同样的输入,测量的耗时存在较大差距? 2. 怎样才能精确的测量kernel耗时? 问题 我们看以下以下常见代码,仅仅做了linear操作: def test(): a_size = (20, 8192) b_size = (5120, 8192) ev…
|
940 字
|
10 分钟
如何优雅地测量GPU CUDA Kernel耗时?(一)- nsys、CudaEvent使用
背景 工作中经常需要评估模型性能,会涉及到GPU Kernel的耗时分析。网上关于GPU耗时的文章比较散,本文记录下日常用到的一些工具及使用过程中的坑,大多是使用经验,若有错误,还请不吝指出。 GPU耗时和CPU耗时有啥区别? 在开始之前,我们需要了解GPU耗时和CPU耗时有啥区别? 在默认情况下,CPU与GPU的执行逻辑是异步的。CPU中调用ke…
|
1544 字
|
18 分钟
如何优雅使用torch的view? 如何理解RowMajor/ColumnMajor?
背景 最近看一些torch代码,有很多view操作,之前没深入了解,存在一些问题: view的参数该如何填写呢? view后得到的tensor结果是怎样的呢? view是如何将tensor进行映射的呢? 本质上涉及到tensor元素在内存中的布局问题,所以就查了些资料,写下自己的理解。 什么是RowMajor/ColumnMajor? 首先需要明确…
|
680 字
|
8 分钟