【发布时间】:2020-03-16 00:02:03
【问题描述】:
在我的程序内存和 cpu 时间中,这个计算也将每秒进行大约 50000 次。如果在算术上使用位运算符,是否会提高性能?
【问题讨论】:
-
@ElliottFrisch “它们的表现相同” 是吗?你有参考基准吗?
-
值得注意的是,它们不会产生相同的结果。而且 50,000 Hz 也不是很多,至少在某些嵌入式之外。
-
我的建议是选择看起来最自然(也是最正确!)的版本,然后让 JIT 编译器的优化器来选择更快的版本。请注意,最佳代码可能取决于硬件。特别是如果您的目标平台具有不同的 ISA。
-
我知道这是典型的陈述,但它太重要了,不能每次都发布:编写可读的代码。不要进行过早的优化,您最终可能会产生较慢的代码并牺牲可读性。衡量你的表现,只有当你在那个地方发现了一个真正的问题,然后才进行优化,然后用另一个衡量标准来确认你没有让问题变得更糟。
-
@ElliottFrisch 它是 signed 余数和 signed 除法,即使经过优化,它们最终也比按位与和移位更复杂。因此,您基本上是在说 AND 指令和 AND 指令加上一些额外内容之间几乎没有区别。差异小到足以使准确的基准测试变得棘手,但现在移动球门柱为时已晚。