2

ベクトル/行列/クォータニオンなどのように普及しているものの時間をコンパイルするために表現テンプレートがひどいことをすることを想像できますが、それが非常に高速な場合、ゲームはそれを使用しないのはなぜですか? SIMD 命令がデータ レベルの並列処理を有効に活用できることは明らかです。式テンプレートと遅延評価を一緒に使用することは、少なくとも一時変数を排除することに関しては理にかなっているようです。

そのため、Eigen のようなライブラリはそのような機能を宣伝していますが、これがミドルウェア (Havok など) や非常に速度が重要なゲームで一般的に行われているとは思いません。誰でもこれに光を当てることができますか?非決定論または分岐予測と関係がありますか?

4

3 に答える 3

6

私は多くの理由を考えることができます:

  • コンパイル時間がかかります。コンパイル時間が長いということは、コードに加えた変更のテストに時間がかかることを意味します。それは生産性を損ないます。
  • 複雑です。おそらく、チームの多くの開発者は式テンプレートに慣れておらず、それらを読んだりデバッグしたりするのに苦労するでしょう。
  • 多くの場合、ゲームは複数のプラットフォームで動作する必要があり、さまざまなコンパイラにはさまざまな欠点があり、たとえば高度なテンプレートのトリックが問題になる可能性があります。
  • 通常は必要ありません。式テンプレートなしで効率的なコードを記述できます。より冗長になるだけであり、コンパイラに対してより多くの手を握る必要があります。
  • ゲーム開発者は、10 年前にゲームでまだ使用されていなかったものに対して非常に懐疑的です。C++ が十分に優れていなかったからではなく、C++ が「新しい」ものだったからです。ゲーム開発者は非常に保守的です。

そしてもちろん、明らかな質問:どこで式テンプレートを使用するのでしょうか? 本当に価値のあるものにするのに十分な複雑な数学はありますか? ゲームはかなり少数の線形代数操作に依存する傾向があり、通常はいずれにしても手作業で大幅に調整されます。

于 2012-02-26T02:13:53.673 に答える
0

通常、パフォーマンスが重視され、計算量が多く、GPU ではなく CPU で実行される傾向があるゲームの部分は、多数の要素に同じ基本操作を適用しています。いくつかの例は、アニメーションのブレンド、物理計算、可視性テストなどです。

現在のコンソール ハードウェアでこの種の問題を最適化する最善の方法は、一般に、できるだけ多くの作業をまとめてバッチ処理し、データの局所性を最大限に高めてコストのかかるキャッシュ ミスを回避することです。その後、実際の演算は SIMD 組み込み関数を使用して最適化でき、通常は手動で慎重に最適化されます。エクスプレッション テンプレートが提供する種類の最適化は、そのハンド最適化フェーズで比較的簡単に実行できますが、エクスプレッション テンプレートでは提供されない、実行される可能性が高い他のさまざまな重要な最適化があります。多くの場合、この重要なコードには、ターゲット プラットフォームごとにカスタム最適化されたセクションが含まれており、あまり移植性が高くありません。

式テンプレートが広く使用されていない理由は、(jalf で説明されているすべての理由により) ソフトウェアの複雑さを (jalf で説明されているすべての理由により) パフォーマンス クリティカルではないコードに追加するためだと思います。プロファイルの上部に表示される、非常にパフォーマンスが重要なコードです。

于 2012-02-26T20:29:20.520 に答える