CUDA C

  • CUDA C 编程
    • 名词的意思
    • 1.0并行计算与GPU架构
    • 1.1 异构计算与CUDA
    • 2.1 CUDA编程模型(一)
    • 核函数计时
    • 组织并行线程
    • GPU设备信息
  • 使用Nvidia Profiler
    • Nsys
      • NVTX
      • 结合launch.py
    • Nsight Compute

CUDA C 编程

最近被安利到一个特别好的博客,看上去非常全面------>谭升的博客
相关书籍推荐---->书籍在blog的尾部

名词的意思

在读GNNAdvisor时,一直对里面的block,thread,warp概念不是很了解,后来才发现这是CUDA里面的一些专有名词。
可以简单参考------>CUDA编程——GPU架构,由sp,sm,thread,block,grid,warp说起
底下的讨论得知,一个SM只执行一个Warp,但是可以加载多个Warp?因为其他Warp可能处于其他状态(挂起,就绪,执行)。一个Warp中threads数量一定(32),一个block中threads数量不一定。
实际上同时执行的threads应该称为resident threads,数量是SM32。 active warp是指已经分配给SM的warp,并且该warp需要的资源(寄存器)也已经分配,这个warp的称为active warp,这个warp通过warp active_mask把此warp中的thread的active bit置1,active thread就是active warp32。

  • thread:一个CUDA的并行程序会被以许多个threads来执行。
  • block:数个threads会被群组成一个block,同一个block中的threads可以同步,也可以通过shared memory通信。
  • grid:多个blocks则会再构成grid。
  • warp:GPU执行程序时的调度单位,目前cuda的warp的大小为32,同在一个warp的线程,以不同数据资源执行相同的指令,这就是所谓 SIMT。

1.0并行计算与GPU架构

  • 延迟
  • 吞吐量
  • 带宽

1.1 异构计算与CUDA

异构计算
Hello,world–CUDA

2.1 CUDA编程模型(一)

编译cuda文件.cu

nvcc -arch sm_86 xxx.cu -o xxx(类似于exe)
./xxx

但是出现

The program ‘nvcc’ is currently not installed. You can install it by typing:
sudo apt install nvidia-cuda-toolkit

第一想法是nvcc没有在conda环境中装,于是在conda上装一下,参考nvcc_problem,所以是要装一个cudatoolkit-dev,参考git-cudatoolkit-dev,装一下即可。
其实正确的做法应该是找到系统安装的cuda路径,将环境变量配置好,nvcc环境在

/usr/local/cuda-11.1/bin

或者

whereis nvcc

找到nvcc路径,加入即可。

C++文件include其他文件夹头文件,参考#include不同文件夹下头文件,但是需要注意是斜杠的方向。

核函数计时

在使用nvcc编译代码时,图方便就直接

nvcc xxx.cu xxx

结果出现

ERROR: sum_arrays_timer.cu:39,code:222,reason:the provided PTX was compiled with an unsupported toolchain.

搜了一下发现驱动程序和编译链不匹配,也没管直接把-arch 和sm参数加进去发现就可以了,没太懂-------------?
然后在计时和nsys的时候,第一遍按作者将memcpy DtoH 也加入了cpu计时器当中,使用nsys跑出来的结果

再将memcpy HtoD放在计时器外面,nsys结果

可以看到cpu计时器少去的时间正好是CUDA memory统计的时间,而后者的cpu计时与CUDA API统计的cudaLaunchKernel时间基本一致(按博文里说的这里应该会大一点,也非常符合),同时CUDA Memory统计的总时间与CUDA API统计的cudaMemcpy时间也是一致的,唯一有问题的就是CUDA kernel统计的时间,与哪个都对不上-----------------------?
(查文档)

组织并行线程

这里面需要了解

  • threadsIdx.x,threadIdx.y,:线程所在block的xy坐标
  • blockIdx.x,blockIdx.y,:block所在grid的xy坐标
  • blockDim.x,blockDim.y,:grid的维度
  • block.x,block.y:block的维度,上者在device中使用,这个在host中使用好像。。。

GPU设备信息

很多,有些不太懂,查文档

使用Nvidia Profiler

Nsys

关于nsys的具体用法及参数,可以参考Nsys documents–Nvidia
形式为

nsys [command_switch][optional command_switch_options][application] [optional application_options]

我刚开始用的是

/usr/local/cuda-11.1/bin/nsys profile --stats=true ./sum_arrays

可以自动生成.qdrep文件,该文件需要Nsight Systems来可视化,于是需要安装该软件进行本地查看。
--------->Nsys 可视化Mac
安装该blog一步步安装即可,这里面会出现mac权限的问题,按照教程
‘System Preferences’ → ‘Security & Privacy’ → ‘General’,然后点击允许打开即可。
最后将文件拖进去就可以查看,但是现在还有一些小问题,拖进去后会出现error,不影响观测,以后再解决吧。
参考知乎tensorflow profiling工具简介——nsight系列,后面还有nsight compute,下次再学着用吧。

NVTX

使用nvtx,由于我在conda environment下,所以需要安装nvtx

conda install -c conda-forge nvtx

然后在python文件中

import nvtx
nvtx.push//pop_range()#push命名,pop收集结束

最后

/usr/local/cuda-11.1/bin/nsys profile -t nvtx,osrt --force-overwrite=true --stats=true --output=quickstart python xxxx.py

即可在nsight system UI界面查看使用nvtx标记的部分
还会生成一个.sqlite文件,感觉没啥用,可以去sqlite online viewer查看具体内容。
同时也可以使用

with nvtx.annotate("name",color=""):

一般这两种方法就够了,具体可参考nvtx api。

结合launch.py

最近在想怎么profiler DGL launch.py的不同线程,想通过nsight system来查看,由于是多线程,通过上面链接通过nvtx查看server端和client端的情况,具体command

MKL_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 /usr/local/cuda-11.1/bin/nsys profile -t nvtx,osrt,cuda --stats=true --force-overwrite=true --output=multiprocessing python launch.py "/home/XXXXXXX/anaconda3/envs/torch/bin/python train_dist.py --graph_name reddit --ip_config ip_config.txt --num_gpus 1 --local_rank 0 --num_epochs 1 --batch_size 1000"

Nsight Compute

CUDA C 编程/Nsight可视化相关推荐

  1. C与CUDA混合编程的配置问题

    C与CUDA混合编程的配置问题 2015-10-05 19:58 526人阅读 评论(2) 收藏 举报 分类: CUDA(6) 目录(?)[+] 原文: http://blog.csdn.net/u0 ...

  2. CUDA C编程接口技术分析

    CUDA C编程接口技术分析 编程接口 CUDA C为熟悉C编程语言的用户提供了一个简单的路径,可以方便地编写程序供设备执行. 它由C语言的最小扩展集和运行库组成. 核心语言扩展已经引入:cuda c ...

  3. CUDA C++编程接口:编译

    CUDA C++编程接口:编译 一.概述 CUDA C++为熟悉C++编程语言的用户提供了一个简单的路径,以方便地编写程序以执行该设备. 它由一组最小的扩展到C++语言和运行库. 在编程模型中引入了核 ...

  4. CUDA C++编程手册(总论)

    CUDA C++编程手册(总论) CUDA C++ Programming Guide The programming guide to the CUDA model and interface. C ...

  5. 《CUDA C编程权威指南》——1.5节总结

    本节书摘来自华章社区<CUDA C编程权威指南>一书中的第1章,第1.5节总结,作者[美] 马克斯·格罗斯曼(Max Grossman) ,更多章节内容可以访问云栖社区"华章社区 ...

  6. 《CUDA C编程权威指南》——3.4 避免分支分化

    本节书摘来自华章计算机<CUDA C编程权威指南>一书中的第3章,第3.4节,作者 [美] 马克斯·格罗斯曼(Max Grossman),译 颜成钢 殷建 李亮,更多章节内容可以访问云栖社 ...

  7. c cuda 指定gpu_《CUDA C编程权威指南》——1.3 用GPU输出Hello World-阿里云开发者社区...

    本节书摘来自华章计算机<CUDA C编程权威指南>一书中的第1章,第1.3节,作者 [美] 马克斯·格罗斯曼(Max Grossman),译 颜成钢 殷建 李亮,更多章节内容可以访问云栖社 ...

  8. Gtk与Cuda混合编程

    大家都知道,不同的编译器有不同的-L和-I,而在编译过程中要实现两种编译器的混合使用,利用Makefile是一个很好地解决方案,比如之前在mpi与cuda混合编程中讨论的那样,基于图形界面的GTK编程 ...

  9. 《CUDA C编程权威指南》——2.2 给核函数计时

    本节书摘来自华章计算机<CUDA C编程权威指南>一书中的第2章,第2.2节,作者 [美] 马克斯·格罗斯曼(Max Grossman),译 颜成钢 殷建 李亮,更多章节内容可以访问云栖社 ...

  10. 【OpenCV CUDA】OpenCV和Cuda结合编程

    一.利用OpenCV中提供的GPU模块 目前,OpenCV中已提供了许多GPU函数,直接使用OpenCV提供的GPU模块,可以完成大部分图像处理的加速操作. 基本使用方法,请参考:http://www ...

最新文章

  1. 怎样能拿到第一份编程工作?这里告诉你答案 | 码书
  2. markdown编辑器的小建议
  3. Hyperface笔记
  4. DataSet DataTable操作
  5. hadoop2.5.1集群部署(完全分布式)
  6. oracle天数加个随机数,如何给一个表某列加上指定的随机数
  7. 前端开发怎么用php,做web前端开发怎么样?
  8. [POJ 1330] Nearest Common Ancestors (倍增法)
  9. 计算机视觉论文-2021-06-29
  10. Android ScrollView内部组件设置android:layout_height=fill_parent无效的解决办法
  11. mysql 首次连接慢_mybatis+mysql,第一次数据库连接很慢怎么回事?
  12. Ueditor word图片转存按钮灰色无法激活
  13. 手机APP测试需要注意的问题
  14. php.ini文件中的 session.save_path是个坑爹的玩意!
  15. win10自定义使用Mac的鼠标样式
  16. 点云边界提取方法总结
  17. java多线程技术体系
  18. linux下动态库的符号冲突、隐藏和强制优先使用库内符号
  19. linux--磁盘配额
  20. Work around for SQL Configuration Manager Consol

热门文章

  1. 送给前端的干货 ,绝对经典的学习资料大全,js框架,css
  2. 编译carrot2发布
  3. 如何选择VC界面库产品?(二)– DSkinLite界面库介绍
  4. 我们该怎么把图片转文字呢?智能提取文字软件有哪些?
  5. 【计算机图形学】画线算法——Bresenham算法(任意斜率)
  6. 详解Android常用抓包工具的使用方法、技巧-学习笔记20220416
  7. KITTI数据集评估方法小结
  8. 6m缓存和8m缓存差距_i79700和i78700性能差距有多大?i79700和i78700区别对比评测
  9. eclipse汉化方法
  10. 【计算机组成与设计:硬件/软件接口】第三章:计算机的算术运算