Wegen einer Schulaufgabe muss ich einen C++ - Code in Assembly konvertieren (ARMv8). Dann muss ich den C++ Code mit GCC's -OO, -O1, -O2, -O3 und -Os Optimierungen kompilieren, die Zeit notieren und mit der Ausführungszeit meines Assembly Codes vergleichen. Ich glaube, ich weiß, dass -O3 schneller sein muss als -O1 und -O2. Allerdings bekomme ich, dass -O2 am schnellsten ist, dann sind -O1, -O3, -Os, -O0. Ist das normal? (Berechnete Zeiten sind ungefähr 30 Sekunden).Optimierte Ausführungszeit
Antwort
Ja, es ist üblich. Nehmen Sie die -Ox-Optimierung als Richtlinie. Im Durchschnitt produzieren sie Optimierung, die werben, aber eine Menge hängt von der Art, in der der Code geschrieben wird, Speicherlayout, sowie der Compiler selbst ab. Manchmal müssen Sie mehrmals versuchen und fehlschlagen, bevor Sie den optimalen Code erhalten. -O2 gibt tatsächlich die beste Optimierung in den meisten Fällen.
Danke! Ich schaffte es, nur -O0 zu übergeben, wo mein Assembler-Code in 57s und -O1-3 in etwa 33s läuft. Es ist so gut? – Monstermania
Ja, es ist so gut, und für die weitere Optimierung müssen Sie wahrscheinlich viel Zeit und Mühe aufwenden. C++ - Code ist normalerweise im Vergleich zu C-Code schwieriger zu optimieren. Wenn Sie können, können Sie versuchen, mit der Speicheroptimierung zu spielen, indem Sie die Größe von Stack und Heap ändern. Manchmal hilft es. – VladP
Beachten Sie, dass GCC viele andereoptimization flags hat.
Es kann nicht garantiert werden, dass -O3
schnellere Codes liefert als -O2
; Ein Compiler kann mehr Optimierungs-Pässe anwenden, aber sie sind alle Heuristiken und könnten nicht erfolgreich sein (oder sogar Ihren Code etwas verlangsamen). Daher ist es möglich, dass -O3
einen etwas langsameren Code als -O2
(auf einigen insbesondere Eingangsquellcode) gibt.
Sie könnten eine neuere Version von GCC versuchen (die neueste - im November 2017 - ist GCC 7, GCC 8 wird in wenigen Monaten ausgehen). Sie können auch eine better-march=
oder -mtune=
Option versuchen.
Endlich mit Ihrem GCC plugin, könnten Sie Ihre eigene Optimierung Pass oder die Reihenfolge ändern (und die Menge) der angelegten Optimierung geht (es gibt mehrere hundert verschiedene Optimierungs geht in GCC) hinzuzufügen. Aber du wirst eine Menge Arbeit brauchen (vielleicht ein oder zwei Jahre), um GCC erweitern zu können.
Sie konnten die Optimierungsparameter einstellen, und einige Projekte (MILEPOST) haben sogar Maschinenlerntechniken verwendet, um sie zu verbessern.
Siehe auch Folien und Referenzen auf meine (alt) GCC MELT documentation.
- 1. lsqlin optimierte Berechnung (Matlab)
- 2. Polyline drawMapRect optimierte Zeichnung
- 3. Optimierte Stored Procedure Schleife
- 4. gdb - optimierte Wertanalyse
- 5. Bing Karte optimierte Route
- 6. optimierte Datenbank-Suchalgorithmus
- 7. optimierte Byte-Array-Shifter
- 8. Vertica nicht merge optimierte
- 9. Kosinusähnlichkeit optimierte Implementierung
- 10. Optimierte Array-Shift-Methode
- 11. optimierte CSS für Browser
- 12. Laden Require.js optimierte Datei
- 13. Ausführungszeit Berechnung
- 14. mysql Ausführungszeit
- 15. Messcode Ausführungszeit
- 16. Durchschnittliche Ausführungszeit
- 17. Optimierte CUDA-Matrix-Hamming-Distanz
- 18. mysql - Alternative/effiziente/optimierte Abfrage
- 19. Optimierte arithmetische Methoden in R
- 20. optimierte Abfrage von 2 Tabellen
- 21. Speicherplatz optimierte Lösung für Münzwechsel
- 22. Optimierte FAST-Berechnung für ARM
- 23. Optimierte Möglichkeit, eine Ergebnisliste zwischenzuspeichern?
- 24. Unterschied zwischen Sqlalchemy Ausführungszeit und Ausführungszeit von EXPLAIN Abfrage?
- 25. Rscript - lange Ausführungszeit
- 26. Ausführungszeit des Threads ändert
- 27. Ausführungszeit des Clojure-Programms
- 28. Zeige ZF2 Anfrage Ausführungszeit
- 29. Javascript Versprechen Ausführungszeit
- 30. NHibernate, Ausführungszeit der Protokollabfrage?
Mögliche Duplikat von [GCC: Unterschied zwischen -O3 und -Os] (https://StackOverflow.com/Questions/19689014/GCC-Difference-between-O3-and-OS) – Bilkokuya
Ich sollte hinzufügen, dass während der Frage Ich habe geflaggt nicht speziell nach -O2 gefragt, es wird von der angenommenen Antwort dort geantwortet. – Bilkokuya
Ihr Fragentitel bezieht sich auf die Kompilierungszeit, aber Ihr Fragetext scheint mehr über die Ausführungszeit besorgt zu sein, was nicht dasselbe ist. – lurker