项目合作中需要整合对方公司提供的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));