intel MKL pardiso求解大型稀疏矩阵,是不是很浪费内存?

qinjixing521 2011-05-05 06:54:41
加精
我在使用intel fortran中的pardiso的时候,求解非对称矩阵,发现在call pardiso的时候,内存使用量特别大,是所用数组的几倍,这限制了矩阵规模!这个问题可以解决吗?
...全文
3127 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinjixing521 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 desconstant 的回复:]
不好意思,我上面的回帖解释一下,怕误导其他人。

pardiso有内存控制的。10万阶以上最好在64位系统上编程。我现在换到64位系统,16G的内存,还在测试最高能求解的方程数
[/Quote]你说得挺对的 呵呵
Desconstant 2011-07-19
  • 打赏
  • 举报
回复
不好意思,我上面的回帖解释一下,怕误导其他人。

pardiso有内存控制的。10万阶以上最好在64位系统上编程。我现在换到64位系统,16G的内存,还在测试最高能求解的方程数
Desconstant 2011-07-15
  • 打赏
  • 举报
回复
lz你的问题解决了吗,我用pardiso解稀疏矩阵,20万阶的都解不出来,1%的非零稀疏~!
同样iparm[60]=2之后,内存已然显示不足。
可是实际我是win32的3.4G内存,pardiso显示要的是1.9G内存,仍error=2,内存不足。
qinjixing521 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 zhoucong323 的回复:]
你好,我不是用的intel fortran,我用的CVF6.5中的IMSL,也是利用一个函数求解大型稀疏矩阵,但函数LSLZG()中的IPARAM, RPARAM这两个参数不会手动设置,请教下LZ,看你用过没
[/Quote]不好意思啊,我没用过你说得这个!我觉得intel fortran 还是比较好用的
zhoucong323 2011-05-16
  • 打赏
  • 举报
回复
你好,我不是用的intel fortran,我用的CVF6.5中的IMSL,也是利用一个函数求解大型稀疏矩阵,但函数LSLZG()中的IPARAM, RPARAM这两个参数不会手动设置,请教下LZ,看你用过没
Edai9508 2011-05-15
  • 打赏
  • 举报
回复
限制了矩阵规模!这个问题
qinjixing521 2011-05-12
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 intel_cyu 的回复:]
如果是特殊的带状矩阵,建议用LAPACK函数。求解与存储都针对这特殊矩阵结构。 Pardiso 是通用的稀疏矩阵求解器。
[/Quote]我的矩阵在带状的同时还稀疏,就是带状里面还有很多0,所以我考虑,用稀疏矩阵求解器是不是能好一点!但是我发现和我想象的有点不太一样了!你觉得用lapack更好一点是吗?要是有能解决既带状,而且带状里面还稀疏的矩阵的求解器就好了,嘿嘿!lapack反而比pardiso求解规模大,应该也正常是吧?而且我发现lapack(ZGBSV)比pardiso还要快!
intel_cyu 2011-05-12
  • 打赏
  • 举报
回复
如果是特殊的带状矩阵,建议用LAPACK函数。求解与存储都针对这特殊矩阵结构。 Pardiso 是通用的稀疏矩阵求解器。
qinjixing521 2011-05-12
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 a984120978 的回复:]
dfgdhfgj656541654
[/Quote]你会这个问题吗?
qinjixing521 2011-05-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qinjixing521 的回复:]
引用 5 楼 qinjixing521 的回复:
引用 3 楼 qinjixing521 的回复:
引用 1 楼 intel_cyu 的回复:
稀疏矩阵在分解的时候,会产生更多的非零元素,需要增加内存的使用。
程序是不是在使用最新版本的MKL. MKL 10.2中对pardiso 内存使用,有所优化。
如果矩阵实在太大, 可以使用 paridso 的 out of core 的模式 (将……
[/Quote]你好,我还有一个问题!您用过lapack吗?我用的是带状矩阵,所以用ZGBSV!我发现用lapack都比pardiso求解规模大!你说这种现象正常吗?
qinjixing521 2011-05-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qinjixing521 的回复:]
引用 3 楼 qinjixing521 的回复:
引用 1 楼 intel_cyu 的回复:
稀疏矩阵在分解的时候,会产生更多的非零元素,需要增加内存的使用。
程序是不是在使用最新版本的MKL. MKL 10.2中对pardiso 内存使用,有所优化。
如果矩阵实在太大, 可以使用 paridso 的 out of core 的模式 (将中间计算结果存储于一个文件中),克服内存不足的问题。……
[/Quote]谢谢啊!还有一个问题,我用OOC怎么和用in core计算的结果不一样呢?就是iperm(60)=0和等于2的时候,计算结果明显不一样了!
shoukuanji001 2011-05-10
  • 打赏
  • 举报
回复
中商信息港
不懂就要问。不懂就要查找真的很好阿
intel_cyu 2011-05-10
  • 打赏
  • 举报
回复
现在问题关键程序受到32位限制。32位程序受限于2G的内存空间。如果原有矩阵a, ja, ia 等数据有将近1G, Paridso 实际上没有足够的内存可用。这么大的计算问题,建议你改写成64的计算程序。
qinjixing521 2011-05-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qinjixing521 的回复:]
引用 5 楼 qinjixing521 的回复:
引用 3 楼 qinjixing521 的回复:
引用 1 楼 intel_cyu 的回复:
稀疏矩阵在分解的时候,会产生更多的非零元素,需要增加内存的使用。
程序是不是在使用最新版本的MKL. MKL 10.2中对pardiso 内存使用,有所优化。
如果矩阵实在太大, 可以使用 paridso 的 out of core 的模式 (将……
[/Quote]谢谢你!启发很大
intel_cyu 2011-05-10
  • 打赏
  • 举报
回复
计算问题是数值稳定的么? 如果不是数值稳定的问题,不同的计算方法,可能会有不同结果。这个问题,比较难克服,因为矩阵矩阵本身就是坏条件矩阵。

如果问题没有数值稳定性的问题, 查一下,有没有正确调用Pardiso: Pardiso 的函数返回值都正确? 设置 iparm(27)=1, 让Pardiso 检查一下,输入的数据没有问题, 如果使用out-of-core, 还需要将 iparm(3) 与 MKL_NUM_THREADS 设置为1. out-of-core 只支持单线程:

这些看上去,都没有问题, 就去MKL support 网站提一个 bug report: https://premier.intel.com, 需要将你的程序与数据一起提交。
qinjixing521 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qinjixing521 的回复:]
引用 1 楼 intel_cyu 的回复:
稀疏矩阵在分解的时候,会产生更多的非零元素,需要增加内存的使用。
程序是不是在使用最新版本的MKL. MKL 10.2中对pardiso 内存使用,有所优化。
如果矩阵实在太大, 可以使用 paridso 的 out of core 的模式 (将中间计算结果存储于一个文件中),克服内存不足的问题。
假如我的矩阵大小是1G,但实际pardiso在求……
[/Quote]我的系统是32位!我用的a数组大小为4*10^7个复数,所占内存也就是16*4*10^7字节,还不到1G呢,就算不了了!我还有一个感觉,out of core没有解决实质的问题,就是内存节省很有限,大部分还是在内存上计算,不知道我说的对不对!多谢指教!
intel_cyu 2011-05-09
  • 打赏
  • 举报
回复
程序是32 位,还是64 位? 32 位的应用程序提供的内存空间不能解决这样的大问题。
具体最大内存需求,在Paridso 中,可以通过下面的公式求得:
max(iparm(15), iparm(16)+iparm(17))
(如果是C 代码, 下标减1: max(iparm(14), iparm(15)+iparm(16)))。
intel_cyu 2011-05-06
  • 打赏
  • 举报
回复
稀疏矩阵在分解的时候,会产生更多的非零元素,需要增加内存的使用。
程序是不是在使用最新版本的MKL. MKL 10.2中对pardiso 内存使用,有所优化。
如果矩阵实在太大, 可以使用 paridso 的 out of core 的模式 (将中间计算结果存储于一个文件中),克服内存不足的问题。
qinjixing521 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 intel_cyu 的回复:]
稀疏矩阵在分解的时候,会产生更多的非零元素,需要增加内存的使用。
程序是不是在使用最新版本的MKL. MKL 10.2中对pardiso 内存使用,有所优化。
如果矩阵实在太大, 可以使用 paridso 的 out of core 的模式 (将中间计算结果存储于一个文件中),克服内存不足的问题。
[/Quote]假如我的矩阵大小是1G,但实际pardiso在求解中需要5G内存,大概是这样吗?我用out of core,还是对内存有很高要求的,还是提醒内存不足!不知道我理解的对不对,这个问题可以解决吗?谢谢啊
qinjixing521 2011-05-06
  • 打赏
  • 举报
回复
假如我的矩阵大小是1G,但实际pardiso在求解中需要5G内存,大概是这样吗?我用out of core,还是对内存有很高要求的,还是提醒内存不足!不知道我理解的对不对,这个问题可以解决吗?谢谢啊

4,164

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 一般软件使用
社区管理员
  • 一般软件使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧