SVML の __m256d _mm256_log2_pd (__m256d a) は Intel コンパイラに限定されており、AMD プロセッサでは速度が低下すると報告されています。代替実装は存在しますが、多くの場合、AVX2 ではなく SSE に重点が置かれています。この説明の目的は、さまざまなコンパイラと互換性があり、AMD プロセッサと Intel プロセッサの両方で良好に動作する、4 つの倍精度数値のベクトルに対する log2() の効率的な実装を提供することです。
従来の戦略
通常のアプローチでは、公式 log2(a*b) = log2(a) log2(b) を活用し、指数に単純化します。倍精度数値の場合は log2(仮数)。仮数の範囲は 1.0 ~ 2.0 に制限されており、log2(仮数) を取得するための多項式近似に適しています。
精度と精度
必要な精度と精度入力の範囲は実装に影響します。 Agner Fog の VCL は、エラー回避技術を使用して高精度を目指しています。ただし、近似 float log() を高速化するには、JRF の多項式実装を検討してください (こちら: http://jrfonseca.blogspot.ca/2008/09/fast-sse2-pow-tables-or-polynomials.html)。
VCL アルゴリズム
VCL log float 関数と double 関数は 2 つの部分からなるアプローチに従います:
最終結果は、多項式近似に指数を加算することによって取得されます。 VCL には、丸め誤差を最小限に抑えるための追加の手順が含まれています。
代替多項式近似
精度を高めるために、VCL を直接使用できます。ただし、float の近似 log2() 実装を高速化するには、JRF の SSE2 関数を FMA を使用して AVX2 に移植することを検討してください。
丸め誤差の回避
VCL はさまざまな手法を使用して丸め誤差を軽減します。丸め誤差。
不要なステップの削除
値が有限で正であることがわかっている場合、次のチェックをコメントアウトすることでパフォーマンスを大幅に向上させることができます。アンダーフロー、オーバーフロー、または非正規化。
さらに読書
以上がIntel プロセッサと AMD プロセッサの両方で AVX2 に log2(__m256d) を効率的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。