CUDA中Unified Memory函数cudaMallocManaged的使用

CUDA的Unified Memory通过cudaMallocManaged简化内存管理,避免手动复制。在使用中,注意对结构体指针的处理:先分配结构体内存,再分配结构体内指针内存,最后赋值,以防止数据丢失。

Unified Memory是啥参见其他博主文章,主要就是简化代码,不需要各种cudamalloc和cudamemcpy。

cuda_runtime_api.h中的接口:extern host cudart_builtin cudaError_t CUDARTAPI cudaMallocManaged(void **devPtr, size_t size, unsigned int flags __dv(cudaMemAttachGlobal));
一般传前两个参数即可。

传指针时先在C代码中malloc,然后cudaMallocManaged(),再赋值,否则cudaMallocManaged()会将值重置为0,结构体内指针重置为00000000。

如果代码不能正常运行,将中文注释删掉。

简单数据类型指针:

int *a = nullptr;
a = (int*)malloc(sizeof(int));
*a = 222;
printf("%d\n", *a);//打印是222
...调用cuda函数//无法调用,会报错退出
cudaMallocManaged((void**)&a, sizeof(int));
cudaDeviceSynchronize();
printf("%d\n", *a);//打印是0
...调用cuda函数//cuda中打印也是0
*a = 222;
printf("%d\n", *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值