1

この男:http ://andrew-hoyer.com/experiments/cloth/は、布をシミュレートするためのjavascriptアルゴリズムを作成しました。彼は、コードが遅すぎるため、テイラー級数を使用して平方根を最適化する必要があると指摘しました。

  1. 代わりに、可能なすべての値を事前に計算し、ルックアップテーブルを使用してそれを取得することで、これを最適化できませんでしたか?

  2. これはよく使われますか?たとえば、3Dゲームでは、実際に計算を実行しますか、それともすべてのsin、cos、tg、sqrtおよび同様の関数のルックアップテーブルをすでに持っていますか?

  3. なぜこれはプロセッサに事前にプログラムされていないのですか?

4

3 に答える 3

2

平均的なCPUは、デフォルトでIEEE-754標準に基づいて浮動演算を定義しているため、数学演算の結果を厳密に定義しています。設計によるルックアップテーブルは単なる概算であり、特定の問題に必要な特定の範囲と粒度のみが含まれます。これにより、ハードウェアに適切に実装することはかなり不可能になります。可能な値を保存したい場合は、自分で計算してください。

これは、結果を概算しないという意味ではありません。ルックアップテーブルは、このための優れたソリューションではありません。つまり、 SSEにはとの両方がsqrtssありrsqrtssます。後者は実際の結果の近似値を返し、かなり高速です。そこにちょっとした数学。

于 2012-01-31T18:24:29.593 に答える
2

ルックアップテーブルはほとんど死んでいて、最新のプロセッサに埋もれています。特にsqrtのようなもののために。ほとんどのFPUは9〜20サイクルでそれらを実行でき、通常は他の計算とインターリーブします。現在、メモリアクセスは、キャッシュミスが数百サイクルかかるCPUのボトルネックになることがよくあります。第2レベルのキャッシュでさえ、20〜30サイクルかかる場合があります。多くの場合、事前に計算された値を保持するよりも計算を行う方が高速です。

于 2012-02-01T04:55:47.567 に答える
1

ルックアップテーブルの使用はおそらく間違いではありませんが、おそらくマイクロ最適化です。アルゴリズムを使用するか、他のコードに焦点を合わせる方が賢明です。CPUにハードコーディングされていない場合の期限が原因である可能性があります。対数はどうですか?CPUにルックアップテーブルはありますか?

于 2012-01-31T15:54:41.663 に答える