加速框架“签到”功能
Posted
技术标签:
【中文标题】加速框架“签到”功能【英文标题】:Accelerate framework "sign" function 【发布时间】:2015-04-22 17:01:29 【问题描述】:我正在尝试找到一种超级快速的方法来获取向量中每个值的符号。我希望在加速框架中找到一个功能来执行此操作,但找不到。这是它的作用:
float *inputVector = .... // some audio vector
int length = ...// length of input vector.
float *outputVector = ....// result
for( int i = 0; i<length; i++ )
if( inputVector[i] >= 0 ) outputVector[i] = 1;
else outputVector[i] = -1;
【问题讨论】:
标准 C/C++ 数学函数是signbitf
。您可能需要对负零进行更正,但在大多数情况下,这应该足够了。
【参考方案1】:
好吧,我想我已经找到了办法……
vvcopysignf() "复制一个数组,根据第二个数组设置每个值的符号。"
因此,一种方法是创建一个 1 数组,然后使用此函数根据输入数组更改 1 的符号。
float *ones = ... // a vector filled with 1's
float *input = .... // an input vector
float *output = ... // an output vector
int bufferSize = ... // size of the vectors;
vvcopysignf(output, ones, input, &bufferSize);
//output now is an array of -1s and 1s based the sign of the input.
【讨论】:
用 dispatch_benchmark 运行一些测试——这个方法比问题中描述的循环快 80%。甚至比使用 signbit() 更快以上是关于加速框架“签到”功能的主要内容,如果未能解决你的问题,请参考以下文章