iOS的Metal框架是一个类似OpenGL的框架,通过编写shaders(类c代码)运行在GPU上,利用GPU的高并行能力执行并行操作,比如图像处理,卷积神经网络。而MPS就是一套基于Metal框架的库,用户不需要理解Metal的细节,直接调用这些库即可使用高性能处理能力。同时针对卷积神经网络,官方已经提供了MPSCnn库,开发人员可以直接使用该库组件神经网络即可以在移动端iPhone执行神经网络模型,比如图片识别,速度是杠杠的,很多年前,作者曾经利用该库和自己自定义的一些算子实现了实时图片风格化,人物自动抠图等功能,在iPhone上FPS能达到50fps,可见这性能有多好。接下来我们来详细分析下Metal框架及MPS。
OpenGLES
由于Metal和OpenGLES类似,我们先介绍大家更加熟悉的OpenGL
这个图里开发者需要重点了解3个模块
-
顶点着色器
开发者用来自定义顶点信息(坐标和颜色),是一段代码。Vertex shader就是调整顶点信息,比如透视图变换,Camera位置调整。有多少个顶点就会调用多少次,如果顶点较少,这里执行较慢的话,性能影响不大。
-
栅格化
- 简单来说,比如你告诉GL我想画条线,然后告诉它线的端点坐标是(0,0)和(0,100),那么GL自动脑补出中间100个点的坐标,这个过程就叫栅格化(光栅化),脑补的方法叫线性差值.
- 复杂点,现在我要画个三角形,给他三个顶点的坐标,它会计算这个三角形里面的所有像素坐标。
- 再复杂点,不仅仅给顶点坐标,还告诉他(0, 0)坐标