Page 78 - 《软件学报》2025年第9期
P. 78

韩柳彤 等: 面向   RISC-V  向量扩展的高性能算法库优化方法                                             3989


                 阐述该优化技术的设计方法.

                 2.1   硬件抽象层设计思路
                    硬件抽象层的设计目标是为编程人员提供统一的硬件编程接口, 更简便地利用不同硬件的计算能力, 而无需
                 关注底层硬件的实现细节和特定编程模型, 从而在提高程序性能的同时保证程序的开发效率和代码的可维护性.
                    为此, 硬件抽象层的设计应当从目标硬件的角度出发, 尽可能覆盖被抽象的目标硬件集合的共性特征. 众所周
                 知, 包括  RISC-V  向量扩展在内的所有      SIMD  扩展都提供了对一组数据执行相同操作的计算能力. 因此, SIMD                 扩
                 展的硬件抽象应当以向量操作和数据类型为核心, 抽取目标硬件集合共同支持的向量操作与类型作为抽象目标,
                 从而提高应用程序的并行处理效率.
                    如图  1  所示, 在高级语言层面, 不同硬件平台都提供了各自的内建函数, 从而允许开发人员更好地调用特殊硬
                 件能力; 硬件抽象层应当选取适当的向量类型和向量操作, 组合形成一套面向算法库计算需求的统一向量编程接
                 口; 算法库的各模块应当使用统一向量编程接口实现具有向量优化机会的算法, 通过应用程序编程接口                                  (API) 对
                 外部应用程序提供调用, 从而实现性能提升.

                                                         应用程序

                                 算法库
                                                                               算法库模块
                                                 应用程序编程接口
                                       向量优化算法                    其他算法




                                                                               硬件抽象层
                                            统一向量编程接口 (通用内建函数)

                                         向量类型                    向量操作



                                                                              平台内建函数
                                    RISC-V   x86    ARM     LoongArch   …


                                        图 1 基于硬件抽象层的算法库向量优化方法示意图

                    为了能够将通用内建函数分别映射到特定平台的内建函数上, 硬件抽象层的设计和实现应当以条件编译机制
                 为基础. 条件编译是一种允许在编译阶段根据预定义的条件来包含或排除代码段落的编译技术, 这种机制通常在
                 编译器中采用预处理指令或特定的编译构造实现, 被广大着眼于性能的编程语言所支持. 硬件抽象层为不同目标
                 平台的指令集扩展定义不同的条件属性, 从而在不同平台条件下使用特定平台的内建函数实现硬件抽象层的统一
                 向量编程接口. 在算法库的构建过程中, 应当首先检测目标平台的扩展指令集支持情况, 并据此设置条件属性, 进
                 而引导编译系统仅包含当前受支持平台扩展指令集的接口实现, 从而将硬件抽象层的向量操作和向量类型映射到
                 特定平台的内建函数上. 此外, 编译器的指令调度过程可以依据不同体系结构对映射后的向量指令进行合理的排
                 布, 最终达到通用内建函数能够映射到特定平台, 并在各个平台上均获得性能提升的目标.

                 2.2   向量操作抽象

                    SIMD  扩展支持的向量操作在语义层面上具有一定共性, 是硬件抽象层中抽象向量操作的设计基础. 尽管不
                 同的  SIMD  指令集在指令的定义和数量上有很大差异, 且在功能上也由于硬件特性的差异而有所不同, 但都支持
                 一组常用的基本向量操作, 现代主流           SIMD  扩展指令集均支持以下类型的操作.
   73   74   75   76   77   78   79   80   81   82   83