M1内存和性能

2020-11-14 09:04:22

M1 Mac现在已经上市了,苹果不仅声称它们绝对是在冒烟,早期的基准测试似乎也证实了这些说法。我并不觉得这令人惊讶,自从Tiger以来,苹果一直高度关注性能,据我所知,从那以后就没有松懈过。M1的一个可能有点令人惊讶的方面是,它只有16G的内存限制。作为一个购买了16千字节的语言卡以在他的苹果上运行Merlin6502汇编器的人,他把他的下一个立方体(与现代的Mac没有什么不同)扩展到了惊人的16MB,这看起来并不是一个很大的限制,但它确实引起了一些恐慌。关于这种局限性可能与苹果在内存和性能方面的开箱即用方法如何促成了M1的非凡成就,我有一个理论上的解释。M1显然是一个包含实际处理器芯片和DRAM的多芯片封装。因此,它在DRAM和处理器之间有一个非常高速的接口,除了绝对庞大的高速缓存之外,这个高速接口是保持各种功能单元可用的关键。内存带宽和延迟可能是当今许多工作负荷的决定因素,一次访问主存可以轻松地占用数百个时钟周期,而CPU能够在每个时钟周期内执行大量操作。正如安德鲁·布莱克(Andrew Black)所写:[.]。计算基本上是免费的,因为它发生在数据获取和数据存储之间的缝隙中。权衡的是,你目前只能在这个套装中容纳这么多的DRAM,但如果它适合的话,它将会非常快。那么,我们如何确保它们都合身呢?在过去15年左右的时间里,苹果可能一直在关注性能,但在内存消耗问题上,他们却完全闭口不谈。当我在那里的时候,我们正在修复32字节的内存泄漏。这种情况只发生过一次,所以不是一次又一次地持续消耗32字节,而是一次性地泄漏32字节。这种近乎痴迷的奉献精神是iPhone一直击败内存两倍的顶级Android手机的原因之一。而且一点也不。另一个原因是iOS团队坚定不移地拒绝采用跟踪垃圾收集技术,而MacOS后来放弃了这项技术,转而采用他们自NeXT Step 4.0以来一直使用的引用计数(RC)技术。随着引用计数操作自动化程度的提高以及弱引用的添加,开发人员的便利性水平与现在的跟踪GC基本上没有什么区别。坚持使用RC的好处是大大减少了内存消耗。事实证明,要让跟踪GC获得与手动分配相当的性能,它需要几倍的内存(不同的研究发现不同的开销,但至少4倍是保守的下限)。虽然我还没有看到一项比较RC的研究,但我个人的经验是,开销要低得多,更容易预测,如果需要的话,通常只需很少的额外努力就可以降低成本。因此,苹果能够承受更多有限的总内存,因为他们需要更少的内存才能让系统运行得更快。所以他们可以做一个系统设计,强加这个限制,但允许他们让记忆变得非常快。好的。与跟踪GC相比,RC的另一个众所周知的限制使其成为第二选择,那就是总是更新这些引用计数的成本很高,尤其是在多线程环境中,这些更新需要是原子的。嗯..。有趣的事实:保留和释放NSObject在当前一代英特尔上需要大约30纳秒,在M1上需要大约6.5纳秒。

-大卫·史密斯(@Catfish_Man)2020年11月10日。

多么?。我们在x86-64上也实现了这一点:)这一进一步的改进是因为无争用的获取-释放原子库的速度与在A14上的常规加载/存储的速度大致相同。

-大卫·史密斯(@Catfish_Man)2020年11月10日。

问题解决了。我想,如果你能制造自己的硅片,那会有所帮助;-)所以苹果专注于控制内存消耗,包括但不限于全力以赴地引用计数,这一点业内其他公司几乎都采用了跟踪垃圾收集的方式,现在正在以一种重大的方式获得回报。太快了吗?)。他们可以在系统中使用更少的内存,这样就有可能让内存变得非常快。而且这一优势是很难复制的。这也意味着,与网络技术相比,原生开发将拥有更大的优势,因为原生应用从速度上受益,并且不存在内存限制的问题,而网络/电子应用将以更快的速度填满内存。