9

私はいくつかの統計計算を行っています。高速にする必要があるので、SSEを使用するようにほとんどを書き直しました。私はそれにかなり慣れていないので、ここでの正しいアプローチは何であるか疑問に思いました:

私の知る限り、SSEにはlog2またはln関数はありません。少なくとも、私が使用しているハードウェアでサポートされている最新バージョンである4.1まではありません。

次の方が良いですか:

  1. 4つのフロートを抽出し、それらに対してFPU計算を実行して、エントロピーを決定します-これらの値をSSEレジスタにロードする必要はなく、合計して別のフロートにするだけです。
  2. log2を実行するSSEの関数を見つける
4

2 に答える 2

9

log2周りにいくつかのSSE実装があるようです、例えばこれ

とりわけ機能を備えたIntel近似数学ライブラリもありlog2ます-それは古い(2000)ですが、それはSSE2であり、それでもかなりうまく機能するはずです。


参照:

于 2012-01-18T09:37:32.790 に答える
2

対数関数を実装するSSE命令はありません。ただし、一般的な対数を実行する単一のx86命令もありません。logC標準ライブラリのような、またはC標準ライブラリからの対数関数の使用をlog10検討している場合は、libcのようなオープンソースライブラリで使用されている実装を確認する価値があります。SSEレジスタ内のすべての要素にわたって機能する独自の対数近似を簡単にロールできます。

このような関数は、テイラー級数などの入力引数の特定の領域で一定の精度仕様内で有効な多項式近似を使用して実装されることがよくあります。次に、対数プロパティを利用して、一般的な入力引数を対数ルーチンの許容可能な入力範囲にラップできます。さらに、次のプロパティを利用して、対数の底をパラメーター化できます。

log_y(x) = log_a(x) / log_a(y)

a作成した対数ルーチンのベースはどこにありますか。

于 2012-01-17T23:23:04.750 に答える