Blaze:高性能C++数学库
本文译自:Blaze: A high-performance C++ math library
Blaze是一个用于密集和稀疏算法的开源、高性能 C++ 数学库。凭借其最先进的智能表达式模板实施, Blaze将特定领域语言的优雅和易用性与 HPC 级性能相结合,使其成为可用的最直观和最快的 C++ 数学库之一。
Blaze库提供…
- …通过集成 BLAS 库和手动调整的 HPC 数学内核实现高性能
- …通过 SSE、SSE2、SSE3、SSSE3、SSE4、AVX、AVX2、AVX-512、FMA、SVML、SLEEF 和 XSIMD 进行矢量化
- …由 OpenMP、HPX、C++11 线程和 Boost 线程并行执行
- …领域特定语言的直观且易于使用的 API
- …具有密集和稀疏向量和矩阵的统一算法
- …经过全面测试的矩阵和向量算法
- … 完全可移植的高质量C++ 源代码
在入门教程中了解Blaze清晰而强大的语法,并在基准测试部分了解令人印象深刻的性能。
下载
大火项目
Blaze CUDA:将 CUDA 功能添加到Blaze库 (Jules Pénuchot)
blaze_tensor : Blaze库(Stellar Group)的 3D 张量的实现
BlazeIterative : Blaze库的迭代求解器(CG、BiCGSTAB 等)集合(Tyler Olsen)
RcppBlaze:R 语言的Blaze端口 (ChingChuan Chen)
消息
15.8.2020:我们很高兴地宣布Blaze 3.8 的发布。同样,我们用许多惊人的新功能扩展了库:
- 功能介绍
isinf()
_isfinite()
- 引入向量和矩阵的组/标签
repeat()
向量和矩阵的函数介绍- 分配器的介绍
DynamicVector
和DynamicMatrix
- 对自定义数据类型的扩展支持
我们希望您喜欢这个新版本!
23.2.2020:今天我们非常自豪地发布了Blaze 3.7。此版本包含一长串新功能和改进:
- 矢量生成器和矩阵生成器的介绍
- 密集矩阵指数的介绍
solve()
密集线性系统的功能介绍- 支持 64 位 BLAS 和 LAPACK 库
StaticVector
为、HybridVector
、StaticMatrix
和启用特定于实例的对齐和填充配置HybridMatrix
constexpr
和的HybridVector
化HybridMatrix
- 介绍外和、外差和外商运算
- 密集向量和矩阵的N 元
map()
运算介绍(最多N<=6
) select()
密集向量和矩阵的函数介绍rank()
稠密矩阵函数介绍- 功能介绍
declunilow()
_decluniupp()
- 功能介绍
declstrlow()
_declstrupp()
nosimd()
向量和矩阵的函数介绍noalias()
向量和矩阵的函数介绍isPositiveDefinite()
稠密矩阵函数介绍eigen()
表达式介绍svd()
表达式介绍std::array
为所有密集向量和密集矩阵引入构造函数- 矢量/标量和矩阵/标量运算的引入
min()
和重载max()
- 密集矩阵/密集向量乘法内核的优化
- 密集矩阵/密集矩阵乘法内核的优化
- 对 C++17类模板参数推导 (CTAD)的扩展支持
我们希望这些新增功能和改进功能能够让您从Blaze中获得更多收益。享受!
维基:目录
- 配置和安装
- 入门
- 载体
- 矩阵
- 适配器
- 观点
- 算术运算
- 按位运算
- 逻辑运算
- 共享内存并行化
- 连载
- 客制化
- BLAS 函数
- LAPACK 函数
- 分块向量和矩阵
- 语句内优化
- 常见问题 (FAQ)
- 问题创建指南
- 大火参考
- Blazemark:Blaze 基准套件
- 基准/性能结果
- 发布存档
执照
Blaze库是根据新的(修订的)BSD 许可证获得许可的。如果满足以下条件,则允许以源代码和二进制形式重新分发和使用,无论是否进行修改:
- 源代码的重新分发必须保留上述版权声明、此条件列表和以下免责声明。
- 二进制形式的重新分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表和以下免责声明。
- 未经明确的事先书面许可,Blaze开发组的名称及其贡献者的名称均不得用于认可或推广源自该软件的产品。
本软件由版权所有者和贡献者“按原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性和特定用途适用性的暗示保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润损失;或业务中断),无论是基于任何责任理论,无论是合同责任、严格责任还是侵权行为(包括疏忽或其他),以任何方式因使用本软件而引起,即使已被告知此类损害的可能性。
编译器兼容性
Blaze支持 C++14 标准,并与广泛的 C++ 编译器兼容。事实上,Blaze一直在使用 GNU 编译器集合(6.0 版到 10.2 版)、Clang 编译器(5.0 版到 10.0 版)和 Visual C++ 2017(仅限 Win64)进行测试。其他编译器没有明确测试,但很有可能工作。
如果您正在寻找 C++98 兼容的数学库,您可以考虑使用旧版本的Blaze。直到发布 2.6 Blaze是用 C+±98 编写的,并不断地使用 GNU 编译器集合(版本 4.5 到 5.0)、英特尔 C++ 编译器(12.1、13.1、14.0、15.0)、Clang 编译器(版本 3.4 到 3.7)进行测试,和 Visual C++ 2010、2012、2013 和 2015(仅限 Win64)。
刊物
- K. Iglberger、G. Hager、J. Treibig 和 U. Rüde:重新审视表达式模板:当前方法的性能分析(下载)。SIAM 科学计算杂志, 34(2): C42–C69, 2012
- K. Iglberger、G. Hager、J. Treibig 和 U. Rüde:高性能智能表达式模板数学库(下载)。第二届 HPCS 2012 众核时代新算法和编程模型国际研讨会 (APMM 2012) 论文集
投稿
Klaus Iglberger – 项目发起人和主要开发人员
Georg Hager – 性能分析和优化
Christian Godenschwager – Visual Studio 2010/2012/2013/2015 错误修复和测试
Tobias Scharpff – 稀疏矩阵乘法算法
byzhang – 错误修复
Emerson Ferreira——错误修复
Fabien Péan——CMake 支持
Denis Demidov – 导出 CMake 包配置
Jannik Schürg——CMake 中 macOS 的 AVX-512 支持和缓存大小检测
Marcin Copik——CMake 修复
Hartmut Kaiser——HPX 后端
Patrick Diehl——将 HPX 集成到 Blazemark 和Blaze Fedora 软件包的维护者
Mario Emmenlauer – Blazemark 扩展
Jeff Pollock——CMake 扩展
Darcy Beurle——将Blaze集成到编译器资源管理器中
罗伯特·舒马赫——CMake 修复
Jan Rudolph——CMake 修复
Mikhail Katliar——LAPACK 扩展
丹尼尔·贝克——袖子的整合
Thijs Withaar——LAPACK 扩展
Nils Deppe——XSIMD 的集成