StackOverflow 上有一个关于浮点与整数运算的很好的讨论。简而言之,操作的性能很大程度上取决于
这可能提供了一些关于整数类型的普遍性比浮点数更快的问题#1 的一些见解。
然而,FLOPS是众所周知的,因为它是数值软件性能的标准衡量标准。在数值计算中,从浮点类型到整数一般不容易
- 改变数学运算的性质(除法、三角函数、平方根、特殊函数、大多数线性代数等)
- 必须实现特殊的(长)整数运算来“模拟”这些操作——这肯定会否定使用整数类型而不是浮点类型的所有可能的好处。
当然,可能有反例,其中整数类型的使用是自然的(例如,图的关联矩阵)。
现在,关于性能指标。来自Wiki的稍微简化的公式:
FLOPS=cores×cyclessecond×FLOPScycle
另外,请参阅CompSci 上的这个问题和 SO 上的这个问题中的讨论。
现在,为了判断整数运算,我们可以有IPS
IPS=cores×cyclessecond×Instructionscycle
注意区别:对于 FLOPS,我们使用 FLOPS/cycle,而对于 IPS,我们使用每个周期的一般指令。同样,它将取决于处理器,如果它实际上每个周期可以执行更多的整数运算(与 FLOPS 相比)。请注意,在许多级别上进行了一些平均:
- 每个周期平均 # 条指令
- 对指令顺序的隐藏依赖
- ...主要是关于数据访问模式——这是现代代码的常见瓶颈。
所以,简而言之,我会回答第一个问题 #2,浮点计算已经优化了很多,所以不自然地使用整数类型不太可能给你带来任何好处。
小额外说明:
我也会研究半精度算术。如果您使用的架构可以有效地利用它,它可能会对您的任务有所帮助。