主题:Intel MKL 子程序调用,新手跪求援手!
Obama
[专家分:0] 发布于 2012-09-18 07:23:00
以前用IMSL,老板换成MKL了,才发现两者很不一样啊, 无助呀!
我要用子程序去实现对实对称函数矩阵求逆矩阵,以前用IMSL的时候,你可以找到是哪个子程序可以用,还有例子。
现在MKL 呢,天啊,折腾了几天,不知道该去哪找?找到的可不可用?也没有例子可查。求哪位大侠指点一下啊。
能不能具体指点一下调用哪个(或哪几个组合)子程序,在哪子程序包里面? 比如: lapack. 有没有例子 或者我如何查我的调用是否正确?
另外,在FORTRAN 95 中 如何调用 调用子程序(比如XYZ)呀? 是不是跟IMSL 类似?
PROGRAM XXXX
EXTERNAL XYZ
........
CALL XYZ()
.....
END PROGRAM
先谢谢了,
回复列表 (共3个回复)
沙发
yeg001 [专家分:14390] 发布于 2012-09-18 10:00:00
MKL 只是自己重新修改和编译lapack, IMSL是自己修改并重新封装了包括lapack(当然不限于lapack). 调用上不一样很正常.
MKL 安装目录下有说明档, manual什么的, 楼主可以去慢慢查. 求逆矩阵可能是要先调用一个分解函数再是求逆, 不过这些在文档中有说清楚的.
不知道楼主你用的是那个版本的IMSL, 是自己装的还是编译器自带的. 自己安装的还需要手动添加函数库的位置到编译器环境中, 设置好就不需要写EXTERNAL XYZ. MKL不像IMSL那样use ****.
如果还有问题, 楼主可以百度一下如何设置调用函数库, 这方面的资料比较多, 不是fortran才有的设置.
板凳
Obama [专家分:0] 发布于 2012-09-18 13:53:00
非常赞成和感谢yeg001兄的评论。我是这样的,我是在自己的计算机上写FORTRAN程序,然后提交到安装INTEL FORTRAN 的服务器上运行。所以我不用安装FORTRAN软件。对,IMSL 求逆矩阵子程序内部直接调用矩阵对角化子程序。 按您的意见,我还要先对角化,再求逆矩阵?
另外,恕我愚昧,我还不完全明白‘自己重新修改和编译LAPACK’的意思, 你能不能具体说一说?
看网上说可以用sytri.但是我又没有找到一个例子。您的意思是我还要先调用对角化子程序,然后再求逆矩阵?
最后一个问题:您是说设置调用数据库的命令对FORTRAN 和 C都一样吗? 谢谢
3 楼
yeg001 [专家分:14390] 发布于 2012-09-18 14:29:00
你求解的是实对称的, 所以建议查一查MKL的文档. 如果你的服务器是linux的, 可以在安装MKL的目录下找到相关的pdf文档.
这里我随手找了lapack的普通矩阵求逆的函数DGETRI为例,参考连接: http://www.netlib.org/lapack/double/dgetri.f (MKL里面的描述也是类似且更详细一点)
这个函数,
prec double
for Computes the inverse of a general matrix, using the LU factorization, computed by DGETRF.
所以需要先用DGETRF函数进行LU分解,再把信息传递给这个函数. 那个网页和MKL说明对所做的数学计算和各变量描述都写得很清楚.
至于你要的实对称矩阵或许不需要这个过程, 需要你去查阅的.
我来回复