【发布时间】:2021-06-06 18:53:06
【问题描述】:
我的应用程序包含一个多线程引擎,该引擎可以进行类似于国际象棋的游戏。 它对 64 位字执行大量按位运算(移位和等)。 在 PC 上,64 位版本比 32 位版本快得多,而在最近的手机/平板电脑上,您会期望相同。 下表包含一些测试结果(最好的结果是 100,越少意味着越慢)。 基准包括并行添加数字 1 到 2 亿。我验证了 4 线程比 2 或 1 快。
hardware os build threads benchmark search task
----------------------------------------------------------------------
MacBook Windows 64-bit JVM 4 100 100
MacBook Windows CN1 Simulator 4 100 42
iPhone X iOS debug armv7 4 14 2
iPhone X iOS debug arm64 4 14 2
Samsung Tab A 10.1 Android debug 4 8 1
Samsung Tab A 10.1 Android release 4 10 7
观察:
- 在 MacBook 上,搜索任务在模拟器中的执行速度是普通 64 位 JVM 的两倍多。 大概这是因为没有(本机)对 Long.bitCount() 和 Long.numberOfTrailingZeros() 函数的支持, 我不得不用(较慢的)代码替换它。问题:有没有办法改善这一点?
- iPhone X armv7 和 arm64 版本之间没有区别。这怎么可能? (我尝试删除该应用程序并 在安装arm64版本之前重启手机。当前的 AppStore 版本是 32 位 IIRC。)
- Android 发行版在搜索任务上的表现比调试版好得多:快 7 倍!
在三星 Tab 上表现令人满意,在 iPhone X 上我会说它低于标准。 CPU 比较(iPhone X:64 位 6 核 @ 2.39 和 1.42 GHz,三星 Tab A 10.1:64 位 8 核 @ 1.6 GHz) iPhone X 不应该慢 3.5 倍(得分 2 vs 7)。
可以肯定的是,我使用 MacOS 的“文件”命令查看了 iOS arm64 调试构建 ipa,它显示:Mach-0 64 位可执行文件。
所以我很困惑:为什么 arm64 在我的 iPhone X 上构建速度不快?
我在某处读到“iPhone X 的处理器比最新的 MacBook Pro 更强大”(2017 年),这是不对的。 (我认为我的 MacBook 是 2015 年的。)
顺便说一句,我使用一个外部库 Device 来检测设备是否是 iPhone X,我尝试使用 ios.add_libs=ExternalAccessory.framework。
编辑
有关 iOS ipa 文件的更多信息:
32 位 Main.ipa 7.3 MB 文件:Mach-0 可执行 arm
64 位 Main.ipa 7.1 MB 文件:Mach-0 64 位可执行文件
在 2012 iPad 4 上仅安装 32 位 ipa。 (0-100 范围内的搜索任务性能为 0.4。) 在 iPhone X 上安装了 32 位和 64 位 ipa,但没有性能差异,这很奇怪。 搜索任务性能为 2.0,与三星 Tab (7.0) 相比较低。
【问题讨论】:
-
您可能应该考虑使用Metal - 使用 GPU 而不是 CPU,您将获得更好的性能和更低的能耗
标签: ios performance 64-bit codenameone iphone-x