D的快速线性系统求解器?

时间:2011-02-08 19:56:43

标签: performance libraries d linear-algebra

在哪里可以得到用D编写的快速线性系统求解器?它应该能够采用方阵 A 和矢量 b 并求解方程 Ax = b b ,理想情况下,还会对 A 执行显式反转。我有一个我自己写的,但它很慢,可能是因为它完全缓存 - 天真。但是,对于我的用例,我需要具有以下 绝对,不可协商的 要求的内容,即如果它不符合这些要求,那么我就不在乎了它有多好:

  1. 必须获得许可的公共域,Boost许可或某些类似的许可许可。理想情况下,它不应要求在二进制文件中归属(即不是BSD),尽管这一点在某种程度上可以协商。

  2. 必须用纯D书写或易于翻译成纯D.不可思议的Fortran代码(即LAPACK)无论多快都不是一个好的答案。

  3. 必须针对大型(即n> 1000)系统进行优化。我不希望为游戏程序员设计的东西真的非常快速地解决4x4矩阵。

  4. 不能与我不需要的大量资料库密不可分。

  5. 编辑:这些看似疯狂的要求的原因是我需要这个代码用于允许许可的开源库,我不希望有任何第三方依赖。

1 个答案:

答案 0 :(得分:3)

如果您不喜欢Fortran代码,那么一个具有适度多核支持,编写良好的代码和良好的用户界面的快速C ++密集矩阵库是Eigen。将其代码转换为D(或从中获取一些算法)应该是直截了当的。

现在我的“考虑你的要求”:有一个原因,“每个人”(Mathematica,Matlab,Maple,SciPy,GSL,R,......)使用ATLAS / LAPACK,UMFPACK,PARDISO,CHOLMOD等。编写快速,多线程,内存高效,便携和数值稳定的矩阵求解器是很难的(相信我,我已经尝试过了)。很多这项艰苦的工作已经进入了ATLAS和其他方面。

所以我的方法是根据你的矩阵类型为相关库编写绑定,并从D到C接口链接。也许multiarray中的绑定就足够了(我还没试过)。否则,我建议查看另一个C ++库,即uBlas和相应的bindings的想法。