// <strong>因为程序是C++,而CBLAS是C语言写的,所以在此处用extern关键字</strong>
extern"C"
{
#include"cblas.h" // <strong>由于cblas.h文件已经拷贝到工作目录中,只需用双引号 </strong>
}
#include<iostream>
using namespace std;
int main(void) {
const enum CBLAS_ORDER Order=CblasRowMajor;
const enum CBLAS_TRANSPOSE TransA=CblasNoTrans;
const enum CBLAS_TRANSPOSE TransB=CblasNoTrans;
const int M=4;//A的行数,C的行数
const int N=2;//B的列数,C的列数
const int K=3;//A的列数,B的行数
const float alpha=1;
const float beta=0;
const int lda=K;//A的列
const int ldb=N;//B的列
const int ldc=N;//C的列
const float A[K*M]={1,2,3,4,5,6,7,8,9,8,7,6};
const float B[K*N]={5,4,3,2,1,0};
float C[M*N];
cblas_sgemm(Order, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
cout<<C[i*N+j]<<"/t";
}
cout<<endl;
}
return EXIT_SUCCESS;
}
在编译的时候需要带上cblas_LINUX.a和libblas.a
比如:g++ main.cpp cblas_LINUX.a libblas.a -o main
如果是写成Makefile文件,则修改变量OBJS = main.o cblas_LINUX.a libblas.a
当然,这里假定是这两个.a文件是放在可以直接访问的位置,或者写全路径也可以。
应用优化这个有时间再补充,现在这个时间比较尴尬。不过确实对应用起到了优化作用,运行时间从160多s降到了115s,只是简单将串行代码用函数clabs_caxpy替代。