为什么Rust cargo在release模式会比debug模式快很多?
- OS
- 2024-09-22
- 575 Views
- 0 Comments
- 303 Words
为什么Rust cargo在release模式会比debug模式快很多?
gpt给了一个笼统的答案,我们用矩阵乘法的例子来看看这里边的差异:

-
debug模式中会有precondition check(图2)对程序可能的错误进行检测,这占据了其大部分运行时间,而图3 release模式下没有检查,方法栈也更少。


-
release模式会使用SIMD,相比图4 debug模式,图5 release模式用了intel SSE指令集中的mmx寄存器。


-
实际执行指令更少,图5 release模式循环内指令数比图4 release更少。同时debug模式运行9.6s,CPI 0.289,3GHz速度(图6),指令数为 9.63g/0.289,图7 release模式指令数0.32.2g/0.331,指令数更少,这里有condition check和循环优化的多重功劳。


不过,release模式的rust在运行时间上仍与O3优化后的C程序有差距。Rust的一个劣势在于,在运行过程中调用了一些syscall(图8黄条部分),而C程序除了在linux程序初始化下有与系统交互的libc_start_main函数,其他情况下均在用户态上执行(图9)。


