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

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

2025-06-01 18:34:16作者:郦嵘贵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架构的计算潜力,为科学计算和机器学习应用提供高效的底层支持。

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

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
595
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K