Intel-Compiler GCC versus
Wenn ich eine Anwendung neu kompilieren mit Intel ' s compiler ist es langsamer als wenn ich es kompilieren mit GCC. Der Intel-compiler die Leistung mehr als 2x langsamer. Die Anwendung enthält mehrere verschachtelte Schleifen. Gibt es irgendwelche Unterschiede zwischen GCC und Intel-compiler, die ich bin fehlt? Muss ich schalten einige andere flags, die zur Verbesserung der Intel-compiler die Leistung? Ich erwartet, dass der Intel-compiler zu sein, mindestens so schnell wie GCC.
Compiler-Versionen:
Intel version 12.0.0 20101006 GCC version 4.4.4 20100630
Den compiler-flags sind die gleichen, mit beiden Compilern:
-O3 -openmp -parallel -mSSE4.2 -Wall -pthread
Müssen Sie die compiler-Optionen, die Sie verwenden.
Es ist vielleicht naiv Frage, aber Sie sind mit dem Intel-compiler auf Intel-CPU? Und sind Sie sicher, dass die Flaggen sind äquivalent? Post die Fahnen, wenn Sie können
Ich bin mit und kompilieren, die auf dem intel core i7 930 cpu und ich bin mir ziemlich sicher, dass die Flaggen sind äquivalent: [intel] -g -O3 -openmp -parallel -xSSE4.2 -Wall -pthread [GCC] -O3 -msse4.2 -fopenmp -Wall -pthread -
intel schneller sein soll hmm
Es ist vielleicht naiv Frage, aber Sie sind mit dem Intel-compiler auf Intel-CPU? Und sind Sie sicher, dass die Flaggen sind äquivalent? Post die Fahnen, wenn Sie können
Ich bin mit und kompilieren, die auf dem intel core i7 930 cpu und ich bin mir ziemlich sicher, dass die Flaggen sind äquivalent: [intel] -g -O3 -openmp -parallel -xSSE4.2 -Wall -pthread [GCC] -O3 -msse4.2 -fopenmp -Wall -pthread -
intel schneller sein soll hmm
InformationsquelleAutor Ricky | 2011-11-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich keine Erfahrung mit dem intel-compiler, damit kann ich nicht beantworten, ob Sie fehlen einige Flaggen oder nicht.
Aber von was ich mich erinnere neuere Versionen von gcc sind in der Regel so gut im optimieren von code als icc (manchmal besser, manchmal schlechter (obwohl die meisten Quellen scheinen zu zeigen, bis in der Regel besser)), so dass Sie möglicherweise in eine situation, in der icc ist besonders schlimm. Beispiele für das, was Optimierungen jeder compiler kann, kann gefunden werden hier und hier. Auch wenn gcc ist nicht generell besser, man könnte einfach ein Fall, der gcc erkennt, die für die Optimierung und icc nicht. Compiler können sehr wählerisch, was Sie optimieren können und was nicht, insbesondere im Bezug auf Dinge wie autovectorization.
Wenn Ihr loop ist klein genug, kann es sich durchaus lohnen, vergleichen Sie den generierten Assembler-code, der zwischen gcc und icc. Auch, wenn Sie zeigen einige code-oder zumindest sagen Sie uns, was Sie in Ihrer Schleife, die wir vielleicht in der Lage sein, um Ihnen eine bessere Spekulationen, was führt zu diesem Verhalten. Zum Beispiel in einigen Situationen. Wenn es eine relativ kleine Schleife ist es wahrscheinlich ein Fall von icc-fehlt eine (oder einige, aber wahrscheinlich nicht viele) Optimierung, die entweder von Natur aus gut Potenzial (prefetching, autovectorization, unrolling, loop-invariant motion,...) oder die es ermöglichen, andere Optimierungen (vor allem inlining).
Beachten Sie, dass ich nur darüber zu reden Optimierungs-Potenzial, wenn ich Vergleiche gcc, icc. Am Ende icc kann in der Regel schnelleren code generieren, dann gcc, aber nicht so viel, weil es nicht mehr Optimierungen, sondern weil es ein schneller standard-Bibliothek Implementierung und da ist es klüger, darüber, wo zu optimieren (auf high-Optimierung Ebenen gcc wird ein wenig allzu eifrigen (oder zumindest früher) über den Handel code-Größe für die (theoretische) Laufzeit-Verbesserungen. Dies kann tatsächlich die Leistung beeinträchtigen, z.B. wenn die sorgfältig ent-und Vektorgrafik-Schleife wird immer nur ausgeführt mit 3 Iterationen.
InformationsquelleAutor Grizzly
Verwende ich normalerweise
-inline-level=1 -inline-forceinline
um sicherzustellen, dass die Funktionen, die ich haben ausdrücklich erklärtinline
tatsächlich tun, um inlined. Andere, als dass ich erwarten würde, ICC-performance mindestens so gut wie mit gcc. Sie müssen Profil Ihren code, um zu sehen, wo der performance-Unterschied kommt. Wenn das Linux dann empfehle ich Zoom, die Sie bekommen können auf eine Kostenlose 30-Tage-Evaluierungsversion.InformationsquelleAutor Paul R