调用openblas库,对函数 cblas_sgemm参数的说明

 

1:函数原型:

cblas_sgemm(order,transA,transB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC);

函数作用:C=alpha*A*B+beta*C 

alpha =1,beta =0 的情况下,等于两个矩阵相成。

第一参数 oreder 候选值 有CblasRowMajow 和CblasColMajow 这两个参数决定一维数组怎样存储在内存中,

一般用ClasRowMajow

参数 transA和transB :表示矩阵A,B是否进行转置。候选参数 CblasTrans 和CblasNoTrans.

参数M:表示 A或C的行数。如果A转置,则表示转置后的行数

参数N:表示 B或C的列数。如果B转置,则表示转置后的列数。

参数K:表示 A的列数或B的行数(A的列数=B的行数)。如果A转置,则表示转置后的列数。

参数LDA:表示A的列数,与转置与否无关。

参数LDB:表示B的列数,与转置与否无关。

参数LDC:始终=N

examp1:

 

 

  1. #include <vector>  
  2. #include <iostream>  
  3. #include <cblas.h>
  4. using namespace std;  
  5. int main() {  
  6.     const int M=4;  
  7.     const int N=2;  
  8.     const int K=3;  
  9.     const float alpha=1;  
  10.     const float beta=0;  
  11.     const int lda=M;  
  12.     const int ldb=K;  
  13.     const int ldc=N;  
  14.     const float A[K*M]={1,2,3,4,5,6,7,8,9,8,7,6};  
  15.     const float B[N*K]={5,4,3,2,1,0};  
  16.     float C[M*N];  
  17.   
  18.     cblas_sgemm(CblasRowMajor, CblasTrans, CblasTrans, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);  
  19.   
  20.     for(int i=0;i<M;i++)  
  21.     {  
  22.        for(int j=0;j<N;j++)  
  23.        {  
  24.            cout<<C[i*N+j]<<" ";  
  25.        }  
  26.        cout<<endl;  
  27.     }  
  28. }
  29.   

输出:

52 7 

58 10 

64 13 

70 16 

 

 

 

 

examp2:

 

 

[cpp]  view plain  copy
 
  1. #include <vector>  
  2. #include <iostream>  
  3. #include <cblas.h>
  4. using namespace std;  
  5. int main() {  
  6.     const int M=4;  
  7.     const int N=2;  
  8.     const int K=3;  
  9.     const float alpha=1;  
  10.     const float beta=0;  
  11.     const int lda=K;  
  12.     const int ldb=N;  
  13.     const int ldc=N;  
  14.     const float A[M*K]={1,2,3,4,5,6,7,8,9,8,7,6};  
  15.     const float B[K*N]={5,4,3,2,1,0};  
  16.     float C[M*N];  
  17.       
  18.     cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);  
  19.        
  20.     for(int i=0;i<M;i++)  
  21.     {  
  22.        for(int j=0;j<N;j++)  
  23.        {  
  24.            cout<<C[i*N+j]<<" ";  
  25.        }     
  26.        cout<<endl;  
  27.     }    
  28. }   

结果:

 

14 8 

41 26 

68 44 

67 46 

原文链接:http://blog.csdn.net/zhikangfu/article/details/78258393

 

 

 

 

 

 

 

 

 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值