CUDA 笔记

CUDA笔记

cuda 内存管理

  • cuda通过内存分配、数据传递、内存初始化、内存释放进行内存管理;
Standard C FunctionCUDA C Function
malloccudaMalloc
memcpycudaMemcpy
memsetcudaMemset
freecudaFree

内存分配

  • 主机内存分配:extern void malloc(unsigned int num_bytes);
    代码:float
    fpHost_A;
    fpHost_A = (float*)malloc(nBytes);
  • 设备内存分配:
    代码: float fpDevice_A;
    cudamalloc((float
    *)&fpDevice_A, nBytes); (能在主机中调用,也能在设备中调用)
    注意:传入的地址是双重指针;

内存拷贝

  • 主机数据拷贝:void * memcpy(void* dest, const void * src, size_t n);
    memcpy((void*) d, (void*) s, nBytes);
  • 设备数据拷贝:
    代码: cudaMemcpy(Device_A, Host_A, nBytes, cudaMemcpyHostToHost) (只能在主机中调用)
    cudaMemcpyHostToHost:主机向主机中拷贝;
    cudaMemcpyHostToDevice:主机向设备中拷贝;
    cudaMemcpyDeviceToHost:设备向主机中拷贝;
    cudaMemcpyDeviceToDevice:设备向设备中拷贝;
    cudaMemcpyDeflt:默认(默认方式只允许在支持统一虚拟寻址的系统上使用)。

内存初始化

  • 主机内存初始化:void * memset (void * str, int c, size_t n);
    代码:memset (fpHost_A, 0, nBytes);
  • 设备内存初始化:
    代码:void * cudaMemset(fpDevice_A, 0, nBytes); (只在主机内存上使用)

内存释放

  • 释放主机内存:free(pHost_A);
  • 释放设备内存:cudaFree(pDevice_A); (只能在主机中调用 )

自定义设备函数

设备函数

  • 定义只能在设备上执行的GPU函数为设备函数
  • 设备函数只能被核函数和其他设备函数调用
  • 设备韩式被__device__修饰

核函数

  • 用__global__ 修饰的函数被称为核函数,一般由主机调用,在设备上执行;
  • __global__修饰符既不能核__device__修饰符一起使用,也不能和__host__修饰符一起使用。

主机函数

  • 主机端的普通C++函数可以用__host__修饰;
  • 对于主机端的函数,__host__修饰符可以省略;
  • 可以使用__host__和__device__同时修饰一个函数减少冗余代码。编译器会根据主机和设备分别编译函数。
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值