• vDSP加速的应用


    vDSP 是IOS提供一系列加速处理算法。。在优化时可以考虑应用一二。。。

    1、在项目中加入Accelerate.framework库

      点开项目属性->Build Phases->Link Binary With Libraries->+ Accelerate.framework;

    2、在应用的类头文件加上引用

    #include <Accelerate/Accelerate.h>

    3、查找对应函数应用

       所有函数可以在该文档查找 vDSP Reference.

       以下通过对图片的叠加算法进行测试.... 

    //无vDSP叠加算法
    void NormalEx( BYTE *InputPtr, BYTE *CompositePtr, floatrat,int width,int height)
    {
        for(int j=0;j<height;j++)
        {
            for(int i=0;i<width;i++)
            {
              InputPtr[BLUE] =    (1 - rat) * InputPtr[BLUE] + rat * CompositePtr[BLUE];
              InputPtr[GREEN] = (1 - rat) * InputPtr[GREEN] + rat * CompositePtr[GREEN];
              InputPtr[RED] = (1 - rat) * InputPtr[RED] + rat * CompositePtr[RED];
                InputPtr+=4;
                CompositePtr+=4;
            } 
    }
    //应用vDSP叠加算法 void NormalEx( BYTE *InputPtr, BYTE *CompositePtr, float rat,int width,int height) { int count=width*height; // alloc space for our dsp arrays float * srcAsFloat = (float*)malloc(count*sizeof(float)); float * comAsFloat = (float*)malloc(count*sizeof(float)); float inrat=1 - rat; for (int i=1; i<4; i++) { //转成float数组 vDSP_vfltu8(InputPtr+i,4,srcAsFloat,1,count); vDSP_vfltu8(CompositePtr+i,4,comAsFloat,1,count); //乘法 vDSP_vsmul(srcAsFloat, 1, &inrat, srcAsFloat, 1, count); vDSP_vsmul(comAsFloat, 1, &rat, comAsFloat, 1, count); //相加 vDSP_vadd(srcAsFloat, 1, comAsFloat, 1, srcAsFloat, 1, count); // 转回byte vDSP_vfixu8(srcAsFloat, 1, InputPtr+i, 4,count); } free(srcAsFloat); free(comAsFloat); }

    4、总结

      vDSP在实际应用需要转化成float或者double型处理....对于简单的算法而已会更加耗时(如:灰度算法)

          实际应用在需要批量重复简单操作的算法中会有显著提速效果............

  • 相关阅读:
    第二阶段冲刺(三)
    第二阶段冲刺(二)
    第二阶段冲刺(一)
    阿里云体验:安装jdk
    知识储备
    wcf服务编程(二)
    wcf服务编程(一)
    操作xml练习
    操作文件简单的方法
    【mongoDB】学习笔记_02
  • 原文地址:https://www.cnblogs.com/stratrail/p/3201109.html
Copyright © 2020-2023  润新知