【发布时间】:2014-01-26 18:34:16
【问题描述】:
我使用的是最新版本的 CUDA 5.5,新的 CUBLAS 具有状态性,每个函数都需要 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 那样尽可能多地重用这个句柄实例是一种好习惯吗,否则性能影响会很小,因此通过使用短暂的句柄实例来降低代码复杂度和因此不断地创建/销毁它?
【问题讨论】:
-
多个 cuBLAS 句柄创建/销毁可能会因不需要的上下文同步而中断并发。
-
另外,来自 cuBLAS 库用户指南,“
cublasCreate()[...] 在主机上分配硬件资源”,所以它的调用可能会有一些开销。 -
还值得从文档中复制一下:"因为 cublasCreate 分配了一些内部资源,调用 cublasDestroy 释放这些资源会隐式调用 cublasDeviceSynchronize,建议尽量减少cublasCreate/cublasDestroy 事件。”