【发布时间】:2017-11-28 23:06:39
【问题描述】:
我来自 C,我想知道 Rust 的边界检查是否会影响性能。每次访问可能都需要一些额外的汇编指令,这在处理大量数据时可能会受到伤害。
另一方面,处理器性能的代价是内存,所以更多的算术汇编指令可能不会受到伤害,但在缓存线加载后,顺序访问应该非常快。
有人对此进行了基准测试吗?
【问题讨论】:
-
为什么不在您的机器上自己进行基准测试,结果对您来说最准确?一般来说,除非您必须这样做,否则担心真正低级的性能影响是没有意义的。尝试预先优化通常会导致复杂的代码没有真正的性能优势。 基准无法模拟,也不能反映实际使用情况。
-
我稍后可能会对其进行基准测试并自己回答这个问题,但首先我必须学习基础知识(锈病中的时间测量如何工作?:-D)。我只是认为这对理论来说可能很有趣,因为我在研究 HPC 中的 C 或 C++ 等其他语言时遇到了这个主题。
-
Rust 并不总是执行边界检查。我认为遍历数组不会导致对每个项目进行边界检查。如果您需要按索引访问单个项目,则存在未经检查的访问的不安全函数。
-
@hnefatl:如果您不了解某项工作的许多细节,那么您就无法设计一个真正衡量您想要衡量的内容的基准。微基准测试非常很容易最终测量出与作者预期完全不同的东西。 “只是基准测试”的回复并不像大多数人想象的那样有用,尤其是当我们谈论微基准测试时。例如您可能会选择碰巧没有边界检查开销的情况,而忽略了在其他看起来相似或非常不同的情况下存在开销的事实。
-
@PeterCordes 是的,我用斜体表示的评论的最后一部分是为了对此有点“免责声明”,暗示“发明”的基准通常不会捕捉到发生的情况生产代码。
标签: arrays performance rust benchmarking