OpenHarmony-Risc-V上运行openBLAS中的benchmark

OpenHarmony-Risc-V上运行openBLAS中的benchmark


文章目录


前言

参考https://zhuanlan.zhihu.com/p/18825495043实现了在Risc-V架构设备上的OpenHarmony-5.0.0环境中运行openBlas的benchmark。


一、编译openBLAS

1.源码下载

自行扶墙或者使用github下载站。使用默认的develop分支。

git clone https://github.com/OpenMathLib/OpenBLAS.git

2.工具链下载

Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1

  • 获取玄铁支持rvv1.0的gcc工具链。
    参考原文中有一处描述错误,由于当时没仔细看,下载的是V2.10.2版本,该版本仅支持RISC-V Vector extension 0.7.1,导致编译OpenBLAS的x280时会有以下报错:

    使用2.10.2版本编译open BLAS的C910V正常。
  • 解压后配置环境变量(以下命令根据自己环境对应的目录进行修改)

export PATH=/opt/liusai/github/Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1/bin:$PATH

3.编译并安装openBLAS

  • 编译

cd OpenBLAS

make HOSTCC=gcc TARGET=x280 CC=riscv64-unknown-linux-gnu-gcc FC=riscv64-unknown-linux-gnu-gfortran

正常编译成功结算画面如下:

如产生编译错误,纠正后重新编译请使用"make clean"。

  • 安装

mkdir build

make PREFIX=./build install

产物如下:

二、编译open BLAS中的benchmark

以benchmark中的gemm.c为例

javascript 复制代码
cd benchmark
../../../Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1/bin/riscv64-unknown-linux-gnu-gcc gemm.c -o gemm_test_3.0.1 -I ../ -L ../build/lib -lopenblas -lpthread -lgfortran -O2 -Wall 

../../../Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1/bin/riscv64-unknown-linux-gnu-gcc gemm.c -o gemm_test_3.0.1V -I ../ -L ../build/lib -lopenblas -lpthread -lgfortran -O2 -Wall -march=rv64gcv 

../../../Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V2.10.2/bin/riscv64-unknown-linux-gnu-gcc -o gemm_test_2.10.2 -I ../build/include -L ../build/lib -lopenblas -lpthread -lgfortran -O2 -Wall

/opt/liusai/musepaper-5.0.0/prebuilts/gcc/linux-x86/riscv64/spacemit-riscv-gcc/bin/riscv64-unknown-linux-gnu-gcc gemm.c -o gemm_test_spacemit -I ../ -L ../build/lib -lopenblas -lpthread -lgfortran -O2 -Wall

使用了三种工具链,编译出不同的gemm_test,可以在运行过程中进行比较。

三、上设备运行

使用的是进迭时空的musepaper,提前烧录OH-5.0.0版本。

  • 通过HDC将需要的文件拷至设备的/lib目录

hdc target mount

hdc file send .\openblas\spacemit\libpthread.so.0 /lib/

hdc file send .\openblas\ld-linux-riscv64-lp64d.so.1 /lib/

hdc file send .\openblas\gemm_test_3.0.1 /lib/

hdc file send .\openblas\libopenblas.so.0 /lib/

hdc file send .\openblas\libc.so.6 /lib/

注意:运行不同工具链编译的产物时,链接器ld-linux-riscv64-lp64d.so.1、libpthread.so.0、libc.so.6不可混用,否则会报错不可运行。这些均可以在工具链的安装目录中找到。

  • 配置环境变量

export LD_LIBRARY_PATH=/lib:$LD_LIBRARY_PATH

  • 运行

直接./gemm_test_3.0.1即可。

运行gemm_test_spacemit时有"./gemm_test_spacemit: /lib/libc.so.6: version 'GLIBC_2.34' not found (required by ./gemm_test_spacemit)"报错,请将对应工具链的libc.so.6拷贝至/lib下。

运行效果如下:


总结

  • 后续就是llama.cpp通过openBLAS提升运行效率。
  • ldd命令仅支持查看相同架构的可执行程序或者库文件,比如在X86_84的ubuntu环境中使用ldd查看risc-v架构的gemm_test会产生"not a dynamic executable"。
  • 使用patchelf命令也可以查看依赖。

patchelf gemm_test_spacemit --print-needed

相关推荐
熊猫钓鱼>_>7 小时前
碰一碰无网近场文件快传与断点续传【鸿蒙心迹】
华为·交互·harmonyos·arkts·鸿蒙·openharmony·鸿蒙心迹
熊猫钓鱼>_>15 小时前
四种书签,一条时间线:一个读书 App 的记忆颗粒与它的边界案例【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙pc
熊猫钓鱼>_>18 小时前
鸿蒙 PC 三方库适配复盘:libfvad 1.0 —— 把 WebRTC VAD 做成能装进采集链路的静态库
服务器·开发语言·华为·harmonyos·openharmony·适配·鸿蒙pc
电子科技圈19 小时前
2026 RISC-V中国峰会观察:编译调试工具链的“在场节奏”,释放了什么信号?
大数据·人工智能·设计模式·软件工程·软件构建·代码规范·risc-v
OpenAnolis小助手20 小时前
多租户公有云共享 CXL 内存池场景下的内存卸载研究
人工智能·操作系统·龙蜥社区·risc-v·agentic os
熊猫钓鱼>_>2 天前
上架审核常见驳回与隐私合规清单:过审前先自查这 8 条【鸿蒙心迹】
开发语言·前端·华为·华为云·harmonyos·openharmony·ai制作
熊猫钓鱼>_>3 天前
鸿蒙PC构建实战:hvigor modelVersion 降级 + schema 清理 + ArkTS 编译三连坑完整复盘
开发语言·华为·ai编程·harmonyos·openharmony·数据·ai生成
熊猫钓鱼>_>4 天前
CMP for OpenHarmony 实战:Coil 图片加载库鸿蒙化使用心得
运维·服务器·开发语言·华为·ai编程·harmonyos·openharmony
@嵌入式扫地僧4 天前
沁恒 MRS Agent RISC-V 开发提效实战:从自然语言需求到芯片工程落地全流程指南
risc-v·代码生成·嵌入式ai·开发效率·沁恒mrs
dadaobusi4 天前
riscv64 ubuntu linux version
risc-v