数值计算,特别是稀疏矩阵求解,一直是仿真工具的底层算法核心的重要组成。开放式电力系统仿真平台
InterPSS项目是基于Java开发,从最开始,开发团队自己就用Java实现了基于稀疏矩阵求解Ax=b;但算法的性能和现有的基于C及Fortran的实现比较,依然有差距。这也是为什么越来越多的软件开发是基于模块化开发和整合(Integration),InterPSS也不例外,当有性能更好的模块出现,可灵活地替换原有的模块,实现软件/平台升级和提升其性能。 由于历史,算法实现等原因,很多优秀的数值算法基于C或Fortran实现的,针对单机计算平台,InterPSS的native solver整合了基于C语言实现的高性能数值算法。
此外,InterPSS团队也认为:为了有更好的平台移植性和适应目前主流云计算平台的要求,基于Java的算法实现,依然有其独特优势。最近发现了
移植开发的 CSparseJ--开源Java稀疏矩阵算法包。 经过初步测试,是本人到目前发现并测试过性能最好的,其中一个重要原因是这是直接从Tim Davis 开发的CSparse移植过来的,算法和代码质量很有保证。
的测试结果(s)
Matrix | LU (C)
| LU (Java)
| QR (C)
| QR (Java)
|
Bcsstk16
| 0.27
| 0.50
| 0.49
| 0.50
|
Fidapm37 | 2.10 | 3.72
| 6.19 | 6.04
|
Rim | 10.27 | 15.33
| 14.91 | 14.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