【问题标题】:Using cudaMemCpy instead of cublasSetMatrix and cublasSetVector使用 cudaMemCpy 代替 cublasSetMatrix 和 cublasSetVector
【发布时间】:2013-11-13 07:04:09
【问题描述】:

我编写了一个应用程序,它使用 cudaMalloc/cudaMemcpy 在设备上分配一个矩阵和一个向量。矩阵被定义为列优先。我现在想使用 cublas 库 (cublasSgemv) 中的一个函数将它们相乘。看来我必须使用 cudaMalloc 分配矩阵和向量的副本,并使用 cublasSetMatrix/cublasSetVector 从主机初始化它们才能使用 cublas API 函数。显然,复制所有这些内存将是昂贵的。

据我了解,cublasSetMatrix/cublasSetVector 函数只是 cudaMemCpy 的轻包装。我想知道是否可以将指向用 cudaMemCpy 初始化的数组的指针传递给 cublas API 函数?或者,是否可以以 API 可以识别的方式轻轻包装数组,这样我就可以避免所有的内存重复?

【问题讨论】:

  • 为了您的目的将矩阵视为普通数组太昂贵了?

标签: cuda gpgpu cublas


【解决方案1】:

是的,您可以使用 cudaMemcpy 代替 cublasGet/SetMatrix。 CUBLAS 也将与之合作。

【讨论】:

  • cublasSetMatrix() 和 cublasSetVector() 函数是轻量级包装器,它们自动利用一维副本(对于完整矩阵或单位步长向量)或二维副本(对于子矩阵,或非单位步长向量)。
猜你喜欢
  • 2013-05-10
  • 2022-07-12
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 2016-09-02
  • 2017-02-22
相关资源
最近更新 更多