开发者
资源
lapack使用毕昇3.0.0安装的简易指导以及报错处理
lapack使用毕昇3.0.0安装的简易指导以及报错处理
发表于2023/09/05
3.5k5

安装包:

https://codeload.github.com/Reference-LAPACK/lapack/tar.gz/v3.9.0

安装步骤:

  1. 使用PuTTY工具,以root用户登录服务器。

  2. 执行以下命令解压LAPACK安装包。

    cd /path/to/lapack
    tar -xvf lapack-3.9.0.tar.gz
  3. 执行以下命令进入解压后的目录。

    cd lapack-3.9.0
  4. 执行以下命令,修改编译参数文件。

    cp make.inc.example make.inc
    vim make.inc
    修改前:-CC = gcc
    修改后:-CC = clang
    ​
    修改前:-FC = gfortran
    修改后:-FC = flang
  5. 执行以下命令进行编译安装。

    make lapacklib -j96
  6. 执行以下命令将编译好的静态库移至规划目录。

    cp liblapack.a /path/to/DEPENDENCIES/lib/

错误地方:make的时候报错:

F90-S-0126-Name etime is not an intrinsic function (../INSTALL/second_INT_ETIME.f: 53) 

  0 inform,   0 warnings,   1 severes, 0 fatal for second 

make[1]: *** [<builtin>: ../INSTALL/second_INT_ETIME.o] Error 1 

make[1]: Leaving directory 'path/to/lapack/lapack-3.9.0/SRC' 

make: *** [Makefile:27: lapacklib] Error 2

解决方案:打补丁patch-lapack

patch如下:

patch-lapack:

--- make.inc        2023-09-05 19:07:47.290373140 +0800
+++ make.inc    2023-09-05 15:13:02.494373140 +0800
@@ -8,8 +8,8 @@ SHELL = /bin/sh

 #  CC is the C compiler, normally invoked with options CFLAGS.
 #
-CC = gcc
-CFLAGS = -O3
+CC = clang
+CFLAGS = -O3 -march=native

 #  Modify the FC and FFLAGS definitions to the desired compiler
 #  and desired compiler options for your machine.  NOOPT refers to
@@ -19,10 +19,10 @@ CFLAGS = -O3
 #  and handle these quantities appropriately. As a consequence, one
 #  should not compile LAPACK with flags such as -ffpe-trap=overflow.
 #
-FC = gfortran
-FFLAGS = -O2 -frecursive
+FC = flang
+FFLAGS = -O2
 FFLAGS_DRV = $(FFLAGS)
-FFLAGS_NOOPT = -O0 -frecursive
+FFLAGS_NOOPT = -O0

 #  Define LDFLAGS to the desired linker options for your machine.
 #
@@ -45,11 +45,11 @@ RANLIB = ranlib
 #TIMER = EXT_ETIME_
 #  For gfortran compiler:  SECOND and DSECND will use a call to the
 #  INTERNAL FUNCTION ETIME
-TIMER = INT_ETIME
+#TIMER = INT_ETIME
 #  If your Fortran compiler does not provide etime (like Nag Fortran
 #  Compiler, etc...) SECOND and DSECND will use a call to the
 #  INTERNAL FUNCTION CPU_TIME
-#TIMER = INT_CPU_TIME
+TIMER = INT_CPU_TIME
 #  If none of these work, you can use the NONE value.
 #  In that case, SECOND and DSECND will always return 0.
 #TIMER = NONE

打补丁:

cd /path/to/lapack/lapack-3.9.0

rm -rf make.inc

cp make.inc.example make.inc

patch -p0 &lt; patch-lapack

然后再:

make clean

make lapacklib -j96

最后在当前目录生成liblapack.a

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞