1. 线程网格、线程块、线程束 关系
2. 如何将数据放到GPU上运算
1.首先要通过cudaMalloc和cudaFree申请或释放内存 2.然后使用cudaMemcpy将数据从CPU端复制到GPU
3. CUDA 中的相关变量含义
gridDim.x – 线程网格X维度上线程块的数目
gridDim.y – 线程网格Y维度上线程块的数目
blockDim.x – 一个线程块X维度上的线程数量
blockDim.y – 一个线程块Y维度上的线程数量
threadIdx.x –线程块X维度上的线程索引
threadIdx.y –线程块Y维度上的线程索引
4. 线程束(WARPS)
同一个线程束中的所有线程同时执行,通过访存获取指令后广播至线程束所占用的SP,wrapSize固有大小32,用户不能改变
为什么线程束大小warpSize很重要?
原因:程序的分支会造成线程束中很多线程阻塞 实际情况:指令执行层面,硬件的调度是基于半个线程束而不是整个线程束,只需要将线程束一半的线程划分到同一个分支里,GPU利用率可以达到100%。