迈克·阿什 致力于他的博客 iPhone 64S 切换到 5 位架构的实际影响。本文借鉴了他的发现。
之所以写这篇文章,主要是因为关于配备 5 位 ARM 处理器的新款 iPhone 64s 对用户和市场的实际意义存在大量错误信息。在这里,我们将尝试为开发人员带来有关此转变的性能、功能和影响的客观信息。
“64位”
“X 位”标签可以引用处理器的两个部分 - 整数寄存器的宽度和指针的宽度。幸运的是,在大多数现代处理器上,这些宽度是相同的,因此对于 A7,这意味着 64 位整数寄存器和 64 位指针。
然而,同样重要的是要指出“64 位”的含义: RAM物理地址大小。与 RAM 通信的位数(因此设备可以支持的 RAM 量)与 CPU 位数无关。 ARM 处理器具有 26 位和 40 位地址之间的任何位置,并且可以独立于系统的其余部分进行更改。
- 数据总线大小。从 RAM 或缓冲存储器接收的数据量同样与该因素无关。各个处理器指令可能请求不同数量的数据,但它们要么以块的形式发送,要么从内存接收超出需要的数据。这取决于数据量的大小。 iPhone 5 已经以 64 位量子的形式从内存接收数据(并且具有 32 位处理器),并且我们可以遇到高达 192 位的大小。
- 任何与浮点数有关的东西。此类寄存器 (FPU) 的大小同样独立于处理器的内部工作。 ARM 在 ARM64(64 位 ARM 处理器)之前就一直使用 64 位 FPU。
一般优点和缺点
如果我们比较相同的 32 位和 64 位架构,它们通常并没有那么不同。这也是公众普遍对苹果移动设备转向 64 位的原因感到困惑的原因之一。然而,这一切都来自于A7(ARM64)处理器的具体参数以及苹果如何使用它,而不仅仅是来自该处理器具有64位架构这一事实。
然而,如果我们仍然看看这两种架构之间的差异,我们会发现几个差异。显而易见的是,64 位整数寄存器可以更有效地处理 64 位整数。即使在此之前,也可以在 32 位处理器上使用它们,但这通常意味着将它们分成 32 位长的片段,这会导致计算速度变慢。因此,64 位处理器通常可以使用 64 位类型进行计算,与使用 32 位类型进行计算一样快。这意味着通常使用 64 位类型的应用程序可以在 64 位处理器上运行得更快。
虽然 64 位不会影响处理器可以使用的 RAM 总量,但它可以使在一个程序中使用大块 RAM 变得更容易。任何在 32 位处理器上运行的单个程序都只有大约 4 GB 的地址空间。考虑到操作系统和标准库会占用一些空间,这会为程序留下 1-3 GB 的空间供应用程序使用。但是,如果 32 位系统具有超过 4 GB 的 RAM,则使用该内存会稍微复杂一些。我们必须强制操作系统为我们的程序映射这些更大的内存块(内存虚拟化),或者我们可以将程序分成多个进程(理论上每个进程都有 4GB 的内存可用于直接寻址)。
然而,这些“黑客”非常困难且缓慢,以至于很少有应用程序使用它们。实际上,在 32 位处理器上,每个程序只会使用其 1-3 GB 内存,更多可用 RAM 可用于同时运行多个程序或使用此内存作为缓冲区(缓存)。这些用途很实用,但我们希望任何程序都能够轻松使用大于 4GB 的内存块。
现在我们来看看一个常见的(实际上是不正确的)说法:没有超过 4GB 的内存,64 位架构就没用。即使在内存较少的系统上,较大的地址空间也很有用。内存映射文件是一种方便的工具,其中文件的部分内容在逻辑上链接到进程的内存,而无需将整个文件加载到内存中。因此,系统可以逐渐处理比 RAM 容量大很多倍的大文件。在 32 位系统上,如此大的文件无法可靠地进行内存映射,而在 64 位系统上,由于地址空间更大,因此这是小菜一碟。
然而,较大的指针也带来了一个很大的缺点:否则相同的程序在 64 位处理器上需要更多的内存(这些较大的指针必须存储在某个地方)。由于指针是程序中常见的部分,这种差异会给缓存带来负担,进而导致整个系统运行速度变慢。因此,从长远来看,我们可以看到,如果我们只是将处理器架构更改为 64 位,实际上会降低整个系统的速度。所以这个因素必须通过其他地方更多的优化来平衡。
ARM64
A7 是为新款 iPhone 64s 提供支持的 5 位处理器,它不仅仅是具有更宽寄存器的常规 ARM 处理器。 ARM64 对旧的 32 位版本进行了重大改进。
注册表
ARM64 拥有两倍于 32 位 ARM 的整数寄存器(注意不要混淆寄存器的数量和宽度 - 我们在“64 位”部分中讨论过宽度。因此 ARM64 拥有两倍宽的寄存器和两倍的数量寄存器)。 32位ARM有16个整数寄存器:13个程序计数器(PC——包含当前指令的编号)、64个堆栈指针(指向正在进行的函数的指针)、32个链接寄存器(指向结束后返回的指针)的功能),其余 28 个供应用程序使用。然而,ARM32有64个整数寄存器,包括16个零寄存器、32个链接寄存器、128个帧指针(类似于堆栈指针)和XNUMX个为将来保留的寄存器。这使得我们有 XNUMX 个寄存器供应用程序使用,是 XNUMX 位 ARM 的两倍多。同时,ARMXNUMX 将浮点数 (FPU) 寄存器的数量从 XNUMX 个 XNUMX 位寄存器增加了一倍到 XNUMX 个。
但为什么寄存器的数量如此重要呢?内存通常比 CPU 计算速度慢,并且读/写可能需要很长时间。这将使快速处理器必须继续等待内存,并且我们将达到系统的自然速度限制。处理器试图通过缓冲区层来隐藏这一障碍,但即使是最快的缓冲区(L1)仍然比处理器的计算慢。然而,寄存器是直接位于处理器中的存储单元,它们的读/写速度足够快,不会减慢处理器的速度。寄存器的数量实际上意味着处理器计算最快的内存量,这极大地影响了整个系统的速度。
同时,这个速度需要编译器良好的优化支持,以便语言可以使用这些寄存器,而不必将所有内容存储在通用应用程序(慢速)内存中。
指令系统
ARM64还给指令集带来了重大变化。指令集是处理器可以执行的一组原子操作(例如“ADD register1 register2”将两个寄存器中的数字相加)。各个语言可用的函数都是由这些指令组成的。更复杂的函数必须执行更多指令,因此它们可能会更慢。
ARM64 中的新增功能包括 AES 加密、SHA-1 和 SHA-256 哈希函数指令。因此,只有语言才会调用该指令,而不是复杂的实现——这将为此类函数的计算带来巨大的加速,并有望增加应用程序的安全性。例如。新的 Touch ID 还在加密中使用这些指令,从而实现真正的速度和安全性(理论上,攻击者必须修改处理器本身才能访问数据 - 至少考虑到其微型尺寸,这是不切实际的)。
与32位的兼容性
值得一提的是,A7 可以完全在 32 位模式下运行,无需仿真。这意味着新款 iPhone 5s 可以运行在 32 位 ARM 上编译的应用程序,不会出现任何速度减慢的情况。但是,它无法使用新的 ARM64 功能,因此专门为 A7 进行特殊构建始终是值得的,它应该运行得更快。
运行时变化
运行时是向编程语言添加功能的代码,它可以在应用程序运行时使用,直到翻译完成。由于 Apple 不需要维护应用程序兼容性(64 位二进制文件在 32 位上运行),因此他们有能力对 Objective-C 语言进行更多改进。
其中之一就是所谓的 标记指针 (标记的指标)。通常,对象和指向这些对象的指针存储在内存的不同部分中。然而,新的指针类型允许数据很少的类直接在指针中存储对象。这一步不需要直接为对象分配内存,只需创建一个指针和其中的对象即可。标记指针仅在 64 位体系结构中受支持,也是因为 32 位指针中不再有足够的空间来存储足够的有用数据。因此,与 OS X 不同,iOS 还不支持此功能。然而,随着 ARM64 的到来,这种情况正在改变,iOS 在这方面也赶上了 OS X。
虽然指针有 64 位长,但在 ARM64 上,只有 33 位用于指针自己的地址。如果我们能够可靠地解密其余的指针位,我们就可以使用这个空间来存储额外的数据——就像前面提到的标记指针的情况一样。从概念上讲,这是 Objective-C 历史上最大的变化之一,尽管它不是一个有市场的功能——因此大多数用户不会知道 Apple 是如何推动 Objective-C 向前发展的。
至于这样一个标记指针的剩余空间可以存储有用的数据,例如Objective-C现在就用它来存储所谓的 引用计数 (参考文献数量)。以前,引用计数存储在内存中的不同位置,存储在为其准备的哈希表中,但是在大量 alloc/dealloc/retain/release 调用的情况下,这可能会减慢整个系统的速度。由于线程安全,该表必须被锁定,因此两个线程中的两个对象的引用计数不能同时更改。然而,这个值是新插入到所谓的其余部分中的。 ISA 指标。这又是一个不起眼,但却是未来巨大的优势和加速。然而,这在 32 位架构中永远无法实现。
有关关联对象的信息,该对象是否弱引用,是否需要为该对象生成析构函数等信息,也被新插入到对象指针的剩余位置中。得益于这些信息,Objective-C运行时能够从根本上加快运行时速度,这体现在每个应用程序的速度上。根据测试,这意味着所有内存管理调用的速度提高了约 40-50%。只需切换到 64 位指针并使用这个新空间即可。
结论
尽管竞争对手会试图传播这样的观点:转向 64 位架构是不必要的,但您已经知道这只是一个非常无知的观点。确实,简单地切换到 64 位而不调整语言或应用程序并没有真正的意义 - 它甚至会减慢整个系统的速度。但新的 A7 使用带有新指令集的现代 ARM64,并且 Apple 不辞辛劳地对整个 Objective-C 语言进行现代化改造并利用新功能 - 因此承诺了加速。
在这里,我们已经提到了 64 位架构是向前迈出的正确一步的大量原因。这是另一场“幕后”革命,苹果将努力不仅在设计、用户界面和丰富的生态系统方面保持领先地位,而且主要利用市场上最现代的技术。
很多不知情的Android/三星用户应该阅读这篇文章,然后躲在角落里。
好吧,我们必须为他们感到难过。多年来,他们为 Android 的悲惨用户体验和用户界面辩解,称自己拥有技术最先进的操作系统和功能,但现在他们发现自己又落后了很多年:)
如果一个人不是一只羊,听广告(而且他很擅长),那么经过亲身经历,他可以形成自己的观点:-)。
我尝试了几乎所有的比赛并形成了自己的观点。
对我来说,我需要一部新的超高性能手机,因为我在上面花的钱不多。那是我需要更低的性能和更低的价格;-)。也许我更喜欢速度较慢、电池更大的手机。
另一方面,新的 procak 对于有很多游戏的 iPad 很有用:-)。
我是 Android/HTC :) 因为 IT 对我来说非常有趣,扎根并将高质量硬件转换为快速战斗机是我的爱好。 iOS 不允许我这样做。 (这甚至没有必要。或多或少,iOS 的设计是为了让一切正常运行,你不需要在那里做任何事情。当我不再喜欢玩的时候,我会买一个苹果并享受它)。但我不明白为什么你们总是像孩子一样互相攻击。苹果和安卓完全一样。这就像比较民主与独裁等等......我在 iPhone 5S 推出时观看了会议,尽管我没有拥有任何 Apple 的任何产品,但我喜欢 64 位和随之而来的其他改进。但这并不是因为我是一个复杂的 honimír trtko,坐在电脑后面追逐 Android 或 Apple,而是因为我看到了进展,不会让我等待太久。礼貌地说,人们应该开始努力工作,这样他们就没有时间处理废话。
来自另一方的建设性贡献:) kiez 这会让剩下 99% android 积极的人睁开眼睛
也许应该先讨论99%的苹果狂热者,然后我们才能进行建设性的对话
非常复杂的事情简单解释一下...谢谢
很棒的文章!是的,我同意 Android/WP 用户应该阅读这篇文章。与其喋喋不休地谈论“64b 在手机中如何毫无用处”……
你手里可能从来没有过wp,否则你不会有这个
自从在移动市场取得第一次成功以来,三星除了抹黑竞争对手之外什么也没做,但本质上,它一直在追随自己的脚步。苹果一直是科技公司的榜样,如果他们只专注于嘲笑和不断误导客户,他们很快就会跌倒。苹果一直走自己的路,而且一直都是一个非常好的时机问题,而这一点是业内许多竞争公司所缺乏的。
可以说,三星正在顺应潮流并充分利用其可能性。他把赌注押在Android上,他有很棒的硬件,他自己做了很多东西,他有很好的支持。与任何掠夺性的亚洲公司一样,它利用了广告的所有可能性。当然,他还会偷窃和复制。 “斜眼”最擅长的是抄袭。他们算得很清楚,比我行我素、一步一步来要便宜得多。作为一家实力雄厚的公司,它完全可以负担得起。然而…
我只是不明白为什么手机的速度不断提高,给我一些你用它做什么的例子,慢慢地提高手机的性能对我来说没有任何意义,但我会删除营销这个词。
游戏,优化不佳的游戏。此外,iPad 3 上的《运输大亨》运行起来并不像在台式机上那样流畅,而且分辨率也不一样。例子。
我只是不明白为什么手机的速度不断提高,给我一些你用它做什么的例子,如果我从中删除“营销”这个词,提高手机的性能对我来说慢慢就没有意义了。
用于视频、音频和图像处理。继续比赛。
任何一个只用 iPhone 打电话、发短信、偶尔阅读或发送电子邮件、偶尔上网的人,都需要 iPhone 4。我相信这样的用户有很多。并不是每个人都需要世界上最好的手机:-)
羊
硬件和软件之间的物理权衡对您来说没有任何意义吗?这让我有点想起19世纪末,当时的物理学家说物理学中的一切都已经被发现了,没有必要继续下去(相对论早十年,量子论早三年) 。
对最好的追求永无止境。有时软件主导,有时硬件主导。但如果其中一个被卡住了,它就不会放过另一个。我们不会对我们的后代如此自私:) 因此,对于您的评论 - 更快的手机将启用更强大的应用程序,这将能够比驱动器做更多的事情。曾经的事情即使是今天的计算机也无法满足。未来是令人兴奋的。
确切地 :)
好文章,但我不明白为什么苹果不在 A7 中配备 2GB RAM。是的,iOS多任务处理并不一定需要2GB,但是考虑到内存指针长度的两倍,它会更合适。
但除此之外,我同意 64 位处理器对于手机来说是“不必要的”,就像视网膜显示屏或光学鼠标而不是球是不必要的一样 - 所有这些发明都被标记为“不必要”,但在我看来正确的词是“永恒”,因为一旦到来,苹果并不害怕拿出新的东西。
我同意那个。不幸的是,即使是“无用”也不是一个准确的表达。不必要的意思是人们不知道其优先级的东西。这绝对不是真的。速度可能不需要这么快,但它一定会认的。而当软件赶上硬件时,就会再次有改进的空间。
当然,我赞成,我的意思是 iP5 确实是一款速度相当快的智能手机,因此 5S 根本不必是 64 位。但有一天,有人必须再次处理这个问题,而这个人就是苹果,而且就是现在。从我记事起,专家们就一直在谈论 64 位处理器即使在计算机中也毫无用处。
对于我这个差点考完的IT外行来说,结论很重要。整篇文章(有评论支持)对我来说似乎很有见地,虽然我无法解释它,但具有 7 位架构的 A64 是向前迈出的一步。感谢您的信息。
我会编辑文章的标题,因为这是一种营销举措。每一项创新本质上都是一种营销举措。 :-)
我不这样认为。例如,三星就采用了营销举措。它们带有 RAM,而 iPhone 根本不需要 RAM。他们逃脱了根本无法使用的功能。他们故意提高处理器性能以进行测试。 ETC。这就是营销,虽然是的,它具有误导性,但他们不应该侥幸逃脱;)