按值或引用传递v4sf

时间:2014-12-15 08:43:56

标签: gcc optimization sse

通过值或引用传递SSE向量哪个更有效?

typedef float v4sf __attribute__ ((vector_size(16)));

//Pass by reference
void doStuff(v4sf& foo);

//Pass by value
v4sf doStuff(v4sf foo);

一方面,v4sf大16字节。 但是,我们可以处理这些事情,好像它们是单个元素数据,并且引用可能引入一个间接层次

1 个答案:

答案 0 :(得分:2)

通常采用矢量参数的SIMD函数相对较小且性能至关重要,这通常意味着它们应该内联。一旦内联,你是否通过值,指针或引用传递并不重要,因为编译器将优化掉不必要的副本或解引用。

还有一点:如果您认为您可能需要将代码移植到Windows,那么您几乎肯定会想要使用引用,因为有一些无限的ABI限制限制了您可以传递的矢量参数数量(按值) ,即使函数内联。