0

我想使用 cublas 进行以下矩阵-矩阵乘法:

  cA(M by K) * cB(K by N) => cAout(M by N)

我将 cA 指定为 K 作为前导索引,并将 cB 指定为 N 作为前导索引。根据 cublas-4.0 手册,我应该这样做:

HANDLE_ERROR(cublasSgemm(hdl, CUBLAS_OP_N, CUBLAS_OP_N, M, K, N, &alpha, cA, K, cB, N, &beta, cAout, N));    

但它没有用。相反,以下代码通过字面转换 cA 和 cB 来产生预期的结果:

HANDLE_ERROR(cublasSgemm(hdl, CUBLAS_OP_N, CUBLAS_OP_N, N, K, M, &alpha, cB, N, cA, K, &beta, cAout, N));    

我使用的 cublas 版本是 4.1.28。函数参数是否有约定更改?谢谢!

4

1 回答 1

3

回想一下,CUBLAS 使用以列为主的存储约定。假设这些矩阵不是某个更大矩阵的一部分,cA 的前导维度是 M,cB 的前导维度是 K,cAout 的前导维度是 M。因此,您的 SGEMM 调用应为

HANDLE_ERROR(cublasSgemm(hdl, CUBLAS_OP_N, CUBLAS_OP_N, M, K, N, &alpha, cA, M, cB, K, &beta, cAout, M));    
于 2012-11-10T04:19:27.193 回答