走进blas/lapack(3)--cblas

cblas

cblas是一个C语言的接口,更方便用C来调用,而不用与fortran混合编程。因此,输入的变量不必是指针,函数名不用加上下划线,等等。下载的地址就在blas的地址blas上。

cblas只是对blas再封装了一下。底层的代码还是用fortran写的blas。这也意味着要想使用cblas,必须在链接库时把走进blas/lapack(2)中的生成的libreblas.a同时链接进去。这样一来,显得有点多此一举,所以我个人觉得没有使用cblas的必要。当然,这一点是在我安装完之后才了解到的,反正都安装了,就把教程写一下,可能以后用得上。

安装

我在官网上下载的是cblas.tgz,没有版本号。细想一下也确实没必要,只是一个外壳而已,不影响使用。

$ tar -xzvf cblas.tgz

进入cblas目录中,发现有一个makefile文件,一个makefile.in和许多makefile.*文件,星号代表的是不同的系统。我个人选择的makefile.linux文件,把已有的makefile.in文件删除,再把makefile.linux文件改名成makefile.in。再修改makefile.in中的相应内容 ,主要修改两个变量的内容

  • BLLIB:blas生成的静态库的路径
  • CBLIB:cblas库文件的安装路径及名称,名称可以取为libcblas.a

再打开makefile文件看一看有没有什么其它需要修改的地方。没有的话直接

$ make all

就可以了。

例子

还是以dgemm这个函数作为例子。在cblas中这个函数被封装为

void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,const enum CBLAS_TRANSPOSE TransB, const int M, const int N,const int K, const double alpha, const double *A,const int lda, const double *B, const int ldb,const double beta, double *C, const int ldc);

其中

  • CBLAS_ORDER:按列存储还是按行存储
  • CBLAS_TRANSPOSE:是转置还是不转置,或者是共轭

其它参数与blas中的参数没有太大区别,只是不需要全部都是指针。C的代码cb_dgemm.c为:

#include <stdio.h>
#include "cblas.h"

int main()
{
        const int dim=2;
        double a[4]={1.0,1.0,1.0,1.0},b[4]={2.0,2.0,2.0,2.0},c[4];
        int m=dim,n=dim,k=dim,lda=dim,ldb=dim,ldc=dim;
        double al=1.0,be=0.0;
        cblas_dgemm(101,111,111,m,n,k,al,a,lda,b,ldb,be,c,ldc);
        printf("the matrix c is:%f,%f\n%f,%f\n",c[0],c[1],c[2],c[3]);
        return 0;
}

cblas_dgemm()中的101的意思是按行存储,111的意思不转置,其它数字的意思在头文件cblas.h中都说明了,可以自行查看。接下来就是链接的过程了,注意要把blas的静态库链接进来。

gcc -o output -I /$(头文件路径) -L /$(库的路径) -static -lreblas -lcblas

如果生成output可执行文件,说明成功了。

总结

cblas其实也是提供了一个C语言程序接口的规范,实际使用的价值不大,这一套规范适用于ATLAS,而ATLAS是一个完全用C写的程序包,关键部分用的是汇编,接下来要说明的重点。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值