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型处理....对于简单的算法而已会更加耗时(如:灰度算法)

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

原文地址:https://www.cnblogs.com/stratrail/p/3201109.html