Software Development Aspects of Integrating Linear Algebra Libraries
本文从软件工程角度分析应用软件集成 Ginkgo 稀疏线性代数库的挑战与收益,并通过 CFD、电网仿真和心脏电生理学等实例,总结实现可持续软件开发的集成方法。
2025-09-19 cs.MS cs.SE
A Case for Malleable Thread-Level Linear Algebra Libraries: The LU Factorization with Partial Pivoting
我们提出了两种新的技术,以克服负载不平衡时遇到的实施所谓的前瞻性机制,在相关的稠密矩阵分解的线性系统的解决方案。这两种技术都针对这样的场景:在因子分解过程中创建/激活两个线程团队,每个团队负责执行独立的任务/执行分支。第一种技术促进了两个任务之间的工作者共享(WS),允许首先完成的任务的线程被重新分配给成本更高的任务使用。第二种技术允许快速任务提醒较慢的任务完成,强制第二任务的提前终止(ET),并将因子分解过程平滑过渡到下一次迭代。这两种机制是通过一个新的可延展的线程级实现的基本线性代数子程序(BLAS)实例化,并说明了他们的好处,通过实现LU因式分解与部分枢轴增强与前瞻。具体地说,我们的实验结果在六核英特尔至强处理器上显示了WS+ET相结合的好处,与基于任务并行运行时的解决方案相比,报告具有竞争力的性能。
2016-11-19 cs.DC cs.MS cs.PF
Algorithm 979: Recursive Algorithms for Dense Linear Algebra -- The ReLAPACK Collection
为了利用高度调优内核的内存局部性和全部性能潜力,密集线性代数库(如LAPACK)通常将操作实现为分块算法。然而,为了用这样的算法实现次优性能,需要显著的调优。另一方面,递归算法实际上是无调优的,但仍能获得类似的性能。在本文中,我们首先分析和比较阻塞和递归算法的性能,然后介绍ReLAPACK,递归算法的开源库,无缝地取代大多数LAPACK的阻塞算法。在许多情况下,ReLAPACK明显优于参考LAPACK,甚至提高了优化库的性能。
2022-04-06 cs.MS cs.PF
A practical approach to testing random number generators in computer algebra systems
本文具有一定的实践目的。长期以来,伪随机数发生器在标准程序设计语言库中的实现质量很差。直到最近情况才开始好转。到目前为止,大量的库和支持较弱的数学包使用过时的算法来生成随机数。四套现代的统计测试,可用于验证随机数发生器进行了说明。建议使用命令行实用程序,这使得有可能避免在C或C++等语言中进行低级编程。只考虑免费的开源系统。
2020-04-19 cs.MS cs.SC
Sparse Automatic Differentiation for Complex Networks of Differential-Algebraic Equations Using Abstract Elementary Algebra
United Technologies Research Center(联合技术研究中心);Lawrence Livermore National Laboratory(劳伦斯利弗莫尔国家实验室)
本文提出利用抽象初等代数实现稀疏雅可比矩阵计算,展示其在分布式内存环境下的并行化优势及计算成本与系统规模线性相关的特性。
2021-05-12 cs.MS
Performance Modeling for Dense Linear Algebra
RWTH Aachen(亚琛工业大学)
本文提出一个自动生成BLAS和LAPACK统计性能模型的框架,通过评估和组合这些模型来正确排序等价算法并调优参数,在单核和多核环境下均有效。
2012-12-10 cs.MS cs.NA cs.PF
Knowledge-Based Automatic Generation of Linear Algebra Algorithms and Code
本文主要研究线性代数矩阵方程组领域专用编译器的设计与实现。为这些方程开发高效的库是一个复杂的过程,需要各种领域的专门知识,包括应用领域、算法、数值分析和高性能计算,而这些方程是大多数科学计算软件的核心。此外,该过程涉及几个人在相当长的时间内的合作。通过我们的编译器,我们的目标是将开发人员从设计算法和编写代码中解放出来,并生成与人类专家编写的程序相匹配甚至超过其性能的例程。
2014-04-13 cs.MS
Nemo/Hecke: Computer Algebra and Number Theory Packages for the Julia Programming Language
我们介绍两个新的软件包,尼莫和赫克,写在朱莉娅程序设计语言的计算机代数和数论。我们证明了高性能的通用算法可以在Julia中实现,而不需要求助于低级别的C实现。对于专门的算法,我们使用Julia的高效原生C接口来包装现有的C/C++库,如Flint,Arb,Antic和Singular。我们给出了如何使用Hecke和Nemo的例子,并讨论了我们已经实现的一些算法,以提供高性能的基本算法。
2017-05-17 cs.MS cs.SC
Tiled Algorithms for Matrix Computations on Multicore Architectures
Colorado Mesa University(科罗拉多梅萨大学);Colorado State University(科罗拉多州立大学)
针对多核架构,研究瓦片算法以替代传统稠密数值线性代数库,实现Cholesky、LU和QR分解的高效可扩展计算。
2013-03-13 cs.MS cs.NA math.NA
The Willing Kingdon Clifford Algebra Library
本文介绍开源 Python 库 Kingdon,通过输入类型无关设计、符号优化与即时编译,将几何代数高效集成到 PyTorch、NumPy、SymPy 等现有工作流中,并支持 Jupyter 可视化快速原型开发。
2025-03-13 cs.MS
Interface for Sparse Linear Algebra Operations
本文提出一个硬件可移植的稀疏线性代数C++ API,通过跨机构协作设计,在兼容现有各供应商接口的同时改善互操作性与可持续性,并保留实现自由度。
2024-11-20 cs.MS
Automatically Harnessing Sparse Acceleration
稀疏线性代数是许多科学程序的核心,但编译器未能很好地优化它。高性能库是可用的,但采用成本很高。此外,库将程序绑定到特定于供应商的软件和硬件生态系统中,从而创建不可移植的代码。在本文中,我们开发了一种新的方法,我们的规约语言的线性代数计算(LiLAC)的实现者的基础上。不需要应用程序开发人员为给定的库(重新)编写每个程序,而是将负担转移到库实现者的一次性描述中。启用LiLAC的编译器使用此方法插入适当的库例程,而无需更改源代码。LiLAC提供自动数据编组,维护调用之间的状态并最大限度地减少数据传输。在编译器中间表示中检测用于库插入的适当位置,与源语言无关。我们评估了用FORTRAN编写的大规模科学应用程序;标准C/C++和FORTRAN基准测试;以及C++图形分析内核。在异构平台、应用程序和数据集之间,我们展示了1.1 $\times$到10 $\times$以上的加速,而无需用户干预。
2020-01-22 cs.MS cs.PF
FLOPs as a Discriminant for Dense Linear Algebra Algorithms
涉及矩阵和向量的表达式(称为线性代数表达式)通常通过一系列调用BLAS和LAPACK等库中提供的高度优化的内核进行评估。一个核序列代表一个算法,一般来说,由于结合性、代数恒等式和多个核,一个表达式可以通过许多不同的算法来计算。这些算法在数学上都是等价的(即,在精确的算术中,它们都计算相同的结果),但在执行时间方面往往有明显的不同。当面临决策时,高级语言、库和工具(如Julia、Armadillo和Linnea)会选择最小化FLOP计数的算法。在本文中,我们测试的有效性的FLOP计数作为一个判别密集的线性代数算法,分析“异常”:问题的情况下,最快的算法不执行最少的FLOP。为此,我们专注于相对简单的表达式,并分析异常发生的时间和原因。我们发现,异常存在,并倾向于集群成大的连续区域。一方面,表情异常是罕见的,而另一方面,它们是丰富的。我们的结论是,FLOPs是不是一个足够可靠的判别式,即使在建立高度优化的内核的算法。另外,即使过滤掉内核间缓存的影响,大多数异常仍然存在。我们推测,结合FLOP计数与内核性能模型将显着提高我们的能力,选择最佳的算法。
2022-07-05 cs.MS cs.PF
Armadillo: An Efficient Framework for Numerical Linear Algebra
Data61 / CSIRO(Data61 / 澳大利亚联邦科学与工业研究组织);Griffith University(格里菲斯大学);NumFOCUS Inc.(NumFOCUS公司)
Armadillo通过模板元编程优化线性代数表达式,提供高效的C++线性代数库,提升科学计算应用的性能与易用性。
2025-12-29 cs.MS
Ginkgo: A Modern Linear Operator Algebra Framework for High Performance Computing
在本文中,我们介绍了Ginkgo,一个现代C++数学库的科学高性能计算。虽然经典的线性代数库作用于矩阵和向量对象,但Ginkgo的设计原则将所有功能抽象为“线性运算符”,从而激发了“线性运算符代数库”的符号。Ginkgo目前的重点是为高性能GPU架构提供稀疏线性代数功能,但考虑到库的设计,这一重点可以很容易地扩展到适应其他算法和硬件架构。我们介绍了这种复杂的软件架构,它将核心算法与特定于架构的后端分离开来,并提供了有关可扩展性和可持续性措施的详细信息。我们还通过提供如何在MFEM和deal.ii有限元生态系统中使用其功能的示例来演示Ginkgo的可用性。最后,我们提供了一个实际的演示Ginkgo的高性能在国家的最先进的GPU架构。
2020-07-01 cs.MS
Linnea: Automatic Generation of Efficient Linear Algebra Programs
将线性代数计算转换为高效的库调用序列是一项重要的任务,需要线性代数和高性能计算方面的专业知识。几乎所有用于矩阵计算的高级语言和库(例如,Matlab,Eigen)在内部使用优化的内核,例如由BLAS和LAPACK提供的内核;然而,它们的翻译算法通常过于简单,因此导致所述内核的次优使用,从而导致显著的性能损失。为了结合高级语言提供的生产力和低级别内核的性能,我们正在开发Linnea,一个用于线性代数问题的代码生成器。作为输入,Linnea接受线性代数问题的高级描述;作为输出,它返回对高性能内核的有效调用序列。Linnea使用自定义的最佳优先搜索算法,在不到一秒的时间内找到第一个解决方案,并在更多的时间内找到更好的解决方案。在125个测试问题中,Linnea生成的代码几乎总是优于Matlab,Julia,Eigen和Armadillo,加速高达或超过10倍。
2019-12-30 cs.MS
Synergistic CPU-FPGA Acceleration of Sparse Linear Algebra
本文介绍了REAP,一个软件-硬件的方法,使高性能稀疏线性代数计算的合作CPU-FPGA平台上。REAP仔细地将组织矩阵元素的任务与计算阶段分开。它使用CPU来提供矩阵元素的第一遍重新组织,使FPGA能够专注于计算。我们引入了一个新的中间表示,允许CPU通信的稀疏数据和调度决策的FPGA。在FPGA上优化计算,通过流水线实现资源的有效利用。与CPU上广泛使用的稀疏库相比,REAP将稀疏通用矩阵乘法(SpGEMM)和稀疏乔莱斯基因子分解的性能分别提高了3.2倍和1.85倍。
2020-04-29 cs.DC cs.MS cs.PL
A Domain-Specific Compiler for Linear Algebra Operations
我们提出了一个原型的线性代数编译器,自动利用特定领域的知识来生成高性能的算法。编译器的输入是一个目标方程以及问题的结构和操作数的属性的知识。输出的是各种高性能算法,以及相应的源代码,求解目标方程。我们的方法包括将输入方程分解成一系列库支持的内核。由于一般来说这样的分解不是唯一的,我们的编译器返回的不是一个而是许多算法。编译器的潜力是通过其应用程序中产生的全基因组关联研究的一个具有挑战性的方程。因此,编译器产生多个“最佳”算法,其性能优于现有的最佳库。
2012-05-27 cs.MS cs.PL cs.SC
BLASFEO: basic linear algebra subroutines for embedded optimization
BLASFEO是一个密集的线性代数库,提供用于嵌入式优化的BLAS和LAPACK类例程的高性能实现。相对于BLAS的现有高性能实现的关键区别在于,计算性能针对小到中等规模的矩阵进行了优化,即,尺寸可达几百个。BLASFEO有三种不同的实现:一种高性能实现,旨在为高速缓存中的矩阵提供最高性能;一种参考实现,提供可移植性和嵌入性,并针对非常小的矩阵进行了优化;以及一种标准BLAS和LAPACK的包装器,在大型矩阵上提供高性能。BLASFEO的三个实现一起为从非常小到很大的矩阵提供了高性能的密集线性代数例程。与开源和专有的高度调优的BLAS库相比,对于大小高达约100的矩阵,BLASFEO的高性能实现比相应的3级BLAS例程快约20-30%,比相应的LAPACK例程快2-3倍。
2018-01-07 cs.MS
Deriving Correct High-Performance Algorithms
Dijkstra观察到,验证程序的正确性是困难的,并证明了程序的推导与其正确性的证明是答案。我们说明了这种面向目标的方法,将其应用到域的密集线性代数库的分布式内存并行计算机。我们表明,该领域的大部分功能的实现的基础算法可以系统地推导出是正确的。这样做的好处是,可以发现一个操作的整个算法族,从而可以为给定的体系结构选择最佳算法。这种方法非常实用:受其启发的想法已被用于重写密集的线性代数软件栈,从基本线性代数子程序(BLAS)开始,一直延伸到Elemental分布式内存库,以及其间的每一层。本文演示了如何正式的方法和严格的数学技术的正确性影响HPC。
2017-10-11 cs.MS
The Generalized Matrix Chain Algorithm
在本文中,我们提出了一个广义版本的矩阵链算法,以生成有效的代码线性代数问题,人类专家经常投资几天甚至几周的工作。标准的矩阵链问题在于找到矩阵乘积$M := A_1 A_2 \cdots A_n$的括号化,使标量运算的数量最小化。然而,在实际应用中,人们经常会遇到更复杂的表达式,包括转置、求逆和矩阵性质。事实上,这种表达式的计算依赖于一组计算内核,这些内核提供的功能远远超出了简单的矩阵乘积。然后,挑战从寻找最佳括号转移到寻找输入表达式到可用内核的最佳映射。此外,通常的情况是,基于标量操作的最小化的解决方案不会导致在执行时间方面的最优解决方案。在我们的实验中,生成的代码比其他库和语言的平均性能高出约9倍。这项工作的动机来自于这样一个事实,即-尽管编译器的发展取得了很大的进步-将线性代数问题映射到优化内核的任务仍然需要手动完成。为了减轻用户从这一复杂的任务,新的技术,编译线性代数表达式必须开发。
2018-04-10 cs.DS cs.MS
Randomized Numerical Linear Algebra : A Perspective on the Field With an Eye to Software
本文展望随机化数值线性代数领域,提出定义RandBLAS和RandLAPACK软件标准,系统介绍草图绘制、低秩逼近、杠杆分数采样等核心方法及其在MATLAB、cuSOLVER等库中的实现。
2023-04-12 cs.MS cs.NA math.NA
Welding R and C++: A Tale of Two Programming Languages
该研究对比了集成Armadillo、Eigen线性代数C++库的两款新R包cpp11armadillo与cpp11eigen,分析二者的速度与语法差异,探讨计算效率和易用性的权衡,为R用户的高性能线性代数运算提供更便捷的C++集成方案。
2024-09-07 cs.MS cs.PL stat.CO
The ELAPS Framework: Experimental Linear Algebra Performance Studies
AICES, RWTH Aachen(亚琛工业大学 AICES 中心)
ELAPS框架通过多平台开源环境实现高效的线性代数性能实验,支持通过Python脚本或GUI设计实验,分析缓存、算法参数等对性能的影响,适用于多种计算环境,帮助做出关键性能决策。
2015-04-29 cs.MS cs.NA cs.PF
Application-tailored Linear Algebra Algorithms: A search-based Approach
RWTH Aachen(亚琛工业大学)
提出一种知识感知的线性代数编译器,利用问题特定信息自动生成算法,在敏感性和基因组研究中实现100倍和1000倍加速。
2012-11-26 cs.MS cs.NA cs.PL
Program Generation for Small-Scale Linear Algebra Applications
介绍了一个线性代数程序生成系统SLinGen。SLinGen的输入是用我们定义的线性代数语言(LA)数学表达的应用程序。LA提供基本的标量/向量/矩阵加法/乘法和更高级别的操作,包括线性系统求解器,Cholesky和LU因子分解。SLinGen的输出是性能优化的单源C代码,可以选择使用intrinsic进行向量化。SLinGen的目标是在固定大小的操作数上进行小规模计算,为此,使用优化库(例如,BLAS或LAPACK)已知会产生次优性能(除了增加代码大小和引入依赖性之外),但这在控制、信号处理、计算机视觉和其他领域中至关重要。在内部,SLinGen使用合成和基于DSL的技术在高抽象级别上进行优化。我们基准测试我们的程序生成器上的三个原型应用程序:卡尔曼滤波器,高斯过程回归,和L1分析凸解算器,以及基本例程,包括Cholesky分解和求解器的连续时间李雅普诺夫和西尔维斯特方程。结果显示,与直接使用Intel icc和clang的多面体优化器以及基于库和基于模板的实现相比,速度有了显着提高。
2018-05-12 cs.MS cs.PL
Benchmarking the Linear Algebra Awareness of TensorFlow and PyTorch
RWTH Aachen University(亚琛工业大学);Umeå Universitet(于默奥大学)
在机器学习中普遍存在的线性代数运算形成了主要的性能瓶颈。高性能计算社区在开发特定于体系结构的优化内核方面投入了大量精力,例如BLAS和LAPACK库提供的内核,以加速线性代数运算。然而,最终用户逐渐不太可能经历直接使用所述内核的容易出错和耗时的过程;相反,诸如TensorFlow(TF)和PyTorch(PyT)之类的框架,它们促进了机器学习应用程序的开发,变得越来越流行。虽然这些框架与BLAS和LAPACK相关联,但尚不清楚它们是否利用线性代数知识来加速计算。出于这个原因,在本文中,我们开发了基准来研究TF和PyT的线性代数优化能力。我们的分析表明,一些线性代数优化仍然缺失;例如,通过应用分配律减少标量运算的数量,以及自动识别矩阵链的最佳括号化。在这项工作中,我们专注于TF和PyT中的线性代数计算;我们都暴露了性能增强的机会,以使框架的开发人员受益,并为最终用户提供如何实现性能增益的指导。
2022-02-20 cs.LG cs.MS cs.PF
BLAS-like Interface for Binary Tensor Contractions
本研究针对张量运算缺乏类BLAS标准的问题,设计实现了C语言下的二元张量缩并类BLAS接口xGETT,经测试验证其可行性,为张量运算标准化提供基础。
2024-10-09 cs.MS
Automating the Last-Mile for High Performance Dense Linear Algebra
高性能密集线性代数(DLA)库通常依赖于使用汇编或向量内部函数实现的通用矩阵乘法(Gemm)内核。特别是,实值Gemm内核提供了复值Gemm内核的绝大多数性能,以及整个3级BLAS和许多实和复LAPACK例程。因此,实现Gemm内核的高性能转化为该内核之上的高性能线性代数堆栈。然而,对于领域专家来说,为每个库支持的体系结构手动实现内核是一项艰巨的任务。这导致人们相信宝石内核的工艺更像是黑暗艺术而不是科学。正是这个前提推动了DLA领域中使用代码生成进行自动调优的流行。相反,本文的重点是分析方法的代码生成的Gemm内核的不同的体系结构,为了阐明的细节或巫术需要实现一个高性能的Gemm内核。我们蒸馏的内核到一个更小的内核,外产品的实施,并分析确定如何可用的SIMD指令可以用来计算外产品有效。我们将这种方法编入一个系统,自动生成一个高性能的SIMD实现的Gemm内核。实验结果表明,我们的方法产生的内核与人工实现的内核或使用经验搜索的性能具有竞争力。
2017-04-28 cs.MS
dMath: A Scalable Linear Algebra and Math Library for Heterogeneous GP-GPU Architectures
本文介绍了一种新的可扩展并行数学库dMath,它展示了在使用节点内或节点间混合并行进行深度学习时的领先扩展能力。dMath提供易于使用的分布式基本原语和各种特定于域的算法。这些包括矩阵乘法,卷积和其他允许快速开发高度可扩展的应用程序,包括深度神经网络(DNN),而以前仅限于为单个GPU提供有效原语的库,如Nvidia cuplex和cudnn或来自Nerve neon框架的DNN原语。HPC软件的开发是一项困难的劳动密集型工作,需要独特的技能。dMath允许广泛的开发人员轻松利用并行和分布式硬件。这种方法的一个贡献是数据永久存储在GPU硬件上,避免了主机和设备之间的昂贵传输。利用了高级存储管理技术,包括对传输数据的高速缓存和通过池化的存储器重用。dMath的一个关键贡献是它为特定的支持领域提供了性能、可移植性和生产力。它使算法和应用程序编程人员能够快速解决问题,而无需管理与多级并行相关的显著复杂性。
2016-04-05 cs.DC cs.MS cs.NE
pyGinkgo: A Sparse Linear Algebra Operator Framework for Python
本文提出pyGinkgo,一个基于Ginkgo的Python稀疏线性代数框架,通过Pybind11提供跨CUDA、HIP和OpenMP的高性能稀疏矩阵运算,在SpMV和迭代求解器上优于SciPy等现有Python库,并与原生C++性能相当。
2025-10-09 cs.DC cs.MS cs.PF
GLASS: Architecture-Tuned, Composable, Device-Side Linear Algebra for Edge Robotics and Beyond
Dartmouth College(达特茅斯学院)
针对GPU机器人学缺乏可复用数值库的问题,提出GLASS库,通过架构特定放置决策和静态编译优化,在边缘设备上实现最高73倍性能提升,并开源发布。
2026-09-24 cs.DC cs.MS cs.RO
A Test for FLOPs as a Discriminant for Linear Algebra Algorithms
本研究针对FLOPs作为线性代数算法性能判别指标可能失效的问题,提出迭代测试排序的方法,验证FLOPs最小的算法是否对应最优性能,识别异常案例以辅助性能差异根因分析。
2022-11-30 cs.MS cs.PF
High-Performance Level-1 and Level-2 BLAS
20世纪70年代,基本线性代数子程序(BLAS)的引入为不同的库使用改进的方法和硬件解决同一问题铺平了道路。新的BLAS实施带来了高性能计算(HPC)创新。所有的爱去了3级BLAS由于其巨大的应用在不同的领域,而不是由计算机科学的束缚。然而,第一层和第二层被忽略了,我们试图通过引入新的算法来解决这个问题的矢量矢量点积,矢量矢量外积和矩阵矢量积,这在一个显着的方式提高了这些操作的性能。我们不引入任何库,而是引入算法,这改进了当前最先进的算法。此外,我们依赖于FMA指令、OpenMP和编译器来优化代码,而不是在汇编中实现算法。因此,我们当前的实现是机器不经意的,并且取决于编译器优化代码的能力。
2021-08-04 cs.CC cs.MS