CUDA庫函數使用筆記與案例(一)

項目合做中須要整合對方公司提供的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 }

 內存管理相關庫函數指針

  • 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,總內存約1Gcode

  •  cudaHostAlloc在CPU主機分配頁鎖存內存

案例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));
相關文章
相關標籤/搜索