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

时间:2015-07-18 18:21:46

标签: fortran intel lapack

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

目前的电话是:

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

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

我想知道我是否使用ifort进行编译并添加MKL,这个matmul会为我神奇地改为MKL dgemm函数包装器?

1 个答案:

答案 0 :(得分:11)

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

Gfortran做你想做的事

  

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

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

你可以在gfortran中以这种方式轻松使用MKL。

英特尔Fortran有类似的东西

  

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