CUDA基础函数

GPU内存分配回收内存的函数接口:

cudaMalloc(): 在设备端分配global memory
cudaFree(): 释放存储空间
CPU的数据和GPU端数据做数据传输的函数接口是一样的,他们通过传递的函数实参(枚举类型)来表示传输方向:

cudaMemcpy(void dst, void src, size_t nbytes, enum cudaMemcpyKind direction)

enum cudaMemcpyKind:
cudaMemcpyHostToDevice(CPU到GPU)
cudaMemcpyDeviceToHost(GPU到CPU)
cudaMemcpyDeviceToDevice(GPU到GPU)

cudaMalloc()

  1. 函数原型: cudaError_t cudaMalloc (void **devPtr, size_t size)。
  2. 函数用处:与C语言中的malloc函数一样,只是此函数在GPU的内存你分配内存。
  3. 注意事项:

3.1. 可以将cudaMalloc()分配的指针传递给在设备上执行的函数;

3.2. 可以在设备代码中使用cudaMalloc()分配的指针进行设备内存读写操作;

3.3. 可以将cudaMalloc()分配的指针传递给在主机上执行的函数;

3.4. 不可以在主机代码中使用cudaMalloc()分配的指针进行主机内存读写操作(即不能进行解引用)。

用途:向GPU申请空间,类型为int型一维数组,大小为1024,GPU上的申请到的空间的地址保存在指针gpudata中,可能有同学会对(void**)&gpudata产生疑问,为什么是这种形式?下面解释一下,指针也是变量,只不过它里面的值是另外普通变量的地址,既然是变量,那它也就有地址,也就是说指针也是有地址的,我们也可以对指针进行取址操作。

  • 第一个&,获得了gpudata的地址
  • 靠近&的*,或得了gpudata里面储存的地址
  • 第二个*,获得了gpudata里面地址对应的数据

cudaMemcpy()

  1. 函数原型:cudaError_t cudaMemcpy (void *dst, const void *src, size_t count, cudaMemcpyKind kind)
  2. 函数作用:与c语言中的memcpy函数一样,只是此函数可以在主机内存和GPU内存之间互相拷贝数据。
  3. 函数参数:cudaMemcpyKind kind表示数据拷贝方向,如果kind赋值为cudaMemcpyDeviceToHost表示数据从设备内存拷贝到主机内存。
  4. 与C中的memcpy()一样,以同步方式执行,即当函数返回时,复制操作就已经完成了,并且在输出缓冲区中包含了复制进去的内容。
  5. 相应的有个异步方式执行的函数cudaMemcpyAsync(),这个函数详解请看下面的流一节有关内容。

cudaFree()

  1. 函数原型:cudaError_t cudaFree ( void* devPtr )
  2. 函数作用:与c语言中的free()函数一样,只是此函数释放的是cudaMalloc()分配的内存。

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的数量,说实话老黄真是一个好刀客,本来性能就不行,还不停地砍性能
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值