真的是性能怪兽!NASA专家细品iMac Pro
原标题:真的是性能怪兽!NASA专家细品iMac Pro
俗话说得好,钱多烧包。每隔一段时间,总会有那么一样产品会对我产生相似的效果 —— 这种产品是那么吸引人,那么让人兴奋,看起来是那么美,它能让我的钱包升温,甚至烧起来。最新的 iMac Pro 就是这样一种产品。
承蒙苹果的美意,他们给我发了一台 128GB,十核版本的 iMac Pro 以便测试和评估。我花了不到一周的时间使用这台机器,在航空航天工程和软件开发领域进行我日常的工作流程,另外也运行了一些跑分和测试。iMac Pro 在性能和生产力上给我留下了强烈的印象。我会在下文中给出其中一些结果,但我还需要说的是 iMac Pro 在视觉上也给了我很深的印象。尽管它在造型和尺寸上看起来很像近些年来的 27 英寸 iMac,但 iMac Pro 是第一款采用深空灰配色的(还有对应配色的键盘、鼠标和触控板),这让它看上去很棒,很有商务的感觉。和我那台银色的 iMac 放在一起,iMac Pro 盘踞在一旁就好像沉默的达斯·维德,正准备要砍翻几个人。
iMac Pro 的机身下也同样非常可观,它拥有的是十核的英特尔至强 W-2155 处理器,主频 3.0GHz(通过睿频可加速到 4.5GHz)。这是英特尔最新发布的一款工作站级别的至强处理器,用以填补其消费级 Core i9 和服务器级至强 Scalable 之间的空白。如果你希望拥有 Core i9 的性能但内存容量更大,核心数更多,却又不需要至强 Scalable 那么全面的能力,至强 W 系列就是对像 iMac Pro 这样的机器最理想的选择(它提供八核、十核、十四核和十八核四种版本)。至强 W 还是在 Mac 中第一款支持英特尔 AVX-512 向量处理的处理器,这将其向量寄存器的向量长度提高到了 512 bit(提升自 AVX2 的 256 bit),并将向量寄存器的数量倍增到每核心 32 个(提升自 AVX2 的 16 个)。我会在下文中更多地讨论此事。
我的测试机中的十核处理器拥有每核心单个 13.8MB 的 L3 缓存以及 1MB 的 L2 缓存,该机型搭载的是 128GB 的 2666MHz DDR4 ECC 内存,一块 2TB SSD 硬盘(拥有硬件级别的线路速率加密),以及显存为 16GB 的 AMD Radeon Pro Vega 64 图形芯片集。与此搭配的是冲击力极强的 5120×2880 视网膜“5K”显示器,iMac Pro 可说是一个图形动力室 —— 我不断为一切被渲染得如此清晰干净,却又对性能没有明显的过度占用或影响感到惊奇。曾经我在将复杂的 3D 数据集进行视觉化时,不得不在性能或细节中二选一,而 iMac Pro 两边都能满足。即使仅仅是使用 Xcode 或终端来工作的时候,屏幕的清晰和高亮度都能让眼睛感到很舒适。
计算流体动力学
那么现在就来做一些测试吧,这些测试基于对空气动力学设计和开发所需的计算流体动力学(CFD)的使用。在这类工作中,我使用的是 NASA 提供的名为 TetrUSS 的 CFD 工具,还有被普遍使用的 NACA 0012 airfoil 来打造运输类飞机的通用研究模型(CRM)的几何结构。
CFD 的一种典型用法是评估航空航天飞行器,诸如火箭或飞机的空气动力表现。该流程的第一步是从 CAD 定义中创建飞行器的几何网格模型。这本质上能让我们将问题分解为成百万个小单元,以便通过数值来模拟气流的物理表现。类似的流程被用在工程分析的其他领域还包括结构和热传导。另外虽然和模拟无关,OpenGL 游戏程序员也很了解用三角形或四边形为 3D 物体创建网格模型的流程,因为这能够打造一个能够反映光影、着色和其他视觉效果的实体模型。
为了进行单核测试,我们首先从生成一个由 237660 个三角形组成的 CRM 翼-体-尾外形的表面网格模型开始。
iMac Pro 在这项测试中的耗时结果看上去非常好(下方图标中的最后一栏),在我过去五年里测试过的十个系统中它是最快的,而且差距明显。
时间以秒计,越短越好
CFD 流程的另一个关键部分是实际的数值模拟,我们要对网格模型上通过的气流进行运算。通常来说,这些模拟是要在超级计算机集群上运行的,使用 500 至 2000 个核心或更多,整个过程有时要耗费数天或数周。较小的实例可以运行在诸如 iMac Pro 这样的多核心台式电脑上,特别适合那些小型企业用户以及学术界人士(通常实例的规模会受到内存的限制,但这对 iMac Pro 的 128GB 来说不是问题 —— 它可以应对大多数有实际意义的实例)。
和网格模型生成不同,气流模拟很考验并行处理,使得它成为理想的多核心测试指标。在这里,我们通过 NACA 0012 airfoil 计算气流。结果通过示意图来展示运算时间(以秒计),并和所使用的核心数量进行对比。在一部分机器中,最大可用的核心数量为十二核。在同一组系统中,iMac Pro(底部的红线)再一次取得了最好的成绩,在最多到十个核心的对比中,它的耗时很明显是最短的。
X 轴是所用核心数,Y 轴是以秒计的耗时
我还关注了一下扩展表现,这部分很有趣,因为它能够显示出许多和计算机架构有关的东西。和很多人预期的不同,将更多的核心投入到一个问题中并不总是最完美的答案 —— 从某一点开始各个核心之间会开始争夺各种系统资源,比如内存和硬盘,你也能够从上面的图表中看到曲线是会渐渐平缓的。下面的图表通过计算每一台接受测试的电脑采用多核时,对比单核的速度增幅(单核耗时除以多核耗时),更清楚地体现了这一点。作为参考,理想的曲线以虚线显示。在这个对比中,iMac Pro(红色曲线)的表现和竞争对手们基本相似,使用全部十个核心时有 6.7 倍的速度提升。如果能让十八核版本的 iMac Pro 运行同样的测试肯定会很有趣,但可惜的是,它们直到明年一月才出货。
X 轴是所用核心数,Y 轴是多核与单核的速度比值
软件开发
另一个对我来说很重要,但同时又难以量化的测试项目是软件开发。我倾向于使用 C 和 Fortan 编译器在终端上做我大多数工程和 CFD 相关的软件开发工作,但在 iOS 和 Mac 应用的开发上我最常用的却是 Xcode。几个星期以前,我忙于调试一个异常棘手的 MapKit 分块渲染 Bug,与此同时还要为 iPhone X 准备好我的 AR 应用 Theodolite,我很确信在那几天之内我按了 Xcode 的 Build/Run 好几千次(至少感觉上是这样)。当你进入一个涉及到大量编译工作的高强度开发或调试阶段时,这儿省几秒那儿省几秒,加起来一天就能多出几个小时了。十核 iMac Pro 在这个方面大放光彩,特别是当它结合 Xcode 能够自动利用多核心去同时编译多个源文件的能力时更是如此。
绝大多数我的应用有 20000 至 30000 行代码,分布在 80 至 120 个源文件中(大部分是 Obj-C 和 C,混合极少量 Swift)。有太多变量会影响编译表现,所以很难提出一种普遍适用的测试标准,因此我就简单地描述一下,当我将 iMac Pro 和我的 2016 版 MacBook Pro 和 2013 版 iMac 对比时,我注意到编译耗时有了 30% 至 60% 的减少。如果你开发 iOS 应用,仍会注意到在模拟器或在设备上安装或启动应用存在瓶颈,但在开发 Mac 应用时,反复的代码-编译-调试循环会有相当明显的提升。
AVX512 向量处理
我长年以来醉心于向量化,从上世纪 90 年代的 Cray 超级计算机开始,到进入 2000 年后 PowerMac G4 和 G5 中的 AltiVec。所以我很高兴能够听到 iMac Pro 在向量处理上了有了很大飞跃。
向量化是一种单指令多数据(SIMD)处理的形式,处理器能够同步地在一个“向量”内执行多个数据元素的运算。与此相对的,常见的“标量”代码一次只能执行单个数据元素。标量代码的经典例子是如下所示的循环,我们将数组“a”的元素加上数组“b”的元素,并将结果储存在数组“c”:
for (i=0;i
<="" span="">
c=a+b;
}
当我们这样循环的时候,我们一次只处理一个数据元素。如果你也了解这方面,就会知道每一次循环都需要两次负载,加法和存储 —— 四次运算 —— 因此我们在这个标量循环中就有总共 4*N 次运算。现在,因为 iMac Pro 的处理器每个核心都有了 AVX-512 向量处理器,我们就可以形成支持 16 字节单精度(32 位)浮点数或 8 字节双精度(64 位)浮点数(或当使用整数时的等量)。如果我们假设范例中的数组是双精度,那么使用 AVX-512 向量指令的等量向量循环就会是这个样子:
for (i=0;i
__m512d a_vec = _mm512_load_pd(&a);
__m512d b_vec = _mm512_load_pd(&b);
__m512d c_vec = _mm512_add_pd(a_vec,b_vec);
_mm512_store_pd(&c,c_vec);
}
我们还是需要两次负载,通过每次循环就有一次加法一次存储,但因为我们是通过每个支持 8 字节双精度的向量运算的,我们每一次就能增加 8 个循环,所需的总运算量就是 4*N/8 —— 之前的八分之一!。
你可能会马上期待一个八倍的性能提升,但实际上这个涨幅太理论化了,现实中不会有那么多。误差的多少取决于很多因素,比如数据大小,它是否能适合不同的缓存或分配入 RAM 中,等等。但在这个例子中,我们取 N 为 512,结果也很棒了。AVX-512 带来的速度提升是 5.2 倍。作为对比,我也总结了 AVX2 的测试结果,它使用 256 bit 宽向量,一次可支持 4 次双精度运算。这最终带来了 3 倍的速度提升。虽然我不会给出具体的代码细节,但如果是使用单精度浮点数进行同样的测试,AVX-512 的速度提升是 10.1 倍,而 AVX2 则为 6.3 倍。
一个需要注意的重要细节是,在上文的代码范例中为了方便说明(也为了在测试时能有明确的控制),我使用了原有的 AVX-512 向量指令。实际上,现在的编译器很擅于对合适的标量循环进行自动向量化,且在大多数情况下,你除了选择更高层的优化(通常是 -O2 或 -O3)以及指定正确的架构和/或指令集标记外不需要做任何事。另一个可选项是链接到向量优化库。英特尔的 Math Kernel Library(MKL)对 AVX-512 进行了高度优化,我被告知苹果的 Accelerate 框架也已经针对 AVX-512 进行了优化(更多的改进未来还会有)。
总结
最显而易见的问题,其实我以上的测试并没有直接给出答案,即 iMac Pro 和往年的标准版 iMac 相比,性能究竟如何。这里最相近的直接对比是我的 2013 版 iMac,但和它相比已经落后几代了。即便如此,我还是拿到了一些关于 2017 版 iMac 的 4.2GHz 四核 Core i7 处理器的有限资料。尽管 2017 版 iMac 在单核表现上比 iMac Pro 稍快一些,但随着更多核心的参与,性能表现渐渐持平,到四核的时候 iMac 的优势不再。从四核到十核,iMac Pro 一路绝尘而去。如果你要利用 AVX-512(标准版 iMac 不支持),iMac Pro 更是直接超越。这样的强化是 iMac Pro 的其中一个主要优势 —— 工作站级别的处理器相比标准版 iMac 所能提供的,可以利用更多的核心,更先进的处理功能,以及更大、扩展性更强的性能极限。另一个关键优势是内存容量和图形能力。如果你的工作能受益于其中任何一样,那么 iMac Pro 就是自然而然的选择。
我写稿时,苹果仍然没有公开 iMac Pro 产品线的完整价位,只提到搭载八核处理器、32GB 内存、1TB SSD 和 Vega Pro 56 图形芯片集的基本款起售价是 4999 美元。价位上最相近的对比是 27 英寸 iMac,售价 3699 美元,但处理器和图形芯片集差了太多。少了四个核心,整体上还有其他劣势。因此结合上文来看,多花 1300 美元入手 iMac Pro 是根本不需要考虑的。有趣的是高端机型究竟会是怎样的价格,尤其是十八核版本,但如果按照入门级的价位这么延伸下去,那对那些想要购买工作站级 Mac 的人们来说可是一大笔钱。只要注意,钱包可别烧起来就行了。
阅读全文
下一篇:胡应臣同志逝世
相关阅读
- 12-22胡应臣同志逝世
- 12-22真的是性能怪兽!NASA专家细品iMac Pro
- 12-22新华社:可以考虑适当延长资管新规过渡
- 12-22普及无障碍设施 需社会形成合力
- 12-22《首席增长官》
- 12-22追寻初心,让红色基因融入血脉