[MetalKit]45-Using eGPUs with Metal 在 eGPU上使用 Metal

本系列文章是對 metalkit.org 上面MetalKit內容的全面翻譯和學習.macos

MetalKit系統文章目錄編程


對於那些像我同樣須要原生 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 Macpost

我直接去買了一個 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,等等:

下次見!

相關文章
相關標籤/搜索