Extreme Verlangsamung beim Start bei der zweiten Permutation

8

Betrachten Sie den folgenden Code:

%Vor%

Kompiliert mit GCC (MinGW) 5,3 -O2 auf meiner AMD 4,1 GHz CPU braucht das 2.3 s . Wenn ich jedoch einen Kommentar in der unkommentierten Zeile mache, wird die Geschwindigkeit auf 3.4 s verringert. Ich würde eine minimale Beschleunigung erwarten, weil wir die Zeit für eine Permutation weniger messen. Mit -O3 ist die Differenz weniger extrem 2.0 s bis 2.4 s .

Kann mir das jemand erklären? Könnte ein super intelligenter Compiler erkennen, dass ich alle Permutationen durchqueren und diesen Code optimieren möchte?

    
Albjenow 25.06.2017, 17:59
quelle

1 Antwort

2

Ich denke, der Compiler wird verwirrt, wenn Sie die Funktion in zwei separaten Zeilen in Ihrem Code aufrufen, was dazu führt, dass sie nicht inline ist.

GCC 8.0.0 verhält sich auch wie Ihr.

Vorteile von Inline-Funktionen in C ++? Es bietet einen einfachen Mechanismus für Wenn der Compiler mehr Optimierungen anwendet, kann in manchen Fällen die Inline-Identifikation verloren gehen.

    
gsamaras 25.06.2017, 18:24
quelle