2010-04-20 14 views
12

Ich mache einige schwere Zahlencrunching und für mich ist Gleitkomma-Performance sehr wichtig. Ich mag die Leistung des Intel-Compilers sehr und ziemlich zufrieden mit der Qualität der Montage, die es erzeugt.C++ 0x Optimierung der Compiler-Qualität

Ich denke, irgendwann C++ 0x vor allem für Zucker Teile, wie auto, Initialisierungsliste, etc, aber auch Lambdas versuchen. An dieser Stelle nutze ich diese Features in regulärem C++ mit Boost.

Wie gut Assembler-Code Compiler C++ 0x erzeugen? speziell Intel und gcc Compiler. Produzieren sie SSE-Code? ist die Leistung vergleichbar mit C++? Gibt es irgendwelche Benchmarks?

Meine Google-Suche ergab nicht viel.

Vielen Dank.

ps: irgendwann werde ich es selbst testen, würde aber gerne wissen was zu erwarten ist relativ zu C++.

+2

Nur ein Heads-Up, dass der Intel C++ - Compiler im Moment nur Lambdas unterstützt, und diese werden implementiert, als ob es einfache, eindeutig benannte Funktoren wären. Aus Optimierungsgründen werden sie daher optimiert, wie jede andere Funktion auch sein mag. –

Antwort

8

Sie können die gleiche Optimierung für Ihren Code erwarten, weil der Compiler bei der Optimierung sicherlich nicht schlechter wurde. Es kann sich also nur auf die neuen C++ 0x-Funktionen auswirken. Aber ich bezweifle, dass deine Kernroutinen plötzlich komplett geändert werden, um irgendwie C++ 0x-Funktionen zu verwenden.

Denken Sie daran, Dinge wie auto und Lambda sind nur syntaktischer Zucker. Das hat keine Auswirkungen auf die Compiler-Optimierung, da es sich nur um Methoden handelt, mit denen Sie den gleichen Code generieren können. Sie müssen sich also nur um die neuen "Sachen" wie Initialisierungslisten kümmern. Aber ich wäre überrascht, wenn das auch ineffizient wäre.

Sie sollten aufgrund der move-Semantik auch viele Verbesserungen erwarten. Sie müssen Daten nicht mehr kopieren, sondern nur verschieben. Entwerfen Sie Ihren Code, um dies für den größten Nutzen zu nutzen.

+3

Wenn überhaupt, würden Sie fast sofort einen Vorteil aufgrund der Semantik bewegen –

+0

@Billy: Großartiger Punkt, eigentlich. Ich werde hinzufügen. – GManNickG

+0

gut, rekompilierte C++ Quellen mit C++ 0x g ++ und tatsächlich gibt es keinen Unterschied, wenn ich reguläre Fließkomma oder Intel intrinsic verwende. so weit wie eine Leistung scheinen sie gleich zu sein. Ich habe die Assembly nicht angesehen, aber meine Vermutung ist auch gleichwertig – Anycorn