Fortran Coder

查看: 1926|回复: 3
打印 上一主题 下一主题

[数学库] MKL库GETRS函数access violation问题

[复制链接]

10

帖子

3

主题

0

精华

入门

F 币
64 元
贡献
27 点
跳转到指定楼层
楼主
发表于 2023-2-15 10:53:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
求助各位大佬,我现在需要进行一个大型线性方程组求解,系数矩阵的维度为(N*N=34000*34000),使用的类型是REAL(kind=4),在调用MKL库GETRS函数的时候出现access violation问题,请问怎么解决?堆栈上限已经调到最大,数组也都是动态数组,使用的代码也没有问题,因为降低数组维度后(N=500)可以成功计算。另外,在计算时监控了CPU的温度,发现几乎不变,而在matlab上使用LU分解求解+左除矩阵时运行时,CPU占用率和温度都会有大幅升高,这是否也能说明一些问题。
调用代码如下,A_1为系数矩阵,B_1为右端项

CALL GETRF(A_1,IPIV,INFO)   !LU分解
CALL GETRS(A_1,IPIV,B_1)  !A_1,B_1均被覆盖
P.S:同一个系数矩阵我需要解个不同的右端项,上述只是其中一个,GETRS函数是不是可以解多列右端项,请大佬们指点一下




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

10

帖子

3

主题

0

精华

入门

F 币
64 元
贡献
27 点
沙发
 楼主| 发表于 2023-2-16 07:31:01 | 只看该作者
已解决,改用单精度SGETRF和SGETRS函数后可以正常运行。CPU占用率低是因为没有打开MKL库的并行模式,在项目-属性-Fortran-Libraries-Use Intel Math Kernel Library 中选择Paralle即可

评分

参与人数 1F 币 +2 收起 理由
fcode + 2 赞一个!

查看全部评分

48

帖子

13

主题

0

精华

熟手

F 币
206 元
贡献
98 点
板凳
发表于 2023-4-28 12:10:19 | 只看该作者
1033257950 发表于 2023-2-16 07:31
已解决,改用单精度SGETRF和SGETRS函数后可以正常运行。CPU占用率低是因为没有打开MKL库的并行模式,在项目 ...

我用ggevx求特征值及向量也碰到同样的问题, REAL8, 阶数<=100可以求解, 超过了在调试状态下也可求.
按你的方法改成sggevx, 报错, 好像这个函数只能在F77下使用,
如果用REAL4, 但仍然用ggevx, 提示错误        1         error #6285: There is no matching specific subroutine for this generic subroutine call.   [GGEVX]

之所以用双精度, 因为以前在CVF+IMSL的时候发现双精度和单精度求解的结果相差非常大, 可以说单精度得到的结果是错误的       

48

帖子

13

主题

0

精华

熟手

F 币
206 元
贡献
98 点
地板
发表于 2023-4-28 12:15:07 | 只看该作者
堆栈我一般只设置reserve size 1000000000
按你的设置commit size 1000000000
结果直接报错
OMP: Warning #2: Cannot open message catalog "2052\libiomp5ui.dll":
OMP: System error #126: 找不到指定的模块。
OMP: Info #3: Default messages will be used.
OMP: Error #136: Cannot create thread.
OMP: System error #8: 内存资源不足,无法处理此命令。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-11-23 13:38

Powered by Tencent X3.4

© 2013-2024 Tencent

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