加速器在哪里?

2021-08-08 19:53:12

上周,我一直试图掌握两种使应用程序在 Apple 新 M1 芯片上运行得更快的技术:使用汇编语言的并行处理,以及 Apple 丰富而广泛的 Accelerate 库中的功能。两者都不是直截了当的,主要是因为文档。 Arm 提供了大量关于其处理器设计特性的文档,其中包括对其指令集和架构的详细说明,通常以 50 MB 或更多的 PDF 格式运行数千页。除了庞大的体积之外,这些的最大障碍在于它们在每个处理器架构中都是通用的,而且没有一个特定于 Apple 内置于其 M1 芯片中的内核。因此,确切地找出哪些有效,哪些无效是一次探索之旅。尽管它很吸引人,但它也需要时间、大量的 PDF 浏览和实验。如果您不相信我,那么请阅读 Apple 的简洁文章,并准确告诉我 Arm 的哪些参考手册适用于 M1 中的内核。甚至 Apple 也回避这一点,提供了一个指向 Arm 开发者网站顶级的链接。对于绝大多数开发人员来说,尝试直接访问 M1 是不可能的,因此他们希望 Apple 能够促进这一点;在许多数字和相关功能的情况下,这些都包含在 Accelerate 和相关库中。近年来,Apple 一直在不遗余力地解释这些广泛的系列,这些系列主要由其 Vector & Numerics 团队设计。该团队的成员于 2018 年在 WWDC 上发表讲话说:“Accelerate 易于使用。大多数时候它只是一个函数调用,工作就完成了。”第二年,他们又收到了一个好消息:“Accelerate 的库非常强大,但到目前为止,它们的界面对 Swift 开发人员来说并不是那么友好。我们研究了四个库并创建了新的 Swift 友好的 API,使在 Swift 项目中使用 Accelerate 变得非常容易。请访问我们的网站,我们提供涵盖整个 Accelerate 框架的示例、文章和大量参考资料。”他们今年再次出现,尽管这次简短的介绍主要针对那些使用 C++ 的人。所以我首先开始探索文档,就像任何人一样。从一些引人入胜的优秀介绍性文章中,我决定更详细地研究几个函数,包括一个计算两个短向量的点积的函数。在你惊恐地举起双手并点击更容易理解的东西之前,让我解释一下,这只不过是基本的算术。例如,如果您有两个长度为 4 的向量,其中包含单精度浮点数,要计算它们的点积,您只需将四对对应的数字(每个向量中的一个)相乘,然后将这些乘积相加到一共。这可能看起来很乏味,但这是一个普遍的要求,并且非常适合并行处理。

因此,我打开了 Xcode 的文档,找到了 simd 部分,并选择了我感兴趣的数据类型,Single-Precision Floating-Point Vectors,这就是我所看到的。我很高兴地报告,当前的 Xcode 测试版确实对此进行了概述,尽管这更令人困惑,因为它指出许多功能以三种变体提供:默认变体、精确变体和快速变体.然后它就停止了,根本没有列出或详细说明任何功能。也许,有时会发生,函数列表在文档的其他地方。所以我搜索了至少出现在一个例子中的点向量调用。但是 Xcode 的文档报告没有结果。在这个阶段,一种方法是输入一些代码并使用 Xcode 的自动完成功能和字母表中的字母来发现哪些函数知道。这很乏味,但现在很多时候让我摆脱困境。相反,我转向了出色的第三方产品 Dash,几年前苹果公司惊人地将其踢出了其 App Store,大概是因为它太有用了。 Dash也不例外,它的搜索也是一片空白。所以我真的在想象这一切。就在那时,我回去重读了其中一位工程师的话,他提到“请访问我们有样品的网站”……我在这里找到了这个网站,还有那篇介绍性文章,这让我找到了 Apple 的真实的文档。忽略显而易见的事实,即 Apple 认为传递给文档的内容如此之少以至于令人尴尬,为什么这些都没有被纳入 Xcode?如果本地存储空间太大,为什么 Xcode 不链接到这些在线页面?

在最近的 WWDC 上专门针对 Accelerate 及其相关产品(如 simd)进行了三场会议,并承诺提供“广泛的参考资料”,为什么 Apple 不仅将这种光隐藏在蒲式耳下,而且还隐藏了蒲式耳? Posted in Macs, Technology and tagged Accelerate, Apple, ARM, developer, documentation, SIMD, Xcode。为永久链接添加书签。