Metal矩阵乘法的方案对比

2017-04-25  本文已影响0人  angry_zxy

iOS上矩阵乘法方案

1.基于CPU的加速框架BLAS
2.基于GPU的MPS框架中的MPSMatrixMultiplication库
3.基于GPU的MPS框架中的MPSCNN框架,这个主要用于CNN神经网络方面的,CNN的全连接可以近似为特殊的矩阵相乘

Metal简介

Metal 是针对 iPhone 和 iPad 中 GPU 编程的高度优化的框架。其名字来源是因为 Metal 是 iOS 平台中最底层的图形框架 (意指 "最接近硬件")。
该框架被设计用来实现两个目标: 3D 图形渲染和并行计算。这两者有很多共同点。它们都在数量庞大的数据上并行运行特殊的代码,并可以在 GPU 上执行。

Metal使用场景

目前,Metal 的资源非常有限,并且仅限于搭载了 64 位处理器的 iPhone 和 iPad。但另外一方面,因为 OpenGL 的限制,其性能与 Metal 相比并不占优势,毕竟后者是专门用来解决这些问题的。
如果想要一个 iOS 上高性能的并行计算库,答案非常简单。Metal 是唯一的选择。OpenCL 在 iOS 上是私有框架,而 Core Image (使用了 OpenCL) 对这样的任务来说既不够强大又不够灵活。

MPSMatrixMultiplication使用步骤

1.初始化数组,然后该数组放置到MTLBuffer中
2.构造矩阵,Matrix = MTLBuffer + 描述信息
3.创建运算内核
4.编码内核到command Buffer中
5.提交计算

MPSMatrixMultiplication VS BLAS

MPSMatrixMultiplication VS 全连接

实现

真机测试

iPad耗时对比.png iPhone6耗时对比

结果可以看出,在92 x 2052 * 2052 x 1的矩阵相乘中,BLAS的速度最快,但并不能说明GPU处理速度没有CPU快,GPU适合处理大矩阵运算。
运算耗时取决于运算的次数,一般来说,运算次数计算如下:

rowsA × columnsB × (columnsA + (columnsA - 1))

在测试中发现,数量级大于1e10的时候,建议使用MatrixMultiplication,这个数值的大小跟CPU,GPU的性能有关,不同的设备临界值会有差异。

Demo

参考文章

Matrix Multiplication with Metal Performance Shaders
Metal

上一篇 下一篇

猜你喜欢

热点阅读