![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CUDA
JackZhangNJU
未来的路还很长
展开
-
CUDA学习笔记 03 cuda文件组织结构
cu和cuh都是CUDA的后缀格式,cuh是不是相当于CUDA的头文件后缀名。使用cuda的并行计算模块建议使用.cu和.cuh文件后缀编写代码,特别是出现类似>>运算符,必须使用.cu文件。原创 2017-09-18 16:05:45 · 1572 阅读 · 0 评论 -
CUDA C 编程权威指南 学习笔记:第一章 基于CUDA的异构并行计算
并行性这个主要分为任务并行和数据并行,CPU适应任务并行,GPU更假适合数据并行,虽然CPU和GPU结构类似,但是其实很不一样,CPU的核心比较重,用来处理非常复杂的控制逻辑,已优化串行程序执行GPU的核心比较轻,用于优化具有简单控制逻辑的数据并行任务,注重并行程序的吞吐量CUDACUDA提供两层API来管理GPU设备和组织线程CUDA驱动APICUDA运行时AP...原创 2018-03-01 20:20:27 · 462 阅读 · 0 评论 -
CUDA学习笔记08: 深入理解CUDA的Warp
逻辑上,所有thread是并行的,但是,从硬件的角度来说,实际上并不是所有的thread能够在同一时刻执行,接下来我们将解释有关warp的一些本质。warp是有硬件决定,目前一个warp内有32个thread,每一个thread交给一个core去执行,用一个block的warp是并行,乱序执行。warp是SM的基本执行单元。一个warp包含32个并行thread,这32个thread执行于原创 2017-10-01 14:57:12 · 1257 阅读 · 0 评论 -
CUDA学习笔记07:SM + SP + Grid + Block + Thread 关系
CUDA软硬件的区别和联系唉,又一次讨论中了两个小时,于是我决定把NVIDIA的显卡的SM等等术语搞清楚。首先我们要明确:SM(streaming multiprocessor)、SP(streaming Process)是硬件(GPU hardware)概念。而thread,block,grid,warp是软件上的(CUDA)概念。从硬件看SP:最基本的处理单元,streamin原创 2017-10-01 13:07:57 · 3939 阅读 · 0 评论 -
CUDA学习笔记05:Mem申请的所有方式
昨天小组讨论,有人一直坚持让我申请制定位置的内存,我真的是一脸懵逼,作为编程又5年的我从来没想过这个问题,就好像C++中强制你申请L1 Cache缓存那样,我内心中有万只草泥马路过:“臣妾做不到啊!!!”,为了给给所有人讲清楚CUDA编程是什么,接下来的几篇博客主要就是讲解CUDA的硬件和软件结构,首先应该写硬件部分,但是我这里想先写CUDA的内存申请部分。cudaMallocHost函数原创 2017-10-01 10:34:06 · 931 阅读 · 0 评论 -
CUDA学习笔记 04 线程ID thread Index的计算
前期写代码的时候都会困惑这个实际的threadIdx(tid,实际的线程id)到底是多少,自己写出来的对不对,今天经过自己一些小例子的推敲,以及找到官网的相关介绍,总算自己弄清楚了。在启动kernel的时候,要通过指定gridsize和blocksize才行,举下面的例子说说: dim3 gridsize(2,2); dim3 blocksize(4,4);gri原创 2017-09-18 16:15:29 · 2950 阅读 · 0 评论 -
CUDA学习笔记 02 函数三种前缀device、global、host
CUDA三种前缀分别用于在定义函数时限定该函数的调用和执行方式,如下:(1)_host_ int foo(int a){}与C或者C++中的foo(int a){}相同,是由CPU调用,由CPU执行的函数 。和我们平常写的函数是一致的。__host__ int foo(int a){ return 1;}(2)_global_ int foo(int a){}表示一原创 2017-09-18 16:02:12 · 3430 阅读 · 0 评论 -
CUDA学习笔记 01 分离式编译
当遇到这种错误的时候,如下Error:ptxas fatal : Unresolved extern function Error 255ptxas fatal : Unresolved extern function 'cudaDeviceSynchronize'上面这个错误的解决方法都是:需要分开编译文件,对应的编译参数为–relocatable-device-code={t原创 2017-09-18 15:54:37 · 1079 阅读 · 0 评论 -
CUDA随笔:CPU和GPU的联系和区别
从硬件来分析,CPU和GPU似乎很像,都有内存、cache、ALU、CU,都有着很多的核心,但是二者是有区别的。但以核心为例,CPU的核心比较重,可以用来处理非常复杂的控制逻辑,预测分支、乱序执行、多级流水等等CPU做得非常好,这样对串行程序的优化做得非常好;但是GPU的核心就是比较轻,用于优化具有简单控制逻辑的数据并行任务,注重并行程序的吞吐量。简单来说就是CPU的核心擅长完成多重复杂任务,重在逻原创 2017-11-27 22:12:52 · 2304 阅读 · 0 评论 -
CUDA学习笔记06:我们究竟能获取哪些host存储?
1、 寄存器Register 寄存器是GPU上的高速缓存器,其基本单元是寄存器文件,每个寄存器文件大小为32bit. Kernel中的局部(简单类型)变量第一选择是被分配到Register中。 特点:每个线程私有,速度快。2、 局部存储器 local memory 当register耗尽时,数据将被存储到local memory。如果每个线程中使用了过多的寄存器,或声明了大型结构体或数组原创 2017-10-01 11:04:17 · 262 阅读 · 0 评论 -
CUDA安装笔记(喜大普奔,终于成功了)
Ubuntu16.04 安装 cuda在尝试了N次撞击Ubuntu之后最终总结了如下的安装CUDA的方法。服务器版本Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-31-generic x86_64) 安装方法 1.PRE-INSTALLATION(安装前的工作) # Verify You Have a CUDA-Capable GPU $ lspci | grep原创 2017-09-08 20:47:02 · 3538 阅读 · 0 评论 -
CUDA C 编程权威指南 学习笔记:第二章 CUDA编程模型
详细细节参考书籍或者这个博客《CUDA C编程权威指南》——第2章 CUDA编程模型 2.1 CUDA编程模型概述 2.1.1 CUDA编程结构CUDA编程模型还利用GPU架构的计算能力提供了以下几个特有功能。 1. 一种通过层次结构在GPU中组织线程的方法 2. 一种通过层次结构在GPU中访问内存的方法CUDA编程模型主要是异步的,因此在GPU上进行的运算可以与主机-设备通信...原创 2018-03-02 20:57:22 · 1289 阅读 · 0 评论