Ich mache einige statistische Berechnungen. Ich brauche sie, um schnell zu sein, also schrieb ich das meiste davon um, um SSE zu verwenden. Ich bin ziemlich neu, also habe ich mich gefragt, was der richtige Ansatz ist:
Soweit ich weiß, gibt es in SSE keine log2- oder ln-Funktion, zumindest nicht bis zu 4.1, was die neueste Version ist, die von der Hardware unterstützt wird, die ich verwende.
Ist es besser zu:
Es scheint ein paar SSE log2
Implementierungen herum zu geben, z.B. dieses .
Es gibt auch die Intel Approximate Maths Library , die unter anderem eine log2
-Funktion hat - das ist es alt (2000), aber es ist SSE2 und es sollte noch einigermaßen gut funktionieren.
Siehe auch:
Es gibt keinen SSE-Befehl, der eine Logarithmusfunktion implementiert. Es gibt jedoch auch keine einzelne x86-Anweisung, die einen generischen Logarithmus ausführt. Wenn Sie darüber nachdenken, eine Logarithmusfunktion wie log
oder log10
aus der C-Standardbibliothek zu verwenden, sollten Sie sich die Implementierung ansehen, die in einer Open-Source-Bibliothek wie libc verwendet wird. Sie können leicht Ihre eigene Logarithmus-Approximation durchführen, die über alle Elemente in einem SSE-Register hinweg funktioniert.
Eine solche Funktion wird oft unter Verwendung einer polynomen Approximation implementiert, die innerhalb einer bestimmten Genauigkeitsspezifikation über eine bestimmte Region von Eingabeargumenten, wie beispielsweise eine Taylor-Reihe, gültig ist. Sie können dann die Logarithmuseigenschaften nutzen, um ein generisches Eingabeargument in den akzeptablen Eingabebereich für Ihre Logarithmusroutine zu schreiben. Darüber hinaus können Sie die Basis des Logarithmus parametrisieren, indem Sie die Eigenschaft nutzen:
%Vor% Dabei ist a
die Basis der von Ihnen erstellten Logarithmusroutine.
Tags und Links sse simd logarithm natural-logarithm