Skip to content

SpacemiT X60 / Milk-V Jupiter 编译 llama.cpp 时部分 IME 指令检测失败,如何获取正确的 GCC/toolchain? #40

Description

@nowang6

Git commit

硬件环境

  • Board: Milk-V Jupiter
  • SoC: SpacemiT K1/M1
  • CPU: SpacemiT X60
  • Architecture: RISC-V RV64
  • OS: Linux
  • CPU cores: 8
  • llama.cpp: current source tree

/proc/cpuinfo 显示:

model name      : Spacemit(R) X60
uarch           : spacemit,x60
isa             : rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt

从 /proc/cpuinfo 看,CPU 支持:

  • RV64
  • RVV
  • Zfh / Zfhmin
  • Zvfh / Zvfhmin
  • Zba / Zbb / Zbc / Zbs
  • Zicbom
  • Zihintpause
  • 以及其他 RISC-V 扩展

当前 GCC

系统 GCC 位于:

/usr/bin/gcc
/usr/bin/g++

之前 CMake 因环境变量错误使用了不存在的 clang:

CC=/usr/bin/clang
CXX=/usr/bin/clang++

实际系统中不存在:

/usr/bin/clang
/usr/bin/clang++

清除 CC/CXX 后,CMake 已经可以正常检测 RISC-V/SpacemiT 编译器。

llama.cpp CMake 配置

使用:

cmake -B build \
    -DCMAKE_BUILD_TYPE=Release \
    -DGGML_CPU_RISCV64_SPACEMIT=ON \
    -DGGML_CPU_REPACK=OFF \
    -DLLAMA_OPENSSL=OFF \
    -DGGML_RVV=ON \
    -DGGML_RV_ZVFH=ON \
    -DGGML_RV_ZFH=ON \
    -DGGML_RV_ZICBOP=ON \
    -DGGML_RV_ZIHINTPAUSE=ON \
    -DGGML_RV_ZBA=ON \
    -DCMAKE_TOOLCHAIN_FILE=${PWD}/cmake/riscv64-spacemit-linux-gnu-gcc.cmake \
    -DCMAKE_INSTALL_PREFIX=build/installed

CMake 检测结果

CMake 可以成功检测到部分 SpacemiT 扩展:

-- Performing Test SPACEMIT_RISCV_COMPILER_SUPPORT_IME1
-- Performing Test SPACEMIT_RISCV_COMPILER_SUPPORT_IME1 - Success

-- Performing Test SPACEMIT_RISCV_COMPILER_SUPPORT_VMADOTN
-- Performing Test SPACEMIT_RISCV_COMPILER_SUPPORT_VMADOTN - Success

但是以下指令检测失败:

SPACEMIT_RISCV_COMPILER_SUPPORT_VMADOT_S4
SPACEMIT_RISCV_COMPILER_SUPPORT_VMADOT_S8
SPACEMIT_RISCV_COMPILER_SUPPORT_VFWMADOT_FP16
SPACEMIT_RISCV_COMPILER_SUPPORT_VFMADOT_S4
SPACEMIT_RISCV_COMPILER_SUPPORT_VFMADOT_S8
SPACEMIT_RISCV_COMPILER_SUPPORT_VPACK
SPACEMIT_RISCV_COMPILER_SUPPORT_VNPACK

最终 CMake 确定:

RISCV64_SPACEMIT_IME_SPEC: RISCV64_SPACEMIT_IME1

但随后因为没有设置 SPERT_DIR 而停止:

CMake Error at ggml/src/ggml-cpu/CMakeLists.txt:461 (message):

  SPERT_DIR is not set. Point it at the extracted spine-runtime release
  (with include/ and lib/).

spine-runtime

我已经准备了:

/home/niwang/spine-runtime.riscv64.0.6.3

计划通过:

-DSPERT_DIR=/home/niwang/spine-runtime.riscv64.0.6.3

提供给 CMake。

1. 推荐使用哪个 GCC/toolchain?

当前系统 GCC 可以检测到:

IME1       Success
VMADOTN    Success

但无法检测:

VMADOT_S4
VMADOT_S8
VFWMADOT_FP16
VFMADOT_S4
VFMADOT_S8
VPACK
VNPACK

请问 SpacemiT X60/K1 是否需要使用 SpacemiT 官方定制 GCC/toolchain,才能完整支持这些 IME 指令?

如果需要,应该从哪里获取对应版本的 GCC/toolchain?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions