加速向量中的求和组件

时间:2014-05-18 17:02:24

标签: ios vdsp

我想通过将四个块中的组件相加来从另一个数组创建一个数组,例如:

float inVector[256];
float outVector[64];

for(int i=0; i<64; i++){
  for(int j=0; j<4; j++){
    int k = 4*i + j;
    outVector[i] += inVector[k];
  }
}

我想加速这个。我查看了iOS中可用的库,如vDSP和vForce,但没有找到适合的东西。最接近的候选人是vDSP_vswsum,但这不符合我的要求。有没有人有关于如何加快速度的提示?

2 个答案:

答案 0 :(得分:2)

我的解决方案是使用带有步幅的vDSP_vadd:

vDSP_vadd(inVector,4,inVector+1,4,outVector,1,64);
vDSP_vadd(inVector+2,4,outVector,1,outVector,1,64);
vDSP_vadd(inVector+3,4,outVector,1,outVector,1,64);

user3726960建议的解决方案如下所示

for(int i=0; i<64; i++){
   float out;
   vDSP_sve(inVector+4*i,1,&out,4);
   outVector[i] = out;
}

我的解决方案比原来的双循环快约6倍,而user3726960的解决方案速度提高了约3倍。但是内圈中的元素越多,外圈中的元素越少,他的速度就越快。

答案 1 :(得分:0)

您正在尝试对矢量进行抽取。 N = 4的vDSP_sve将加速你的内循环。 如果你最终想要4个值的平均值,VDSP_mean。