做并行规约时,如何确定共享内存和网格的大小
注:1、这里记录使用笔记,不对cuda的名词做解释,没有详细数学原理和代码。
2、环境:cuda8.0,vs2013,GTX1650
3、理解错误请指出来
1、为什么要确定共享内存和网格大小
做并行规约时,可以使用共享内存和全局内存,如果使用共享内存,写代码之前,有两件事情需要确定一下,一是共享内存要多大,另一个是网格要多大。
在使用共享内存时,需要将全部的数据拷贝到共享内存中,才能进行并行规约,否则求出的结果只是部分数据的结果。
2、共享内存大小定义
个人理解,共享内存一般定义为一个块的大小。1650显卡,一个块有1024个线程,这里假设我们的块大小为32 * 32=1024个线程。
如果图像的大小为512 * 1024,需要512个block,定义块的大小为512 * 1 * 1。
通过运行安装例程,可直接查看设备的情况
进入到安装路径
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\1_Utilities\deviceQuery