高效复杂矩阵 - 矩阵乘法:矩阵形状和记忆

时间:2017-02-13 13:09:53

标签: matrix-multiplication complex-numbers lapack blas scalapack

在我的代码中,最深的循环级别包含用于矩阵 - 矩阵乘法的BLAS例程。由于此操作是最昂贵的操作(关于计算时间),我想知道尽可能快地使用复杂矩阵元素进行矩阵 - 矩阵乘法的重要性吗?

我使用Fortran和ScaLAPACK。我将使用CGEMM例程。

我有以下具体问题:

  • 矩阵如何存储在内存中是否重要?目前,我使用三维数组,其中在每个循环周期中固定一个索引,使得三维数组缩减为二维矩阵。但我觉得这是无效的,因为矩阵元素在内存中并没有物理上靠近在一起。那么,将矩阵元素复制到临时二维数组中以将其传递给CGEMM会更好吗?
  • 在Fortran中,第一个数组索引是最快的索引。是否有一种最佳的方法应该如何对阵列(矩阵)进行整形以实现快速矩阵乘法?例如,我必须执行矩阵乘法A * B,其中A是复数200x4000矩阵,B是复数4000x50矩阵。因此,我应该更好地创建A作为4000x200阵列,从那时起#34;大" index是fastes指数?当然,我必须告诉CGEMM需要转换A才能获得正确的结果。
  • 对于矩阵 - 矩阵乘法的无效BLAS例程,是否有任何众所周知的陷阱?我知道这是一个非常普遍的问题,但也许有人知道一个好的文件,其中总结了一些DO和DONT。

0 个答案:

没有答案