【问题标题】:Multiply matrix by scalar将矩阵乘以标量
【发布时间】:2012-12-28 05:50:54
【问题描述】:

我是 cuda 和 cublas 的新手。

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

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

谢谢。

【问题讨论】:

    标签: cuda cublas


    【解决方案1】:

    是的,您也可以将它用于矩阵缩放操作,前提是您的矩阵是连续存储的。这意味着您使用平面指针做了一个普通的 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); 
    

    【讨论】:

    • 是的,我使用了 cudaMalloc 和 cudaSetMatrix。酷,看起来它正在工作。什么时候矩阵不连续存储?谢谢。
    • 一些矩阵运算可以定义在更大矩阵的子矩阵上。那么你的子矩阵中的相邻元素并不总是连续的,如果你想在子矩阵上这样做,你就不能使用这个矩阵作为向量的技巧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2011-04-08
    • 2018-02-23
    相关资源
    最近更新 更多