Performance 用小整数常量实现浮点乘法的最快方法

Performance 用小整数常量实现浮点乘法的最快方法,performance,floating-point,opencl,Performance,Floating Point,Opencl,假设您正试图将一个浮点数k乘以一个小整数常量n(根据第3.8.1节“指令带宽”,我指的是-20,用于单精度浮点操作数、加法、乘法和“MAD”(乘法-加法)在基于GCN的GPU上,每个周期的吞吐量都为5。对于24位整数也是如此。只有当您移动到32位整数时,乘法的成本才会高得多(1/周期)。整数到浮点的转换以及反之亦然也相对较慢(1/周期),除非您有双精度浮点模型(主要是英伟达的FirePro/Radeon Pro系列或Quadro/Tesla)双打的速度非常慢(这实际上取决于体系结构,因为有些具有

假设您正试图将一个浮点数
k
乘以一个小整数常量
n
(根据第3.8.1节“指令带宽”,我指的是
-20,用于单精度浮点操作数、加法、乘法和“MAD”(乘法-加法)在基于GCN的GPU上,每个周期的吞吐量都为5。对于24位整数也是如此。只有当您移动到32位整数时,乘法的成本才会高得多(1/周期)。整数到浮点的转换以及反之亦然也相对较慢(1/周期),除非您有双精度浮点模型(主要是英伟达的FirePro/Radeon Pro系列或Quadro/Tesla)双打的速度非常慢(这实际上取决于体系结构,因为有些具有从整数到浮点的快速转换,而有些则没有。如果可能的话,最好将n存储为浮点类型。当前普通处理器上的浮点乘法速度相同或接近于此。处理器用于乘法的单元可能比用于加法的单元少,因此您可以et more将每单位时间内完成的操作相加。否则,优化的空间很小。如果您的值没有溢出的风险,那么对于2、4、8和16的乘法,您只需将指数分别增加1、2、3和4。然后将中间结果相加(即X*10与X*2+X*8相同)。但是1)这需要了解FP值的内部表示,2)我不确定(还没有尝试)这是否比简单的X*10.0快。@phuclv我在问题中说整数到浮点的转换不计入运行时(因为我在编译时知道所有相关的整数)。