我目前正在考虑采用我目前使用的代码并从头开始重建它以允许使用更有效的编程和数值技术的想法。
在设计的早期阶段,我决定为矩阵和向量编写一个包装类。这将允许我(希望)换掉 lin。算法。库和求解器,而无需实际接触代码。我会简单地编写一个具有 BLAS 功能的虚函数的类以及一些内部化初始化的方法(允许主代码不必担心并行初始化)。然后,当我想让我的代码与一个新库一起工作时,我只需编写一个新的矩阵类,它使用高效的库函数实现所有这些函数。
我将使用有限体积的代码,因此我将使用具有已知块内存布局的稀疏矩阵。我也在研究大约一百万个未知数,尽管我希望这无关紧要(只要有足够的内存可用)。矩阵包装器还将从配置文件中获取指令以了解要使用的库、内存布局和求解器,因此它不必自己进行任何优化。它只会检查是否安装了请求的库。
对我来说,这似乎是一个相当直接的概念,即使实施并不容易。因此,我的问题分为几个部分。
首先,这之前有没有尝试过/实施过,如果有,在哪里?我宁愿能够抓住一个从零开始的开源库。任何参考或论文将不胜感激。
其次,如果我实施这种系统,我应该期待什么样的问题?我已经可以预见,让它与多个内存模型(共享内存、GPU 或分布式内存)透明地工作会很困难,但我不知道在设计一个相当通用的线性代数接口时要注意哪些其他陷阱。