西江河畔分享 http://blog.sciencenet.cn/u/qhhuangscut 专注电力系统研究,对信息技术和系统科学的应用感兴趣。

博文

目前最好的Java开源稀疏矩阵算法包CSparseJ

已有 10142 次阅读 2013-2-17 15:06 |个人分类:科研天地|系统分类:科研笔记| 数值计算, CSparseJ

数值计算,特别是稀疏矩阵求解,一直是仿真工具的底层算法核心的重要组成。开放式电力系统仿真平台InterPSS项目是基于Java开发,从最开始,开发团队自己就用Java实现了基于稀疏矩阵求解Ax=b;但算法的性能和现有的基于C及Fortran的实现比较,依然有差距。这也是为什么越来越多的软件开发是基于模块化开发和整合(Integration),InterPSS也不例外,当有性能更好的模块出现,可灵活地替换原有的模块,实现软件/平台升级和提升其性能。 由于历史,算法实现等原因,很多优秀的数值算法基于C或Fortran实现的,针对单机计算平台,InterPSS的native solver整合了基于C语言实现的高性能数值算法。

此外,InterPSS团队也认为:为了有更好的平台移植性和适应目前主流云计算平台的要求,基于Java的算法实现,依然有其独特优势。最近发现了Piotr Wendykier 移植开发的 CSparseJ--开源Java稀疏矩阵算法包。 经过初步测试,是本人到目前发现并测试过性能最好的,其中一个重要原因是这是直接从Tim Davis 开发的CSparse移植过来的,算法和代码质量很有保证。

Piotr Wendykier的测试结果(s)
MatrixLU (C)
LU (Java)
QR (C)
QR (Java)
Bcsstk16
0.27
0.50
0.49
0.50
Fidapm372.103.72
6.196.04
Rim10.2715.33
14.9114.85

数据来源: https://sites.google.com/site/piotrwendykier/software/csparsej
过去,大家习惯认为Java实现的代码执行效率低,不适用于开发高性能数值计算。但这测试体现了Java代码目前已经有很好的执行效率,值得更多的关注。

在我的手提上,Bcsstk16 (4884*4884)仅仅LU分解部分(不考虑数据导入)最短用时为0.156 s,但对Fidapm37 (9152*9152)进行LU分解就需要 4.97 s。 两个矩阵都是呈现强对角分布,考虑矩阵的规模,后者约为前者的2^2倍,但耗时则陡增。本人初步估计是基于该算法所采用的AMD排序对性能影响较大,但具体需要进一步测试。
针对这一问题,也虚心向科学网的老师,同学请教。




https://blog.sciencenet.cn/blog-405788-662548.html

上一篇:美国Power方向(偏电力系统)的学校和导师
下一篇:基于云计算/存储平台的电力系统分析"App"--InterPSS 2.0
收藏 IP: 149.169.151.*| 热度|

2 唐依明 夏少波

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的精选博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-26 00:01

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部