CUDA库函数使用笔记与案例(一)

本文详细介绍CUDA内存管理,包括自定义错误处理函数、获取GPU内存信息、在主机上分配页锁存内存等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目合作中需要整合对方公司提供的CUDA代码,因此需要详细学习代码中涉及的cuda函数。

CUDA Tool Kit 8.0较完整的官方说明文档:

http://docs.nvidia.com/cuda/index.html#axzz4mJF4jmiT

CUDA Runtime API函数官方详细说明网站:

https://www.cs.cmu.edu/afs/cs/academic/class/15668-s11/www/cuda-doc/html/group__CUDART.html


自定义CUDA错误处理函数HAND_ERROR

1 void HANDLE_ERROR(cudaError err)
2 {
3     if (err != cudaSuccess)
4     {
5         fprintf(stderr, "Failed to cuda function (error code %s)!\n", cudaGetErrorString(err));
6         exit(EXIT_FAILURE);
7     }
8 }

 内存管理相关库函数

  • cudaMemGetInfo 获取空闲和总的内存,单位byte,实例:
1     size_t free;
2     size_t total;
3 
4     HAND_ERROR(cudaMemGetInfo(&free, &total));

运行结果:free=840 204 288, total=1 073 741 824。空余内存约840MB,总内存约1G

  •  cudaHostAlloc在CPU主机分配页锁存内存

案例1:分配制定大小的内存

1 #define NUM 1000
2 float *h_PA;
3 HANDLE_ERROR(cudaHostAlloc((void**)&h_PA, NUM*sizeof(float), cudaHostAllocDefault));

案例2:在CPU主机分配内存,并将该内存映射到CUDA地址空间,配合cudaHostGetDevicePointer函数来获取该地址指针。

1 size_t dmaBufferBytes = 2048;
2 void *dmaBufferArray;
3 U32 *cudaMemDmaBufferArray;
4 HANDLE_ERROR(cudaHostAlloc((void **)&dmaBufferArray, dmaBufferBytes,cudaHostAllocMapped));
5 HANDLE_ERROR(cudaHostGetDevicePointer((void **)&cudaMemDmaBufferArray,(void *)dmaBufferArray, 0));

 

转载于:https://www.cnblogs.com/yuesheng/p/7140952.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值