AVX2 のコンテキストでは、Intel の __m256d _mm256_log2_pd (__m256d a) 関数は、Intel 以外の他のコンパイラと互換性がありません。報告によると、パフォーマンスの低下が見られるAMDプロセッサ。これに対処するために、効率性と広範な互換性を提供する代替実装を検討してみましょう。
通常、log2(ab) は log2(a) log2 として計算されます。 (b)。 a は 2^ 指数 の仮数で表されるため、計算は指数 log2(仮数) に単純化されます。仮数の範囲が制限されている (1.0 ~ 2.0) ため、log2(仮数) を計算するための調整された多項式近似が可能です。
テイラー級数展開は係数の開始点として一般的に使用されますが、ターゲット範囲にわたる誤差を最小限に抑えるには、ミニマックス フィッティングをお勧めします。 1.0 に近い値の精度を高めるには、仮数 1.0 を多項式の入力として使用し、定数項の必要性を排除できます。
必要な精度レベルは、実装の選択に影響します。 。通常、精度を高めると、計算ステップが追加されるため、速度が犠牲になります。 Agner Fog の VCL ライブラリは、高精度の関数を提供しますが、すべてのアプリケーションに必須ではない複雑な技術を採用しています。
VCL の log2 関数には、次の手順が含まれます:
精度を向上するには:
速度を最適化するには:
以上がインテルのコンパイラーに依存せずに AVX2 に log2(__m256d) を効率的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。