Ich werde versuchen, so klar wie ich kann mit meiner Frage (nicht einfach ... es ist nicht so klar für mich auch). Angenommen, Sie eine Reihe von IF haben ... THEN Befehle mit mehreren Operanden, zum BeispielAusführungsgeschwindigkeit von bedingten Anweisungen im Vergleich zu mathematischen Funktionen
IF ((a==0) && (b==1) && (c==1)) THEN x=1
ELSE IF ((a==0) && (b==0) && (c==1)) THEN x=2-
und so weiter
nehme ich wie x = a * n1 + b * n2 + c * n3
(diese alle jene IFs mit einem einzigen mathematischen Funktion ersetzen könnte ist nur, um Ihnen eine Idee zu geben, in Wirklichkeit ist es komplexer, aber auch die IFs und Operanden sind viel mehr)
Die Funktion kommt von einem zuvor trainierten künstlichen neuronalen Netzwerk.
Mein Bauchgefühl ist, dass wenn es um Ausführung geht, die Funktion viel weniger Zeit als die IFs braucht, aber es ist nur ein Bauchgefühl aus meinem alten Hintergrund in der Montage, wo sie uns gelehrt haben, dass eine bedingte Anweisung den Weg freimacht mehr Zeit als eine arithmetische.
Können Sie das bestätigen? vielleicht sogar einen Link, wo ich eine Erklärung finden könnte?
Vielen Dank im Voraus Jungs!
Ich denke, Ihr Bauchgefühl richtig ist. Ich habe hier ein paar Optimierungsfragen zu SO über überraschende Ergebnisse bei der Eliminierung von Verzweigungen verfolgt. –
https://en.wikipedia.org/wiki/Branch_predictor und die Artikel, die es verlinkt, werden einen Anfang bieten. Die relativen Gewinne hängen von der Komplexität der Funktion und möglichen Verzweigungen ab, aber bei modernen Prozessoren sind häufig Pipeline- und Verzweigungsvorhersager relevant. – Peter
Vielleicht sollten Sie zuerst überprüfen, dass Ihr Compiler [kann das nicht schon tun] (http://stackoverflow.com/questions/26124620/why-does-msvc-emit-a-useless-movsx-before-performing-this-bit (Test), bevor Sie Ihr Programm fubar. Und natürlich * immer * verifiziere zuerst, dass es tatsächlich * einen Unterschied machen kann, benutze einen Profiler. Programmierers Diktum ist dreimal zu messen, einmal zu schneiden. –