当在 Rust 中编写将运行数百万次的整数函数时(想想像素处理),使用性能最高的操作很有用 - 类似于 C/C++。
虽然参考手册解释了行为的变化,但并不总是清楚哪些方法比标准(见注 1.)整数算术运算具有更高的性能。我假设wrapping_add
编译成相当于 C 的加法的东西。
在标准操作(加/减/乘/模/除/移位/位操作...)中,哪些操作具有更高性能的替代方案,默认情况下不使用?
笔记:
- 按照标准 ,我的意思是使用符号或...等的整数算术
a + b
。编写数学表达式时您将使用什么 - 除非您特别需要使用包装或返回溢出的方法之一。i / k
c % e
- 我意识到回答这个问题可能需要一些研究。所以我很高兴通过查看生成的程序集来进行一些检查,以查看哪些操作正在使用未经检查/原始操作。
- 可能是检查/未检查操作之间的速度差异并不显着,如果是这种情况,我仍然希望能够编写一个函数的“快速”版本来与“安全”版本进行比较,来我自己的结论是它是否是给定功能的合理选择。
- 在提到像素处理之后,SIMD 已经成为一种可能的解决方案。尽管这是一个很好的建议。这仍然给我们留下了无法使用 SIMD 优化的情况,因此仍然需要考虑快速整数运算的一般情况。