0

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

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,但这不是我想要的。有没有人有关于如何加快速度的提示?

4

2 回答 2

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 倍。但是内部循环中的元素更多而外部循环中的元素更少,他可能会更快。

于 2014-06-12T06:28:47.820 回答
0

您正在尝试抽取向量。N=4 的 vDSP_sve 将加速您的内部循环。如果您最终想要 4 个值的平均值,则为 VDSP_mean。

于 2014-06-10T16:45:47.770 回答