GNU 的 Fortran 编译器(gfortran)的安装参考这篇:Linux系统中GNU编译器gcc/g++/gfortran的安装。Intel 的 Fortran 编译器(ifort / ifx)参考这篇:在Linux系统下Fortran的下载以及设置MKL环境。在链接 OpenBLAS 时,几乎任何主流 Fortran 编译器都可以使用,但这里推荐使用 GNU 编译器,理由是安装方便,体积较小,且 OpenBLAS 的官方文档和社区默认测试环境通常基于 gcc/gfortran。另外,如果是已经安装了 Intel oneAPI 环境,更多调用的是 Intel 的 MKL 库,而不是 OpenBLAS 库。
OpenBLAS 的介绍参考这篇:线性代数库BLAS和LAPACK的简介,安装参考这篇:在Linux系统中安装开源的线性代数库OpenBLAS。
Fortran 代码调用 OpenBLAS 矩阵求逆的例子 openblas_test.f90:
program invert_simple
implicit none
integer, parameter :: n = 2
double precision :: a(n,n)
integer :: ipiv(n)
double precision :: work(n) ! 最小工作空间(LWORK = N)
integer :: info
! 初始化一个简单的可逆矩阵: [[2, 1], [1, 2]]
a(1,1) = 2.0d0; a(1,2) = 1.0d0
a(2,1) = 1.0d0; a(2,2) = 2.0d0
! LU 分解
call DGETRF(n, n, a, n, ipiv, info)
if (info /= 0) stop 'DGETRF failed'
! 求逆(使用最小工作空间 LWORK = N)
call DGETRI(n, a, n, ipiv, work, n, info)
if (info /= 0) stop 'DGETRI failed'
! 输出结果(应为 [[0.6667, -0.3333], [-0.3333, 0.6667]])
print *, 'Inverse:'
print *, a(1,1), a(1,2)
print *, a(2,1), a(2,2)
end program
默认 OpenBLAS 环境,动态链接编译:
gfortran -o test openblas_test.f90 -lopenblas
指定 OpenBLAS 路径,静态链接 OpenBLAS,动态链接 pthread 库,编译:
gfortran -o test openblas_test.f90 ~/OpenBLAS/lib/libopenblas.a -lpthread
指定 OpenBLAS 路径,完全静态链接编译:
gfortran -static -o test openblas_test.f90 ~/OpenBLAS/lib/libopenblas.a -lpthread
可以查看编译后的可执行文件 test 的大小,静态链接编译的文件会更大些:
16K test_1
300K test_2
1.8M test_3
推荐使用静态链接 OpenBLAS,动态链接 pthread 库,运行会更稳定些,不容易受到系统环境的影响。
编译后运行:
./test
运行结果:
Inverse:
0.66666666666666663 -0.33333333333333331
-0.33333333333333331 0.66666666666666663
【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com】