我们应该在不同的调用中重用cublasHandle_t吗?

Sky*_*ker 3 cuda cublas

我使用的是最新版本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);
Run Code Online (Sandbox Code Playgroud)

像某种类型那样尽可能多地重用这个句柄实例是一个好习惯,Session或者性能影响是如此之小以至于通过使用短生存句柄实例来降低代码复杂性更有意义,因此不断创建/销毁它?

Jac*_*ern 6

我认为这是一个好习惯,有两个原因:

  1. 从cuBLAS Library用户指南中,"cublasCreate()[...]在主机上分配硬件资源",这让我觉得它的调用有一些开销.
  2. 多个cuBLAS句柄创建/销毁可以通过不需要的上下文同步来破坏并发性.