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,B和C,是非正方形的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)或更高,否则此选项无效.