2

私が次のものを持っているとしましょう

struct A
{
    __m256 a;
}
struct B
{
    __m256 a;
    float b;
}

ハードコアループで一般的に優れているのは次のうちどれですか(もしあれば、その理由)?

void f0(A a) { ... }
void f1(A& a) { ... } //and the pointer variation
void f2(B b) { ...}
void f3(B& b) { ... } //and the pointer variation
4

1 に答える 1

4

答えはそれは問題ではないということです。

これによれば:

http://msdn.microsoft.com/en-us/library/ms235286.aspx

呼び出し規約では、16バイト(およびおそらく32バイト)のオペランドは常に参照によって渡されると規定されています。したがって、値を渡す場合でも、コンパイラーはその下の参照によって値を渡します。

つまり、XMMおよびYMMレジスタは、Windowsでは値によって渡されることはありません。ただし、XMM0-4の下半分は、64ビットパラメーターを値で渡すために引き続き使用できます。

編集:

値を使用した2番目の例では、参照または値のどちらで渡されるfloatかどうかに影響するため、わずかな違いがあります。b

于 2011-10-21T17:08:39.247 に答える