Fortran Coder

查看: 18369|回复: 8
打印 上一主题 下一主题

[数学库] 有没有大神用过intel的mkl库求解大型矩阵的特征值

[复制链接]

33

帖子

12

主题

0

精华

熟手

F 币
138 元
贡献
93 点
跳转到指定楼层
楼主
发表于 2020-2-14 10:59:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5F 币
intel的mkl库求解大型矩阵(20000*20000)的特征值。系统是ubuntu,用到的函数是mkl库的syevd。
[Fortran] 纯文本查看 复制代码
program main
      implicit none
      integer,parameter :: M=20000,N=500,WORKL=M,iWORKL=M
      integer i,j,info
      real dataM(M,N),C(M,M),T(N,M),W(M),WORK(WORKL)
      integer iWORK(iWORKL)
      open(5,file='output_1.47_0.000_1.dat')
      do i=1,M
          read(5,*) (dataM(i,j),j=1,N)
      end do
      write(*,*) "load the dat file!"
      do i=1,M
          dataM(i,:)=dataM(i,:)/sqrt(sum(dataM(i,:)**2))
      end do
      write(*,*) "dataM has been unitary"
      T=transpose(dataM)
      C=matmul(dataM,T)
      write(*,*) "C has been done!"
      call syevd(C,W,'V')

编译ifort -mkl test.f -o test,文件名test.f.但是系统找不到这个函数,可是我用同样的操作ssyevd函数就可以编译,但是ssyecd函数输入的参数太多,执行起来也很困难。有没有大神用过这个mkl的函数,求指点。

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
沙发
发表于 2020-2-14 21:22:38 | 只看该作者
use lapack95,并需要连接 mkl_lapack95.lib 。

1.png (51.12 KB, 下载次数: 690)

1.png
回复

使用道具 举报

33

帖子

12

主题

0

精华

熟手

F 币
138 元
贡献
93 点
板凳
 楼主| 发表于 2020-2-15 12:26:55 | 只看该作者
li913 发表于 2020-2-14 21:22
use lapack95,并需要连接 mkl_lapack95.lib 。

请问linux编译时怎么链接mkl_lapack95.lib?
回复

使用道具 举报

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
地板
发表于 2020-2-16 14:36:45 | 只看该作者
linux的话,文件名可能不同。比如 ifort -o lapack.o test.o -O test.out
回复

使用道具 举报

33

帖子

12

主题

0

精华

熟手

F 币
138 元
贡献
93 点
5#
 楼主| 发表于 2020-2-27 10:01:30 | 只看该作者
li913 发表于 2020-2-16 14:36
linux的话,文件名可能不同。比如 ifort -o lapack.o test.o -O test.out

感谢,问题我已经解决了
回复

使用道具 举报

33

帖子

12

主题

0

精华

熟手

F 币
138 元
贡献
93 点
6#
 楼主| 发表于 2020-8-29 15:58:08 | 只看该作者
li913 发表于 2020-2-14 21:22
use lapack95,并需要连接 mkl_lapack95.lib 。

大神,请问如果我只需要计算出最大特征值,不需要计算特征向量和其他特征值,应该是用什么mkl的函数?
回复

使用道具 举报

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

7#
发表于 2020-8-29 22:54:08 | 只看该作者
本帖最后由 风平老涡 于 2020-8-29 22:57 编辑

ssyevd是F77版, syevd是F95版。可能是系统设置问题。
回复

使用道具 举报

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

8#
发表于 2020-8-29 22:57:06 | 只看该作者
本帖最后由 风平老涡 于 2020-8-29 22:58 编辑
mmSCI 发表于 2020-8-29 15:58
大神,请问如果我只需要计算出最大特征值,不需要计算特征向量和其他特征值,应该是用什么mkl的函数? ...

call syevd(c,w,'N')
or
call syevd(c,w)

回复

使用道具 举报

33

帖子

12

主题

0

精华

熟手

F 币
138 元
贡献
93 点
9#
 楼主| 发表于 2020-9-13 17:16:30 | 只看该作者
风平老涡 发表于 2020-8-29 22:57
call syevd(c,w,'N')
or
call syevd(c,w)

请问你有没有对比过,部分特征值计算的函数和这个syevd全部特征值计算函数,那个效率更高?我试了试,20000*20000的特征值计算,虽然syevd是计算全部特征值,但是还是它比较快一些,其他计算部分特征值的函数,时间会稍长。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 04:24

Powered by Tencent X3.4

© 2013-2024 Tencent

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