2017-08-23 10 views
1

XMVector4Dot lists the return value as a vectorのマニュアルです。また、ドットプロダクトが各コンポーネントに複製されることも記載されています。ドットプロダクトが単一の値になることを考えれば、これは浮動小数点を返すだけでどのように利点がありますか?不要と思われるXMVector4Dotは、ドットプロダクトがそのコンポーネントにコピーされたベクトルを返すのはなぜですか?

 XMVECTOR w = { -XMVectorGetX(XMVector4Dot(x, eye)), -XMVectorGetX(XMVector4Dot(y, eye)), -XMVectorGetX(XMVector4Dot(z, eye)), 1 }; 

:私は値を取得するために見ることができます

唯一の方法は、このような何かを行うことです。私が見落としている別の理由はありますか?

答えて

1

これは、SIMDの実装に役立ちます。 CPUにはSIMD命令(単一命令の複数のデータ)があります。

これらの命令は異なるレジスタセットで動作し、通常のスカラーレジスタを使用して前後することはかなりのコストがかかります。ドットプロダクトの結果に同じベクトルタイプを使用することで、コードをベクトルに保つのに役立ちました。

また、ベクトルのすべてのコンポーネントにスカラー値をスプライスし、それに複数のデータをスプライトするのはかなり一般的な方法です。構造体配列対配列構造体(AOS対SOA)がSIMDアルゴリズム実装の設計にどのように影響するかを見ることができます。

+0

ここで説明したように、スカラー操作とSIMD操作の間を移動するよりもはるかに効率的なSIMDモードでの操作を維持しやすくなります。ドットプロダクトの結果は本質的にスカラーなので、このアプローチは、(a)その結果を使って「XMVECTOR」を使って何かを続けることができ、(b)ドットプロダクトに基づく計算を確実にする必要はない特定のチャネルの値を持つこれがどのように行われるかの例が必要な場合は、 '' DirectXCollision.inl''を見てください。 –

関連する問題