Fortran Coder

查看: 25183|回复: 12
打印 上一主题 下一主题

[数学库] VS+IVF如何使用MKL程序库?

[复制链接]

8

帖子

2

主题

0

精华

新人

F 币
27 元
贡献
13 点
跳转到指定楼层
楼主
发表于 2014-3-8 15:32:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
装了VS+IVF后一直想只用IVF自带的MKL函数库去解大型稀疏方程组,在百度上看了很多帖子,但是无论怎么搞,怎么设置,还是不能使用MKL函数库,求高手能详细介绍如何在VS中做相关的设置才能在IVF中调用MKL库里面的函数!
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

737

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
705 元
贡献
361 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2014-3-8 16:06:34 | 只看该作者
MKL有若干版本,具体使用时还有77接口,90接口,使用方法都不同。
不好归纳。

建议你给出你当前遇到的问题,错误提示,以便查找原因。

8

帖子

2

主题

0

精华

新人

F 币
27 元
贡献
13 点
板凳
 楼主| 发表于 2014-3-8 21:03:34 | 只看该作者
好的,明廷整理好了,发上来,谢谢了

8

帖子

2

主题

0

精华

新人

F 币
27 元
贡献
13 点
地板
 楼主| 发表于 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接口问题本人菜鸟,确不明了,只想能使用就好

8

帖子

2

主题

0

精华

新人

F 币
27 元
贡献
13 点
5#
 楼主| 发表于 2014-3-9 12:39:58 | 只看该作者
图传不上去。。。。。不过也不重要

737

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
705 元
贡献
361 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

6#
发表于 2014-3-9 13:01:51 | 只看该作者
MKL.h 文件是 C 语言的接口,是一定不能使用的。

试试按如下设置进行。





8

帖子

2

主题

0

精华

新人

F 币
27 元
贡献
13 点
7#
 楼主| 发表于 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呢?

737

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
705 元
贡献
361 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

8#
发表于 2014-3-9 14:00:31 | 只看该作者
不要想当然的 use mkl
mkl 不提供同名的 module

我这边按照如此设置就OK了。
另外我注意到你安装的是64位的IVF,你可以注意一下自己的MKL是否是对应版本的?你在include和lib文件夹添加的是否是IA32的include和lib呢?

8

帖子

2

主题

0

精华

新人

F 币
27 元
贡献
13 点
9#
 楼主| 发表于 2014-3-9 14:02:18 | 只看该作者
chuxf 发表于 2014-3-9 14:00
不要想当然的 use mkl
mkl 不提供同名的 module

好的,先试试看哈,谢谢

8

帖子

2

主题

0

精华

新人

F 币
27 元
贡献
13 点
10#
 楼主| 发表于 2014-3-9 16:06:51 | 只看该作者
chuxf 发表于 2014-3-9 14:00
不要想当然的 use mkl
mkl 不提供同名的 module

程序还是原来那个,不再使用 USE MKL。运行的时候为什么出现这个问题?

5.jpg (125.42 KB, 下载次数: 614)

5.jpg

7.jpg (33.33 KB, 下载次数: 616)

7.jpg
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-25 09:16

Powered by Tencent X3.4

© 2013-2024 Tencent

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