《010--徐凯亮.pdf》由会员分享,可在线阅读,更多相关《010--徐凯亮.pdf(10页珍藏版)》请在三个皮匠报告上搜索。
1、RVV 编译选项对性能影响的探究徐凯亮 黄知柏上海交通大学 tcloud 实验室RISC-V 中国峰会 20241/10RVV 的重要性 RVV:RISC-V Vector Extension,变长向量 备受关注的 RISC-V 高性能之路 RVA23(v0.5:Candidate for Freeze Milestone Vote)的必选 后续高性能扩展(Zvb*,Zvk*)的依赖 工具链、配套环境跟进支持 现在 RVV 用起来性能怎么样了?超算中向量指令集的使用Evaluating Auto-Vectorizing Compilers throughObjective Withdrawal
2、 of Useful Information.DOI:10.1145/3356842.2 2/10/10RVV 编译汇编saxpy:vsetvli a4,a0,e32,m8,ta,ma vle32.v v0,(a1)sub a0,a0,a4 slli a4,a4,2 add a1,a1,a4 vle32.v v8,(a2)vfmacc.vf v8,fa0,v0 vse32.v v8,(a2)add a2,a2,a4 bnez a0,saxpy ret编译器 intrinsicvoid saxpy(size_t n,const float a,const float*x,float*y)for(
3、size_t vl;n 0;n-=vl,x+=vl,y+=vl)vl=riscv_vsetvl_e32m8(n);vfloat32m8_t vx=riscv_vle32_v_f32m8(x,vl);vfloat32m8_t vy=riscv_vle32_v_f32m8(y,vl);riscv_vse32_v_f32m8(y,riscv_vfmacc_vf_f32m8(vy,a,vx,vl),vl);自动向量化void saxpy(size_t n,const float a,const float*x,float*y)for(size_t i=0;i n;i+)yi=a*xi+yi;简单的编程
4、方式需要编译器支持3/10编译器自动向量化能力实验编译器GCC 14.1.0Clang/LLVM 18.1.6支持情况(2023)GCC 13:RVV intrinsic(2024)GCC 14:RVV 自动向量化借用 ARM SVE 等(2022)LLVM 14 开始陆续支持相关选项优化等级-O2/-O3/-Ofast-O2/-O3/-Ofast目标架构-march=rv64gcv_zvlNNNb-march=rv64gcv_zvlNNNb向量化-ftree-vectorize-fvectorizeLMUL-mrvv-max-lmul=dynamic,m1,m2,m4,m8-mllvm-ri
5、scv-v-register-bit-width-lmul=LMUL向量长度-mrvv-vector-bits=scalable,zvl-mrvv-vector-bits=scalable,zvl,VLEN-mllvm-riscv-v-vector-bits-min,max=VLEN 编译器已经有功能支持,那么编译的 RVV 程序性能如何?4/10参考加速比例:用 intrinsic 的加速比应用 llama.cpp,RVV intrinsic 加速计算 vs 标量计算(-march=rv64gcv)设备 香蕉派 BPI-F3,CPU 进迭时空 SpacemiT K1(后同)负载 Mamba
6、2.8b 模型(4bit 量化)达成加速比模型加载(s)每秒处理提示词每秒推理总时间(s)标量16.720.520.46148.16向量9.602.951.77738.95加速比1.74x5.67x3.85x4.99x intrinsic 可以取得很好的加速比,那自动向量化呢?5/10对比成熟向量:micro benchmark测试套件 TSVC向量加速比例(几何平均)x64 23%RV64 GCC 24%RV64 Clang 25%micro benchmark 上可以达到