Help us understand the problem. What is going on with this article?

[iOS]MetalでGPUコンピューティング (3) MTLDevice

More than 3 years have passed since last update.

この記事は、Metal Advent Calendar2016の6日目の記事です。

以前にMetalのGPUコンピューティングについて解説記事を書きました。
[iOS] MetalでGPUコンピューティング (1)
[iOS] MetalでGPUコンピューティング (2)

本記事からは、何回かに分けてAppleが提供するGPUコンピューティングのサンプルコードの解説をしたいと思います。

Appleが提供するMetalのサンプルコードにMetalGameOfLifeというものがあります。
MetalGameOfLife

IMG_5933.PNG
(実行画面)

いわゆるライフゲームのアプリですが、Metalの並列プログラミングについての良いデモとなっています。
今後このサンプルコードをベースに、Metalの並列プログラミングの解説を行います。

このサンプルコードは、主に以下のファイルで構成されています。

AAPLRender.h
AAPLRender.m
AAPLViewController.h
AAPLViewController.m
Sharder.metal

このうち、AAPLRender.mには並列コンピューティング及び描画のCPU側のロジックが、Shader.metalには頂点シェーダー、フラグメントシェーダー、GPUコンピューティング用のシェーダーが書かれています。

まず、MTLDeviceについて解説を行います。
MTLDeviceは単一のGPUのインターフェイスです。
MTLDeviceなどのMetal関連の機能の多くははクラスではなくプロトコルなのですが、Metalが動作するデバイス毎にオブジェクトの型が異なるので、実装よりもインターフェイスを重視したためと思われます。
(参考)objc.io

サンプルコードではプロトコルを実装したオブジェクトの生成をAAPLViewController.mで行なっています。
MTKViewがMTLDeviceを実装したオブジェクトをプロパティとして持つ必要があるからです。

AAPLViewController.m
@property (nonatomic, weak) MTKView *metalView;
...
self.metalView = (MTKView *)self.view;
...
self.metalView.device = MTLCreateSystemDefaultDevice();

AAPLRender側ではこれをViewごと受け取り、weakなプロパティに入れておきます。

AAPLRender.m
@property (nonatomic, weak) id<MTLDevice> device;
...
_device = _view.device;

この_deviceを用いて、以下のプロトコルを実装したオブジェクトが生成されます。

  • MTLLibrary
  • MTLCommandQueue
  • MTLBuffer
  • MTLRenderPipelineState
  • MTLTexture
  • MTLComputePipelineState
  • MTLSamplerState

このように、MTLDeviceは様々なMetal関連のオブジェクトの生成に用いるとても重要なプロトコルなのです。

ちなみに、GPUの名前はMTLDeviseのnameプロパティで取得することができます。

NSLog(@"Devise name: %@", self.metalView.device.name); 

例えばiPhone6 Plusの場合、上記はApple A8 GPUと出力されます。

今回はライフゲームのサンプルコード内におけるMTLDeviceの解説を行いました。
次回以降、サンプルコードの他の箇所についての解説を行なっていきます。

yuky_az
「ヒトとAIの共生」がミッションの会社、SAI-Lab株式会社の代表取締役。 東北大学大学院理学研究科修了。理学博士(物理学)。 著書に「はじめてのディープラーニング」、「No.1スクール講師陣による 世界一受けたいiPhoneアプリ開発の授業」。オンライン教育プラットフォームUdemyで、2万人近くを指導する人気講師。
https://sai-lab.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away