本系列文章是对 metalkit.org 上面MetalKit内容的全面翻译和学习.macos
对于那些像我同样须要原生 GPU 性能,却只有一个笔记本电脑,又不想再买一个台式机的人来讲,解决方案彷佛就是外置 GPU(eGPU)。可是 macOS 原来却并不支持 Nvidia 的 eGPU,只有一大堆 AMD 的 GPU 方案。swift
在寻找完美 GPU 的过程当中,我找到了AMD Radeon RX Vega 64。它是目前的高端 GPU,在消费市场全部 GPU 中性能排行第二。Nvidia GPU 只在 TFLOPS 性能上比它领先一点。bash
teraflops (TFLOPS) 芯片可以每秒运行 10 亿次浮点运算。TFLOPS 是科学计算,机器学习及其余须要进行张量计算的工做中很是重要的性能。app
AMD Radeon RX Vega 64 有 4096 个核心,可以提供 12 TFLOPS(单精度)计算能力,处于 Nvidia Geforce GTX 1080 ti 有 3584 个核心 (11 TFLOPS)和新的 Nvidia Geforce RTX 2080 ti 有 4352 个核心 (13 TFLOPS) 二者中间.机器学习
固然,eGPU 也能加速图形应用和游戏,能让你链接外置显示器和 VR 头显。要注意的是,eGPU 须要带有 Thunderbolt 3 接口的 Mac,且系统为macOS High Sierra 10.13.4 及以上。更多信息能够查看网页Use an external graphics processor with your Mac。post
我直接去买了一个 Razer Core X 外置显卡盒,由于 Vega 64 推荐至少 600W 的电源功率,知足这个要求的盒子并很少。Sonnet eGFX更轻一些,可是却更贵。Razer Core X 的宽高和 15” Macbook Pro 一致:性能
此时 GPU 并无用光所有 650W。Vega 64 实际只须要 295W。多余的功率,是为了超频后 GPU 用的,此外,还能够经过 Thunderbolt 3 给你的 Mac 充电。最后,没错,Vega 64 也几乎和显卡盒同样宽同样重,名符其实的怪兽!学习
只要你经过 Thunderbolt 3 把 eGPU 链接到 Mac 上,并启动显卡盒的电源,在菜单栏上就会看到新的 eGPU 图标:测试
在活动监视器中,若是你打开 GPU 历史视图,你会看到列出的全部 GPU -- 集成的,断开的,或外置的:
在系统信息应用中,在图形/显示下面,你也会看到全部的 GPU,以及一些基本信息:
若是你在游戏或须要 GPU 的应用上右键单击,显示简介,你会看到“优先使用外置 GPU”选项:
我安装了 Geekbench 4 就跑了一下基准测试。试用版容许你运行基准测试并在线储存结果,而且只容许你运行 OpenCL 测试。完整版则容许 Dropbox 集成,本地保存结果,还有运行 Metal 测试。
运行一个测试,几分钟后就会完成:
正如指望的那样,Vega 64 的 Metal 测试得分是最高的。下面是排列好的分数列表:
– Metal on Radeon RX Vega 64 – 137651
– OpenCL on Radeon RX Vega 64 – 135711
– Metal on Radeon Pro 450 - 41602
– OpenCL on Radeon Pro 450 - 41578
– Metal on Intel HD 530 – 21888
– OpenCL on Intel HD 530 – 20878
– OpenCL on quad-core CPU - 13867
下一步,就是在这些 GPU 上运行一些 Metal 代码了。在 playground 中添加下面的代码块:
import Metal
let devices = MTLCopyAllDevices()
for device in devices {
print(device.name)
print("Is device low power? \(device.isLowPower).")
print("Is device external? \(device.isRemovable).")
print("Maximum threads per group: \(device.maxThreadsPerThreadgroup).")
print("Maximum buffer length: \(Float(device.maxBufferLength) / 1024 / 1024 / 1024) GB.")
}
复制代码
运行一下,看到一个简单的输出:
AMD Radeon RX Vega 64
Is device low power? false.
Is device external? true.
Maximum threads per group: MTLSize(width: 1024, height: 1024, depth: 1024).
Maximum buffer length: 4.5 GB.
AMD Radeon Pro 450
Is device low power? false.
Is device external? false.
Maximum threads per group: MTLSize(width: 1024, height: 1024, depth: 1024).
Maximum buffer length: 1.5 GB.
Intel(R) HD Graphics 530
Is device low power? true.
Is device external? false.
Maximum threads per group: MTLSize(width: 256, height: 256, depth: 256).
Maximum buffer length: 2.0 GB.
复制代码
这样,你就能够查看设备的更多属性和功能,好比可用内存,可编程采样位置支持,光栅顺序组支持等等。更多信息,请查看 MTLDevice 网页。
苹果提供了两个示例代码项目,来帮助你在渲染和计算管线中进行 GPU 管理:
下面是一些有用的网页资料,关于资源储存模式,关于多显示器和多 GPU,关于 GPU 带宽,关于添加/移除外置 GPU,等等:
下次见!