通过 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
)。几点建议:
- 尝试添加
-fno-range-check
,这是让 gfortran 正确编译 mkl_vsl mod 规则所必需的(.mod 编译主程序时自动创建的文件)
- 不知道为 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.
之前创建
我想使用 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
)。几点建议:
- 尝试添加
-fno-range-check
,这是让 gfortran 正确编译 mkl_vsl mod 规则所必需的(.mod 编译主程序时自动创建的文件) - 不知道为 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.