CUDA基础教程
CUDA编程基础教程
非主流科学家
爱好:图像处理,机器学习
展开
-
【CUDA 基础】0.0 腾讯云CUDA环境搭建
Abstract: 本文主要为不支持CUDA的电脑用户提供一个可供选择的CUDA学习环境 Keywords: 腾讯云,CUDA,GPU云开篇废话今天我们开始学习CUDA,又到了一年一次的,逼婚,催生,问工资,问成绩,炫富,炫孩子,炫工作的节日了。我还是想找个地方安安静静的看看书,身在世俗,岂能不染。Macbook我没有意思想要炫耀macbook(前几年确实是高端货),...原创 2018-06-26 17:32:09 · 847 阅读 · 0 评论 -
CUDA-F-1-0-并行计算与计算机架构
Abstract: 本文从总体上给出了CUDA编程的Big picture,后续所有的文章都在本文的基础上详细展开。 Keywords: 并行计算,串行编程,并行编程,计算机架构,并行性,异构架构,CUDA开篇废话CUDA这就正式开始了,废话就是我发现现在大家是有钱了,无论是穿着,饰品,座驾,还是谈论都是国内知名的国际一线品牌,但是我真希望他们说话能温文尔雅一些,别再公共场所吸烟,别...原创 2018-06-26 17:33:47 · 352 阅读 · 0 评论 -
CUDA-F-1-1-异构计算-CUDA
开篇废话成熟与智慧其实和年龄相关,但绝不是完全由年龄决定,少年老成的人肯定是存在的,不是长得老,而是心态成熟,当然大多数老年人其实有些事情思考起来还是老原则,所以他们有时候做事没那么周到,所以一个人的成熟程度可以看他对事物的态度,什么事都一棍子打死,不是对就是错的,这种思考方式应该还是小学生水平,能够尊重别人,允许有不同意见,这才是成熟的人,什么事只有自己是对的,或者自己听到的消息都是正确的,...原创 2018-06-26 17:37:19 · 284 阅读 · 0 评论 -
CUDA-F-2-0-CUDA编程模型概述1
Abstract: 本文介绍CUDA编程模型的简要结构,包括写一个简单的可执行的CUDA程序,一个正确的CUDA核函数,以及相应的调整设置内存,线程来正确的运行程序。 Keywords: CUDA编程模型,CUDA编程结构,内存管理,线程管理,CUDA核函数,CUDA错误处理开篇废话过年了,祝大家新年快乐,新年希望自己学习的东西能都学会 这是一只不爱学习的狗,总看电视!编程...原创 2018-06-26 17:38:44 · 319 阅读 · 0 评论 -
CUDA-F-2-1-CUDA编程模型概述2
Abstract: 本文继续上文介绍CUDA编程模型关于核函数以及错误处理部分 Keywords: CUDA核函数,CUDA错误处理开篇废话今天的废话就是人的性格一旦形成,那么就会成为最大的指向标,或者说一个人的性格思维方式能够决定这个人的全部生命轨迹,比如有人真的爱学习(比如我,嘻嘻嘻)有人真的不爱学习,没有优劣,只是两种生活态度,因为学习这个事你学一辈子也学不完人类智慧的九牛一毛...原创 2018-06-26 17:39:50 · 230 阅读 · 0 评论 -
CUDA-F-2-2-核函数计时
Abstract: 本文介绍CUDA核函数计时方法 Keywords: gettimeofday,nvprof开篇废话继续更新CUDA,同时概率和数学分析也在更新,欢迎大家访问www.face2ai.com 昨天晚上开始折腾ubuntu,上一篇用腾讯云搭建服务器来调试CUDA,现在有机器了,所以装个ubuntu准备调试cuda,但是出现了下面的纠结问题,搞了将近五个多小时,才解...原创 2018-06-26 17:41:01 · 308 阅读 · 0 评论 -
【CUDA 基础】2.4 设备信息
Abstract: 本文只介绍一个功能,如何获取设备(一个或多个)信息 Keywords: CUDA Device Information开篇废话今天跑了一天,然后晚上写了今天的代码,虽然都是printf的内容,用到的api就那么一两个,但是我还是自己打了一遍,算是深入学习一下。 我们用CUDA的时候一般有两种情况,一种自己写完自己用,使用本机或者已经确定的服务器,这时候我们只...原创 2018-06-26 17:45:44 · 228 阅读 · 0 评论 -
【CUDA 基础】3.1 CUDA执行模型概述
Abstract: 本文介绍CUDA执行模型,只比硬件高一层的抽象 Keywords: CUDA SM,SIMT,SIMD,Fermi,Kepler开篇废话废话今天说实话想说挺多,其实很多人包括我在内,知道怎么样去做一个在我们伟大社会主义体制下发点小财的人,虽然不能像马爸爸那样大富大贵,但是衣食无忧,其实这个挺容易做到,虽然这个过程可能有些不太光明正大(但已被社会广泛认同)的方式...原创 2018-06-26 17:46:35 · 682 阅读 · 0 评论 -
【CUDA 基础】3.2 理解线程束执行的本质(Part I)
Abstract: 本文介绍CUDA执行模型最核心的部分,线程束的执行实质第一部分 Keywords: CUDA分支,线程束分化开篇废话我们前面已经大概的介绍了CUDA执行模型的大概过程,包括线程网格,线程束,线程间的关系,以及硬件的大概结构,例如SM的大概结构,而对于硬件来说,CUDA执行的实质是线程束的执行,因为硬件根本不知道每个块谁是谁,也不知道先后顺序,硬件(SM)只知道...原创 2018-06-26 17:47:51 · 666 阅读 · 0 评论 -
【CUDA 基础】3.3 并行性表现
Abstract: 本文主要通过nvprof工具来分析核函数的执行效率(资源利用率) Keywords: nvprof开篇废话继续更新CUDA,前面为了加速概率论的学习停了一段CUDA,从今天开始继续CUDA和数学分析的更新,每一篇都写一点废话就相当于自己的日记了,之前很佩服那些写日记的人,因为根本不知道日记可以写些什么,但是现在看看,如果写一些文字记录自己,首先可以反思当下,其...原创 2018-06-26 17:48:50 · 240 阅读 · 0 评论 -
【CUDA 基础】2.3 组织并行线程
Abstract: 本文介绍CUDA模型中的线程组织模式 Keywords: Thread,Block,Grid开篇废话一天写两段废话也是有点累了,天天写废话,后面可以开个系列叫做废话。写一句吧,做研究别有民科精神就好,用自己的理论A证明自己的理论B,在用理论B证明理论A的这种循环证明,还坚持不懈的那种不可取。2.0 CUDA编程模型中我们大概的介绍了CUDA编程的几个关键点...原创 2018-06-26 17:50:58 · 338 阅读 · 0 评论 -
【CUDA 基础】3.4 避免分支分化
Abstract: 介绍规约问题中的分支分化问题 Keywords: 规约问题,分支分化 此篇有些结果和参考书中结果相反,需要更深入的技术才能解决开篇废话我坚持写博客是因为我上次最困惑最难过的那段时间通过写博客改变了我的非常不好的情况,所以我认为写些东西梳理自己的思路能够改变我的生活,所以我会一直坚持,学习的内容是没有止境的,所以博客也可以写很多。 写博客为了收入我之前也想过,...原创 2018-06-26 17:52:45 · 1582 阅读 · 0 评论 -
【CUDA 基础】3.5 展开循环
Abstract: 本文介绍循环展开技术,在归约的基础上继续加速。 Keywords: 展开归约,归约,模板函数开篇废话博客从CSDN那边截流了一些流量,现在网站访问突然增多到让我有点不适应,于是,想想还是别总盯着流量看吧,注意文章质量,同时保证一定的更新,从数学到算法,最后到实现,优化,这些都做好,估计访问量会更多了。 到时候我就可以挂广告了,然后挣了钱吃煎饼就可以加个鸡蛋了...原创 2018-06-26 17:53:44 · 794 阅读 · 0 评论 -
【CUDA 基础】3.6 动态并行
Abstract: 本文介绍CUDA动态并行——在设备上运行时的网格启动新的子网格 Keywords: 动态并行,嵌套执行动态并行本文作为第三章CUDA执行模型的最后一篇介绍动态并行,书中关于动态并行有一部分嵌套归约的例子,但是我认为,这个例子应该对我们用途不大,首先它并不能降低代码复杂度,其次,其运行效率也没有提高,动态并行,相当于串行编程的中的递归调用,递归调用如果能转换成迭...原创 2018-06-26 17:54:42 · 1300 阅读 · 0 评论 -
【CUDA 基础】4.0 全局内存
Abstract: 本文为学习CUDA编程的第四章的概要,主要介绍第四章研究的对象 Keywords: 全局内存,CUDA内存模型,CUDA内存管理,全局内存编程,全局内存访问模式,全局内存数据布局,统一内存编程,提高内存吞吐量。本章内容上一章我们整个一章都在研究CUDA的执行模型,必须承认执行模型中,核的配置,决定了程序执行效率,但是程序的执行效率不只由线程束,线程块等执行结构...原创 2018-06-26 17:55:43 · 370 阅读 · 2 评论 -
【CUDA 基础】4.1 内存模型概述
Abstract: 本文介绍CUDA编程的内存模型个概述,主要讲解CUDA包含的几种内存,以及各种内存的主要特点和用途,这篇作为内存部分地图一样,指导我们后面的写作和学习。 Keywords: CUDA内存模型,CUDA内存层次结构,寄存器,共享内存,本地内存,常量内存,纹理内存,全局内存开篇废话废话少说,我们直接进入主题,如果说我进入写程序的行业的印象最深刻的一本书,看过我博客...原创 2018-06-26 17:57:14 · 1406 阅读 · 0 评论 -
【CUDA 基础】4.2 内存管理
Abstract: 本文主要介绍CUDA内存管理,以及CUDA内存模型下的各种内存的特点。 Keywords: CUDA内存管理,CUDA内存分配和释放,CUDA内存传输,固定内存,零拷贝内存,统一虚拟寻址,统一内存寻址开篇废话迷茫和困惑会影响我们的前进,彻底摆脱也许不太可能,但是我们必须肯定信仰的力量,专注你所热爱的,就会走出迷雾。CUDA编程的目的是给我们的程序加速,尤其...原创 2018-06-26 17:58:04 · 787 阅读 · 0 评论 -
【CUDA 基础】4.3 内存访问模式
Abstract: 本文介绍内存的访问过程,也就是从应用发起请求到硬件实现的完整操作过程,这里是优化内存瓶颈的关键之处,也是CUDA程序优化的基础。 Keywords: 内存访问模式,对齐,合并,缓存,结构体数组,数组结构体开篇废话 “物有本末,事有终始,知所先后,则近道矣” ——《大学·大学之道章》这句话出自大学,大学非我们现在上的大学,而我不知道我们现在的大学...原创 2018-06-26 17:59:16 · 576 阅读 · 0 评论 -
【CUDA 基础】4.4 核函数可达到的带宽
Abstract: 本文通过矩阵转置这一个例子,调整,优化核函数,使其达到最优的内存带宽 Keywords: 带宽,吞吐量,矩阵转置开篇废话下面是废话,与本文知识无关,可以直接跳到下面红字处开始本文知识的学习。 废话继续,这两天没更新博客了,上一篇是转发的MIT人工智能实验室的研究指南,也就是告诉刚入学的研究生怎么做研究,要怎么积累,那篇文章发表在1988年,MIT的AI实验室...原创 2018-06-26 18:00:32 · 1680 阅读 · 1 评论 -
【CUDA 基础】4.5 使用统一内存的向量加法
Abstract: 使用统一内存的CUDA程序——向量加法 Keywords: 统一内存,Uniform Memory开篇废话本文太短,不说废话。 本文是前面关于统一内存的补充 参考:https://face2ai.com/CUDA-F-4-2-%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/统一内存矩阵加法统一内存的基本思路就是减少指向...原创 2018-06-26 18:01:25 · 372 阅读 · 0 评论 -
【CUDA 基础】5.0 共享内存和常量内存
Abstract: 本文是第五章关于CUDA共享内存和常量内存的概述 Keywords: 共享内存,常量内存开篇废话本文是CUDA第五章的概论,来给出本章的大概思路,文章短小,不说废话。共享内存和常量内存在本章中,我们要学习: - 数据在共享内存中的安排 - 二维共享内存到线性全局内存的索引转换 - 解决不同访问模式中的存储体中的冲突 - 在共享内存中缓存数据...原创 2018-06-26 18:02:08 · 416 阅读 · 0 评论 -
【CUDA 基础】5.1 CUDA共享内存概述
Abstract: 本文为CUDA内存的概述,介绍共享内存的模型,分配,访问,配置,同步等内容 Keywords: 模型,分配,访问,配置,同步开篇废话这里首先要进一步说明一下,前面我们在说缓存的时候说其是可编程的,这是不准确的,应该说是可以控制的,而我们今天要说的共享内存才是真正意义上的可编程的。 废话不多说了,一套CUDA内容写到现在,一大半已经进行完了,希望我们在一个系列...原创 2018-06-26 18:02:57 · 799 阅读 · 0 评论 -
【CUDA 基础】5.2 共享内存的数据布局
Abstract: 本文主要研究几个关于共享内存的例子,以此来了解共享内存的性质,为我们的核函数加速 Keywords: 行主序,列主序,填充与无填充,从线程索引体映射数据元素开篇废话同一个东西,A花大工夫做到极致,成本100,售价200;C模仿A的做法快速的通过仿制,节省了研发试验的所有开销,但是没有做到A那么完美,成本25,售价140。A虽然好但是不见得销量有C高,并且A的利...原创 2018-06-26 18:04:02 · 612 阅读 · 0 评论 -
【CUDA 基础】5.3 减少全局内存访问
Abstract: 本文介绍使用共享内存进行归约,并比较全局内存归约与共享内存归约之间的性能差距 Keywords: 共享内存,归约开篇废话逻辑是非常重要的,一旦你学会了逻辑,很多假的东西你可以轻松的识别出来,这会使你更加强大而不会被任何人或者组织洗脑。 废话少说,开始今天的博客。 使用共享内存的主要原因就是减少对全局内存的访问,来减少不必要的延迟,第三章我们学过了归约,可以...原创 2018-06-26 18:07:09 · 333 阅读 · 0 评论 -
【CUDA 基础】5.4 合并的全局内存访问
Abstract: 本文介绍使用共享内存进行矩阵转置以减少内存的交叉访问 Keywords: 合并,转置开篇废话没废话,看以前的废话感觉自己像个傻瓜。。就像以后看我正在写的文字一样。 还记得我们矩阵转置的例子么,在全局内存部分介绍的:4.4核函数可达到的带宽 在4.4中我们当时只有共享内存这一种工具可以使用,为了达到最高效率,我们要配合一级缓存,二级缓存进行编程,来提高转置的...原创 2018-06-26 18:08:02 · 575 阅读 · 0 评论 -
CUDA-F-5-5-常量内存
title: 【CUDA 基础】5.5 常量内存 categories: - CUDA - Freshman tags: - CUDA常量内存 - CUDA只读缓存 toc: truedate: 2018-06-06 06:20:07Abstract: 本文介绍另外两种内存——常量内存,只读缓存 Keywords: CUDA常量内存,CU...原创 2018-06-26 18:08:58 · 390 阅读 · 0 评论 -
【CUDA 基础】5.6 线程束洗牌指令
Abstract: 本文介绍线程束洗牌指令的用法 Keywords: 线程束洗牌指令开篇废话赶紧写博客,少说废话。 前面介绍了共享内存,常量内存,只读内存的使用,今天我们来研究一个比较特殊的机制,名字也很特殊,叫做线程束洗牌指令。 支持线程束洗牌指令的设备最低也要3.0以上, 洗牌指令,shuffle instruction作用在线程束内,允许两个线程见相互访问对方的寄存器...原创 2018-06-26 18:09:50 · 1045 阅读 · 0 评论 -
【CUDA 基础】6.0 流和并发
Abstract: 本文是第六章的概述,本章也是Freshman的最后一个章节。 Keywords: 流,事件,网格级并行,同步机制,NVVP 开篇废话本文是Freshman系列的最后一篇,考虑到接下来要说的是比较高级的内容,所以把其划分到下个系列中,作为进阶内容介绍,所以本章是初级阶段的收尾。本章内容本章主要介绍下面内容: - 理解流和事件的本质 - 理解网格级并...原创 2018-06-26 18:10:42 · 366 阅读 · 0 评论 -
【CUDA 基础】6.1 流和事件概述
Abstract: 本文介绍CUDA中流和事件的理论描述。 Keywords: 流,事件开篇废话今天没废话,废话太多影响效率�� 前面几章我们一直围绕GPU设备展开,我们的代码除了在核函数的配置的部分研究过主机端执行的代码,其他部分基本都是在设备代码上进行的,这一章我们就从主机端来讲讲如何优化CUDA应用。 CUDA流:一系列异步CUDA操作,比如我们常见的套路,在主机端分配...原创 2018-06-26 18:11:32 · 924 阅读 · 0 评论 -
【CUDA 基础】6.2 并发内核执行
Abstract: 本文介绍内核的并发执行,以及相关的知识 Keywords: 流,事件,深度优先,广度优先,硬件工作队列,默认流阻塞行为开篇废话没有废话,继续前面的内容,上文中我们说到了流,事件和同步等的概念,以及一些函数的用法,接下来的几个例子,介绍并发内核的几个基本问题,包括不限于以下几个方面: - 使用深度优先或者广度优先方法的调度工作 - 调整硬件工作队列 - 在...原创 2018-06-26 18:12:27 · 1234 阅读 · 1 评论 -
【CUDA 基础】6.3 重叠内和执行和数据传输
Abstract: 本文介绍如何利用流的重叠来隐藏主机到设备的数据传输延迟 Keywords: 深度优先,广度优先开篇废话热烈庆祝上证跌破3000点。如果股市是一个国家经济最好的衡量标准之一的话,我们的中国梦该醒醒了。 前面一节我们主要研究多个内核在不同流中的不同行为,主要使用的工具是NVVP,NVVP是可视化的非常实用的工具,值得大家深入研究一下。 Fermi架构和Kepl...原创 2018-06-26 18:13:15 · 604 阅读 · 0 评论 -
【CUDA 基础】6.5 流回调
Abstract: 本文介绍流回调 Keywords: 流回调流回调流回调是一种特别的技术,有点像是事件的函数,这个回调函数被放入流中,当其前面的任务都完成了,就会调用这个函数,但是比较特殊的是,在回调函数中,需要遵守下面的规则 - 回调函数中不可以调用CUDA的API - 不可以执行同步流函数有特殊的参数规格,必须写成下面形式参数的函数;void CUDART_...原创 2018-06-26 18:14:19 · 968 阅读 · 0 评论