問題は単純です: 私は 2 つの行列 A と B を持っています。これらは M × N であり、ここで M >> N です。最初に A の転置を取り、それを B (A^T * B) で乗算して、これを C に入れます。これは N x 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はどうですか?
ありがとう!