logarithm

___ answer13406266 ___

Jeder freie Code für die Verzweigung muss eine Berechnung von %code% enthalten, um den "normalen" Fall abzudecken.

Bevor Sie also versuchen, diesen zweigfreien Code zu entwickeln, messen Sie die Geschwindigkeit von %code% allein. Sofern es nicht wesentlich schneller ist als der Code, den Sie haben, gibt es hier nichts Wesentliches. Und ich vermute, dass es nicht sein wird.

    
___ qstntxt ___

Ich habe diese C-Funktion:

%Vor%

Ich rufe in einer engen Schleife an und möchte den Zweig loswerden, um zu sehen, ob er die Leistung verbessert.

Ich kann das nicht verwenden:

%Vor%

weil es %code% zurückgibt, wenn %code% (was ungefähr 25% der Zeit entspricht).

Gibt es eine andere Möglichkeit, es zu implementieren, so dass es %code% zurückgibt, wenn %code% , aber immer noch die Verzweigung loswerden?

(Ich bin weniger besorgt über negative Eingaben, weil diese Fehler sind, während Nullen nicht sind.)

    
___ answer13403444 ___

Compiler-Erweiterungen können hier helfen. In GCC würden Sie dies tun:

%Vor%

GCC generiert dann Maschinencode, der den Zweig %code% bevorzugt.

Wenn Sie negative Zahlen nicht interessieren, können Sie stattdessen %code% als unwahrscheinlichen Zweig behandeln:

%Vor%

Wenn Sie nicht in GCC sind, sollten Sie die Dokumentation Ihres Compilers überprüfen und sehen, ob es eine analoge Funktion bietet.

Beachten Sie, dass es immer noch nicht zweigfrei ist. Es ist nur so, dass der wahrscheinliche Zweig weniger Zeit benötigt.

    
___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ tag123optimierung ___ Optimierung ist der Akt der Verbesserung einer Methode oder eines Designs. In der Programmierung nimmt die Optimierung normalerweise die Form an, die Geschwindigkeit eines Algorithmus zu erhöhen oder die benötigten Ressourcen zu reduzieren. Eine weitere Bedeutung der Optimierung sind numerische Optimierungsalgorithmen. ___ tag123logarithmus ___ Der Logarithmus einer Zahl ist der Exponent, um den ein anderer fester Wert, die Basis, erhöht werden muss, um diese Zahl zu erzeugen. ___ tag123nan ___ NaN ist eine Abkürzung für "Not a Number". NaN ist manchmal nicht gleich selbst. ___ tag123branchprediction ___ In der Computerarchitektur ist ein Verzweigungsvorhersager eine digitale Schaltung, die versucht zu erraten, auf welche Weise eine Verzweigung (z. B. eine Wenn-Dann-Else-Struktur) gehen wird, bevor dies sicher bekannt ist. Der Zweck des Verzweigungsprädiktors besteht darin, den Fluss in der Befehlspipeline zu verbessern. Verzweigungsvorhersager spielen eine kritische Rolle beim Erreichen einer hohen effektiven Leistungsfähigkeit in vielen modernen Pipelinemikroprozessorarchitekturen, wie zum Beispiel x86. ___ qstnhdr ___ Verzweigungsfreie Implementierung von f (x): = wenn x == 0 dann 0 else (x * log (x)) ___ answer13403711 ___

Beachten Sie zuerst, dass log (1) = 0 ist. Dann können Sie das Problem als x * log (y) schreiben, wobei y = 1, wenn x & lt; = 0, und ansonsten gleich x ist; Wenn y = 1, dann spielt x keine Rolle, weil log (y) = 0 ist.

Etwas wie y = (x & gt; 0) * x + (x & lt; = 0) wird dies tun, und dann:

%Vor%

Es hängt nur davon ab, ob log (1) und vier ganzzahlige Ops schlechter sind als eine Verzweigung.

    
___
6
Antworten

Kompilierzeit Berechnung der Anzahl der Bits benötigt, um n verschiedene Zustände zu kodieren

Bearbeiten: In der ersten Frage hatte eine falsche Formel und der Algorithmus versuchte etwas völlig anderes als das, was beabsichtigt war. Ich entschuldige mich und ich beschloss, die Frage neu zu schreiben, um alle Verwirrung zu beseitigen....
21.05.2014, 11:09
2
Antworten

Logarithmus mit SSE, oder wechseln zu FPU?

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 e...
17.01.2012, 23:08
1
Antwort

Sie möchten Pandas Dataframe als Multiple Histogramme mit der X-Achse log10 skalieren

Ich habe Fließkommadaten in einem Pandas-Datenrahmen. Jede Spalte repräsentiert eine Variable (sie haben String-Namen) und jede Zeile eine Menge von Werten (die Zeilen haben Integer-Namen, die nicht wichtig sind). %Vor% Ich möchte für jede S...
28.04.2015, 21:34
3
Antworten

Verzweigungsfreie Implementierung von f (x): = wenn x == 0 dann 0 else (x * log (x))

Ich habe diese C-Funktion: %Vor% Ich rufe in einer engen Schleife an und möchte den Zweig loswerden, um zu sehen, ob er die Leistung verbessert. Ich kann das nicht verwenden: %Vor% weil es NaN zurückgibt, wenn x == 0 (was ungefä...
15.11.2012, 17:54