通过标量乘以矩阵

时间:2012-12-27 14:38:17

标签: cuda cublas

我是cuda和cublas的新手。

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

我可以使用cublasscal()吗?文档说它是一个矢量。

感谢。

1 个答案:

答案 0 :(得分: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);