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)或更高