在运行时用移位替换乘以 2
Replacing multiplication by 2 with shift at runtime
我有整数数据,存储为 1 的 k
的倍数(例如,对于 k
=4,如果我的数据是 3,则实际数据为12)。在我的程序中,我读取数据并需要将其转换为原始值。值 k
始终是 2 的幂,但在编译时不知道。
CPU 能否在运行时用移位操作替换此乘法运算?
如果数据是 signed/unsigned 整数会有什么不同吗?
我正在使用 x64 机器和 CUDA,我的程序是用 C++[=31= 编写的], 用 gcc.
编译
为了 cpu 执行请求的替换,它必须在调度期间分析操作数。由于这种类型的替换是由编译器为常量完成的,因此效率不确定会增加很多复杂性...
我不知道有任何 cpu 可以进行此替换。
如果您使用的是英特尔 x86,您可以获得有关 https://software.intel.com/content/www/us/en/develop/download/intel-64-and-ia-32-architectures-optimization-reference -manual.html
的有趣信息
我有整数数据,存储为 1 的 k
的倍数(例如,对于 k
=4,如果我的数据是 3,则实际数据为12)。在我的程序中,我读取数据并需要将其转换为原始值。值 k
始终是 2 的幂,但在编译时不知道。
CPU 能否在运行时用移位操作替换此乘法运算?
如果数据是 signed/unsigned 整数会有什么不同吗?
我正在使用 x64 机器和 CUDA,我的程序是用 C++[=31= 编写的], 用 gcc.
编译为了 cpu 执行请求的替换,它必须在调度期间分析操作数。由于这种类型的替换是由编译器为常量完成的,因此效率不确定会增加很多复杂性...
我不知道有任何 cpu 可以进行此替换。
如果您使用的是英特尔 x86,您可以获得有关 https://software.intel.com/content/www/us/en/develop/download/intel-64-and-ia-32-architectures-optimization-reference -manual.html