Will fortran';s';马特穆尔';如果我包含库,请使用MKL?

Will fortran';s';马特穆尔';如果我包含库,请使用MKL?,fortran,intel,lapack,Fortran,Intel,Lapack,我现在正在编写一些代码,我有一个带有matmul的占位符,它似乎工作得很好,但我想使用LAPACKdgemm实现。我现在只使用gfortran,使用matmul可以获得非常好的速度,但我想知道我是否可以做得更好 目前的电话是: C = transpose(matmul( transpose(A), B)) 其中,A、B和C是非方的,双精度矩阵。我可以用LAPACK的当前gfortran实现轻松地为dgemm编写一个包装器,但我喜欢我可以将这一切都作为一个函数来完成(而不是担心调用一个surbr

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

目前的电话是:

C = transpose(matmul( transpose(A), B))
其中,
A
B
C
是非方的,
双精度
矩阵。我可以用
LAPACK
的当前
gfortran
实现轻松地为
dgemm
编写一个包装器,但我喜欢我可以将这一切都作为一个函数来完成(而不是担心
调用一个surbroutine并不得不处理
转置


我想知道如果我使用
ifort
编译并包含
MKL
,这个
matmul
会不会神奇地变为
MKL
dgemm
函数而不使用包装器?

你不希望所有的matmul都是dgemm,对于非常小的矩阵来说这是无利可图的

Gfortran做你想做的事

-外部布拉斯 此选项将使gfortran生成对某些矩阵操作(如MATMUL)的BLAS函数的调用,而不是使用我们自己的函数 算法,如果所涉及的矩阵的大小大于 给定限值(见-fblas matmul限值)。这可能是有利可图的,如果 优化的供应商BLAS库可用。BLAS图书馆将拥有 要在链接时指定

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

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

英特尔Fortran也有类似的功能

[没有 -]opt matmul此选项启用[禁用]编译器 -通过识别矩阵乘法循环嵌套(如果有)并用 matmul库要求提高性能。此选项已启用 默认情况下,如果选项/O3( -O3)和/或平行( -平行)的定义。除非选项/O2,否则此选项无效( -O2)或更高