如何在命令行上使用带有 MKL 的英特尔 fortran 编译器
How to use Intel fortran compiler with MKL on command line
我刚刚安装了英特尔® Parallel Studio XE Composer Edition for Fortran OS X*(学生版)。它带有 Math Kernel Library,这就是我购买它的原因。我很难开始使用 MKL。这是我一步一步完成的。
1) 为 Fortran OS X* 安装了英特尔® Parallel Studio XE Composer Edition(没问题)。我可以使用 ifort
运行 一个 'hello world' 脚本并在最后抛出 -mkl
link 命令没有问题(目前还没有调用任何 mkl 命令) .
2) 在 these instructions 之后,我使用英特尔提供的脚本(准确地说位于 opt/intel/bin 中)设置我的环境变量。我有英特尔 64 位架构(根据 ifort -V
),所以我使用 bash mklvars.sh intel64 mod ilp64
。它 运行s 没有错误(或任何输出)。
3) 我编写了以下代码来使用 MKL 的 fortran95 gemm 命令。只需乘以 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_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_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)
关于问题是什么或如何解决这个问题有什么想法吗?我已成功 run a simple script in XCODE 使用 MKL,所以这绝对是我在做的事情,而不是我的安装。
文档告诉您在提供的 compilervars.sh 脚本上使用 "source" 命令以使所有资源可用。例如:
来源//bin/compilervars.sh
这会将 MKL 添加到包含和库路径中,以便编译器和链接器可以找到它们。如果您需要更多帮助,请在 https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x You can get MKL-specific help in https://software.intel.com/en-us/forums/intel-math-kernel-library
中询问
我认为你的程序有一些错误,首先,你必须在代码的开头包含 blas95,然后,你不能使用 gemm
,你必须选择特定版本的 gemm
。例如,要进行实数矩阵乘法,你必须使用 dgemm
,这是我的代码(我称之为 test.f90
),它使用 ifort -mkl test.f90 -o test.exe
编译成功
program test
use blas95
implicit none
real*8,dimension(2,2)::testA,testB,testC
integer::i,j
testA=1d0
testB=1d0
testC=1d0
call dgemm("N", "N", 2, 2, 2, 1d0, A, 2, B, 2, 0, C, 2)
print *, testC
end program test
我刚刚安装了英特尔® Parallel Studio XE Composer Edition for Fortran OS X*(学生版)。它带有 Math Kernel Library,这就是我购买它的原因。我很难开始使用 MKL。这是我一步一步完成的。
1) 为 Fortran OS X* 安装了英特尔® Parallel Studio XE Composer Edition(没问题)。我可以使用 ifort
运行 一个 'hello world' 脚本并在最后抛出 -mkl
link 命令没有问题(目前还没有调用任何 mkl 命令) .
2) 在 these instructions 之后,我使用英特尔提供的脚本(准确地说位于 opt/intel/bin 中)设置我的环境变量。我有英特尔 64 位架构(根据 ifort -V
),所以我使用 bash mklvars.sh intel64 mod ilp64
。它 运行s 没有错误(或任何输出)。
3) 我编写了以下代码来使用 MKL 的 fortran95 gemm 命令。只需乘以 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_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_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)
关于问题是什么或如何解决这个问题有什么想法吗?我已成功 run a simple script in XCODE 使用 MKL,所以这绝对是我在做的事情,而不是我的安装。
文档告诉您在提供的 compilervars.sh 脚本上使用 "source" 命令以使所有资源可用。例如:
来源//bin/compilervars.sh
这会将 MKL 添加到包含和库路径中,以便编译器和链接器可以找到它们。如果您需要更多帮助,请在 https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x You can get MKL-specific help in https://software.intel.com/en-us/forums/intel-math-kernel-library
中询问我认为你的程序有一些错误,首先,你必须在代码的开头包含 blas95,然后,你不能使用 gemm
,你必须选择特定版本的 gemm
。例如,要进行实数矩阵乘法,你必须使用 dgemm
,这是我的代码(我称之为 test.f90
),它使用 ifort -mkl test.f90 -o test.exe
program test
use blas95
implicit none
real*8,dimension(2,2)::testA,testB,testC
integer::i,j
testA=1d0
testB=1d0
testC=1d0
call dgemm("N", "N", 2, 2, 2, 1d0, A, 2, B, 2, 0, C, 2)
print *, testC
end program test