關於cublas庫中函數的介紹,有許多博主進行了介紹。
本文僅為個人理解記憶的角度對此函數進行說明(主要是在輸入及計算時矩陣維度的理解),由點及面,其余函數如:cublasSgemm(單精度實數)、cublasDgemm(雙精度實數)、cublasZgemm(雙精度復數)等可照此理解。
- 函數API說明
cublasCgemm( cublasHandle_t handle, cublasOperation_t transa, cublasOperation_t transb, int m, int n, int k, const cuComplex *alpha, const cuComplex *A, int lda, const cuComplex *B, int ldb, const cuComplex *beta, cuComplex *C, int ldc );
用於計算 C = α A B +β C 的,其中 Am×k 、Bk×n 、Cm×n 為矩陣,α 、β 為標量。每個參數的意義如下:
1 cublasHandle_t handle 調用 cuBLAS 庫時的句柄 2 3 cublasOperation_t transa 是否轉置矩陣A 4 5 cublasOperation_t transb 是否轉置矩陣B 6 7 int m 矩陣A的行數,等於矩陣C的行數 8 9 int n 矩陣B的列數,等於矩陣C的列數 10 11 int k 矩陣A的列數,等於矩陣B的行數 12 13 const float *alpha 標量 α 的指針,可以是主機指針或設備指針,只需要計算矩陣乘法時命 α = 1.0f 14 15 const float *A 矩陣(數組)A 的指針,必須是設備指針 16 17 int lda 矩陣 A 的主維(leading dimension) 18 19 const float *B 矩陣(數組)B 的指針,必須是設備指針 20 21 int ldb 矩陣 B 的主維 22 23 const float *beta 標量 β 的指針,可以是主機指針或設備指針,只需要計算矩陣乘法時命 β = 0.0f 24 25 float *C 矩陣(數組)C 的指針,必須是設備指針 26 27 int ldc 矩陣 C 的主維
- cuBlas中默認列優先
即調用cuBlas函數時,輸入的矩陣會按照列優先進行存儲。
- 主維
在列優先存儲中,矩陣的行數是維度的第一個分量,稱為主維。
- 矩陣輸入說明
m、n、k 是最終輸入完成后A和B的矩陣維度,以A矩陣的輸入為例進行說明:
如果不轉置,lda的含義是每次取lda個數,放成1列,總共取k次,變成lda×k的矩陣,此時一般lda等於m,最后即為m×k的矩陣。
如果轉置,lda的含義是每次取lda個數,放成一列,總共取m次,變成lda×m的矩陣,轉置后變成m×lda,此時一般lda為k,最后即為m×k的矩陣。