LAPACK windows visual studio 开发安装
2025年4月25日 更新,采用Inter MKL替代BLAS和LAPACK
安装Inter Fortran Essentials时,也会安装MKL,默认位置如下:
C:\Program Files (x86)\Intel\oneAPI\mkl
使用时,添加宏定义BLA_VENDOR 为Intel10_64lp(大多数情况下可用,超大数据场景时采用Intel10_64ilp),
cmake找不到库时添加宏定义CMAKE_PREFIX_PATH,指定为MKL路径即可。
并且MKL好像比OpenBLAS更加稳定。推荐用MKL
2025年4月25日 更新,采用OpenBLAS替代BLAS和LAPACK
OpenBLAS是BLAS和LAPACK的兼容版本,采用OpenBLAS可以直接替代BLAS和LAPACK。
直接去这里下载https://github.com/OpenMathLib/OpenBLAS的预编译版本。
下载完解压放到第三方库目录后,
用CMAKE编译其他第三方库如suitesparse等
编译时需要点击Add Entry添加BLA_VENDOR宏定义为OpenBLAS。
另外cmake自带的FindLAPACK.cmake和FindBLAS.cmake(可能是在这个位置D:\Program Files\CMake\share\cmake-3.25\Modules)默认查找的是openblas.lib。看你下载的OpenBLAS库的库名称是什么,如果不是openblas.lib,需要修改,如实际上可能是libopenblas.lib。那么修改如下:
把FindLAPACK.cmake和FindBLAS.cmake文件的上述行的openblas修改为libopenblas。这样cmake就会查找libopenblas.lib库了。
如果Configure还是找不到,添加CMAKE_PREFIX_PATH指定库路径。
添加CMAKE_FIND_DEBUG_MODE为ON,查看debug信息。
===========================================================
下面是正常安装LAPACK库的步骤
1.下载Inter Fortran Essentials
下载地址
https://www.intel.com/content/www/us/en/developer/tools/oneapi/hpc-toolkit-download.html?packages=fortran-essentials&fortran-essentials-os=windows&fortran-essentials-win=offline
下载后,按照提示安装
2.下载lapack
下载地址
https://icl.utk.edu/lapack-for-windows/lapack/index.html#lapacke
下载后打开CMAKE,进行编译。注意需要指定fortran 编译器。选择前面安装的Fortran编译器的位置
生成工程后,打开visual studio 2019进行编译安装。
运行测试可能会失败,那是由于其他原因。安装成功后可以采用程序进行验证是否成功。
3. 测试代码
program test_dgels
implicit none
integer, parameter :: m = 4, n = 2
integer :: info, lwork
real(8) :: a(m, n), b(m), work(100)
! 定义矩阵 A 和右侧向量 B
a = reshape([1.0, 2.0, 3.0, 4.0, &
5.0, 6.0, 7.0, 8.0], [m, n])
b = [1.0, 2.0, 3.0, 4.0]
! 查询最佳工作数组大小
lwork = -1
call dgels('N', m, n, 1, a, m, b, m, work, lwork, info)
lwork = int(work(1))
! 调用 DGELS 求解最小二乘问题
call dgels('N', m, n, 1, a, m, b, m, work, lwork, info)
if (info == 0) then
print *, "Least squares solution vector X:"
print *, b(1:n)
else
print *, "Error in least squares solution. Info =", info
end if
read(*,*)
end program test_dgels
program test_dgesv
implicit none
integer, parameter :: n = 3
integer :: info, ipiv(n)
real(8) :: a(n, n), b(n)
! 定义系数矩阵 A 和右侧向量 B
a = reshape([3.0, 1.0, 2.0, &
1.0, 4.0, 1.0, &
2.0, 1.0, 5.0], [n, n])
b = [6.0, 7.0, 8.0]
! 调用 DGESV 求解
call dgesv(n, 1, a, n, ipiv, b, n, info)
if (info == 0) then
print *, "Solution vector X:"
print *, b
else
print *, "Error in solving the system. Info =", info
end if
end program test_dgesv