2012年06月16日 星期六 08:47
本人最近在考虑一个问题:科学计算程序是保持原有的Fortran语言好,还是改写成C语言好?
事情的起源是:本人所在的课题组有一个自己开发的程序,是基于Fortran 77的。从目前来看,Fortran 77已经越来越少人用了,需要更新换代了。一个原因是:Fortran 77不支持动态分配内存;另一个原因是,很多F77中老旧的语法已经逐步被编译器摒弃。比如4.0,4.1版本的gfortran还能支持的代码,到了4.6就一堆的Warning,全部是老旧语法引起的。
改写的话,有两种语言可以考虑。一种是Fortran 90/95,一种是C/C++。前者改动小,且能实现最关键的动态内存分配问题;后者改动非常大,需要重写所有代码,但是所获得的好处可能也更大,如CUDA技术。CUDA技术的原生版本只有C,CUDA Fortran目前只有PGI的编译器才支持,不过这个PGI不是免费的,价格还不低。当然,如果为了CUDA的话,也可以考虑C/Fortran混合编译。不过本人对这方面了解不深,不知道混合编译是否会产生一些不稳定因素。
目前主要考虑的问题有以下几个:
1 如果为了CUDA等新技术考虑的话,是采取混合编译好,还是改写全部代码好?混合编译是否会导致另一些不稳定的情况发生?
2 (如果改写为C/C++更好的话)C/C++到底哪个会更好些?C++的封装/私有属性等等的特性,对于科学计算来说意义究竟几何?
3 C/C++在语法上的更新动作会不会很大?Fortran 90及之后的版本对Fortran的结构改变非常大,对老旧语法的摒弃也不遗余力,造成一大批老代码(但算法却是好的)面临淘汰。为此,程序的维护者可能会将精力放在debug上,而不是算法的改进上。这种时间总觉得没有耗在真正的点子上,有点浪费了。
本人虽然接触了几年程序,但是因为都是做数值计算的,关注的只是数学算法的问题,其实对于程序底层的东西了解不深,因此想借着这个地方请教大家。最近毕业留校当工程师,负责实验室计算服务器的管理和课题组程序的长期维护开发,因此在考虑不少问题,希望能将这个程序维护得更好。
2012年06月16日 星期六 19:48
我认识的人 有些开始 完全 用 c++ 做科学计算,他们用c++的原因是可以 同时 利用GPU 来和CPU 一起计算。
2012年06月16日 星期六 19:49
fortran 是 old school,大多人 都开始 转向其他,matlab python之类比较多
2012年06月16日 星期六 21:52
C++和C相比,优点在哪里?有没有什么不足?
2012年06月17日 星期日 10:14
There are many good reasons of using C++, based on economics. I do not know if C is also good at it,
e.g.,
C++ vector class which allows one to store any type of object in a container that is indexed by integers. We will have a need to store GMM objective functions each containing moments from different data in a vector.
The C++ associate map which allows one to store any type of object in a container that is indexed by any object that can be ordered. We will have need to store matrices in an associative map indexed by matrices.
C++ data structures have matrix classes, random number generators, etc. The random number generators are high quality
...
Zeuux © 2024
京ICP备05028076号