Xcode 如何在命令行上将英特尔fortran编译器与MKL结合使用

Xcode 如何在命令行上将英特尔fortran编译器与MKL结合使用,xcode,command-line,fortran,intel-fortran,intel-mkl,Xcode,Command Line,Fortran,Intel Fortran,Intel Mkl,我刚刚安装了针对Fortran OS X*的英特尔®并行工作室XE Composer版(学生版)。它附带了数学内核库,这就是我买它的原因。我很难开始使用MKL。这是我一步一步做的 1) 已安装适用于Fortran OS X*的英特尔®并行Studio XE Composer Edition(没有问题)。我可以使用ifort运行一个“hello world”脚本,并在最后毫无问题地打开-mkl链接命令(现在还没有调用任何mkl命令) 2) 接下来,我使用intel提供的脚本(精确地说,位于opt/

我刚刚安装了针对Fortran OS X*的英特尔®并行工作室XE Composer版(学生版)。它附带了数学内核库,这就是我买它的原因。我很难开始使用MKL。这是我一步一步做的

1) 已安装适用于Fortran OS X*的英特尔®并行Studio XE Composer Edition(没有问题)。我可以使用
ifort
运行一个“hello world”脚本,并在最后毫无问题地打开
-mkl
链接命令(现在还没有调用任何mkl命令)

2) 接下来,我使用intel提供的脚本(精确地说,位于opt/intel/bin中)设置环境变量。我有英特尔64位体系结构(根据
ifort-V
),因此我使用
bash mklvars.sh intel64 mod ilp64
。它运行时没有错误(或任何输出)

3) 我编写以下代码来使用fortran95的MKL命令。只是乘以2个矩阵

program test

implicit none
real, dimension(2,2) :: testA, testB, testC

testA = 1
testB = 1
testC = 0  ! I don't think I need this line, but it shouldn't matter

call gemm(testA, testB, testC)

write(*,*) testC

end program test
4) 我使用
ifort test\u mkl.f90-o test-mkl
编译。我得到以下错误:

Undefined symbols for architecture x86_64:
  "_gemm_", referenced from:
      _MAIN__ in ifortSTVOrB.o
ld: symbol(s) not found for architecture x86_64
5) 我尝试了
ifort test\u mkl.f90-o test-L/opt/intel/mkl/lib-mkl
,得到了相同的结果

我注意到许多使用MKL的人在开始编写代码时都使用了
USE mkl95_blas,ONLY:gemm
,因此我在上面的
implicit none
两个示例中都使用了它,得到:

    test_mkl.f90(4): error #7002: Error in opening the compiled module file.  Check INCLUDE paths.   [MKL95_BLAS]
    USE mkl95_blas, ONLY: gemm
--------^
test_mkl.f90(12): error #6406: Conflicting attributes or multiple declaration of name.   [GEMM]
    call gemm(testA, testB, testC )
---------^
test_mkl.f90(4): error #6580: Name in only-list does not exist.   [GEMM]
    USE mkl95_blas, ONLY: gemm
--------------------------^
compilation aborted for test_mkl.f90 (code 1)

有没有关于问题是什么或如何解决的想法?我已经成功地使用了MKL,因此这肯定是我正在做的事情,而不是我的安装。

文档告诉您在提供的compilerBars.sh脚本上使用“source”命令,以使所有资源可用。例如:

source//bin/compilervars.sh


这将把MKL添加到include和library路径中,以便编译器和链接器可以找到它们。如果您需要更多帮助,请询问,您可以在

中获得MKL特定帮助,查看您是否可以找到该模块的路径…您必须为rigjt include路径设置您的环境。这是一个典型的问题,您应该在“英特尔支持论坛”上提出,您需要为您的支持付费。感谢Vladimir,我在看到您的评论后尝试了“英特尔MKL支持论坛”,并在那里找到了一些帮助。此外,OS X中的.mod文件的名称显然与其他地方不同。我将“use”语句改为:use blas95,它反映了我的.mod文件的名称。这一更改+您对源代码命令的建议起到了作用。(具体地说,我看了)。不,发生的是MKL在更新的MKL版本中更改了模块的名称。有关详细信息,请参阅MKL发行说明。这在windows下似乎不起作用:在cmd windows中运行compilervas.bat并编译规范测试_dgemm.f90后,会产生“错误LNK2019:函数MAIN中引用的未解析外部符号dgemm”错误。您需要命名要使用的一个或多个MKL库-这不是自动完成的。如果添加
-mkl
选项,iPort驱动程序将添加一些常见的mkl库,因此您可以尝试。否则,请使用MKL Link Line Advisor()选择要使用的集合。