编译使用带有gfortran的英特尔MKL模块的代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译使用带有gfortran的英特尔MKL模块的代码相关的知识,希望对你有一定的参考价值。

我想使用gfortran编译一些使用Mac上英特尔MKL库中的mlk_vsl.f90的代码。

我正在做以下事情: gfortran -o filename filename.f90 -I/${MKLROOT}/include

我收到此错误:

"Can't open module file 'mkl_vsl_type.mod" for reading at (1): No such file or directory"

我知道我必须创建.mod文件,但我不确定如何。

答案

你正在编译的正确轨道(如果添加-c)。一些建议:

  1. 尝试添加-fno-range-check,这是让gfortran正确编译mkl_vsl模块所需的(编译主程序时自动创建的.mod文件)
  2. 不知道为MKLROOT设置了什么,你可能会有额外的反斜杠;试试-I${MKLROOT}/include

但是,对于链接,您可能需要其他库。查看如何链接的最简单方法是查看MKLROOT目录mkl/examples/vslf/source中的一个示例,其中包含使用mkl_vsl的源文件。在mkl/examples/vslf中,有一个makefile可以运行以生成可执行文件并打印链接行。使用make help获取更多信息。例如,使用gfortran和静态链接编译vslssort.f:make libintel64 compiler=gnu function=vslssort。请注意两个警告:链接行使用libmkl_intel_thread.a而不是libmkl_gnu_thread.a,它使用-J标志将创建的.mod文件放在必须在链接之前创建的不同目录中。

以上是关于编译使用带有gfortran的英特尔MKL模块的代码的主要内容,如果未能解决你的问题,请参考以下文章

gfortran使用`-dec-math`给`dacosd_`提供未定义的引用

即使使用 `-dec-math`,gfortran 也会对 `dacosd_` 给出未定义的引用

gfortran 编译器的强制向量化

在 gfortran 中预处理 !DEC$ 指令

在 python 的 c 扩展中包括外部共享英特尔的 mkl 库

将英特尔 MKL 双数组与 MKL_Complex16 数组(和 exp)相乘?