为什么浮点加法比乘法花费更长的时间
Why does floating point addition took longer than multiplication
我正在使用 PIC18f4550,该程序对速度至关重要。当我将两个浮动变量相乘时,PIC 需要大约 140 个周期来执行乘法。我正在用 PIC18f4550 timer1 测量它。
variable_1 = variable_2 * variable_3; // took 140 cycles to implement
另一方面,当我添加相同的两个变量时,PIC 需要 280 个周期来执行添加。
variable_1 = variable_2 + variable_3; // took 280 cycles to implement
我已经看到,如果变量的变化取决于它们的指数,则循环数会发生变化。
那些更多周期的原因是什么?虽然我认为加法比乘法更简单。
有什么解决办法吗?
对于浮点加法,需要调整操作数,使它们在加法之前具有相同的指数,这涉及跨字节边界移动尾数之一,而乘法基本上是将尾数相乘并添加指数。
由于 PIC 显然有一个小的硬件乘法器,所以有时乘法比进行多字节移位更快(尤其是当 PIC 只有一位移位指令时)就不足为奇了。
除非处理器直接支持浮点,否则浮点总是很慢,如果可能的话,您当然应该考虑安排您的代码使用定点。摆脱浮点库可能也会释放大量代码 space。
我正在使用 PIC18f4550,该程序对速度至关重要。当我将两个浮动变量相乘时,PIC 需要大约 140 个周期来执行乘法。我正在用 PIC18f4550 timer1 测量它。
variable_1 = variable_2 * variable_3; // took 140 cycles to implement
另一方面,当我添加相同的两个变量时,PIC 需要 280 个周期来执行添加。
variable_1 = variable_2 + variable_3; // took 280 cycles to implement
我已经看到,如果变量的变化取决于它们的指数,则循环数会发生变化。 那些更多周期的原因是什么?虽然我认为加法比乘法更简单。 有什么解决办法吗?
对于浮点加法,需要调整操作数,使它们在加法之前具有相同的指数,这涉及跨字节边界移动尾数之一,而乘法基本上是将尾数相乘并添加指数。
由于 PIC 显然有一个小的硬件乘法器,所以有时乘法比进行多字节移位更快(尤其是当 PIC 只有一位移位指令时)就不足为奇了。
除非处理器直接支持浮点,否则浮点总是很慢,如果可能的话,您当然应该考虑安排您的代码使用定点。摆脱浮点库可能也会释放大量代码 space。