我正在使用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
我已经看到,如果变量的变化取决于它们的指数,则周期数会有所不同。 那些更多周期的原因是什么?虽然我认为加法比乘法更简单。 有什么解决方案吗?
答案 0 :(得分:3)
对于浮点加法,需要调整操作数以使它们在加法之前具有相同的指数,并且涉及将一个尾数移过字节边界,而乘法基本上是乘以尾数并加上指数。
由于PIC显然具有较小的硬件乘法器,因此有时乘法可能比执行多字节移位更快(特别是如果PIC仅具有单个位移指令),这可能不足为奇。
除非处理器直接支持它,否则浮点总是很慢,如果可能的话,你当然应该考虑安排你的代码使用固定点。摆脱浮点库可能会释放大量的代码空间。