社区
一般软件使用
帖子详情
intel MKL pardiso求解大型稀疏矩阵,是不是很浪费内存?
qinjixing521
2011-05-05 06:54:41
加精
我在使用intel fortran中的pardiso的时候,求解非对称矩阵,发现在call pardiso的时候,内存使用量特别大,是所用数组的几倍,这限制了矩阵规模!这个问题可以解决吗?
...全文
3127
33
打赏
收藏
intel MKL pardiso求解大型稀疏矩阵,是不是很浪费内存?
我在使用intel fortran中的pardiso的时候,求解非对称矩阵,发现在call pardiso的时候,内存使用量特别大,是所用数组的几倍,这限制了矩阵规模!这个问题可以解决吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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,还是对内存有很高要求的,还是提醒内存不足!不知道我理解的对不对,这个问题可以解决吗?谢谢啊
MKL
求解
大型
稀疏矩阵
inter
MKL
求解
大型
稀疏矩阵
实例(C/C++)。适用与对称或者非对称
稀疏矩阵
求解
,
求解
速度非常快。
Intel
Fortran使用
MKL
函数库中的
PA
RDIS
O
求解
稀疏矩阵
.rar
编码
MKL
求解
大型
稀疏复数矩阵
Intel
MKL
求解
大型
稀疏复数矩阵 (C/C++)实例。 适用与
求解
大型
对称或者非对称稀疏复数矩阵
用
MKL
求解
稀疏线性系统.doc
用
MKL
求解
稀疏线性系统.doc
librsb:包括稀疏BLAS的共享
内存
并行
稀疏矩阵
库。-开源
librsb是用于
稀疏矩阵
计算的库,具有递归稀疏块(RSB)矩阵格式。 这种格式允许对
大型
稀疏矩阵
进行高速缓存和多线程(即共享
内存
并行)操作。 提供了迭代
求解
器所需的最常见操作,例如:矩阵矢量乘法,三角形解,行/列缩放,对角线提取/设置,块提取,范数计算,格式转换。 RSB格式特别适合于对称和转置乘法变体。 在这些变体上,发现librsb的速度比
Intel
MKL
的CSR实施要快。 大多数数字内核代码是自动生成的,支持的数字类型可由用户在构建时选择。 librsb遵循BLAS论坛文档中指定的稀疏BLAS标准。
一般软件使用
4,164
社区成员
38,513
社区内容
发帖
与我相关
我的任务
一般软件使用
Windows专区 一般软件使用
复制链接
扫一扫
分享
社区描述
Windows专区 一般软件使用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章