2012-02-26 6 views
1

ベクトル/行列/四元数などのように普及しているものの時間をコンパイルするためにひどいことをする表現テンプレートを想像することはできますが、 SIMD命令はデータレベルの並列処理を活用して大きな効果を発揮することは明らかです。少なくとも一時的なものを取り除くことに関しては、表現テンプレートと遅延評価が一緒になっているように思えます。ゲームで数式テンプレートを使用しないのはなぜですか?

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

+0

SIMDとは何が関係していますか?私はそこに接続が表示されません – jalf

+3

SIMDの命令は表現テンプレートとは関係がありませんし、怠惰な評価もありません。これは、非決定論や分岐予測とは関係ありません。それらの4つのうちの1つでは、表現テンプレートとは何も関係ありません。 –

答えて

5

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

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

もちろん、明らかな質問:ここで、は表現テンプレートを使用しますか?実際にそれを価値あるものにするには十分な複合体がありますか?ゲームは、かなり少数の線形代数演算に依存する傾向がありますが、通常は大変手作業で調整されます。

+3

10年はちょっとかもしれませんが、彼らはもっと良くなっています。今年のメジャーリリースはMSVC 2005で構築されました。:P – ssube

+1

私はコンパイラのバージョンについて話すだけでなく、言語と言語の機能の選択についても話しています。現代のC++コンパイラを使って、Cを書くことも、クラスを使ってC以上のものを書くことも可能です。 – jalf

0

一般的に、GPUではなくCPU上で実行されがちな、性能に敏感で数学的に重大な部分は、同じ基本操作を多数の要素に適用しています。

現在のコンソールハードウェアでこれらの種類の問題を最適化する最良の方法は、一般にできるだけ多くの作業を同時に行い、最大のデータローカリティを目指すことです。高価なキャッシュミスを避けることができます。 SIMD組み込み関数を使用して実際の数学を最適化することができ、通常は慎重に手作業で最適化します。式テンプレートが与える最適化の種類は、手作業の最適化フェーズでは比較的簡単に実行できますが、式テンプレートでは実行できないようなその他の重要な最適化もいくつかあります。多くの場合、この重要なコードには、ターゲットプラットフォームごとにカスタム最適化されたセクションがあり、移植性はあまりありません。

私は、表現テンプレートが広く使われていない理由は、(jalfが説明したすべての理由で)ソフトウェアの複雑さを、それが本当に保証されていない非パフォーマンスクリティカルなコードに追加するからです。プロファイルの上部に表示される実際に重要なコードには必要です。

関連する問題