如果您从使用行主要顺序的类 C 语言调用 LAPACK 或 BLAS 之类的库(用 FORTRAN 编写并使用列主要顺序),您是否会因为创建转置矩阵?当然,测试是最好的,但任何有经验的人都可以告诉我优化的库是否仍然可以提高性能,即使在开销之后?
使用 LAPACK/BLAS 频繁行主要/列主要转换的影响?
计算科学
表现
图书馆
拉帕克
布拉斯
2021-12-18 02:00:39
2个回答
许多这些库都有 C 接口,可以在内部交换排序的含义而不交换数据。此外,对二维矩阵使用 C 风格的双指针可能首先是错误的选择(由于双重查找),因此您可以通过索引到线性 C 数组或使用库来使您的数据以列为主解决这些问题。
您可以使用恒等式 C^T = (AB)^T = B^TA^T 来使用 BLAS 计算来自 C 的行主数组。
无论如何,与 O(N^3) BLAS3 或 LAPACK 例程相比,转置的开销通常不是瓶颈,但我应该注意,我经常从自己的研究中指出反例。