![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CUDA进阶
文章平均质量分 82
大光叔叔
这个作者很懒,什么都没留下…
展开
-
CUDA进阶第一篇:CUDA调试
0. 写在前面 “初学CUDA,好不容易自己写完一段cuda代码,一运行,满屏的语法bug,语法bug还好说,竟然还有逻辑bug,逻辑bug怎么改啊,wtf!!” “从别人手里接到一段CUDA代码,WTF,为什么还有bug!!还没有注释!!没有文档!!写代码的人怎么不去死啊!!” 同事的代码出bug了,找你调bug,内心独白:“tmd这写的都是啥”,“tmd这不是我写...原创 2016-01-05 15:02:01 · 35404 阅读 · 1 评论 -
CUDA进阶第八篇-CUDA性能优化指南总结
本文为《CUDA C Programming Guide》chapter 5 Performance Guidelines章节的总结。精力有限,可能没做到覆盖所有的点,期望指正。该章的主要内容是指导如何进行性能优化。从三个大方面入手:最大化利用率;最大化内存吞吐量;和最大化指令吞吐量。 最大化利用率应用层次:使用异步函数和流,最大化主机端(host)任务、设备端(device)任...原创 2018-05-18 17:35:30 · 8377 阅读 · 0 评论 -
CUDA进阶第六篇-GPU资源(显存、句柄等)管理
最近在加速一个图像算法,符合《CUDA进阶第五篇-如何估算出程序的GPU加速比》中的第二种情况,程序由核函数和GPU API实现,但是资源管理特别差,显存和句柄在程序中使用时才申请。每次函数执行都要申请和释放一遍,非常耗费时间。 优化方案一:C++重构我想到的第一个方案,就是C++重构,将所有的显存和句柄定义为成员变量,在构造函数中申请,析构函数中释放。难度比较低,但是工作量比较大,因...原创 2018-02-16 21:42:32 · 4304 阅读 · 0 评论 -
CUDA进阶第五篇-如何估算出程序的GPU加速比
当对一个程序进行加速的时候,很多时候需要预估出程序使用GPU加速后的加速比(比如你老板不懂GPU,或者甲方会问你预估加速比等等)。从大二接触GPU加速,到现在大概有6年时间,大大小小的项目也做了十几个,很多时候都需要事先回答加速比会有多少这个问题。这里简单的说一下自己的经验,欢迎各位大神指点。文中的经验基于目前主流的显卡,比如GTX1080,最低也得是GTX9**系列的。1.阿姆达尔定律...原创 2018-02-16 20:54:49 · 5696 阅读 · 0 评论 -
CUDA进阶补充篇:详析各种CUDA函数计时函数
写在前面:之前写了一篇CUDA进阶第三篇:CUDA计时方式,列出了几种当时遇到的CUDA计时方式,只是个教程式的东西,没有太多技术含量,也不太全面。前几天在CUDA Professional(45157483)群里和大佬们讨论到CUDA官方event函数在计时cpu和cpu混合代码时有问题,虎躯一震,tm这么多年要是一直用的都是错的就瞎了。今天特花时间实验探究一番。有不足之处还望各位前辈指点。原创 2017-08-25 20:28:33 · 6891 阅读 · 3 评论 -
cublasGemmEx函数应用-探究8bit矩阵乘
介绍cublasGemmEx 是CUDA8.0中cuBLAS新出的函数,是cublasgemm()类函数的扩展,也是目前来看功能最强大的矩阵乘函数了。该函数另一强大之处在于支持多种计算模式(compute type),其中就包括CUDA 8.0新出的FP16和INT8。原创 2017-05-22 21:11:48 · 8651 阅读 · 3 评论 -
Fast Multi-GPU collectives with NCCL-翻译
Fast Multi-GPU collectives with NCCL-翻译本文是对NCCL博客的翻译,方便大家学习交流。因水平有限,如有问题欢迎更正。目前许多服务器包含8个或更多的GPU。 理论上,将应用程序从一个GPU扩展到多个GPU应该提供巨大的性能提升。然而在实践中,性能提升往往很难达到理论值。 这个问题往往是由两个原因导致。 第一是分配任务时没有充分利用的并行性,从而导致原创 2017-02-28 20:48:38 · 5890 阅读 · 0 评论 -
CUDA进阶第四篇-如何实时获得GPU各种资源利用率(NVML)
CUDA进阶第四篇-如何实时获得GPU各种资源利用率前几天在玩digits的时候发现在训练的过程中网页上能够动态显示显卡利用率,显存利用率和温度。突然想起来前几天有人问过这个问题并查了一下目前好像并没有类似的中文博客,所以就探究了一下这个问题。 首先我去翻了一下digits的源码,发现是用python调用了NVML(nvidia-management-library)这么个库。 原来NVI原创 2016-08-11 12:45:51 · 19255 阅读 · 0 评论 -
写CUDA必备sublime text插件:CUDA Snippets
CUDA自NVIDIA提出以来,经过多年的发展,俨然已经成为高性能计算的首选。编辑器不够成熟,代码调试工具上手难度较高,出现bug千奇百怪,CUDA开发一直让并行程序员们“痛不欲生”。 本人写了几年CUDA,也是深受其害。既然等不到NVIDIA出IDE,那就自己挖坑了。写CUDA一直用的编辑器是sublime text,目前仅有的一个跟CUDA相关的插件是CUDA C++,但已经很长时间没有更新了原创 2016-02-15 22:03:02 · 4587 阅读 · 0 评论 -
CUDA进阶第三篇:CUDA计时方式
写CUDA,追求的就是加速比,想要得到准确的时间,计时函数就是必不可少计时通常分为两种情况,(1)直接得到接口函数的时间,一般用于得到加速比;(2)获得接口函数内核函数、内存拷贝函数等所耗时间,一般用于优化代码时。情况(1)方法有两种,CPU计时函数和GPU计时函数。情况(2)有三种工具nsight,nvvp,nvprof本博客会详细介绍情况(1)的两种方法;情况(2),nsight不会用,简单介绍一下nv原创 2016-02-04 00:02:32 · 14854 阅读 · 3 评论 -
CUDA进阶第二篇:巧用PTX
并行线程执行(Parallel Thread eXecution,PTX)代码是编译后的GPU代码的一种中间形式,它可以再次编译为原生的GPU微码。利用PTX来进行试验,我们可以解决一些在写代码时遇到的不确定问题。原创 2016-01-12 18:33:39 · 20154 阅读 · 7 评论 -
CUDA进阶第七篇-如何获得核函数最佳线程块配置
最近在和几个小伙伴们一起翻译《cuda-c-programming-guide》,我选了chapter 5,收获良多。翻译到5.2.3.1 Occupancy Calculator的时候,正好跟现在手里的任务有些重合,就做了些实验,分享给大家。有说的不对的地方欢迎拍砖。这一小节的内容很简单,如何获得核函数最佳线程块大小配置,可以用几个API,根据kernel内寄存器和共享内存的使用量,计算出b...原创 2018-05-03 17:41:21 · 4052 阅读 · 0 评论