CUDA编程
文章平均质量分 93
本人写cuda的一些经验教训。
yutianzuijin
目前从事语音识别相关的工作。
展开
-
常见的GPU性能对比
写这篇博客的目的就是想搞清楚英伟达不同显卡之间的性能差异以及移动端GPU的性能达到了英伟达显卡的哪一代,让自己也让大家明白不同显卡的算力差异。所有的数据均从网络搜索,有不正确的地方欢迎批评指正。同一显卡会有一个首次发布,此外还有一系列的迭代升级版本,我们只考虑首次发布版本的性能。鉴于现在的模型推理大多使用int8来进行推理,所以大家可以着重看一下int8算力那一列。原创 2024-08-14 17:53:59 · 1640 阅读 · 0 评论 -
借助树状数组的思想实现cuda版前缀和
昨天面试快手,面试官出了一个cuda编程题–实现前缀和。当时没有做出来,一直在思考是否有类似于规约树这样的解法,感觉好难……面试结束后搜了一下cuda前缀和的介绍,发现该问题是一个经典的cuda编程问题,NVIDIA很早之前就给出了一个快速的实现。看别人的博客研究了很久也没太明白,索性自己写一个好了。前缀和每一个位置的计算都依赖于前一个位置,这就导致无法利用规约树求和算法逐层递减问题规模。但是前缀和的每一个位置都是从0开始到当前位置的和,总感觉和规约树求和脱不了关系。原创 2024-08-08 17:37:04 · 986 阅读 · 0 评论 -
k均值图像分割的GPU加速
图像分割是指把图像分成各具特性的区域并提取出感兴趣目标的技术和过程,是从图像处理到图像分析的关键步骤。K均值聚类算法是目前最受欢迎和应用最为广泛的聚类分析方法之一。K均值聚类算法用于图像分割具有直观、快速、易于实现的特点。不过当图像很大或者k很大时,采用k均值算法进行图像分割会异常缓慢,所以我们需要对其进行加速。幸运的是,k均值算法最核心的步骤具有很高的并行性,这给我们加速带来了很大遍历。我们既可...原创 2019-06-04 17:08:45 · 2357 阅读 · 2 评论 -
cuda half编程的各种坑
自cuda7.5开始我们可以直接用half(fp16)编程,理论上速度会比float快一倍左右。理想虽好,现实却比较骨感,在实际中会遇到各种坑,最终的结果却是不一定有收益,下面把自己在用half编程中踩过的坑记录一下。1. half编程和计算能力密切相关half编程要求GPU的计算能力要大于等于5.3,这就意味着大家很多GPU不支持此功能。例如,GTX 1050之前的GPU全不支持half计算...原创 2019-05-24 18:24:24 · 9452 阅读 · 1 评论 -
cblas_sgemm和cublasSgemm参数详解
机器学习最核心的底层运算肯定是矩阵乘法无疑了,为了让矩阵乘法执行更快,大家也是绞尽脑汁。从算法层面,stranssen算法将矩阵乘法复杂度由O(n3)O(n^3)O(n3)降到O(n2.81)O(n^{2.81})O(n2.81),最新的算法好像已经降到O(n2.37)O(n^{2.37})O(n2.37)左右了(Coppersmith–Winograd algorithm),但这只是理论复杂度,...原创 2019-05-21 17:42:30 · 10565 阅读 · 1 评论 -
关于CUDA中__threadfence的理解
__threadfence函数是memory fence函数,用来保证线程间数据通信的可靠性。与同步函数不同,memory fence不能保证所有线程运行到同一位置,只保证执行memory fence函数的线程生产的数据能够安全地被其他线程消费。(1)__threadfence:一个线程调用__threadfence后,该线程在该语句前对全局存储器或共享存储器的访问已经全部完成,执行结果对原创 2013-01-15 21:20:04 · 15431 阅读 · 7 评论 -
CUDA编程常见问题
最近初试cuda编程,作为一个新手,遇到了各种各样的问题,然后花费了大量时间解决这些匪夷所思的问题。为了避免后来人重蹈覆辙,现把自己遇到的问题总结如下。(一)、cudaMalloc 初次使用该函数,感觉没有什么困难,和c语言的malloc类似。但是在具体应用中却出了一个很难找的错误,花费了很多时间。该函数使用是需要注意的就是,它分配的内存空间单位是字节,所以需要我们在使用时用siz原创 2012-11-05 10:55:07 · 19489 阅读 · 3 评论 -
cuda中模板的使用
模板是C++的一个重要特征,它可以让我们简化代码,同时使代码更整洁。CUDA中也支持模板,这给我们编写cuda程序带来了方便。不过cuda4.0之前和之后使用模板的方法不一样,这给我们带来了少许困难。在cuda4.0之前,模板的使用和C++中无区别,使用非常方便,在此不做过多介绍。不过在cuda4.0之后,由于编译器的升级,导致之前的模板使用方法不再有效,我们需要重新设计代码。如果按照之前的方原创 2013-07-09 23:45:50 · 6774 阅读 · 0 评论 -
mpi和cuda混合编程的正确编译
针对大数据的计算,很多程序通过搭建mpi集群进行加速,并取得了很好的效果。算法内部的加速,当前的并行化趋势是利用GPU显卡进行算法加速。针对并行性非常好的算法,GPU加速效果将远大于集群带来的加速效果。所以,如果我们面临非常多的数据,针对数据的处理算法有具有很好的内部并行性,则我们可以将mpi和GPU结合,获得更大的加速比。 将mpi和GPU结合的产物就是GPU集群。它可以为我们带原创 2013-07-14 23:32:36 · 13119 阅读 · 0 评论