智能AI morning

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

2026-06-27 1 阅读 新智元
新智元报道 【新智元导读】 快了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基础设施叙事几乎被两件事垄断: 一是