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 arraysfloat * 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);// 轉回bytevDSP_vfixu8(srcAsFloat, 1, InputPtr+i, 4,count);}free(srcAsFloat);free(comAsFloat); }
4、總結
vDSP在實際應用需要轉化成float或者double型處理....對于簡單的算法而已會更加耗時(如:灰度算法)
? ? ? 實際應用在需要批量重復簡單操作的算法中會有顯著提速效果............
?
?
轉載于:https://www.cnblogs.com/stratrail/p/3201109.html
總結
- 上一篇: java中的hashcode方法作用以及
- 下一篇: hdu1257(最少拦截系统 )