Ich habe zwei Algorithmen in C++ geschrieben. Soweit ich weiß, ist es üblich, sie mit
-O0 -NDEBUG (g++) beim Vergleich der Leistung der beiden Algorithmen (asymptotisch sind sie gleich).
Aber ich denke, die Optimierungsebene ist unfair zu einem von ihnen, weil es STL in jedem Fall verwendet. Das Programm, das ein einfaches Array verwendet, übertrifft den STL-lastigen Algorithmus um den Faktor 5, wenn es mit der Option -O0 kompiliert wird. Aber der Leistungsunterschied ist nicht viel anders, wenn ich sie mit -O2 -NDEBUG kompiliere.
Gibt es eine Möglichkeit, das Beste aus STL herauszuholen (ich bekomme starke Leistungseinbußen in der vector []
Operator) in der Optimierungsebene -O0?
Welche Optimierungsstufe (und möglicherweise Variablen wie -NDEBUG) verwenden Sie beim Vergleich zweier Algorithmen?
Es wäre auch eine große Hilfe, wenn jemand etwas über den Trend in der akademischen Forschung zum Vergleich der Leistung von in C++ geschriebenen Algorithmen sagen könnte.
Ok, um das Problem der Optimierungsebene zu isolieren, verwende ich jetzt einen Algorithmus, aber zwei verschiedene Implementierungen.
Ich habe eine der Funktionen mit rohen Zeigern (int und boolean) in std::vector und std::vector geändert... Mit -O0 -NDEBUG sind die Leistungen 5,46s(raw pointer) und 11,1s(std::vector). Und mit -O2 -NDEBUG sind die Leistungen 2,02s (roher Zeiger) und 2,21s (std::vector). Derselbe Algorithmus, eine Implementierung verwendet 4/5 dynamische Arrays von int und boolean. Die andere verwendet stattdessen std::vector und std::vector. In jedem anderen Fall sind sie gleich
Sie können sehen, dass std::vector in -O0 mit doppelt so schnellen Zeigern übertroffen wird. Bei -O2 sind sie fast gleich schnell.
Aber ich bin wirklich verwirrt, weil in akademischen Bereichen, wenn sie die Ergebnisse von Algorithmen in Laufzeit veröffentlichen, kompilieren sie die Programme mit -O0.
Gibt es einige Compiler-Optionen, die ich vermisse?
6 Stimmen
Ich fürchte, dass die "Akademiker" in diesem Punkt falsch liegen. Nicht zu optimieren würde ungerechterweise bestrafen