gpt4 book ai didi

c++ - ublas 与矩阵模板库 (MTL4)

转载 作者:IT老高 更新时间:2023-10-28 22:34:29 26 4
gpt4 key购买 nike

我正在用 C++ 编写一个用于双曲偏微分方程的软件。几乎所有的符号都是 vector 和矩阵的。最重要的是,我需要线性代数求解器。是的, vector 和矩阵的大小可以有很大差异(从 1000 到只能通过分布式内存计算解决的大小,例如集群或类似架构)。如果我生活在乌托邦,我就有了线性求解器,它非常适合集群、GPU 和多核。

在考虑应该表示变量的数据结构时,我想到了 boost.ublas 和 MTL4。两个库都兼容 blas 3 级,MTL4 实现了稀疏求解器,并且比 ublas 快得多。它们都没有实现对多核处理器的支持,更不用说分布式内存计算的并行化了。另一方面,MTL4 的开发依赖于 2 个开发人员的单独努力(至少据我了解),我确信 ublas 存在于 boost 库中是有原因的。此外,英特尔的 mkl 库包括将其结构与 ublas 绑定(bind)的示例。我想将我的数据和软件绑定(bind)到将长期坚如磐石、开发和维护的数据结构。

最后,问题。您在使用 ublas 和/或 mtl4 方面有何经验,您会推荐什么?

谢谢,威力多多

最佳答案

根据您的要求,我可能会选择 BOOST::uBLAS .事实上,一个好的 uBLAS 部署在速度上应该与 MTL4 大致相当。

原因是存在bindings对于 ATLAS (因此您可以为您的计算机有效优化的共享内存并行化),以及供应商调整的实现,如 Intel Math Kernel LibraryHP MLIB .

使用这些绑定(bind),带有经过良好调整的 ATLAS/BLAS 库的 uBLAS 应该足够快。如果您链接到给定的 BLAS/ATLAS,您应该与使用编译器标志 -DMTL_HAS_BLAS 链接到相同 BLAS/ATLAS 的 MTL4 大致相同。 ,并且很可能比没有 BLAS 的 MTL4 根据他们自己的 observation 更快(示例见 here ,其中 GotoBLAS 优于 MTL4)。

总之,只要你愿意使用一些 BLAS 库,速度不应该是你的决定性因素。可用性和支持更重要。您必须决定,MTL 还是 uBLAS 更适合您。我倾向于 uBLAS,因为它是 BOOST 的一部分,而 MTL4 目前仅支持 BLAS selectively .您可能还会发现这个有点过时 comparison of scientific C++ packages有趣。

一个大但是:对于您的要求(非常大的矩阵),我可能会跳过“语法糖”uBLAS 或 MTL,并直接调用 BLAS/LAPACK 的“金属”C 接口(interface)。但这只是我...另一个优点是它应该比切换到ScaLAPACK更容易。 (分布式内存LAPACK,没用过)解决更大的问题。明确一点:对于家庭问题,我不建议直接调用 BLAS 库。

关于c++ - ublas 与矩阵模板库 (MTL4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1067821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com