C++中的矩阵、张量计算库

C++中的矩阵、张量计算库

2023年8月2日发(作者:)

C++中的矩阵、张量计算库Boost::uBLAs库

这个库的开发由⼀系列的类似的库来指导:

由Jack Dongarra等⼈开发的BLAS 库。

由Todd Veldhuizen开发的Blitz++ 库。

由Scott Haney 等⼈开发的POOMA 库。

由Jeremy Siek等⼈开发的MTL 库。

BLAS 似乎是基本的线性代数使⽤最⼴泛的库,所以它可以被称作de-facto standard。它的接⼝是⾯向过程的(procedural),单独的函数是对⼀些基本的线性代数运算的抽象。由于它是使⽤Fortran语⾔实现以 及它所进⾏的优化,BLAS似乎也是现在最快的库之⼀。因为我⽆决定以⾯向对象的⽅式来设计和实现我们的类库,所以技术⽅式上有显著的不同。然⽽,每个⼈ 都可以使⽤我们的库中的运算符表达所有的BLAS抽象并对效率进⾏⽐较。

Blitz++ 是⼀个使⽤C++实现的让⼈映象深刻的(impressive)库。它的主要设计似乎是⾯向多维数组以及包括张量(tensor)的相关的运算符。 Blitz++库的作者声称由于它的实现技术使⽤表达式模板(expression template)和模板元编程技术(template metaprogram),他的库的性能与对应的Fortan代码的性能相当或更好⼀些。然⽽我们有⼀些理由来开发⼀个我们⾃⼰设计和实现的⽅法。我们不 知道是否有⼈使⽤Blitz++库来实现传统的线性代数运算。我们同样也假定由于Blitz++库所使⽤的实现风格(idioms),即使在今天也需要最 ⾼级的C++编译器技术。另⼀⽅⾯,Blitz++库也使⽤我们相信,使⽤表达式模板技术(expression templates)是将抽象惩罚降低到⼀个可接受限度的必需的技术⽅法。

POOMA 的设计⽬标似乎是在许多部分对Blitz++库的⼤量部分进⾏并⾏计算。它从偏微分⽅程和理论物理领域中提取类来扩展Blitz++的概念。这种实现⽀持并⾏体系结构(parallel architectures)。

MTL 是另⼀个使⽤C++来⽀持基本的线性代数运算的类库。我们共同的观点是线性代数库应当提供与BLAS库相应的功能。另⼀⽅⾯,我们认为C++标准库的概念 并没有⽀持所需要的数值计算的概念要求。另⼀个区别是MTL库当前并没有使⽤表达式模板技术(expressiontemplates)。这可能导致两个问题中的⼀个:可能存在表现能⼒缺失或可能的性能损失。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1690908211a460590.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信