总结一些常用的host及device端函数,解释其内部具体的运行流程,包括一些重要结构体里面的变量,学习CUDA编程之后才发现,GTX 1070性能是真的差啊,被老黄阉割的不忍直视,不过这系列的显卡定位也不是数据计算的。
cudaMalloc
函数原型:extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMalloc(void **devPtr, size_t size);
用法:
| 1 |  | 
用途:向GPU申请空间,类型为int型一维数组,大小为1024,GPU上的申请到的空间的地址保存在指针gpudata中,可能有同学会对(void**)&gpudata产生疑问,为什么是这种形式?下面解释一下,指针也是变量,只不过它里面的值是另外普通变量的地址,既然是变量,那它也就有地址,也就是说指针也是有地址的,我们也可以对指针进行取址操作。
- 第一个&,获得了gpudata的地址
- 靠近&的*,或得了gpudata里面储存的地址
- 第二个*,获得了gpudata里面地址对应的数据
cudaDeviceProp结构体
- 
    name[256]:保存GPU的名字,例如:GeForce GTX 1070 
- 
    totalGlobalMem:我们通常说的显存,例如GTX 1070 8G为 8504868864 bytes 
- 
    sharedMemPerBlock:block中share memory的大小,速度比全局存储空间快,例如GTX 1070 8G为 49152 bytes 
- 
    regsPerBlock:block中register memory的大小,里面存储的寄存器 
- 
    warpSize:线程束大小 
- 
    maxThreadsPerBlock:每个block最多的thread数量 
- 
    maxThreadsDim[3]:block每个维度的最大值 
- 
    maxGridSize[3]:grid每个维度的最大值 
- 
    clockRate:GPU的时钟频率 
- 
    multiProcessorCount:GPU上SM的数量,说实话老黄真是一个好刀客,本来性能就不行,还不停地砍性能