# cuda编程 **Repository Path**: Hz092811/cuda-programming ## Basic Information - **Project Name**: cuda编程 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-14 - **Last Updated**: 2023-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CUDA编程学习 ## 1.1 环境搭建 参考:https://blog.csdn.net/weixin_54720578/article/details/134217297?spm=1001.2014.3001.5501 ## 1.2 案例学习 源码参考: ### 1.2.1 案例一 1)目标:将向量的每个元素加1 2)流程:(1)创建一个长度为1000的cpu向量v1并赋值为0~1000 ​ (2)创建一个长度为1000的gpu向量v2并将v1复制到v2 ​ (3)配置CUDA线程块(blockSize)和网格块(gridSize) ​ 怎么理解呢?就好像把1000个同学分为gridSize个组,每组blockSize个同学 ​ 一般来说:int blockSize = 256; int gridSize = (size + blockSize - 1) / blockSize; ​ 要保证blockSize*gridSize>size(因为要保证所有同学都有组) 因此gridSize = (size/blockSize) + 1 ​ -1是为了避免 gridSize = (size/blockSize)的情况 ​ (4)调用核函数进行计算 ​ 配置完CUDA线程块和网格块后,就开启了blockSize*gridSize个线程,这些线程都会执行核函数,那我们怎么让它完成1000个向量+1的操作呢? ​ **思想就算一个线程操作一个位置的数据** ​ 在核函数中是可以计算得到当前核函数执行的线程id(int tid = blockIdx.x * blockDim.x + threadIdx.x;) ​ /* ​ blockDim = blockSize (一个组多少人) ​ gridDim = gridSize (有多少个组) ​ blockIdx 是指该线程在的块id (在哪个组) ​ threadIdx 是指该线程的块内线程id (在这个组的第几号) ​ tid就算出了这个和函数在哪个线程上执行的 (.x是只考虑了一维的情况) ​ */ ​ 因为每个核函数执行的线程id不同,就可以利用这个线程id不同来操作v2向量不同位置的数据(但是要考虑别超过了v2的最大范围(if(tid