【发布时间】:2017-08-30 15:34:15
【问题描述】:
我观察到一个相当奇怪的现象:当我将所需的 CPU 计算量从 10+ 百万增加到几亿(大多数是乘法和加法和除法)时,如果我以浮点数计算它们,速度会变要快得多。然而,对于低于一定数量的运算,并不那么极端,整数计算确实更快,正如预期的那样。
发生这种情况有什么特殊原因吗?我怀疑它可能与浮点运算在计算显着增加时自动并行化有关,但与整数计算无关。请注意,我没有明确地为应用程序执行多线程。我不是 Android 专家,所以我想知道是否有任何 android 专业人士或计算机架构专家可以在这方面启发我。
谢谢。
【问题讨论】:
-
你在做什么操作?你分吗?如果是这样,很清楚,请参阅:stackoverflow.com/questions/3350808/…
-
是的,也涉及到除法。事实上,该应用程序与神经网络有关,这基本上意味着您发布的线程中的图形计算。是否有现有文献显示整数中的某些操作(例如除法)较慢?
-
我从未测试过它,但您可以使用简单的 java 代码(使用时间戳)轻松测试它。 *无论如何我发现nicolas.limare.net/pro/notes/2014/12/12_arit_speed,非常有趣的信息:) 另外,使用GPU应该是快速的过程..
-
除法始终是处理器有史以来最慢的操作。要进行优化,您可以乘以预先计算的逆数。即:
10 * .5比10 / 2快得多,结果相同 (5)。更优化的是移动位(如果您要乘以或除以 2 的幂)。即:10 << 1比10 * 2快 MUUUUUCH 并且结果相同 (20)。 -
@ModularSynth 虽然这两个都是正确的,但编译器应该为您完成这两个优化。此外,仅当您乘以常数时,移位的东西才成立,并且常数的位数相对较少。如果数字是变量或者1位太多,硬件乘法器会更快。
标签: android mobile floating-point integer cpu-architecture