首页
/ BLIS 2.0-rc1发布:高性能计算库的重大升级

BLIS 2.0-rc1发布:高性能计算库的重大升级

2025-06-19 21:55:09作者:盛欣凯Ernestine

BLIS(BLAS-like Library Instantiation Software)是一个开源的高性能计算库,专门为线性代数运算提供优化实现。作为BLAS(Basic Linear Algebra Subprograms)的替代品,BLIS通过模块化设计和高度优化的内核,在各种硬件平台上实现了卓越的性能。最新发布的BLIS 2.0-rc1版本带来了多项重大改进和新功能,标志着该项目的一个重要里程碑。

核心框架的重大革新

BLIS 2.0-rc1引入了"插件"系统,这是本次更新的最显著特性之一。这个创新设计允许用户在BLIS源代码树之外创建插件,即使使用的是二进制分发的BLIS版本。通过插件机制,用户可以注册自定义的内核函数,这些内核将由BLIS构建系统为所有配置的架构进行编译。更令人兴奋的是,用户提供的内核可以参与基于实际硬件的运行时内核选择过程。

另一个重要改进是新增的API,它允许用户修改默认的"控制树"数据结构。控制树定义了实现BLAS level-3操作(如gemm或syrk)的具体算法步骤。用户可以从预定义的控制树开始,修改它以创建自定义操作,包括更改打包和计算的内核、关联的块大小,以及提供额外的参数或数据。

混合精度计算的全面支持

BLIS 2.0-rc1在所有level-3 BLAS操作(除trsm外)中实现了全面的混合精度和混合域计算支持。A、B和C矩阵,以及alpha和beta标量,可以以任何支持的数据类型(当前为单/双精度和实数/复数域)提供。此外,通过C矩阵的obj_t结构可以设置计算精度,控制内部计算的实际执行方式。

底层架构的优化与改进

新版本引入了"level-0"宏后端,为实现参考内核和正确的混合类型计算提供了基础语言支持。这个后端特别支持全数据类型灵活性,包括"计算"数据类型(例如输入/输出使用双精度,计算使用单精度),以及完全正确的混合域计算和操作(如scal2v)的安全就地使用。

在兼容性方面,BLIS 2.0-rc1增加了ScaLAPACK兼容模式,解决了某些冲突的BLAS定义问题。同时修复了Python脚本中的字符串转义问题,提高了与Python 3.12+的兼容性。还新增了用户定义宏BLIS_ENABLE_STD_COMPLEX,在C++代码中使用std::complex类型定义。

内核层面的重要修复与增强

本次更新修复了haswell架构gemmsup内核中的越界读取错误,以及piledriver架构复数域gemm内核的问题。内核、块大小和偏好查找函数现在使用siz_t而非特定枚举类型。打包微内核和计算微内核(gemm和gemmtrsm)现在接收全局矩阵的偏移量,后者通过auxinfo_t结构传递。

特别值得注意的是,单独的"MRxk"和"NRxk"打包内核已合并为一个通用打包内核。新的打包内核可以打包任何大小的微面板,但可以针对特定形状进行优化。还增加了针对矩阵对角线部分的显式打包内核,以及某些混合域/1m情况的处理。

构建与测试系统的改进

构建系统方面,cblas.h文件现在在blis.h之后立即"扁平化"(如果启用),而不是在构建过程的后期。配置脚本经过全面改进,现在支持在CC/CXX中使用空格。同时增强了对BLIS或插件中C++源文件的支持。

测试系统现在允许使用"默认"诱导方法,而不是强制使用原生或1m操作。测试套件在请求时会测试所有可能的类型组合。改进了make check-blis及相关目标中问题的检测能力。CI测试基础设施已迁移至CircleCI。

文档完善与知识传递

新版本增加了关于插件系统和通过修改BLIS控制树创建自定义操作的文档。更新了README.md中的BLIS下载说明和RELEASING中的维护者指南。加宽了代码示例中的打印格式,以避免结果误解。

BLIS 2.0-rc1的这些改进不仅提升了库的功能性和灵活性,也为高性能计算社区提供了更强大的工具。通过插件系统和控制树API,研究人员和开发者可以更轻松地实现和测试新的算法优化,而全面的混合精度支持则为各种数值计算场景提供了更大的灵活性。这些进步共同推动BLIS向着成为更通用、更高效的高性能计算库迈进。

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

项目优选

收起
kernelkernel
deepin linux kernel
C
24
9
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
9
1
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
64
19
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
392
3.88 K
flutter_flutterflutter_flutter
暂无简介
Dart
671
156
giteagitea
喝着茶写代码!最易用的自托管一站式代码托管平台,包含Git托管,代码审查,团队协作,软件包和CI/CD。
Go
23
0
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
JavaScript
260
322
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
661
311
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.2 K
654
rainbondrainbond
无需学习 Kubernetes 的容器平台,在 Kubernetes 上构建、部署、组装和管理应用,无需 K8s 专业知识,全流程图形化管理
Go
15
1