为什么CUBLAS使用const指针作为参数?

mch*_*hen 1 pointers cuda gpgpu const cublas

例如,

cublasStatus_t cublasSgemm(cublasHandle_t handle,
                       cublasOperation_t transa, cublasOperation_t transb,
                       int m, int n, int k,
                       const float           *alpha,
                       const float           *A, int lda,
                       const float           *B, int ldb,
                       const float           *beta,
                       float           *C, int ldc)
Run Code Online (Sandbox Code Playgroud)

这涉及许多困惑点:

  • 什么是const实现?
  • 为什么我们必须为标量参数提供指针?
  • 这与这有什么关系CUBLAS_POINTER_MODE_HOST
  • 我们是否需要显式创建临时const变量来传递它们,还是普通指针会这样做?

CUBLAS图书馆

tal*_*ies 8

  1. const表示输入参数只读调用者和编译器(可能对优化产生影响)
  2. 因为使用指针而不是值,允许CUBLAS v2例程从主机或设备内存中读取(这与CUBLAS v1 API不同)
  3. 往上看.现在,CUBLAS v2调用可以从GPU内存中读取标量参数,这意味着可以消除从主机到设备的中间内存传输,并且可以提高某些类型操作的性能.CUBLAS_POINTER_MODE_HOSTCUBLAS v2 API可以使用的两种可能的指针模式之一,另一种是CUBLAS_POINTER_MODE_DEVICE.cublasSetPointerMode可用于控制v2 API的指针行为,定义将数字输入和返回值写入主机或设备内存的位置.
  4. 不.const在C中隐含地施放是合法的,但是不能合法地施放常数.C++ const_cast为此提供了转换机制.