2014-01-08 72 views
2

我使用的是最新版本的CUDA 5.5,新的CUBLAS具有有狀態的品味,其中每個功能都需要cublasHandle_t例如,我們應該在不同的調用中重用cublasHandle_t嗎?

cublasHandle_t handle; 
    cublasCreate_v2(&handle); 
    cublasDgemm_v2(handle, A_trans, B_trans, m, n, k, &alpha, d_A, lda, d_B, ldb, &beta, d_C, ldc); 
    cublasDestroy_v2(handle); 

它是一個很好的做法,重新使用此儘可能多的處理例如像某種形式的Session或對性能的影響是如此之小,它更有意義具有短住手柄,以降低代碼的複雜性實例,並因此不斷創建/銷燬它?

+2

多個cuBLAS句柄的創建/銷燬可能會因不需要的上下文同步而中斷併發。 – JackOLantern

+1

此外,從cuBLAS庫用戶指南,''cublasCreate()''分配主機上的硬件資源「,所以也許有一些開銷在它的調用。 – JackOLantern

+0

這也值得從文檔中複製:_「由於cublasCreate分配一些內部資源,通過調用cublasDestroy釋放這些資源將隱式調用cublasDeviceSynchronize,因此建議最小化cublasCreate/cublasDestroy的出現次數。」_ – Allan

回答

6

我認爲這是出於兩個原因一個很好的做法:

  1. 從CUBLAS庫用戶指南,這讓我覺得「cublasCreate()[...]主機上的硬件資源分配」其電話會有一些開銷。
  2. 多個cuBLAS句柄的創建/銷燬可能會因不需要的上下文同步而中斷併發。
1

隨着CUDA工具包國here

申請必須通過調用cublasCreate()函數初始化的句柄CUBLAS庫上下文。然後,上下文被明確地傳遞給每個後續的庫函數調用。一旦應用程序使用庫完成,它必須調用函數cublasDestory()到釋放與cuBLAS庫上下文相關聯的資源

相關問題