![](https://img-blog.csdnimg.cn/cc57010111ee408a93e82b4534b3bcee.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
CUDA编程学习笔记
文章平均质量分 63
Cuda编程学习笔记,后续CUDA笔记已转移到https://github.com/liujf69/CUDA-Programming。
晓晓纳兰容若
Notes do not lie!
展开
-
CUDA By Example笔记--常量内存与事件
当处理常量内存时,NVIDIA硬件将单次内存读取操作广播到半线程束中(16个线程);当半线程束的每个线程都从常量内存相同地址读取数据时,GPU只会产生一次读取请求并将数据广播到每个线程中;因此,当从常量内存中读取大量数据时,产生的内存流量仅为使用全局变量的1/16;对常量内存的单次读操作可以广播到其他临近的线程,节约临近线程的读取操作;常量内存的数据将被缓存,对相同地址的连续读操作不会产生额外的内存通信量;CUDA事件的本质是一个 GPU 时间戳,其在用户指定的时间点上被记录;原创 2023-04-12 16:53:16 · 174 阅读 · 0 评论 -
CUDA By Example笔记--线程协作
CUDA 架构确保除非线程块中的每个线程都执行了 __syncthreads(),否则没有线程能够执行 __syncthreads() 之后的指令,因此 __syncthreads() 不能位于线程发散的分支中(即只有满足条件的部分线程才执行指令的代码分支,并不是所有线程都会执行该分支的指令,这种分支称为发散分支)计算每一个线程在所有线程中对应的索引值,threadIdx.x表示线程的索引,blockIdx.x表示线程块的索引,blockDim.x表示一个线程块的x长度;原创 2023-03-07 20:29:57 · 311 阅读 · 0 评论 -
CUDA By Example笔记--Julia集合的并行计算
使用 nvcc ./julia_gpu.cu -lglut -lGLU -lGL 运行时,显示 cannot find -lglut 的错误,定位 "gl_helper.h" 时(即下图所示),无法找到 “glut.h”;kernel 函数是这个例子并行计算的核心代码,通过为每一个像素点分配一个线程块,通过并行计算快速判断每一个像素点是否属于 julia 集,无需在CPU中通过循环每次只能判断一个像素点 (x, y);1-2--使用 CMake 编译源码报错。1--linux报错汇总。原创 2023-03-04 00:51:23 · 580 阅读 · 0 评论 -
CUDA By Example笔记--Cuda C并行编程实例
当启动核函数时,若将并行线程块的数量指定为N,这个并行线程块集合则称为一个线程格 (Grid);第一个线程格的blockIdx.x为 0,最后一个线程格的 blockIdx.x 为 N - 1;add(dev_a, dev_b, dev_c) 中的参数 N 表示设备在执行核函数 add() 时使用的并行线程块数量;注意事项:在启动线程块数组时,数组每一维的最大数量不能超过65 535(硬件限制),否则程序将运行失败;定义两个数组 a 和 b,通过在 GPU 上实现两个数组的并行相加;原创 2023-03-03 19:58:57 · 332 阅读 · 0 评论 -
CUDA By Example笔记--CUDA编程基本概念、cudaMalloc()和cudaMemcpy()的用法
程序参考《CUDA By Example》,需要说明的是:博主基于 linux 系统实现以下程序,"cuda.h" 和 "cuda_runtime.h" 在安装好 CUDA 后即可直接引用,相应的头文件路径为 “/usr/local/cuda-11.3/targets/x86_64-linux/include”;③ 核函数(Kernel):在 GPU 设备上执行的函数称为核函数(Kernel);② 设备(Device):将 GPU 及其内存称为设备(Device);原创 2023-03-01 18:10:46 · 1065 阅读 · 0 评论