问题很简单:我有两个矩阵 A 和 B,它们是 M 乘 N,其中 M >> N。我想先对 A 进行转置,然后将其乘以 B (A^T * B) 到将其放入 C,即 N 乘 N。我已经为 A 和 B 设置了所有内容,但是如何正确调用 cublasSgemm 而不会返回错误的答案?
我知道 cuBlas 有一个 cublasOperation_t 枚举用于预先转置事物,但不知何故我并没有正确使用它。我的矩阵 A 和 B 以行优先顺序排列,即 [ row1 ][ row2 ][ row3 ]..... 在设备内存中。这意味着要将 A 解释为 A 转置,BLAS 需要知道我的 A 是按列优先顺序排列的。我当前的代码如下所示:
float *A, *B, *C;
// initialize A, B, C as device arrays, fill them with values
// initialize m = num_row_A, n = num_row_B, and k = num_col_A;
// set lda = m, ldb = k, ldc = m;
// alpha = 1, beta = 0;
// set up cuBlas handle ...
cublasSgemm(handle, CUBLAS_OP_T, CUBLAS_OP_N, m, n, k, &alpha, A, lda, B, ldb, &beta, C, ldc);
我的问题:
我是否正确设置了 m、k、n?
lda、ldb、ldc 呢?
谢谢!