首页
/ OpenBLAS在LoongArch64架构下的CMake构建问题与解决方案

OpenBLAS在LoongArch64架构下的CMake构建问题与解决方案

2025-06-01 17:22:12作者:郦嵘贵Just

前言

OpenBLAS作为一个高性能的线性代数计算库,在多种CPU架构上都有着广泛的应用。近期在LoongArch64架构(龙芯3A6000处理器)上使用CMake构建OpenBLAS 0.3.26和0.3.27版本时,开发者遇到了一些构建问题。本文将详细分析这些问题及其解决方案,帮助LoongArch64平台的用户顺利构建OpenBLAS。

问题一:CMake命令缺失错误

现象描述

在使用CMake配置OpenBLAS项目时,系统报告"Unknown CMake command CHECK_CXX_COMPILER_FLAG"错误。这个问题源于CMake脚本中使用了C++编译器标志检查命令,但项目本身并未包含必要的CMake模块。

根本原因

OpenBLAS的CMake构建系统在LoongArch64架构检测部分使用了CHECK_CXX_COMPILER_FLAG命令来验证ABI支持情况,但项目配置中:

  1. 没有包含CheckCXXCompilerFlag模块
  2. 项目定义中未声明C++语言支持(project命令中缺少CXX)

解决方案

提供了两种解决路径:

方案一(推荐)

  1. 在CMakeLists.txt或cc.cmake文件顶部添加:include(CheckCCompilerFlag)
  2. 将cc.cmake和fc.cmake文件中关于LOONGARCH64的部分修改为使用C编译器标志检查:
    • CHECK_CXX_COMPILER_FLAG("-mabi=lp64d" COMPILER_SUPPORT_LP64D_ABI)改为CHECK_C_COMPILER_FLAG("-mabi=lp64d" COMPILER_SUPPORT_LP64D_ABI)
    • CHECK_CXX_COMPILER_FLAG("-mabi=ilp32d" COMPILER_SUPPORT_ILP32D_ABI)改为CHECK_C_COMPILER_FLAG("-mabi=ilp32d" COMPILER_SUPPORT_ILP32D_ABI)

方案二

  1. 在CMakeLists.txt或cc.cmake文件顶部添加:include(CheckCXXCompilerFlag)
  2. 修改项目定义:将project(OpenBLAS C ASM)改为project(OpenBLAS C ASM CXX)

推荐使用方案一,因为它避免了不必要的C++编译器依赖,更符合OpenBLAS作为C语言项目的本质。

问题二:汇编语法错误

现象描述

在构建过程中,汇编器报告错误:"error: no match insn: fsub.s f9,f9,f9,$f9,"。这是由于LoongArch64汇编代码中存在语法错误导致的构建失败。

问题分析

在文件kernel/loongarch64/dot_lasx.S的第168行,浮点减法指令fsub.s的格式不正确,在操作数和注释之间多了一个逗号:

fsub.s    s2,     s2,      s2,  /* set s2 to 0.0 */

同样的问题也存在于kernel/loongarch64/dot_lsx.S文件的相同位置。

解决方案

删除多余的逗号,修正后的指令应为:

fsub.s    s2,     s2,      s2  /* set s2 to 0.0 */

构建建议

对于LoongArch64平台的用户,建议使用以下CMake配置命令:

CC=gcc FC=gfortran cmake -B build \
    -DCMAKE_INSTALL_PREFIX=/opt/OpenBLAS \
    -DBUILD_SHARED_LIBS=ON \
    -DBUILD_TESTING=OFF \
    -DNO_AFFINITY=ON \
    -DUSE_OPENMP=1 \
    -DNO_WARMUP=1

总结

本文详细分析了OpenBLAS在LoongArch64架构下使用CMake构建时遇到的两个主要问题及其解决方案。第一个问题涉及CMake配置系统的调整,第二个问题则是汇编代码的语法修正。这些解决方案已经得到OpenBLAS开发团队的确认和采纳,将有助于LoongArch64平台的用户顺利构建和使用这一高性能数学库。

对于使用龙芯处理器的开发者来说,正确构建OpenBLAS可以充分发挥LoongArch64架构的计算潜力,为科学计算和机器学习应用提供高效的底层支持。

登录后查看全文
热门项目推荐

项目优选

收起
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
51
15
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
653
435
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
98
153
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
137
216
MateChatMateChat
前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。 官网地址:https://matechat.gitcode.com
699
97
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
511
42
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
109
253
carboncarbon
轻量级、语义化、对开发者友好的 golang 时间处理库
Go
8
2
cjoycjoy
一个高性能、可扩展、轻量、省心的仓颉Web框架。Rest, 宏路由,Json, 中间件,参数绑定与校验,文件上传下载,MCP......
Cangjie
68
7
CangjieMagicCangjieMagic
基于仓颉编程语言构建的 LLM Agent 开发框架,其主要特点包括:Agent DSL、支持 MCP 协议,支持模块化调用,支持任务智能规划。
Cangjie
587
44