項目合做中須要整合對方公司提供的CUDA代碼,所以須要詳細學習代碼中涉及的cuda函數。html
CUDA Tool Kit 8.0較完整的官方說明文檔:app
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_ERRORspa
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 }
內存管理相關庫函數指針
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,總內存約1Gcode
案例1:分配製定大小的內存htm
1 #define NUM 1000 2 float *h_PA; 3 HANDLE_ERROR(cudaHostAlloc((void**)&h_PA, NUM*sizeof(float), cudaHostAllocDefault));
案例2:在CPU主機分配內存,並將該內存映射到CUDA地址空間,配合cudaHostGetDevicePointer函數來獲取該地址指針。blog
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));