Java Android CPU:双精度,整数我怎么计算有关系吗?在特定情况下,什么更快?
我正在开发一款Android游戏。目前,我正在编写代码,使用A*算法计算两个对象之间的最佳路由。在这个算法中,我用双精度来计算所有的东西 在我的计算机上运行耗时的算法时,使用整数和双精度运算的时间差几乎为零(可能只有几纳秒) 问题一: 这种行为在安卓手机上也能看到吗?我知道我的电脑有多个ALU,一个用于整数,另一个用于浮点数等,但手机呢?Android手机在硬件方面可能会有很大的不同。我只有两部测试手机,但现在市场上有数百部手机,这意味着在我的两部手机上运行测试不会给我提供可靠的数据,至少我是这么认为的 问题二:Java Android CPU:双精度,整数我怎么计算有关系吗?在特定情况下,什么更快?,java,android,performance,integer,double,Java,Android,Performance,Integer,Double,我正在开发一款Android游戏。目前,我正在编写代码,使用A*算法计算两个对象之间的最佳路由。在这个算法中,我用双精度来计算所有的东西 在我的计算机上运行耗时的算法时,使用整数和双精度运算的时间差几乎为零(可能只有几纳秒) 问题一: 这种行为在安卓手机上也能看到吗?我知道我的电脑有多个ALU,一个用于整数,另一个用于浮点数等,但手机呢?Android手机在硬件方面可能会有很大的不同。我只有两部测试手机,但现在市场上有数百部手机,这意味着在我的两部手机上运行测试不会给我提供可靠的数据,至少我是这
对于我的游戏来说,如果我切换到整数,分配并不重要,计算的路径可能不太完美,但这并不困扰我。那么转换成整数值得吗?还是转换成整数会破坏算法?有人有这方面的经验吗?您应该检查一下作为一般经验法则,整数运算比浮点运算快,因为它更容易实现。(对于浮点运算,硬件必须同时处理尾数和指数部分,而且它不能并行处理。) 然而,性能比率会随着硬件实现的不同而变化,很难做出比猜测更好的预测。(首先,这取决于营销策略和性能与电池寿命的权衡。)
但老实说,我会更关注整数和浮点中的哪一个最适合游戏的算法。如果他们需要一个,而您使用另一个,那么您将面临很多痛苦(不必要的编码、测试、bug修复等) 或者你们认为换成整数会破坏算法吗 可以。这也可能使它们变得更加复杂。这完全取决于算法的性质。当然,您需要进行大量的重新编码和重新测试
就我个人而言,即使在我尝试分析和调整性能热点之后,我也只会在游戏速度太慢的情况下考虑这样做。只有当我准备冒着重新编码工作可能不会带来任何好处的风险时,我才会这么做。。。或者更糟。整数算法有几个优点:
- 通常更快。这取决于硬件,但大多数硬件具有更高效的整数运算。此外,一些硬件缺乏FPU功能,实际上必须模拟浮点指令,这要慢得多
- 您不必担心舍入问题。可能会导致一些微妙的错误和问题
- 它更简单-您不必担心像NaN和Infinity这样的特殊情况,而且更容易显示/格式化数字
较旧的Android手机没有浮点协处理器(ARMA5 CPU)。在这样的设备上,使用
double
比使用int
慢得多。一般来说,double
将比int
慢,即使在使用浮点协处理器的设备上也是如此。好的观点,正常的我总是在那里看到,但不是今天。他们说浮点运算比整数慢两倍。然后他们告诉你双倍或浮动不重要,你应该选择其中一个?它们告诉我们一些关于整数的事情,在某些情况下,除法是用软件完成的。还不清楚该使用什么,也许我应该制作两个版本,让用户选择?如果你是开发人员,无法检查哪个更好,那么用户的处境就更糟了。这可能取决于电话。可能会创建一个版本,并在低端手机上进行测试。