仅剩1位73岁开发者苦撑!能求解超复杂物理方程式的计算程序,要没人维护了...

2023-05-16

明敏 Alex 发自 凹非寺
量子位 | 公众号 QbitAI

高能物理先进计算必备程序之一,快要没人维护了。

随着唯一的长期维护者达到73岁高龄,计算系统FORM的命运开始变得扑朔迷离起来。

50c0baeded009b4aab0633c525927f7e.png

过去30多年,这个程序被视为粒子物理学研究的基础工具之一,可计算伽马矩阵、并行计算、模式匹配等。

计算费曼图的软件包FormCalc也是在它的基础上实现。

要知道,费曼图能够用图像描述大型粒子对撞机中粒子碰撞的可能结果,号称“有助于帮助改变物理学家看世界的方式”。

除此之外,高阶QCD(量子色动力学) β函数、多重Zeta数值(MZV)的数学结构研究等也都用到了FORM。

甚至在它诞生十数年后,仍旧有大量前沿研究依赖于它。

自2000年以来,平均每隔几天就有一篇基于FORM的粒子物理学论文被发表。

但这样重要的计算程序,现在却只靠一位73岁的退休人员维护——其开发者荷兰粒子物理学家乔斯·维马塞伦(Jos Vermaseren)。

8d8ccfcb112e8ef5f337ab025a1aaaf6.png

如今,随着老爷子年事已高,其后继维护者还没找到。

而完全能顶替它的程序似乎还没有出现,尽管Mathematica也能计算,但是速度上完全无法与之相比。

靠硬盘空间求解超长公式

简单理解,FORM是一个可以进行符号运算的程序。

相较于更通用的Mathematica,它更专注于大规模处理符号表达式。

f77d7883ef65640ba63ec8814ff1b8aa.png

但本质上FORM还是数学代数系统,具体的操作过程大概是酱婶的:

设定函数 f 中,在 x 之前如果出现任何参数,都将它们进行调换。

Symbol x;
Local E = f(1,2,x,3,4);

id f(?a,x,?b) = f(?b,?a);

Print;
.end

那么FORM输出的结果将会是:F=f(3,4,1,2)。

它主要有两方面特点:

第一、计算快。

FORM建立了一些专业算法,比如能将费曼图中的某些部分快速相乘;通过重新排列方程减少相乘、相加步骤。

第二、能处理超级大的方程式。

只要硬盘空间够大,多长都能算。

这正是FORM最特别的地方。

计算机的存储模式可分为两种。其一是主存,这里常说的是RAM(随机存储器)。它是电脑系统中最重要的存储器,能和CPU直接交换数据,随时读写、速度很快,但存储空间非常有限。另一种是外存,也就是硬盘、固态硬盘、磁盘等。它们的优点是容量大,但计算速度慢。

比如一台笔记本的内存只有16GB,但是存储空间可以到2TB。

如果想要求解超复杂的物理方程式,那必须要依靠主存。

但问题是,这么小的容量空间,根本无法处理超长公式。更何况FORM生于80年代,那个时候的主存容量就更小了。

c49eec5226ea6bd58fef8bd0bba69f0e.jpeg

FORM选择了一个巧妙的方法——把硬盘当成主存来用

通过将主存和硬盘空间“分页”处理,然后将方程式放入到不同的“页”上,并且为每一个项都固定一个存储位置,程序运行时就能快速找到各个项的位置将其带回真正的主存,而不必访问其他的项。

这样做的好处是在扩大主存的同时,还绕开了低效的内存交换操作,可以快速计算复杂庞大的方程式。

凭借着这一特点,FORM自诞生后便成为了粒子物理学中的关键工具之一。

即便放到现在FORM也依旧至关重要——毕竟计算存储发展的速度,怎么也追不上物理学方程式加长的速度……

在FORM的GitHub主页上也写着:

FORM是高能物理领域中许多最先进计算的必备工具。

afcb3c384cf3b0a814952aee31f36d45.png

值得一提的是,FORM并不能被视为CAS的加强版,它们的编程逻辑并不相同。

上手FORM可能需要一点门槛,但只要跨过去,就是打开一番新天地了。FORM和CAS配合使用可以解决数学、物理中诸多难以计算的复杂问题。

苏黎世大学教授托马斯•格尔曼(thames Gehrmann)表示,自己的课题组在过去20年中取得的大多数高精度结果,很大程度上都依赖于FORM。

高能物理学助理教授马特·冯·希佩尔(Matt von Hippel)在Quantamagazine的文章中也提到,自己的一位同事前不久才使用FORM将一项计算的精度推到新高度。

被重视程度却远远不够

但和想象中不同,这样一个为高能物理领域带来巨大进步的工具,一路发展过来,背后的运维却“冷冷清清”,以至于现在整个软件都岌岌可危。

FORM的起点在1984年。当时计算机的角色正在迅速变化,PC机在这个时期开始普及。

其前身是一个名为Schoonschip的程序,由荷兰物理学家马蒂努斯·维尔特曼(Martinus Veltman)创建。

和我们今天许多常用的计算机程序不同,当时的程序大都是搭载于外部的ROM芯片中,得把芯片插到电脑上才能运行(试想一下光盘)——Schoonschip也不例外。

而乔斯则希望做出一个更易于访问的程序,可被世界各地高校下载的那种。

022866b16767f4d277841b3f78416183.jpeg

开发FORM之初,乔斯使用的是FORTRAN语言(也是FORM名字的重要来源),这种语言很擅长“搞数学”。

FORTRAN是由IBM为科学和工程应用开发的,是第一代计算机高级语言。

从上世纪50年代起,FORTRAN一度成了科学和工程计算的首选语言;从60年代末到70年代初,大多数高性能计算机都支持FORTRAN,许多专门的编译器和工具可以用其编写算法。

而随着计算机技术发展、其它编程语言一个个出现,FORTRAN慢慢被C、C++、Python、Matlab等取代,因为它没有对象导向编程的支持,且语法比较笨重。

在1989年,FORM1.0正式发布前,乔斯改用C语言把FORM重写了一遍。

但FORM其实从诞生起就在被逐渐推广试用了:1984至1986年间, FORM最早支持的是Apollo工作站,这是上世纪80年代的第一批图形处理工作站。

98b024b2dfcda42b3596673a981ff6e4.png

到上世纪90年代初,全球已有超过200家机构下载了FORM,后面这个数字还在不断攀升。

与此同时,FORM还发展出了3个不同的版本:

  • FORM:顺序版,旨在在单个处理器上运行;

  • ParFORM:多处理器版,处理器有自己的内存,可以使用集群和系统,同时为两个及以上的处理器;

  • TFORM:处理器共享内存系统的多线程版,主要用于处理器数量有限的系统。

  • FORM和FormCalc是相互补充的,FORM作为一种通用符号计算和公式管理软件,而FormCalc作为一种特定于高能物理研究的工具。

这么看来,FORM貌似一直在“茁壮成长”。但其实从开发至今,维护FORM的人数总共也就十余人。

到现在,只剩下73岁的乔斯孤零零一人还在苦苦支撑。

为什么会这样?

一个重要的原因是:在物理学界,开发程序的努力往往被低估了。

274c7810c51489d6248ee03088e7922c.jpeg

乔斯老爷子无奈地表示:

多年来,我一直看到物理学领域中在计算工具开发上花大把时间的人,得不到一个终身职位。
而且相比之下,乔斯及FORM还算是挺幸运的,因为他本身有终身职位——荷兰国家亚原子物理研究所(Nikhef)长期担任理论组研究员。

而且FORM也受到了欧洲研究理事会(ERC)的关注。

光是在2012年,ERC就给FORM的相关项目资助了170万欧(约合人民币1235万元)。当时乔斯提出把游戏领域的蒙特卡洛方法,用来求解高能物理方程(这种方程往往要求高精度、计算量巨大)。

并且这是ERC给乔斯等Nikhef研究人员的第三笔大额拨款。

但同样是在粒子物理学领域,意大利物理学家Stefano Laporta就没这么走运了。他也开发了一种很有用的简化算法,可是整个职业生涯中都没收到什么资……

ba49dee5e220fbb98998763edcd3f131.png

如今,即便是曾经发展还不错的FORM,想要找到后续维护者都有些难了。

因为这不光会耗费精力、往往得不到高收益,还要求开发人员有过硬的跨学科能力。(其中一科还是粒子物理...)

有网友指出:

其实最难的不是写代码,而是确保它能正确处理数据。

比如,要对国际粒子物理学委员会编写的参考书PDG Review of Particle Physics行之有效。

4c819ebc06bbabed53137b1ea52dfdd1.png

如果后续维护不跟进,FORM很快就会跟不上计算机更新迭代的脚步,变得越来越不可用。

学者Ben Ruijl最近在尝试用Rust开发一个新版本的FORM——DreFORM,来尝试减少FORM中的bug。

但是到现在为止新版本还没有完成,因为Ben Ruijl不得不因为自己主要的研究课题而搁置它。

对此,哥本哈根大学(尼尔斯·玻尔的母校)的粒子物理学助理教授Matt von Hippel表示担忧:

(假如FORM真不行了,)物理学者可能不得不只能选择Mathematica,其速度比FORM慢了好几个数量级。

粒子物理学可能还会因此停滞不前,只有少数人能够胜任最难的计算工作。

眼下,乔斯老爷子已在积极思考解决办法。据说在今年4月份,他会召开一个FORM用户峰会,号召大家一起讨论后续维护问题。

GitHub上,也有不少用户在一直在为这个程序找Bug、提意见。

3150b0b56de28ddf9e2b46f66a53b143.png

我们发现最近也有人在更新项目,但似乎代码出现了一些问题。

FORM主页:
https://www.nikhef.nl/~form/
GitHub主页:
https://github.com/vermaseren/form
参考链接:
[1]https://www.quantamagazine.org/crucial-computer-program-for-particle-physics-at-risk-of-obsolescence-20221201/
[2]https://www.nikhef.nl/www/news/nikhef-researcher-jos-vermaseren-receives-prestigious-erc-advanced-grant/
[3]https://news.ycombinator.com/item?id=33818082
[4]https://arxiv.org/abs/math-ph/0010025

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅剩1位73岁开发者苦撑!能求解超复杂物理方程式的计算程序,要没人维护了... 的相关文章

  • HC-06蓝牙模块

    主机 xff1a 用于向从机下发指令 xff0c 能够搜索从机并主动建立连接的一方 从机 xff1a 用于接收主机下发的命令 xff0c 不能主动建立连接 xff0c 只能等别人连接自己 xff08 HC 06只能工作在从机模式下 xff0
  • JAVA回文数的判断

    回文数 xff1a 如121 xff0c 1221这样正着和倒着读都一样的数叫做回文数 xff0c 代码的主要思路是先将用户输入的数字倒过来后再与原来的数进行判断 难点 xff1a 将用户输入的数字倒过来 上代码 xff1a package
  • IOS+openfire 即时通讯

    最近看到很多人在琢磨ios即时通讯这块 xff0c 于是出去好奇 xff0c 决定动手试试 xff0c 今天就先从xmpp这个框架来尝试 其实xmpp也就一个协议而已 xff0c 更多人还是喜欢把它叫做Jabber 首先还是提供一下下载地址
  • webpack进行js打包,引入js

    node中html引入jquery可以用webpack进行打包 webpack 3可以打包 xff0c webpack 4 打包需要安装webpack cli xff0c 否则会报错 直接引入js会报错 语法错误 xff0c 浏览器不支持E
  • iOS中UICollectionView(集合视图)的使用

    1 简单介绍与说明 简介 UICollectionView提供了一种自定义布局展示试图内容的方式 说明 涉及到的必须的基本类型与基本代理类型有UICollectionView UICollectionViewCell UICollectio
  • iOS表视图之增删单元格

    要进行单元格的修改 xff0c 首先我们要删除原来的视图并从对象库中拖曳一个Navigation Controller视图 xff08 导航控制器 xff09 到设计页面 xff0c 添加Navigation Controller视图的同时
  • 史上最全IOS的touch事件手势使用方法

    以下内容源于本人整理 部分来源于网络 如有侵权行为或错误之处还望指正 请联系邮箱huiyutianshi 64 qq com 关于touch事件的 手势和事件都是基于UIRrsponder的 UIResponder包含所有的响应事件 触摸
  • vtk 显示效果设置

    在vtk中 xff0c 显示样式的显示 xff0c 是通过vtkProperty来控制的 xff0c 这里介绍三种基本的属性设置方式 xff0c 点方式 xff0c 网格方式和面方式 xff0c 这里以 头像三角网格的显示为例介绍其显示 其
  • Qt 线程(一) Qt 多线程实现的两种方式 线程实现详解

    简述两种实现方式 Qt提供了一个管理线程的类 xff1a QThread 子类化QThread并重新实现run 使用worker object通过QObject moveToThread将它们移动到线程中 简介QThread类 一 公共槽函
  • 1000以内的完数

    题目 xff1a 一个数如果恰好等于它的因子之和 xff0c 这个数就称为 完数 例如 xff0c 6的因子为1 2 3 xff0c 而6 61 1 43 2 43 3 xff0c 因此6是 完数 编程找出1000之内的所有完数 xff0c
  • 自适应参数的DE算法——JADE,L-SHADE

    目录 JADELSHADE参考文献 最近复写一个DE 1 xff08 差分进化算法 xff09 参数的自适应策略的变体L SHADE 2 xff08 CEC冠军算法 xff09 的matlab版本 xff0c 发现其提出的自适应策略对DE改
  • 转:基于科大讯飞语音API语音识别开发详解

    原文来自于 xff1a http www 52wulian org android voice 最近项目需要用到android语音识别 xff0c 立马就想到科大讯飞 xff0c 结合官方实例及阅读API文档 xff0c 初步的完成了And
  • 离线语音识别_离线语音识别库_离线语音识别sdk - 云+社区 - 腾讯云

    广告关闭 2017年12月 xff0c 云 43 社区对外发布 xff0c 从最开始的技术博客到现在拥有多个社区产品 未来 xff0c 我们一起乘风破浪 xff0c 创造无限可能 是的 xff0c 录音文件识别服务就是离线语音识别服务 录音
  • python在线发音-Python如何实现文本转语音

    准备 我测试使用的Python版本为2 7 10 xff0c 如果你的版本是Python3 5的话 xff0c 这里就不太适合了 使用Speech API 原理 我们的想法是借助微软的语音接口 xff0c 所以我们肯定是要进行调用 相关的接
  • micropython和python区别-MicroPython与Python速度对比

    首先说明 xff0c micropython跟python是没有任何可比性的 xff0c python作为一种通用的语言 xff0c 在扩展性上不是micropython能比的 xff0c 比如大量的库 xff0c 可以方便的用C语言加模块
  • python代码写好了怎么运行-python的代码写在哪里,怎么样运行python代码

    1 python的代码写在哪里 你有两种方式写python代码 xff0c 他们针对不同的应用场景在python交互式解释器里写代码 在编辑器里写代码 在python交互式解释器里 xff0c 你可以写简单的代码 xff0c 尽管复杂的代码
  • micropython入门教程-Micropython入门实操心得

    1 用串口线连接pyboard和电脑 xff0c 发现开发板被识别为移动磁盘 2 移动磁盘中默认会有4个文件 xff0c 它们分别是 xff1a boot py xff1a 开机最先运行的文件 xff0c 最后会由它加载main py ma
  • micropython和python区别-(一)什么是MicroPython?

    MicroPython简介 MicroPython是Python 3编程语言的精简高效实现 xff0c 包括Python标准库的一小部分 xff0c 并且经过优化 xff0c 可在微控制器和受限环境中运行 MicroPython pyboa
  • vmwate虚拟机centos7安装后重启输入密码提示:sorry,that didn't work.please try again

    遇到过一次 原因很简单 在centos图形界面设置密码时 xff0c 带有大小写的部分会出问题 如果有大写请直接用小写就可以避免 解决方案 一 进入单用户模式 1 重起电脑 xff0c 进入内核选择界面 按上下避免自动进入 2 选择要内核并
  • vue3 main.js 引入axios 的方法(如图)

随机推荐