Hallo Ich bin auf dem Weg, eine Funktion zu optimieren, die mir das "nächste" von etwas geben soll. Bisher, was ich habe istSchleife in Arithmetik um die Funktion zu beschleunigen
int fun(int a){
const int k = ...;
for(;test_value(a++) != k;);
return a;
}
Das war eine schnelle und schmutzige Art und Weise zu testen, dass mein Algorithmus tatsächlich gearbeitet, aber jetzt im Nachhinein bin ich besorgt, dass die Schleife einen Test macht bei jeder Iteration zur Verzweigung (wenn nicht der Compiler ist sehr gut im Umgang hinter den Kulissen?). Nehmen wir an, die Wahrscheinlichkeit, dass ein a den Test erfüllt, beträgt höchstens 1/5 und der schlechteste Fall einer von einer Million, aber dieser Testwert ist nur ein oder zwei Taktzyklen. Gibt es einen systematischen Weg, wie ich meinem Compiler helfen kann, alle Zweige mit Arithmetik zu handeln, um die CPU-Pipelines besser zu nutzen?
Sie denken nicht, dass das nur davon abhängen würde, was "test_value" ist? –
Es ist eine Funktion, die in wenigen Zyklen ohne Verzweigungsgefahr ausgeführt werden sollte. Vermutlich existiert sie als SSE-Befehl auf modernen Maschinen. – mathreadler