4

我正在使用最新版本的 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);

像某种 a 一样尽可能多地重用这个句柄实例是一种好习惯吗,Session或者性能影响会很小,以至于通过拥有短暂的句柄实例来降低代码复杂性更有意义,因此可以连续创建/销毁它?

4

2 回答 2

6

我认为这是一个很好的做法,原因有两个:

  1. 从 cuBLAS 库用户指南中,“cublasCreate() [...] 在主机上分配硬件资源”,这让我认为它的调用有一些开销。
  2. 多个 cuBLAS 句柄创建/销毁可能会因不需要的上下文同步而中断并发。
于 2014-01-08T22:26:08.923 回答
1

正如 CUDA 工具包在此处所述

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

于 2015-11-25T07:01:14.020 回答