回 帖 发 新 帖 刷新版面

主题:Intel MKL 子程序调用,新手跪求援手!

以前用IMSL,老板换成MKL了,才发现两者很不一样啊, 无助呀!

我要用子程序去实现对实对称函数矩阵求逆矩阵,以前用IMSL的时候,你可以找到是哪个子程序可以用,还有例子。

现在MKL 呢,天啊,折腾了几天,不知道该去哪找?找到的可不可用?也没有例子可查。求哪位大侠指点一下啊。

能不能具体指点一下调用哪个(或哪几个组合)子程序,在哪子程序包里面? 比如: lapack. 有没有例子 或者我如何查我的调用是否正确?


另外,在FORTRAN 95 中 如何调用 调用子程序(比如XYZ)呀? 是不是跟IMSL 类似?

PROGRAM  XXXX

EXTERNAL XYZ

........


CALL XYZ()

.....


END PROGRAM


先谢谢了,

回复列表 (共3个回复)

沙发

MKL 只是自己重新修改和编译lapack, IMSL是自己修改并重新封装了包括lapack(当然不限于lapack). 调用上不一样很正常.
MKL 安装目录下有说明档, manual什么的, 楼主可以去慢慢查. 求逆矩阵可能是要先调用一个分解函数再是求逆, 不过这些在文档中有说清楚的.
不知道楼主你用的是那个版本的IMSL, 是自己装的还是编译器自带的. 自己安装的还需要手动添加函数库的位置到编译器环境中, 设置好就不需要写EXTERNAL XYZ. MKL不像IMSL那样use ****.
如果还有问题, 楼主可以百度一下如何设置调用函数库, 这方面的资料比较多, 不是fortran才有的设置.

板凳

非常赞成和感谢yeg001兄的评论。我是这样的,我是在自己的计算机上写FORTRAN程序,然后提交到安装INTEL FORTRAN 的服务器上运行。所以我不用安装FORTRAN软件。对,IMSL 求逆矩阵子程序内部直接调用矩阵对角化子程序。 按您的意见,我还要先对角化,再求逆矩阵?

另外,恕我愚昧,我还不完全明白‘自己重新修改和编译LAPACK’的意思, 你能不能具体说一说?

看网上说可以用sytri.但是我又没有找到一个例子。您的意思是我还要先调用对角化子程序,然后再求逆矩阵?

最后一个问题:您是说设置调用数据库的命令对FORTRAN 和 C都一样吗? 谢谢

3 楼

你求解的是实对称的, 所以建议查一查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说明对所做的数学计算和各变量描述都写得很清楚.

至于你要的实对称矩阵或许不需要这个过程, 需要你去查阅的.

我来回复

您尚未登录,请登录后再回复。点此登录或注册