我是cuda和cublas的新手。
我想将矩阵中的每个元素(我使用cublasSetMatrix)与标量值相乘。
我可以使用cublasscal()吗?文档说它是一个矢量。
感谢。
答案 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);