作为FORTRAN老用户忍不住来撕一下。

FORTRAN就是用来把公式敲到程序中去的,像我们写的CFD代码,根本没有嵌套多层的函数,也没有什么复杂的程序结构,一个SUBROUTINE几千行,全是加减乘除的式子,要什么面向对象呢?

另外FORTRAN本身的编辑逻辑非常简单,数组就是数组,变量就是变量,从数组中取哪个数就是取哪个数,没什么指针移位什么的。全局的数组在SUBROUTINE或者FUNCTION之间传递非常直观,许多函数都去操作全局数组也不会出错。

编译器里的指令级的SIMD向量化是针对最底层的,所以我才不要什么外部的数学库,我需要我们自己写的DO循环是那个被向量化的最底层,许多FORTRAN程序员的习惯恰好满足了这一点。我们是不介意连FFT都自己写的,我们组的程序除了MPI以外没有使用任何外部的库,所以并行粒度到哪个层面就很清楚,可以AVX+openMP+MPI混用。并且作为算法研究,我需要知道计算中所发生的一切,依赖外部的库总是感觉心里没底。

很多人说的FORTRAN的矩阵操作很方便,在我们这里也是不存在的。CFD在某些阶段(甚至是很高的层面上)是需要求解线性方程组不假,但是这种超大的稀疏矩阵根本不是靠库函数直接求逆或者直接做矩阵向量乘法的,甚至根本没有存储过整个系数矩阵。每个元素具体的算法几乎全部是手敲进去,花上百行去实现一个格式算出一个系数,最后用一行乘掉拉倒,根本没有显式的矩阵运算。向量操作倒是偶尔用一下,省一个DO而已。所以很多人理解的所谓FORTRAN矩阵操作方便的优势,在我看来并不是主要原因。

有人说应该权衡一下,牺牲一点程序性能来节省编程的时间,我觉得说的很对,但在不同领域这个平衡点是不一样的。像我们CFD领域,有时在集群上等一个结果有时要数月,大家还都在排队,所以程序运行速度绝对是非常重要的。机时是很大的成本,你的程序效率太低,收益与成本不对称,可能连挂上去的机会都没有。商业领域也是一样的,计算服务器也是成本,跑得快的程序直接意味着真金白银的成本节省,这是那些“立等可取”的应用所无法想象的。

我的感觉就是敲式子并不难,式子本身是什么才更重要。FORTRAN程序员都不认为自己是程序员,而都说自己是搞计算的,懂的人自然知道“搞CFD的”和“用CFD做研究的”是完全不同的概念,前者更牛一些,大佬级的也多为前者。不需要把研究员逼成专业程序员,就能把算法实现得挺好挺快,我想这就是FORTRAN存在的价值。大佬们需要,这就够了。

当然,FORTRAN面向的用户也越来越窄了,因为计算机不再是尖端科学计算的专属,已经“飞入寻常百姓家”了。什么人都在编程,就一定会有程序员出来造反,“要革FORTRAN的命”,这也是正常的。事实上目前坚持在用FORTRAN的都是大几十年的传统学科(而且是超大规模计算的那种,比如各种流体计算,航空航天的、核爆的、气象的等等),看来来像是小众用户了,但是仍然是很有钱的少数。目前基本只有intel和NVIDIA(买了原来的PGI)两家硬件商还在做,因为高性能计算是他们的大客户,那些超级计算机上也是离不开FORTRAN的。

我也用CUDA,它也是直接针对高性能计算的,为我节省了很多的计算成本(自己独占GPU机器不用排队爽歪歪),但是用CUDA做CFD真的非常小众,需要适应的过程,也经历了被神话和被质疑的过程。FORTRAN的定位某种程度上讲也是类似的。试想你用C++鄙视CUDA,认为CUDA应该消失,有意思么?

“FORTRAN灭亡论”可以休矣。

fortran还是python_Fortran 还有存在的必要吗?相关推荐

  1. 将Tensor核心引入标准Fortran

    将Tensor核心引入标准Fortran 调优的数学库是从HPC系统提取最终性能的一种简单而可靠的方法.但是,对于寿命长的应用程序或需要在各种平台上运行的应用程序,为每个供应商或库版本调整库调用可能是 ...

  2. linux执行命令段错误,Linux运行fortran程序 出现段错误(segmentation fault)

    在Windows下编译运行fortran程序时,没有问题 ,运行时出现堆栈错误,只要在CVF里修改一下扩大内存设置: MAIN MENU: Project ===> Setting ===> ...

  3. matlab中的expotest,提高Fortran矩阵指数性能(Expokit比Matlab、Python慢)

    我正在进行一个模拟,其中的瓶颈是执行大量复杂的双精度矩阵指数运算,我发现Fortran(Expokit)对于小矩阵很好,但对于较大的矩阵,它的性能比Matlab或Python差.在 我在下面包含了一个 ...

  4. .Net(c#) 通过 Fortran 动态链接库,实现混合编程

    c# 与 Fortran 混合编程解决方案主要有两种: 1. 进程级的交互:在 Fortran 中编译为控制台程序,.Net 调用(System.Diagnostics.Process),然后使用 P ...

  5. CUDA FORTRAN编译器

    支持CUDA FORTRAN的编译器目前只有一种:PGI编译器!不用怀疑,你没的选. 原文发布时间为: 2016-12-7 19:16:53 原文由:LGZ 发布,版权归属于原作者  本文来自云栖社区 ...

  6. 这些代码改变了科学界:从Fortran、arXiv到AlexNet

    转自:机器之心 2019 年,「事件视界望远镜」团队拍下了第一张黑洞照片.这张照片并非传统意义上的照片,而是计算得来的--将美国.墨西哥.智利.西班牙和南极多台射电望远镜捕捉到的数据进行数学转换.该团 ...

  7. 窥透Fortran的方方面面

    窥透Fortran的方方面面 --<Fortran权威指南> Fortran 是英文 FORmula TRANslator 的缩写,译为"公式翻译器",是世界上最早出现 ...

  8. Nature盘点的这些代码,个个都改变了科学:Fortran、AlexNet还有arXiv等

    杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 今天,Nature的一篇报道有点不同. 没有说最新的科学研究进展,也没有说这个时代的科学家们. 而是将镜头聚焦在计算机上,更具体一点,是聚焦 ...

  9. 在Itanium2、Intel Fortran Compiler上安装VASP4.6

    1.VASP4.6 是量子化学计算的一个商业软件,这里是源码包.来自奥地利.这个软件也可用在物理系,做分子动力学等分析. 2.首先声明一点:VASP4.6无法在Intel Fortran Compil ...

最新文章

  1. 开源库的使用方法以及libjpeg的移植详解
  2. TensorFlow学习笔记之一(TensorFlow基本介绍)
  3. 只要200行JavaScript代码,就能把特斯拉汽车带到您身边
  4. mysql怎么查看索引情况_mysql 查看索引使用情况
  5. Android设计模式之——工厂方法模式
  6. Oracle 多表 连接 顺序 与 性能关系 测试
  7. 【译文练习】ReactiveCocoa概要:了解和使用RACCommand
  8. 一个咸鱼的python_一个咸鱼的Python爬虫之路(三):爬取网页图片
  9. python 运算符重载_一锅类似函数重载的小杂烩
  10. 图像处理方向的就业前景
  11. ip地址解析,ip归属地识别
  12. java替换图片_Java 替换 PPT 中的图片
  13. QT 调用windows socket
  14. 使用Windows Live ID登录网站
  15. Vue项目安装依赖时 warning“unmet peer dependency“
  16. 怪兽大乱斗:进入苹果推荐的Creator独立游戏
  17. 相亲交友v6.7.6
  18. python中qt有哪些控件_PyQt5的基本控件整理
  19. texlive和texstudio安装及使用
  20. 将系统必备组件打包进安装文件(以vs15打包.net formwork 4.5为例)有点鸡肋

热门文章

  1. 插入数据到hive_Hive实现网站PV分析
  2. mysql 查询每人每天_PHP+MySQL实现对一段时间内每天数据统计优化操作实例
  3. python脚本自动运行失败_解决Python中定时任务线程无法自动退出的问题
  4. php提交注册表单,php用户注册表单验证
  5. 点击按钮测试用例标题_功能测试有哪些用例?分享功能测试用例大全
  6. android studio gradle配置_Unity打包Android最全攻略(含完整流程及常见问题)
  7. python numpy官网_python+numpy+scipy=matlab,抛弃matlab
  8. windows桌面待办事项_想在手机桌面上安装一个便利贴,下载什么便签软件好?
  9. java项目嗖嗖移动业务大厅项目报告_晋江市撰写节能评估报告的报告机构立项范本-文瑞...
  10. 五十五、Java单元测试类Junit