歴代iOSデバイスのGPUまとめ - GPU Family と Metal Feature Sets


Metalはハードウェアと密接したAPIなので、「iOS xx以上で利用可能」といったiOSのバージョン以外に、「GPUファミリー」(GPU Family)というハードウェア面からの区分も考慮して利用可否を判断する必要があります。

それらの情報はAppleの公式ページに載ってはいるのですが、あっちこっちのページに散らばっている 1 ので、それらを統合してみました。

各iOSデバイスとGPU Familyの対応

歴代iOSデバイスのGPU(SoC)と、その属するGPU Familyをまとめました。

GPU Familyの欄に"3"とあれば、"iOS GPU family 3"を意味します。

Metal対応デバイス

SoC GPU Family Devices
A11 4 iPhone X, iPhone 8 & 8 Plus
A10X 3 iPad Pro 12.9-inch (2nd) & iPad Pro (10.5-inch)
A10 3 iPhone 7 & 7 Plus
A9X 3 iPad (5th), iPad Pro (12.9-inch, 9.7-inch)
A9 3 iPhone 6s, 6s Plus, SE
A8X 2 iPad Air 2
A8 2 iPhone 6 & 6 Plus, iPad mini 4, iPod Touch (6th)
A7 1 iPhone 5s, iPad Air, iPad mini 2 & 3
  • A7以降は Metal & OpenGL ES 3.0 compatible
    • A7以降の iPod Touch (6th) 以外は OpenGL ES 2.0 も compatible

Metal非対応デバイス

SoC GPU Devices
A6X SGX 554MP4 iPad (4th)
A6 SGX 543MP3 iPhone 5 & 5c
A5X SGX 543MP4 iPad (3rd)
A5 SGX 543MP2 iPhone 4s, iPad 2, iPad mini, iPod Touch (5th)
A4 SGX 535 iPhone 3GS & 4, iPad, iPod Touch (3rd & 4th)
  • A6以前はOpenGL ES 2.0 compatible

(参考ページ)

Metal Feature Sets

前項で示したデバイスの区分GPU Familyと、iOSのバージョンを加味して定義されたMetalの機能セットの区分を示すMTLFeatureSetという型があります。

enum型で、以下のcaseが定義されています。

case @available ハードウェア/iOSバージョン
iOS_GPUFamily1_v1 0 iOS 8.0 A7 / iOS 8
iOS_GPUFamily2_v1 1 iOS 8.0 A8 / iOS 8
iOS_GPUFamily1_v2 2 iOS 9.0 A7 / iOS 9
iOS_GPUFamily2_v2 3 iOS 9.0 A8 / iOS 9
iOS_GPUFamily3_v1 4 iOS 9.0 A9, A10 / iOS 9
iOS_GPUFamily1_v3 5 iOS 10.0 A7 / iOS 10
iOS_GPUFamily2_v3 6 iOS 10.0 A8 / iOS 10
iOS_GPUFamily3_v2 7 iOS 10.0 A9, A10 / iOS 10
iOS_GPUFamily1_v4 8 iOS 11.0 A7 / iOS 11
iOS_GPUFamily2_v4 9 iOS 11.0 A8 / iOS 11
iOS_GPUFamily3_v3 10 iOS 11.0 A9, A10 / iOS 11
iOS_GPUFamily4_v1 11 iOS 10.0 2 A11 / iOS 11

より詳細な機能ごとの表がPDFで公開されています。

たとえば、この表のFeaturesの2列目にMetal Performance Shaders(以下MPS)があります。これは、iOS 10でCNN (Convolutional Neural Network) まわりの機能が追加された、かなり魅力的なフレームワークですが、上記表で見ると、iOS_GPUFamily1_vxは、MetalKitはサポートしているものの、MPSはサポートしていません。つまり、GPU Family 1に属するiPhone 5sではMTKViewを使った画面の描画はできても、MPSを使ったCNNの計算はできない、ということになります。

コードからMetalフィーチャーセットの利用可否を判定する

MTLDevicesupportsFeatureSet(_:)メソッドを利用します。

func supportsFeatureSet(_ featureSet: MTLFeatureSet) -> Bool

引数には前述したMTLFeatureSet型の値を渡します。

Metal の Device Capability

Device Capabilityでmetalを指定することもできます。


  1. たとえばMTLFeatureSetのcaseそれぞれが示しているハードウェア/iOSバージョンを調べようと思うと、各caseのページに飛んで"Discussion"の欄を見る必要があります。。 

  2. iOS_GPUFamily4_v1はA11 / iOS 11で利用可能な機能セットを示すが、このcase自体はiOS 10以降で利用可能