3

私は 14 歳の頃からゲーム エンジンの本を読んでいます (当時は何も理解していませんでした:P) 数年後、自分のゲーム エンジンの数学的基礎のプログラミングを始めたいと思いました。この「ライブラリ」をどのように設計するかについて、私は長い間考えてきました。(これは「整理されたファイルのセット」を意味します) 数年ごとに新しい SIMD 命令セットが出てきますが、それらを無駄にしたくありません。(これについて間違っていたら教えてください。)

少なくとも次のプロパティが必要でした。

  • 実行時に SIMD があるかどうかを確認し、SIMD がある場合はそれを使用し、ない場合は通常の C++ バージョンを使用できるようにします。(いくらかの呼び出しオーバーヘッドがあるかもしれませんが、これは価値がありますか?)
  • コンパイル時にターゲットが既にわかっている場合、SIMD または通常の C++ 用にコンパイルできるようにします。コンパイラは SIMD と C++ のどちらが使用されているかを認識しているため、呼び出しはインライン化され、相互最適化に適したものになります。

編集 - ソースコードを移植可能にして、x86(-64) 以外のデバイスでも実行できるようにしたい

そのため、プログラムの開始時に静的にして初期化する関数ポインターを使用するのが良い解決策だと思いました。そして、適切な関数 (たとえば、行列/ベクトルの乗算) が呼び出すもの。

この設計の長所と短所は何だと思いますか (どちらがより重要ですか?)。また、上記の両方のプロパティを使用して作成することも可能ですか?

キリスト教徒

4

2 に答える 2