【发布时间】:2014-09-22 04:27:09
【问题描述】:
我在 C/C++ 应用程序中有三个变量 - x、y 和 z。我想设置 x = y,当 z == 3 时。我可以使用乘法来做到这一点:
x = y * (z == 3)
但这是在一个大循环中调用的,IMUL 将占用 4 个 CPU 周期。我希望找到一个需要 1 个 CPU 周期的操作。
编辑:编译器 MSVC 64 位编译、平台 Win 7 64、x86 架构、Ivy Bridge 或 Haswell。
【问题讨论】:
-
你说的是“会接受”而不是“愿意接受”。您是否查看了生产的组件以确认?
-
z == 3将解析为布尔值,因此它将为 0 或 1,因此结果将为 y 或 0。 -
取决于平台,条件可能会更好。例如,大多数 ARM 指令都是有条件的,编译器可以利用这一点。
-
另外,就像@ddriver 提到的那样,如果
z不是3,那么x将被设置为0。这是你想要的吗? -
在您指定的架构上的整数 ALU 操作应该需要 1 个单周期。 intel.com/content/www/us/en/architecture-and-technology/… - 第 60 页
标签: c++ c performance optimization bit-manipulation