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
(参考ページ)
- MTLFeatureSet - Metal | Apple Developer Documentation
- iPad - Compare Models - Apple
- Hardware GPU Information - iOS Developer Library
- Mac OS X Metal の対応 GPU
- 歴代 iPad の CPU/GPU 速度の比較と iPad Pro の速度の目安
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フィーチャーセットの利用可否を判定する
MTLDevice
のsupportsFeatureSet(_:)
メソッドを利用します。
func supportsFeatureSet(_ featureSet: MTLFeatureSet) -> Bool
引数には前述したMTLFeatureSet
型の値を渡します。
Metal の Device Capability
Device Capabilityでmetal
を指定することもできます。