cublasCgemm函數使用及理解


關於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的矩陣。

 

 

 參考https://www.cnblogs.com/cuancuancuanhao/p/7763256.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM