dsi*_*cha 6 performance d linear-algebra libraries
在哪里可以得到用D编写的快速线性系统求解器?它应该能够取一个方阵A和一个矢量b并求解方程Ax = b for b,理想情况下,也可以对A进行显式反演.我有一个我自己写的,但它很慢,可能是因为它完全缓存 - 天真.但是,对于我的用例,我需要具有以下绝对的,不可协商的要求,即如果它不符合这些要求,那么我不关心它有多好:
必须是许可的公共域,Boost许可证或某些类似的许可许可证.理想情况下,它不应该要求在二进制文件中归属(即不是BSD),尽管这一点在某种程度上是可以协商的.
必须用纯D编写或易于翻译成纯D.不可思议的Fortran代码(即LAPACK)不管它有多快都不是一个好的答案.
必须针对大型(即n> 1000)系统进行优化.我不希望为游戏程序员设计的东西真的非常快速地解决4x4矩阵问题.
绝不能与我不需要的大量资料库密不可分.
编辑:这些看似疯狂的要求的原因是我需要这个代码用于允许许可的开源库,我不希望有任何第三方依赖.
如果您不喜欢 Fortran 代码, Eigen是一个相当快速的 C++ 密集矩阵库,具有适度的多核支持、编写良好的代码和良好的用户界面。将其代码转换为 D(或从中获取一些算法)应该很简单。
现在我的“考虑一下你的要求”:“每个人”(Mathematica、Matlab、Maple、SciPy、GSL、R、...)使用 ATLAS / LAPACK、UMFPACK、PARDISO、CHOLMOD 等是有原因的。这很难致力于编写快速、多线程、内存高效、可移植且数值稳定的矩阵求解器(相信我,我已经尝试过)。ATLAS 和其他公司都投入了很多艰苦的工作。
因此,我的方法是根据您的矩阵类型为相关库编写绑定,并从 D 链接到 C 接口。也许多数组中的绑定就足够了(我没有尝试过)。否则,我建议查看另一个 C++ 库,即uBlas和相应的绑定以获取想法。
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |