OS
为什么Rust cargo在release模式会比debug模式快很多?
为什么Rust cargo在release模式会比debug模式快很多? gpt给了一个笼统的答案,我们用矩阵乘法的例子来看看这里边的差异: debug模式中会有precondition check(图2)对程序可能的错误进行检测,这占据了其大部分运行时间,而图3 release模式下没有检查,方法栈也更少。 release模式会使用SIMD,相比图4 debug模式,图5 release模式用了intel SSE指令集中的mmx寄存…
为什么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)。

If you need to cite this post
Haibin Lai. (September 22, 2024). “为什么Rust cargo在release模式会比debug模式快很多?” [Blog post]. Retrieved from https://www.haibinlaiblog.top/posts/%E4%B8%BA%E4%BB%80%E4%B9%88rust-cargo%E5%9C%A8release%E6%A8%A1%E5%BC%8F%E4%BC%9A%E6%AF%94debug%E6%A8%A1%E5%BC%8F%E5%BF%AB%E5%BE%88%E5%A4%9A/
@online{lai--rust-cargo-release-debug-,
title={为什么Rust cargo在release模式会比debug模式快很多?},
author={Haibin Lai},
year={2024},
url={https://www.haibinlaiblog.top/posts/%E4%B8%BA%E4%BB%80%E4%B9%88rust-cargo%E5%9C%A8release%E6%A8%A1%E5%BC%8F%E4%BC%9A%E6%AF%94debug%E6%A8%A1%E5%BC%8F%E5%BF%AB%E5%BE%88%E5%A4%9A/},
}
Haibin's blog