如果我包含该库,fortran 的 'matmul' 会使用 MKL 吗?

Will fortran's 'matmul' make use of MKL if I include the library?

我现在正在写一些代码,我有一个带有 matmul 的占位符,它看起来工作得很好,但我想使用 LAPACK dgemm 实现.我现在只使用 gfortran 并使用 matmul 获得非常好的速度,但我想知道我是否可以变得更好。

当前通话是:

C = transpose(matmul( transpose(A), B))

其中 ABC 是非方阵,double precision 矩阵。我可以使用 LAPACK 的当前 gfortran 实现轻松地为 dgemm 编写一个包装器,但我喜欢我可以将这一切作为一个函数来完成(而不是担心 call对于一个 surbroutine 并且必须处理 transpose).

我想知道如果我用 ifort 编译并包含 MKL,这个 matmul 会神奇地变成 MKL dgemm 函数吗?没有包装纸?

你不希望所有的 MATMUL 都是 dgemm,它对非常小的矩阵来说是无利可图的。

Gfortran 做你想做的事

-fexternal-blas This option will make gfortran generate calls to BLAS functions for some matrix operations like MATMUL, instead of using our own algorithms, if the size of the matrices involved is larger than a given limit (see -fblas-matmul-limit). This may be profitable if an optimized vendor BLAS library is available. The BLAS library will have to be specified at link time.

您甚至可以通过 -fblas-matmul-limit=n

更改切换到 BLAS 的大小限制

您可以通过这种方式在 gfortran 中轻松使用 MKL。

Intel Fortran 有类似的东西

[no - ] opt-matmul This option enables [disables] a compiler - generated Matrix Multiply (matmul) library call by identifying matrix multiplicat ion loop nests , if any , and replacing them with a matmul library call for improved performance. This option is enabled by default if options / O3 ( - O3) and /Qparallel ( - parallel) are specified. This option has no effect unless option / O2 ( - O2) or higher is set.