我第一次使用Accelerate框架来实现一些向量化代码到iOS应用程序的目标。我从来没有尝试过使用Objective C或C中的向量来处理任何事情。在使用MATLAB的一些经验的时候,我想知道使用Accelerate确实是一件多么痛苦的事情。假设我想计算以下内容:使用Accelerate框架编码矢量
b = 4*(sin(a/2))^2
其中a和b是向量。
MATLAB代码:
a = 1:4;
b = 4*(sin(a/2)).^2;
然而,当我看到它通过文档一些随地吐痰后,情况大不一样使用加速。
我的C语言实现:
float a[4] = {1,2,3,4}; //define a
int len = 4;
float div = 2; //define 2
float a2[len]; //define intermediate result 1
vDSP_vsdiv(a, 1, &div, a2, 1, len); //divide
float sinResult[len]; //define intermediate result 2
vvsinf(sinResult, a2, &len); //take sine
float sqResult[len]; //square the result
vDSP_vsq(sinResult, 1, sqResult, 1, len); //take square
float factor = 4; //multiply all this by four
float b[len]; //define answer vector
vDSP_vsmul(sqResult, 1, &factor, b, 1, len); //multiply
//unset all variables I didn't actually need
老实说,我不知道什么是最糟糕的位置:跟踪的所有中间步骤,试图记住的参数是如何在VDSP通过关于VecLib(完全不同),或者花很多时间做一些非常微不足道的事情。
我真的很希望我在这里错过了一些东西,大多数步骤可以合并或缩短。任何关于编码资源的建议,良好的编码习惯(从书本上学习都很难)等等,都是非常值得欢迎的!你们如何处理多行向量计算?
如果这个库需要2个被指针传递的变量来执行简单的划分,我会说库很糟糕。或者也许有一个你没有使用的非矢量分割。 – Shahbaz 2012-04-20 16:12:51