Objective c 是否可以将结果存储在vDSP框架中的一个输入向量中

Objective c 是否可以将结果存储在vDSP框架中的一个输入向量中,objective-c,accelerate-framework,vdsp,Objective C,Accelerate Framework,Vdsp,在Accelerate框架的vDSP函数中,所有函数都要求您输入结果向量。如果我不再需要原始输入向量中的任何内容,将输入向量(或其中一个输入向量)作为结果向量传递是否正确 举例说明我的意思: vDSP_vsadd(input_vector,1,scalar_addition,input_vector,1,length); 这将获取输入向量并向所有元素添加标量加法。结果将存储在输入向量中。vDSP中的简单向量操作都能正确地工作(只要它们严格地就位;例如,您不能使用&input\u vector[

在Accelerate框架的vDSP函数中,所有函数都要求您输入结果向量。如果我不再需要原始输入向量中的任何内容,将输入向量(或其中一个输入向量)作为结果向量传递是否正确

举例说明我的意思:

vDSP_vsadd(input_vector,1,scalar_addition,input_vector,1,length);

这将获取输入向量并向所有元素添加标量加法。结果将存储在输入向量中。

vDSP中的简单向量操作都能正确地工作(只要它们严格地就位;例如,您不能使用
&input\u vector[length/2]
进行输出,并期望得到有意义的结果)。事实上,就地使用它们通常会提供更好的性能,因为它可以降低缓存压力


一些更复杂的vDSP操作不支持带有一个或多个参数的就地操作;这应该在vDSP参考指南中提及。

我认为“就地”的意思正是我所描述的——输入向量被更改为输出向量?我对vDSP参考指南进行了快速搜索,发现文档中出现的“就位”次数仅与排序和fft算法有关,这是否意味着较简单的函数不支持“就位”结果向量,或者更简单的函数显然支持“就地”而不需要记录?是的,“就地”是指你所描述的;对于简单函数,应该明确记录,但事实并非如此。@StephenCanon,您是否可以参考vDSP文档,其中有些函数对于就地向量操作是安全的,有些则不是。我真的很难在文档中找到它。@ValeriyVan:正如我在你上面的评论中所说,“应该为简单函数明确地记录它,但不是。”最接近的东西是在标题中的const参数下:如果例程的规范没有说明它改变了参数指向的内存,那么例程就不会通过该参数改变该内存。(当然,如果输出参数也指向同一内存,它可能会改变该内存。这种就地操作允许用于某些vDSP例程,而不允许用于其他例程。)“(ctd)然而,我在Accelerate团队做了13年的工程师,我可以确认,对于所有简单的向量操作,就地操作都得到了官方支持和测试。