ログ機能のオープンソース(ライセンスの制限なし)の実装が必要です。
__m128d _mm_log_pd(__m128d);
Intel Short Vector Math Library(ICCの一部)で利用できますが、ICCは無料でもオープンソースでもありません。組み込み関数のみを使用した実装を探しています。
特別な有理関数近似を使用する必要があります。cmathログとほぼ同じくらい正確なもの、たとえば10進数の9〜10桁が必要ですが、より高速です。
ログ機能のオープンソース(ライセンスの制限なし)の実装が必要です。
__m128d _mm_log_pd(__m128d);
Intel Short Vector Math Library(ICCの一部)で利用できますが、ICCは無料でもオープンソースでもありません。組み込み関数のみを使用した実装を探しています。
特別な有理関数近似を使用する必要があります。cmathログとほぼ同じくらい正確なもの、たとえば10進数の9〜10桁が必要ですが、より高速です。
log2
計算しやすいと思います。あなたはそれが(0.5、2]にあるようにあなたの数を2の累乗(非常に速い)で乗算/除算することができますそしてそれからあなたは一度だけ導き出すのが簡単なパデ近似(MをNに近づける)を使います、および必要に応じて順序を選択できます。必要なのは、SSE組み込み関数で実行できる算術演算のみです。上記のスケーリング係数に従って定数を追加/削除することを忘れないでください。
自然対数が必要な場合は、で除算しlog2(e)
てください。これは、一度だけ計算できます。
一部の特定のプロジェクトでカスタムログ関数が表示されることは珍しくありません。標準ライブラリ関数は一般的なケースに対応していますが、より具体的なものが必要です。自分でやるのはそれほど難しいことではないと心から思います。
AMDLibMを見てください。オープンソースではありませんが、無料です。AFAIK、IntelCPUで動作します。同じWebページに、AMDの別の無料の数学ライブラリであるACMLへのリンクがあります。AMD LibM + Matrixアルゴリズム、FF、ディストリビューションからすべてが含まれています。
倍精度のベクトル化された数学関数のオープンソース実装を知りません。IntelとAMDのライブラリはCPUメーカーによって手作業で最適化されており、速度が重要な場合は誰もがそれらを使用していると思います。IIRCでは、GCCでベクトル化された数学関数の組み込み関数を実装する試みがありました。私は彼らがどこまで到達できたかはわかりません。明らかに、それは簡単な作業ではありません。
FramewaveプロジェクトはApache2.0ライセンスであり、IntelIPPと同等のオープンソースになることを目指しています。それはあなたが探しているものに近い実装を持っています。ドキュメントの固定精度の算術関数を確認してください。
これに対応するものは次のとおりです__m256d
:https ://stackoverflow.com/a/45898937/1915854 。にカットするのはかなり簡単なはず__m128d
です。これで問題が発生した場合はお知らせください。
または、私の実装を__m128d
、一度に2つの数値を取得するものと見なすことができます。
既存のオープンソース実装が見つからない場合は、テイラー級数の標準的な方法を使用して独自の実装を作成するのは比較的簡単です。これと他のさまざまな方法については、ウィキペディアを参照してください。