Cuda 用标量乘矩阵
我是cuda和cublas的新手 我想用一个标量值乘以矩阵中的每个元素(我使用了cublasSetMatrix) 我可以用cublascal()来做这个吗?文件上说这是一个向量Cuda 用标量乘矩阵,cuda,cublas,Cuda,Cublas,我是cuda和cublas的新手 我想用一个标量值乘以矩阵中的每个元素(我使用了cublasSetMatrix) 我可以用cublascal()来做这个吗?文件上说这是一个向量 谢谢。是的,假设矩阵是连续存储的,您也可以将其用于矩阵缩放操作。这意味着您使用一个普通的cudamaloc和一个平面指针来存储矩阵。在这种情况下,即使它是一个“矩阵”,它也会连续地存储在内存中,因此存储看起来就像一个向量。如果有MxN矩阵,则将MxN作为向量中的元素数传递 例如,类似(为了清晰/简洁,省略错误检查): 是
谢谢。是的,假设矩阵是连续存储的,您也可以将其用于矩阵缩放操作。这意味着您使用一个普通的cudamaloc和一个平面指针来存储矩阵。在这种情况下,即使它是一个“矩阵”,它也会连续地存储在内存中,因此存储看起来就像一个向量。如果有MxN矩阵,则将MxN作为向量中的元素数传递 例如,类似(为了清晰/简洁,省略错误检查):
是的,我用了Cudamaloc和cudaSetMatrix。很酷,看起来它在工作。矩阵何时不连续存储?谢谢。一些矩阵运算可以定义为在较大矩阵的子矩阵上。然后,子矩阵中的相邻元素并不总是连续的,如果要在子矩阵上执行此操作,则不能使用矩阵作为向量的技巧。
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);