uma*_*mar 21 hardware algorithm performance
算法中浮点除法的步骤是什么?
为什么结果比说,乘法慢?
它是否像我们手工分割那样完成?通过重复除以除数,减去结果以获得余数,再次对齐数字并继续直到余数小于特定值?
另外,为什么我们获得了性能,而不是做
a = b / c
Run Code Online (Sandbox Code Playgroud)
我们的确是
d = 1 / c
a = b * d
Run Code Online (Sandbox Code Playgroud)
?
编辑:基本上我问的是因为有人要求我根据权重的分配在竞争者中分配一个值.我用整数做了所有这些,后来被要求转换为浮动,这导致性能下降.我只是想知道C或C++如何做这些会导致缓慢的操作.
Nil*_*nck 18
从硬件的角度来看,除法是一种迭代算法,它所花费的时间与位数成正比.目前最快的分区使用radix4算法,每次迭代生成4位结果.对于32位除法,至少需要8步.
乘法可以在一定程度上并行完成.如果不详细说明,您可以将大量乘法分解为几个较小的独立乘法.这些乘法可以再次分解,直到你处于一个位级别,或者你提前停止并在硬件中使用一个小的查找表.这使得乘法硬件从硅片房地产的角度来看很重,但也非常快.这是经典的尺寸/速度权衡.
您需要log2步骤来组合并行计算结果,因此32位乘法需要5个逻辑步骤(如果您降低到最小值).幸运的是,这5个步骤比分割步骤更简单(它只是添加).这意味着在实践中倍数甚至更快.