1

我是 cuda 和 cublas 的新手。

我想将矩阵中的每个元素(我使用 cublasSetMatrix)与一个标量值相乘。

我可以为此使用 cublasscal() 吗?文档说它是用于向量的。

谢谢。

4

1 回答 1

3

是的,假设您的矩阵是连续存储的,您也可以将其用于矩阵缩放操作。这意味着您使用平面指针做了一个普通的 cudaMalloc 来存储矩阵。在这种情况下,即使它是一个“矩阵”,它也会连续存储在内存中,因此存储看起来与向量相同。如果您有一个 MxN 矩阵,则将 MxN 作为向量中的元素数传递。

例如,类似(为了清晰/简洁而省略错误检查):

float *mymatrix, *d_mymatrix;
int size = M*N*sizeof(float);
mymatrix = (float *)malloc(size);
cudaMalloc((void **)&d_mymatrix, size);
... (cublas/handle setup)
cublasSetVector(M*N, sizeof(float), mymatrix, 1, d_mymatrix, 1);
float alpha = 5.0;
cublasSscal(handle, M*N, &alpha, d_mymatrix, 1); 
于 2012-12-27T14:50:05.343 回答