如果我包括图书馆,fortran的'matmul'会使用MKL吗?

drj*_*rm3 8 fortran intel lapack

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

目前的电话是:

C = transpose(matmul( transpose(A), B))
Run Code Online (Sandbox Code Playgroud)

where A,BC,是非正方形的double precision矩阵.我可以轻松地为dgemm当前的gfortran实现编写一个包装器LAPACK,但我喜欢我可以将所有这些作为一个函数(而不是担心call一个surbroutine并且必须处理transpose).

我想知道如果我编译ifort和包含MKL,这将matmul神奇地改变MKL dgemm为我没有包装的功能?

Vla*_*r F 12

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

Gfortran做你想要的

-fexternal-blas如果所涉及的矩阵的大小大于给定的限制,这个选项将使gfortran为MATMUL等一些矩阵运算生成对BLAS函数的调用,而不是使用我们自己的算法(参见-fblas-matmul-limit) .如果优化的供应商BLAS库可用,这可能是有利可图的.必须在链接时指定BLAS库.

您甚至可以通过-fblas-matmul-limit = n更改切换到BLAS的大小限制

您可以在gfortran中以这种方式轻松使用MKL.

英特尔Fortran有类似的东西

[no - ] opt-matmul此选项通过识别矩阵乘法循环嵌套(如果有)启用[禁用]编译器生成的Matrix Multiply(matmul)库调用,并将其替换为matmul库调用以提高性能.如果指定了选项/ O3( - O3)和/ Qparallel( - 并行),则默认情况下启用此选项.除非设置了选项/ O2( - O2)或更高,否则此选项无效.