使用cudaMemCpy代替cublasSetMatrix和cublasSetVector

使用cudaMemCpy代替cublasSetMatrix和cublasSetVector,cuda,gpgpu,cublas,Cuda,Gpgpu,Cublas,我编写了一个应用程序,使用cudamaloc/cudaMemcpy在设备上分配矩阵和向量。矩阵定义为主列。现在,我想使用cublas库(CublashGemv)中的函数将它们相乘。看来,为了使用cublasapi函数,我必须使用cudamaloc分配矩阵和向量的副本,并使用cublasSetMatrix/cublasSetVector从主机初始化它们。显然,复制所有这些内存将是昂贵的 据我所知,cublasSetMatrix/cublasSetVector函数只是cudaMemCpy的简单包装。

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


据我所知,cublasSetMatrix/cublasSetVector函数只是cudaMemCpy的简单包装。我想知道是否有可能将指向用cudaMemCpy初始化的数组的指针传递给cublasapi函数?或者,是否可以以API可以识别的方式轻松包装阵列,从而避免所有内存复制?

是的,您可以使用cudaMemcpy而不是cublasGet/SetMatrix。库布拉斯也会处理这个问题

出于您的目的,将矩阵视为普通数组太昂贵了?cublasSetMatrix()和cublasSetVector()函数是一种轻型包装器,可自动使用1D副本(用于完整矩阵或单位步长向量)或2D副本(用于子矩阵或非单位步长向量)。