完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
BLAS(基本线性代数子程序)是提供用于执行基本矢量和矩阵运算的标准构建块的例程。1级BLAS执行标量,矢量和矢量运算,2级BLAS执行矩阵矢量运算,3级BLAS执行矩阵运算。由于BLAS高效,便携且广泛可用,因此它们通常用于软件开发中高质量的线性代数运算。CBLAS是BLAS的C语言版本。 CBLAS移植过程如下: 1、从官网下载 blas-3.8.0.tgz 和 cblas.tgz 并解压,分别得到两个目录:BLAS-3.8.0 和 CBLAS 2、编译 blas 和 cblas 进入到 BLAS-3.8.0 目录下,执行如下命令: 注:本人 主机的arm教程编译工具链目录为:/opt/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf,仅仅是两条命令,没必要设置环境变量,直接采用绝对路径,简单粗暴。 /opt/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gfortran -c -O3 *f /opt/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ar rv libblas.a *.o 此时可以看到当前目录下,已经生成了库文件:libblas.a 把 libblas.a 拷贝到 CBLAS/testing 目录下(必不可少的一步,否则编译CBLAS的testing的时候会报错),并建立针对 ARM 的 Makefile.in 。我的是直接修改的 Makefile.LINUX (已备份),主修改后的文件如下: # # Makefile.LINUX # # # If you compile, change the name to Makefile.in. # # #----------------------------------------------------------------------------- # Shell #----------------------------------------------------------------------------- SHELL = /bin/sh #----------------------------------------------------------------------------- # Platform #----------------------------------------------------------------------------- PLAT = ARM #----------------------------------------------------------------------------- # Libraries and includs #----------------------------------------------------------------------------- BLLIB = libblas.a CBLIB = ../lib/cblas_$(PLAT).a #----------------------------------------------------------------------------- # Compilers #----------------------------------------------------------------------------- CC = arm-linux-gnueabihf-gcc FC = arm-linux-gnueabihf-gfortran LOADER = $(FC) #----------------------------------------------------------------------------- # Flags for Compilers #----------------------------------------------------------------------------- CFLAGS = -O3 -DADD_ FFLAGS = -O3 #----------------------------------------------------------------------------- # Archive programs and flags #----------------------------------------------------------------------------- ARCH = arm-linux-gnueabihf-ar ARCHFLAGS = r RANLIB = echo 修改完成 Makefile.in 文件后,执行如命令: # 删除原有的 Makefile.in 文件 rm Makefile.in # 建立对应架构的Makefile.in 文件 ln -s Makefile.LINUX Makefile.in # 设置环境变量,否则找不到交叉编译工具链 export PATH=/opt/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin:$PATH #编译源码,静待结束 make 3、应用示例 今天看到有朋友回复的问题,在引用生成的静态库时,出现了编译不过的问题,故而添加以下内容,希望有所帮助。 通过以上方式,编译出cblas_ARM.a和libblas.a后,把两个库文件以及cblas.h(目录: CBLAS/include/cblas.h)拷贝到工程目录下,然后编译输出可执行程序即可。盗用一下回复中的例子: extern "C" { #include "cblas.h" } #include 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 cout< return 1; } 把以上的代码保存成 main.cpp,然后把 cblas_ARM.a、libblas.a、cblas.h拷贝到main.cpp的同级目录下,通过以下命令编译生成可执行程序 main,详见下图: /opt/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ main.cpp cblas_ARM.a libblas.a -o main -lgfortran ![]() |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【米尔-国产瑞芯微RK3568开发板试用体验】评测一 系统配置
1199 浏览 0 评论
1419 浏览 0 评论
2547 浏览 1 评论
如何配置Linux操作系统设备树让我的开发板可以将板子上的GPIO接口用作 I2S输出??
2767 浏览 1 评论
1667 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-1 08:26 , Processed in 0.759565 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191