Fortran Coder

VS+IVF如何使用MKL程序库?

查看数: 24411 | 评论数: 12 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-3-8 15:32

正文摘要:

装了VS+IVF后一直想只用IVF自带的MKL函数库去解大型稀疏方程组,在百度上看了很多帖子,但是无论怎么搞,怎么设置,还是不能使用MKL函数库,求高手能详细介绍如何在VS中做相关的设置才能在IVF中调用MKL库里面的函数 ...

回复

lwq1834515 发表于 2015-4-11 09:45:07
楼主,新人请教一下,调用mkl的时候,应该怎么查找include什么文件呢?
hktk_12 发表于 2014-3-9 18:30:35
fcode 发表于 2014-3-9 17:23
call sgetrf ( m , n , a , lda , ipiv , info )
改为
call sgetrf ( m , n , a , lda , ipv , info )

调试通过了!!!非常谢谢您!!!这个拼写错误是自己大意了!!!
fcode 发表于 2014-3-9 17:23:06
call sgetrf ( m , n , a , lda , ipiv , info )
改为
call sgetrf ( m , n , a , lda , ipv , info )

是拼写错误吧??建议用 Implicit None
hktk_12 发表于 2014-3-9 14:02:18
chuxf 发表于 2014-3-9 14:00
不要想当然的 use mkl
mkl 不提供同名的 module

好的,先试试看哈,谢谢
楚香饭 发表于 2014-3-9 14:00:31
不要想当然的 use mkl
mkl 不提供同名的 module

我这边按照如此设置就OK了。
另外我注意到你安装的是64位的IVF,你可以注意一下自己的MKL是否是对应版本的?你在include和lib文件夹添加的是否是IA32的include和lib呢?
hktk_12 发表于 2014-3-9 13:54:53
chuxf 发表于 2014-3-9 13:01
MKL.h 文件是 C 语言的接口,是一定不能使用的。

试试按如下设置进行。

谢谢!
根据您的提示,做了修改,不过去掉‘include 'MKL.h'’行后,依然是:

1>------ 已启动生成项目: Console4, 配置:  Debug  x64 ------
1>Compiling with Intel(R) Visual Fortran Compiler XE 12.0.5.221 [Intel(R) 64]...
1>Source4.F90
1>Linking...
1>Source4.obj : error LNK2019: 无法解析的外部符号 for_set_reentrancy,该符号在函数 MAIN__ 中被引用
1>Source4.obj : error LNK2019: 无法解析的外部符号 SGETRF,该符号在函数 MAIN__ 中被引用
1>Source4.obj : error LNK2001: 无法解析的外部符号  _fltused
1>LINK : error LNK2001: 无法解析的外部符号 mainCRTStartup
1>x64\Debug\Console4.exe : fatal error LNK1120: 4 个无法解析的外部命令
1>
1>Build log written to  "file://F:\My Programs c c++ F90\1\Console4\Console4\x64\Debug\BuildLog.htm"
1>Console4 - 5 error(s), 0 warning(s)
==========成功|0 个,失败1 个,最新 0 个,跳过y0 个==========

将‘include 'MKL.h'’改成 USE MKL,错误如下:

1>------ 已启动生成项目: Console4, 配置:  Debug  x64 ------
1>Compiling with Intel(R) Visual Fortran Compiler XE 12.0.5.221 [Intel(R) 64]...
1>Source4.F90
1>F:\My Programs c c++ F90\1\Console4\Console4\Source4.F90(5): error #7002: Error in opening the compiled module file.  Check INCLUDE paths.   [MKL]
1>compilation aborted for F:\My Programs c c++ F90\1\Console4\Console4\Source4.F90 (code 1)
1>
1>Build log written to  "file://F:\My Programs c c++ F90\1\Console4\Console4\x64\Debug\BuildLog.htm"
1>Console4 - 2 error(s), 0 warning(s)
==========成功|0 个,失败1 个,最新 0 个,跳过y0 个==========

要调用MKL函数库,include ‘MKL.h’不行,USE MKL不行,在VS2010中IVF怎样调用MKL呢?
楚香饭 发表于 2014-3-9 13:01:51
MKL.h 文件是 C 语言的接口,是一定不能使用的。

试试按如下设置进行。





hktk_12 发表于 2014-3-9 12:39:58
图传不上去。。。。。不过也不重要
hktk_12 发表于 2014-3-9 12:23:51
装了VS+IVF后一直想只用IVF自带的MKL函数库去解大型稀疏方程组,在百度上看了很多帖子,但是无论怎么搞,怎么设置,还是不能使用MKL函数库,求高手能详细介绍如何在VS中做相关的设置才能在IVF中调用MKL库里面的函数!

我装的是VS2010旗舰版,Intel.Visual.Fortran.XE2011.5.221.【含win7.32位.64位】版
直接装VS和IVF后,不知道怎么用自带的MKL函数库,于是百度了一些例子,后面发现都不行。参考下面的链接
http://blog.sina.com.cn/s/blog_47569d460100m4cb.html
中的第五步:配置编译环境,设置一些路径(我将IVF装在D盘,版本不一样路径有所不同),如以下(列出其中一个):


MKL中有一个计算LU分解的函数

这里我用了:call sgetrf ( m , n , a , lda , ipiv , info),因为MKL手册中提到‘REAL for sgetrf’
下面是一个程序:
[Fortran] 纯文本查看 复制代码
program main
include 'MKL.h'
parameter(m=3,n=3,lda=3)
integer lda,info
integer ipv(n)
real a(lda,n)
a(1,1)=1;a(1,2)=2;a(1,3)=3
a(2,1)=2;a(2,2)=5;a(1,3)=2
a(3,1)=3;a(3,2)=1;a(3,3)=5
call sgetrf ( m , n , a , lda , ipiv , info )
end

调试后出现如下情况:
1>------ 已启动生成项目: Console4, 配置:  Debug  x64 ------
1>Compiling with Intel(R) Visual Fortran Compiler XE 12.0.5.221 [Intel(R) 64]...
1>Source4.F90
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(29): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(30): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(32): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(33): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(34): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(36): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(1): error #5082: Syntax error, found '/' when expecting one of: <LABEL> <END-OF-STATEMENT> ; BLOCK BLOCKDATA PROGRAM MODULE TYPE BYTE CHARACTER ...
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(37): error #5192: Lead underscore not allowed
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(37): error #5192: Lead underscore not allowed
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(38): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(39): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(40): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(41): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(42): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(43): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(44): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(45): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(46): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(48): warning #5117: Bad # preprocessor line
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(37): error #5276: Unbalanced parentheses
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(37): error #5082: Syntax error, found '*' when expecting one of: ( % [ : . = =>
1>D:\Program Files\Intel\ComposerXE-2011\mkl\include\MKL.h(37): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: ( % [ . = =>
1>compilation aborted for F:\My Programs c c++ F90\1\Console4\Console4\Source4.F90 (code 1)
1>
1>Build log written to  "file://F:\My Programs c c++ F90\1\Console4\Console4\x64\Debug\BuildLog.htm"
1>Console4 - 7 error(s), 16 warning(s)
==========成功|0 个,失败1 个,最新 0 个,跳过y0 个==========

下图为MKL.h文件:


以上错误似乎都是出错在MKL.h的文件里面,于是将
include 'MKL.h'
这一行去掉,调试出现如下问题:
1>------ 已启动生成项目: Console4, 配置:  Debug  x64 ------
1>Compiling with Intel(R) Visual Fortran Compiler XE 12.0.5.221 [Intel(R) 64]...
1>Source4.F90
1>Linking...
1>Source4.obj : error LNK2019: 无法解析的外部符号 for_set_reentrancy,该符号在函数 MAIN__ 中被引用
1>Source4.obj : error LNK2019: 无法解析的外部符号 SGETRF,该符号在函数 MAIN__ 中被引用
1>Source4.obj : error LNK2001: 无法解析的外部符号  _fltused
1>LINK : error LNK2001: 无法解析的外部符号 mainCRTStartup
1>x64\Debug\Console4.exe : fatal error LNK1120: 4 个无法解析的外部命令
1>
1>Build log written to  "file://F:\My Programs c c++ F90\1\Console4\Console4\x64\Debug\BuildLog.htm"
1>Console4 - 5 error(s), 0 warning(s)
==========成功|0 个,失败1 个,最新 0 个,跳过y0 个==========

函数sgetrf是MKL函数库中的函数,想调用来做计算,在VS+IVF中虽然有MKL库,但不能直接使用,该如何设置呢?还是我的程序调用方式本身就用问题?

求助高手!!!另外,对于77、90接口问题本人菜鸟,确不明了,只想能使用就好

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-5 04:15

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表