Frage

Wie kann ich bei der Verwendung moderner C ++ -Kompiler (einschließlich MSVC, GCC, ICC) sagen, ob es:

  1. parallel den Code parallel
  2. Vektorisierte die Schleifen (oder verwendete andere spezifische Prozessoranweisungen)
  3. rollte die Schleifen ab
  4. erkannte Schwanzrezision
  5. RVO durchgeführt (Optimierung der Rückkehrwerte)
  6. oder auf andere Weise optimiert

Ohne in den Assembler -Code zu tauchen, erstellt der Compiler?

War es hilfreich?

Lösung

Der einzige Weg, den Sie können Ja wirklich Sagen Sie, wenn Sie den Assembler -Ausgang untersuchen (den Sie anscheinend ermäßigt haben). Ansonsten können Sie das DOCO lesen, um zu sehen, welche Arten der Optimierung jeder Ebene Ihres Compilers bietet.

Aber ehrlich gesagt, wenn Sie nicht darauf vertrauen, dass die Optimierungsniveaus Ihres Compilers den Job machen, werden Sie dem DOCO wahrscheinlich nicht vertrauen :-)

Ich würde den Assembler selbst ansehen, es ist der einzige Weg, wie Sie wirklich sicher sein könnten.

Andere Tipps

Der Intel Compiler verfügt über eine angemessene Berichtsanlage. Schauen Sie sich in Referenzdokumentation oder in der Mannseite nach oben -Vec -Bereitschaft und -PAR -Bericht.

G ++ hat auch Vektorberichte, schauen Sie auf der Mannseite für "Vektor", ich würde nicht glauben, dass G ++ parallele automatische Codegenerierung hat.

Was die letzten drei Dinge angeht, würde ich nicht glauben, dass Compiler das berichten, dass Sie wahrscheinlich zur Versammlung gehen müssen, um diese Informationen zu erhalten

Für RVO oder andere Kopier-Erlöser-Sachen geben Sie einfach etwas Protokollierung (printf) in Kopie und DTOR Ihrer Klasse ein. Sie sollten sehen, dass weniger Objekte kopiert werden, wenn Optimierungen funktionieren.

Ich bin mir ziemlich sicher, dass der Code parallelisiert und die Schleifen vektorisiert werden und viele andere Vektorisierungstechniken funktionieren auch funktionieren, wenn Sie die meiste Tiefenoptimierung in Ihrem Compiler verwenden.

Um so viel Tiefe zu verwenden, verwenden Sie den Befehl des -o3, wenn Sie Ihren Code ausführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top