通过 gfortran 编译使用英特尔 MKL 模块的代码

Compiling code that uses Intel MKL modules with gfortran

我想使用 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 规则所必需的(.mod 编译主程序时自动创建的文件)
  2. 不知道为 MKLROOT 设置了什么,您可能有一个额外的反斜杠;尝试
    -I${MKLROOT}/include

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

之前创建