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

时间:2014-01-08 15:11:24

标签: 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);

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

正如CUDA工具包在here

中所述

应用程序必须通过调用cublasCreate()函数初始化 cuBLAS库上下文的句柄。然后,将上下文显式传递给每个后续库函数调用。一旦应用程序完成使用该库,它必须将函数cublasDestory()调用释放与cuBLAS库上下文关联的资源