You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apptainer构建LIS迭代求解器库问题:四倍精度未启用

解决LIS库容器构建中四倍精度(Quad Precision)未启用的问题

问题诊断

报错lis_solver.c(527) : lis_solve_kernel : error ILL_ARG :Quad precision is not enabled说明:即使你在configure中指定了--enable-quad参数,LIS库编译时仍未正确启用四倍精度支持。核心原因可能是编译器环境未正确配置、configure未检测到编译器的四倍精度能力,或测试环节环境变量缺失。

解决方案

1. 确保Intel MPI环境正确加载并使用对应编译器

Intel OneAPI的setvars.sh会配置环境变量,将Intel编译器(icc/ifort)设为默认,这类编译器对四倍精度的支持更完善。修改构建脚本,确保编译LIS前正确加载环境:

source /tmp/intel/oneapi/setvars.sh > /dev/null 2>&1
# 验证编译器是否为Intel版本
echo "Current Fortran compiler: $FC"
echo "Current C compiler: $CC"

如果输出不是ifort和icc,说明环境加载失败,需检查绑定的/opt/intel路径是否包含完整的OneAPI安装包。

2. 调整configure参数,明确启用四倍精度编译

根据使用的编译器添加对应参数:

  • Intel编译器:添加-qquad编译参数强制启用四倍精度
  • GCC编译器:添加-lquadmath到LDFLAGS,确保链接四倍精度数学库

修改后的configure命令:

./configure --prefix=/usr/local --enable-f90 --enable-mpi --enable-shared --enable-saamg --enable-quad --enable-sse2 --enable-fma \
    'CFLAGS=-O3 -march=x86-64 -mtune=generic -frounding-math -fsignaling-nans -qquad' \
    'FCFLAGS=-O3 -march=x86-64 -mtune=generic -frounding-math -fsignaling-nans -qquad' \
    'LDFLAGS=-lquadmath'

3. 验证configure检测结果

在configure执行后添加日志检查,确认四倍精度已被成功启用:

grep "Quad precision" config.log

若输出为Quad precision: yes,说明检测成功;若为no,则需检查编译器版本是否支持或依赖库是否缺失。

4. 确保测试环节环境变量正确

make check时需要加载LIS库和Intel MPI的路径,避免动态链接错误:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:$INTEL_MPI_DIR/lib
make check

修改后的完整构建脚本

Bootstrap: docker
From: ubuntu:22.04

%environment
    export INTEL_MPI_DIR="/tmp/intel"
    export INCLUDE_DIR="$INTEL_MPI_DIR/include"
    export LIB_DIR="$INTEL_MPI_DIR/lib"
    export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib:$LIB_DIR"

%post -c /bin/bash
    export DEBIAN_FRONTEND=noninteractive
    export TZ=Etc/UTC
    # Install necessary dependencies
    apt update && apt upgrade -y
    apt install -y build-essential wget gfortran cmake unzip gcc g++ libgcc-10-dev libx11-dev libxext-dev libxft-dev libxmu-dev libboost-all-dev libquadmath0

    # Load Intel OneAPI environment
    source /tmp/intel/oneapi/setvars.sh > /dev/null 2>&1
    echo "FC: $FC"
    echo "CC: $CC"

    # Download and build LIS
    wget https://www.ssisc.org/lis/dl/lis-2.1.7.zip -O /tmp/lis-2.1.7.zip
    unzip /tmp/lis-2.1.7.zip -d /tmp/
    cd /tmp/lis-2.1.7

    ./configure --prefix=/usr/local --enable-f90 --enable-mpi --enable-shared --enable-saamg --enable-quad --enable-sse2 --enable-fma \
        'CFLAGS=-O3 -march=x86-64 -mtune=generic -frounding-math -fsignaling-nans -qquad' \
        'FCFLAGS=-O3 -march=x86-64 -mtune=generic -frounding-math -fsignaling-nans -qquad' \
        'LDFLAGS=-lquadmath'

    # Verify Quad precision detection
    grep "Quad precision" config.log

    make -j$(nproc)
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:$INTEL_MPI_DIR/lib
    make check
    make install

额外排查步骤

  • 若使用GCC编译器,确保gfortran版本在4.6及以上(支持__float128类型)
  • 查看config.log中关于四倍精度的检测细节,定位具体失败原因
  • 尝试单独编译四倍精度测试用例,验证库功能是否正常

内容的提问来源于stack exchange,提问作者Hamish Robertson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:40:05