40张GPU硬刚1536颗CPU!70岁「古董」代码狂飙数十倍

浏览12次 点赞0次 收藏0次

【导读】快了31倍——一家公司没去卷大模型,而是干了件不性感却绕不过去的事:让每一种有价值的计算,都高效地跑起来。

海洋科学是建设海洋强国的重要基石。

全球气候变化的趋势研判、沿海城市防灾减灾的决策支撑、蓝色经济可持续发展的科学依据,每一项国家战略需求的背后,都离不开对海洋的系统认知与精准模拟。

ROMS(区域海洋建模系统),是全球海洋研究领域的标准工具之一,用来模拟洋流、气候、生态系统,为沿海城市灾害预警与长期海洋资源管理提供科学决策依据。

但有一个尴尬的现实——随着对模拟分辨率和精度的要求的提高,跑一次典型模拟,少则数月,多则一年。

研究人员的大量时间不是花在分析结果,而是盯着进度条。

为此,香港某科研团队与是石科技合作,ROMS的计算进行利用GPU提速优化。

是石科技干了件听起来不太时髦的事:把一套大量代码还保留着上世纪Fortran风格的老程序,搬上了GPU。

结果是:同样的算例下,16张GPU卡计算耗时518.59毫秒,16颗CPU需要16373.97毫秒——31.57倍。换成40张GPU卡,算力等效1536颗CPU核心,加速38.4倍。


「跑一天出一天结果」变成了「跑半小时出一天结果」——这不是换个显卡那么简单,背后是一整套科学计算异构并行优化的硬功夫。

Fortran老代码

怎么登上现代GPU?

理解这件事的难度,要先理解两件事:ROMS是什么,Fortran又是什么。

ROMS是美国Rutgers大学开发的区域海洋模型。

它不是一两个文件,而是一个庞大的Fortran代码库——而Fortran这门语言,诞生于1957年,世界上第一批科学计算程序就是用Fortran写的。

直到今天,全球大量气象、海洋、流体力学领域的核心代码,仍然是Fortran。几十年的模型积累和验证数据,不能轻易推倒重来。

但Fortran有一个尴尬的现实:主流的GPU并行计算平台对C/C++有原生支持,对Fortran也提供了编译器和扩展支持,但在工程实践中,直接通过OpenACC指令注解或专属扩展语法进行大规模移植,性能和可维护性往往不尽如人意。

你不能简单地把Fortran程序「扔」到GPU上跑——支持虽有,但科学计算对极致效率的要求,让这条路远未到开箱即用的程度。

打个比方:Fortran是一本用文言文写的物理学巨著,GPU是一台主要支持白话文的计算机。你大致能看懂内容,但要准确无误地把整本书搬到新系统上运行,还是需要一个精密的翻译——而且翻译过程中不能曲解任何一个公式,因为科学计算里,小数点后十位的精度都有意义。

是石科技的方案是一条三段式移植路径:Fortran → C → GPU并行计算。

第一步:诊断——找到真正的「时间杀手」。

ROMS代码有几万行,分布在数十个源文件中。

工程师先用性能分析工具和函数调用关系图梳理整个代码框架,定位热点函数的分布、分析函数间的数据依赖——这不仅是为了找到「哪里慢」,更是为了确定整个移植工作的优先级和先后顺序,确保后续的每一行GPU化修改都有清晰的路线图。

第二步:翻译——跨语言移植,每一步都是坑。

把需要加速的Fortran函数用C语言重写。这一步有两个极其脆弱的技术难点:

难点一,内存布局的「水土不服」。

Fortran的数组是列优先存储——同一列的元素在内存里紧挨着;C语言是行优先——同一行的元素紧挨着。

这就好比一张Excel表格,Fortran按列读(先从上到下读完第一列,再读第二列),C按行读(先从左到右读完第一行,再读第二行)。

如果你把Fortran的数据直接当C的数据用,读到的就是完全乱序的数值,整个模拟全废。

难点二,数组下标的「代际差异」。

Fortran的数组下标默认从1开始(数学家的习惯),C从0开始(计算机科学家的习惯)。更麻烦的是,Fortran允许数组下标从任意整数起始,比如可以定义从-5到10。

如果你把Fortran里a(-5)的值,直接映射到C的a[-5],程序当场崩溃。工程师必须给每个数组手动加上下标偏移量,确保物理内存地址一一对应。

打个比方:Fortran用「楼层编号」(地下5层),C用「绝对编号」(从入口算第0间)。翻译官必须记住,Fortran的「地下5层」在第-5间,不能直接当门牌号用。

第三步:GPU化——让计算跑在数千个核心上。

对每个热点函数,工程师将其逻辑从C改写为CUDA内核(kernel),把原本串行执行的多层循环分配到GPU的数千个流处理器上并行运行。

一个典型的ROMS计算函数包含i、j、k三重嵌套循环——对应海洋网格的东西、南北、垂直三个维度。

在GPU上,这些循环被展开为线程网格:每个线程负责一个或多个网格点的独立计算,数千个线程同时执行,将原本需要顺序跑完的循环压缩到一次并行调用中。

每个内核的线程块大小、共享内存分配、寄存器使用量等参数,都需要针对函数特性反复调优,才能达到最优的计算效率。

完成内核开发后,工程师还对分散在多处的数组进行了跨函数合并,将多次小批量数据搬运归并为一次大批量传递,大幅减少了主机内存与GPU显存之间的数据传输开销,提升了整体效率。

把耗时函数GPU化之后,还需要解决多张GPU之间的数据传输效率问题。

原来在CPU集群上,节点之间通过一种叫MPI的协议通信。但GPU之间用MPI效率很低——数据要先从显存搬回内存,通过MPI发送,再搬回另一张GPU的显存,绕了一大圈。

是石科技的方案是改用NCCL(GPU直连通信协议),让数据直接在显存间传递,无需CPU中转。

此外,还把原本分散的多次小批量数据搬运合并为一次大批量传递,大幅减少了「装车卸车」的开销。

最终,整个项目的验收有一个关键指标,甚至比速度更重要:GPU版本和CPU版本,计算结果完全一致。三个不同算例各跑2880步,输出精度全部验证通过。

在科学计算领域,精度不对等于白算。快但结果错,等于没用。

不止海洋模拟:航空、高端制造行业实现数十倍至数百倍提速

ROMS不是孤例。是石科技的并行优化能力覆盖了多个科学计算和工业仿真场景。

航天某院空泡多相流求解器。


空泡多相流求解器仿真可视化(图示)

航天某院的核心求解器,用于模拟水下航行器周围空泡的生成与溃灭过程——这类仿真对网格分辨率和时间步长要求极高,在同构CPU集群上跑一次需要数小时甚至数天。

是石科技将其核心计算模块移植到GPU上,单CPU+GPU相较于单CPU实现200倍加速。

开发人员从此可以在数分钟内完成一轮测试迭代,大幅缩短了型号研发周期。

CAE工业仿真软件。


仿真散热图(图示)

国内CAE领域领军企业的通用仿真平台,经过CPU+GPU联合深度优化后,CPU侧性能提升2.2倍,GPU侧提升28倍。

技术手段覆盖了AVX2向量化加速、统一GPU内存管理、数组索引映射优化等。

这些项目的共同点是:不是重写代码,而是在最小改动下释放最大性能。

科学代码和工业仿真软件是数十年学术积累与工程经验的结晶——你不能为了加速就把它们推倒重来。

总结起来,是石科技的并行优化方法论可概括为四个词:深度诊断 → 架构定制 → 渐进迁移 → 持续交付。

被忽视的「工程化通道」

2026年的AI基础设施叙事几乎被两件事垄断:一是谁做出了更强的大模型,二是谁囤了更多算力。

但一个更基本的问题一直被低估:芯片和应用之间的「工程化通道」。

芯片厂商(昇腾、昆仑芯、摩尔线程等)的核心能力在芯片设计;大模型厂商的核心能力在模型训练和算法。

但把芯片的算力真正转化为应用可用的生产力——无论是大模型推理的Token,还是科学模拟的计算结果——中间夹着大量系统工程工作:异构算力资源池化、并行算法重构、跨架构代码移植、大规模集群稳定运维。

这些工作没有榜单,不够「性感」,不会出现在融资新闻的标题里。

但它们是AI基础设施真正落地绕不过去的一层。

是石科技目前服务了200余家客户。左手是互联网大厂的大模型推理需求——也就是他们此前提出的「Token工厂」概念;右手是国家气象局、香港某科研团队、航天某院的科学计算任务。

这家公司的本质,就是在这条「工程化通道」上卡了一个关键生态位。

从ROMS的Fortran老代码在现代GPU上跑出31倍加速,到空泡多相流求解器单卡加速200倍,这些案例指向同一个结论:当算力成为基础设施,真正有价值的不只是谁制造芯片、谁训练模型——还有谁能让每一种有价值的计算,都高效地跑起来。

而这件事,路还很长,所幸有人已然先行。

声明:本文转载自新智元,转载目的在于传递更多信息,并不代表本社区赞同其观点和对其真实性负责,本文只提供参考并不构成任何建议,若有版权等问题,点击这里查看更多信息!本站拥有对此声明的最终解释权。如涉及作品内容、版权和其它问题,请联系我们删除,我方收到通知后第一时间删除内容。

点赞(0) 收藏(0)
0条评论
珍惜第一个评论,它往往能得到较好的回响。
评论
游客
游客
登录后再评论
  • 鸟过留鸣,人过留评。
  • 和谐社区,和谐点评。
最新资讯