0 0 votes
Article Rating

BLAS 和 BLIS 都是用于科学计算中的线性代数库,专注于加速矩阵和向量运算。以下是它们的含义和区别:

BLAS (Basic Linear Algebra Subprograms)

  • 定义: BLAS 是一套标准化的基本线性代数子程序接口,始于1970年代,旨在提供高效的向量和矩阵运算功能。它分为三个层次:
  • Level-1: 向量-向量操作(如点积、向量加法)。
  • Level-2: 矩阵-向量操作(如矩阵-向量乘法)。
  • Level-3: 矩阵-矩阵操作(如矩阵乘法)。
  • 特点:
  • 广泛应用于科学计算、机器学习等领域。
  • 提供标准API,便于在不同平台上移植。
  • 实现包括开源的 OpenBLAS 和商业的 Intel MKL 等。
  • 局限性:接口较老旧,某些操作(如混合精度或复杂矩阵运算)支持有限,需要额外处理。
  • 历史: 1979年发布Level-1,1980年代扩展到Level-2和Level-3,至今仍是许多高性能计算库的基础。

BLIS (BLAS-like Library Instantiation Software)

  • 定义: BLIS 是一个开源框架,设计为BLAS的现代替代品,提供超集功能。它由得克萨斯大学奥斯汀分校的 SHPC 小组和南方卫理公会大学的 Matthews 研究小组开发,2023年获得 J.H. Wilkinson 数值软件奖。
  • 特点:
  • 扩展性: 提供传统 BLAS 和 CBLAS 接口,同时引入更灵活的原生接口(Typed API 和 Object API),支持更多功能,如混合精度/域运算。
  • 高性能: 通过优化的微内核(microkernel)和缓存分块技术,针对现代 CPU 架构(如 x86-64、ARM、RISC-V)提供高效性能,尤其在多线程和小型矩阵运算上表现优异。
  • 模块化: BLIS 2.0(2024年发布)引入插件机制,允许用户自定义操作,减少数据移动开销,支持如张量收缩、Strassen 算法等高级功能。
  • 可移植性: 使用 ISO C99 编写,适配多种架构,易于维护和扩展。
  • 社区支持: 支持 Linux、macOS、Windows 等系统,AMD 和 NVIDIA 优化库中已集成 BLIS。
  • 与 BLAS 的关系: BLIS 是 BLAS 的超集,兼容 BLAS API,但通过重构(如基于 GotoBLAS 算法)提供更现代化的设计,解决 BLAS 接口的局限性(如不支持混合域运算)。

BLAS vs. BLIS

  • 性能: BLIS 和高效 BLAS 实现(如 Intel MKL)性能相当,但在非 Intel 平台上,BLIS 通常优于其他开源 BLAS(如 OpenBLAS)。MKL 在 Intel 平台上略胜,但差距在10%以内。
  • 灵活性: BLIS 提供更灵活的接口,支持复杂场景(如混合精度、自定义操作),而 BLAS 需要变通方法,增加代码复杂性。
  • 发展前景: BLAS 是老牌标准,应用广泛,但接口静态;BLIS 是新一代框架,得到 Intel、AMD、华为等支持,未来发展潜力更大。
  • 使用场景:
  • 如果需要跨平台、开源、现代化的线性代数库,BLIS 是首选。
  • 如果在 Intel 平台上追求极致性能,MKL 可能更优,但非开源。

总结

BLAS 是经典的线性代数标准库,历史悠久但接口较老旧;BLIS 是其现代替代品,提供更高灵活性和性能,特别适合需要扩展功能或跨平台开发的场景。两者在科学计算中都至关重要,BLIS 被认为是未来趋势。

Categories: Blog

Chris

Chris

Just me, need more info?

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x