是否有任何用于高性能矩阵矩阵乘积的库或例程,其中矩阵元素是使用给定函数即时计算的和?
更具体地说,在我目前面临的问题中,我必须计算一个矩阵矩阵乘积
其中是一个对称矩阵, 和是。
使用 LAPACK 或 BLAS 例程需要形成矩阵。然而,矩阵元素是一个仅依赖于矩阵索引的函数。
是否有任何用于高性能矩阵矩阵乘积的库或例程,其中矩阵元素是使用给定函数即时计算的和?
更具体地说,在我目前面临的问题中,我必须计算一个矩阵矩阵乘积
其中是一个对称矩阵, 和是。
使用 LAPACK 或 BLAS 例程需要形成矩阵。然而,矩阵元素是一个仅依赖于矩阵索引的函数。
如果矩阵足够小以适合内存,那么实际形成元素当然没有相关成本:无论如何,您必须至少计算一次元素才能执行矩阵向量乘积,因此您不妨存储您在内存中计算的值,然后在其上运行优化的矩阵向量积函数。
但当然也有你真的不能或不想计算和存储矩阵条目的情况。一个例子是如果其中和是其他矩阵并且通过比更便宜。其他情况是不适合内存。
在这些情况下,您需要一个库来允许您通过它的action来实现一个矩阵,即它的矩阵向量积。一个例子是 PETSc,您可以在其中创建一个MatShell
对象——一个矩阵,您需要为其提供一个指针,该指针指向可以执行矩阵向量乘积的函数。大多数其他线性代数库都具有类似的功能——我很确定 Trilinos 可以做到这一点,而 deal.II(免责声明:这是我与之相关的一个项目)通过创建提供矩阵的类来在所有地方做到这一点——向量乘法成员函数。