我正在为科学计算中的一个应用程序在Fortran和C++之间做出选择。我不清楚Fortran在性能方面是否仍然比其他语言更有优势。例如,我相信由于Fortran强制执行严格的别名,所以与C99之前的C相比,编译器可以进行更好的优化。我不确定C++如何适应这里。
有什么建议吗?
发布于 2011-01-28 05:25:15
我看了一下some of the stuff in the latest Fortran standards,坦率地说,我对此印象深刻。20年前我讨厌这种语言的很多东西现在都消失了。没有更多的行号和特殊列(愿它们在地狱中燃烧)。
Fortran在工程界已经广泛使用了50年。如果你在这些圈子里工作,这会给你带来两个好处。首先,这些人非常关心优化。这意味着Fortran编译器往往拥有最好的优化器。该语言本身也比Cish语言可优化得多,这要归功于它没有别名。
第二个优点是Fortran库对数字处理的支持是无可匹敌的。最好的代码几乎总是经过良好调试的代码,您不必编写。
如果您的应用程序通常不属于科学、工程或数字处理,那么以上这些对您来说都不是什么大问题,所以您最好去别处寻找。
发布于 2011-01-29 01:24:03
另一个主要问题是学习曲线,这对于C++来说是非常巨大的,而对于Fortran (90或更高版本)则非常小。Fortran就像MATLAB一样,它的运算就像...
B‘’DB是向量的matmul( matmul(transpose(B), D), B )
norm2(x)
call gesvd(A,S,u,vt)Fortran还具有指针、动态内存、用户定义的数据类型等。
它得到了主要供应商(英特尔/太阳/国际商业机器公司/克雷/PGI/NAG等)、开源(gfortan/g95)社区和诸如PETSc、MPI等数值库/API开发人员的良好支持。
见鬼,新标准(Fortran2008)甚至有用于并行编程的联合数组,而不需要MPI/OpenMP,而且一些Fortran编译器已经支持它(g95和Cray)。
基本上,它具有数值计算所需的所有良好品质,比MATLAB更容易,是标准化的,免费的,可伸缩的(使用MPI/OpenMP和联合数组),产生惊人的快速/并行代码。
对于数值来说,没有什么能胜过Fortran,但不幸的是,在其他方面,一切都胜过Fortan。因此,如果您是一名从事安全工作的科学家,并且只做数值/高性能计算,那么请坚持使用Fortran,否则,请学习并使用C++,因为它被广泛用于非数值软件。
发布于 2011-02-08 01:57:30
Fortran允许整个数组操作,也允许对数组部分进行操作。有用于数组的C++类,但我不认为您可以像在Fortran中那样容易地引用像x(:,2:,1:N3:2)这样的片。这让人非常简洁地表达了一些算法。
Fortran的数组操作的便利性扩展到派生类型的数组。假设您有一个日期数组:
键入date
integer ::月、日、年
结束类型日期
类型(日期) ::x(1000)
然后x表示日期数组,x%month表示月份数组,pack(x,x%month==1)表示一月中的所有日期。有多少其他编程语言提供了这种便利?
早些时候关于Fortran的一些评论--“陈旧和令人厌恶的”--是有偏见的,应该相应地予以考虑。让我反驳一下。在我看来,Fortran90的自由格式看起来比C和C++的语法更好,使用了大括号和分号。将它们省略或错误地放入可能会导致C和C++中出现错误,而这些错误在Fortran中没有对应的内容。
https://stackoverflow.com/questions/4821913
复制相似问题