Tech
[分享发现] 记录一次高性能计算代码迁移的经历
实验前提
同一个 CFD 求解器用三种语言各写了一遍:Fortran 90 原版( 2.5 万行源代码)、NumPy+Numba 移植、Julia 移植。
关键不是写了三遍,而是约束:0 ULP 位级一致,1500 步迭代后,三种实现的输出文件必须逐字节相同。任何一次浮点舍入的差异都会被迭代放大成可见分歧。这个约束听起来变态,但它带来一个好处: 三者跑的是完全相同的算法、相同的浮点运算序列 。性能差异只能来自语言本身,没有算法不一样的借口。
结果
语言
1 线程
8 线程
每步耗时(1T)
Fortran ( gfortran 16.1, -O3 )
59.9s
—
39.9ms
Julia 1.12.6
50.8s
38.9s
33.9ms
Python + Numba 0.65.1
96.9s
65.6s
64.6ms
Julia 单线程赢 Fortran 15%,8 线程赢 Numba 8T 达 40.7%。Fortran 代码无多线...
Read the full discussion on V2EX
This article was aggregated from V2EX. Click to join the conversation.
View on V2EX