Logarithmus mit SSE, oder wechseln zu FPU?

8

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:

  1. entpacke 4 Gleitkommazahlen und führe FPU-Berechnungen an, um die Enthropie zu bestimmen - ich werde keinen dieser Werte zurück in SSE-Register laden müssen, sondern sie einfach zu einem anderen Gleitkomma zusammenfassen
  2. finde eine Funktion für SSE, die log2
  3. ausführt
Aziz Shaikh 17.01.2012, 23:08
quelle

2 Antworten

8

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:
Paul R 18.01.2012, 09:37
quelle
1

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.

    
Jason R 17.01.2012 23:23
quelle