美文网首页
Metal矩阵乘法的方案对比

Metal矩阵乘法的方案对比

作者: angry_zxy | 来源:发表于2017-04-25 15:37 被阅读0次

    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

    • BLAS处理小型矩阵快,MPSMatrixMultiplication处理大矩阵快,临界值取决于设备,运算数据等条件
    • BLAS是直接操作数组,MPSMatrixMultiplication处理数组时,需要把数据load到MTLBuffer中,取出结果需要copy或者使用指针,另外MTLBuffer大小为256MB
    • BLAS使用Double类型,MPSMatrixMultiplication使用float32类型,BLAS精度更高
    • BLAS对方阵有优化,即使矩阵很大,速度可能比MPSMatrixMultiplication快
    • MPSMatrixMultiplication在矩阵列为4的倍数时候,性能最佳

    MPSMatrixMultiplication VS 全连接

    • 全连接运算速度很快,使用float16,所以精度损失了一些,实际上做的是矩阵乘法的近似运算,在三种方案中,误差是最大的
    • 全连接运算在每次创建全连接对象后,权重矩阵不能更改,对于有相同的权重矩阵的运算来说,是比较合适的

    实现

    真机测试

    • iPad Air 2 Wi-Fi
      参数:苹果 A8X芯片,处理器三核, GPU八核
    • iPhone 6
      参数:苹果 A8+M8协处理器,双核,GPU是四核增强版PowerVR GX6450
    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

    相关文章

      网友评论

          本文标题:Metal矩阵乘法的方案对比

          本文链接:https://www.haomeiwen.com/subject/qkxvzttx.html