GCC + VS Compiler kombinieren?
-
Siehe http://msdn.microsoft.com/en-us/library/ms690134%28VS.85%29.aspx .
Gruß Kimmi
-
Oha
So langsam steig ich hinter den ganzen Kram. Vielleicht bekomme ich die Synaptics Geschichte ja doch mit dem GCC hin. Mal schauen, ob ich performance-mäßig wirklich besser liege. Ich bastel mir just in diesem Moment eine optimierte Release Version. Wie aufregend!
Danke!
Sören
-
Tjaaaaaa.
Also bei mir sieht es leider so aus, dass der VS-Compiler gewinnt. Sehr seltsam.
Also, dem ganzen liegt keine professionelle Messung zu Grunde, aber:
Das ganze ist ein Audio-Plugin und beim GCC zeigt der Host 33% Auslastung an. Beim VS-Compiler sind es 24%.
Auf meinem MAC mit 2.53 GHz Intel Core 2 Duo sind das höchstens 5%. (GCC!)( Zum Vergleich: Meine Windows-Maschine hat nen 1.6 GHz Dual Core)Es kann gut möglich sein, dass Windows und MAC von der Messung her nicht vergleichbar sind. Trotzdem würd mich interessieren, woher der riesige Unterschied kommt. Soooooo viel schneller kann der MAC ja nicht sein.
Najut,
nochmal vielen Dank,
wenn jemandem noch was enfällt: Immer her damit
Viele Grüße
Sören
-
Verschiedene Systeme mit verschiedenen OS: da gibts viel zu viel unbekannte Variable, um eine ordentliche Aussage zu machen. Wenn du die Performance von verschiedenen Compilern messen willst, musst du das auf dem gleichen System machen. Sonst spielen dir von OS-Scheduler ueber unterschiedliche Cache-Groessen, Hintergrundsprozessen und Hardware-Configurationen alles moegliche mit rein.
Dass der Unterschied zwischen GCC und VS doch so betraechtlich ist, ist beachtlich. Welche Compiler-Optionen hast du denn jeweils verwendet?
-
Blue-Tiger schrieb:
Dass der Unterschied zwischen GCC und VS doch so betraechtlich ist, ist beachtlich. Welche Compiler-Optionen hast du denn jeweils verwendet?
GCC: -O3 -march=pentium4 (letzteres hat nochmal auf 29% gedrückt)
VS: /02 /GL (/arch:SSE hat aber nichts gebracht, kann auch aus sein...)Die Prozente beziehen sich auf den Audio-Thread. Das laden des GUIs verhält sich wiefolgt: GCC ca 5-10s, VS: 1s
Wie verhält es sich eigentlich mit den neuen VS-Compilern in der Express-Version. Ich hab mal gehört, der VS2008 Express Compiler wär langsamer als der 2005er (von wegen: Kauf dir die Vollversion!), deshalb benutze ich noch den 2005er.
Wahrscheinlich schlagt ihr jetzt die Hände überm Kopf zusammen und sagt: dann nimm den 2010er. Meint ihr, dass sich das Compilermäßig lohnen könnte?
Vielen Dank
Sören
-
soerenP schrieb:
Blue-Tiger schrieb:
Dass der Unterschied zwischen GCC und VS doch so betraechtlich ist, ist beachtlich. Welche Compiler-Optionen hast du denn jeweils verwendet?
GCC: -O3 -march=pentium4 (letzteres hat nochmal auf 29% gedrückt)
Nimm lieber -march=native
btw. für windows gibt es doch gar keinen offiziellen GCC :p
-
Ok. Danke.
Ich nutze die TDM MinGW Geschichte...
Was genau macht -march:native?
Benutzt er die Werte der Entwicklermaschine oder baut er Schalter im Code ein für die Maschine, auf der das Ding läuft?
-
-march=native setzt entsprechende Optimierungsflags für die aktuelle Architektur. Mittels
echo "int main() { }" > test.c++ && g++ -v -Q -march=native -O3 test.c++ && rm test.c++ a.out
kannst du rausfinden, was der GCC genau macht. zB bei mir
Using built-in specs. Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.1-4ubuntu9' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9) COLLECT_GCC_OPTIONS='-v' '-Q' '-O3' '-shared-libgcc' /usr/lib/gcc/x86_64-linux-gnu/4.4.1/cc1plus -v -D_GNU_SOURCE test.c++ -D_FORTIFY_SOURCE=2 -march=core2 -mcx16 -msahf -msse4.1 --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=2048 -mtune=core2 -dumpbase test.c++ -auxbase test -O3 -version -fstack-protector -o /tmp/cco7J6Lc.s ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../x86_64-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /usr/include/c++/4.4 /usr/include/c++/4.4/x86_64-linux-gnu /usr/include/c++/4.4/backward /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.4.1/include /usr/lib/gcc/x86_64-linux-gnu/4.4.1/include-fixed /usr/include/x86_64-linux-gnu /usr/include End of search list. GNU C++ (Ubuntu 4.4.1-4ubuntu9) version 4.4.1 (x86_64-linux-gnu) compiled by GNU C version 4.4.1, GMP version 4.3.1, MPFR version 2.4.1-p2. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 options passed: -v -D_GNU_SOURCE test.c++ -D_FORTIFY_SOURCE=2 -march=core2 -mcx16 -msahf -msse4.1 --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=2048 -mtune=core2 -O3 -fstack-protector options enabled: -falign-labels -falign-loops -fargument-alias -fasynchronous-unwind-tables -fauto-inc-dec -fbranch-count-reg -fcaller-saves -fcommon -fcprop-registers -fcrossjumping -fcse-follow-jumps -fdefer-pop -fdelete-null-pointer-checks -fdwarf2-cfi-asm -fearly-inlining -feliminate-unused-debug-types -fexceptions -fexpensive-optimizations -fforward-propagate -ffunction-cse -fgcse -fgcse-after-reload -fgcse-lm -fguess-branch-probability -fident -fif-conversion -fif-conversion2 -findirect-inlining -finline -finline-functions -finline-functions-called-once -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-pure-const -fipa-reference -fira-share-save-slots -fira-share-spill-slots -fivopts -fkeep-static-consts -fleading-underscore -fmath-errno -fmerge-constants -fmerge-debug-strings -fmove-loop-invariants -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls -fpeephole -fpeephole2 -fpredictive-commoning -freg-struct-return -fregmove -freorder-blocks -freorder-functions -frerun-cse-after-loop -fsched-interblock -fsched-spec -fsched-stalled-insns-dep -fschedule-insns2 -fsigned-zeros -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftoplevel-reorder -ftrapping-math -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop -ftree-copyrename -ftree-cselim -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-loop-im -ftree-loop-ivcanon -ftree-loop-optimize -ftree-parallelize-loops= -ftree-pre -ftree-reassoc -ftree-scev-cprop -ftree-sink -ftree-sra -ftree-switch-conversion -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp -funit-at-a-time -funswitch-loops -funwind-tables -fvar-tracking -fvect-cost-model -fzero-initialized-in-bss -m128bit-long-double -m64 -m80387 -maccumulate-outgoing-args -malign-stringops -mcx16 -mfancy-math-387 -mfp-ret-in-387 -mfused-madd -mglibc -mieee-fp -mmmx -mpush-args -mred-zone -msahf -msse -msse2 -msse3 -msse4.1 -mssse3 -mtls-direct-seg-refs Compiler executable checksum: fc184ee0d48aad037ce15ddb29d848d4 int main() Analyzing compilation unit Performing interprocedural optimizations <visibility> <early_local_cleanups> <summary generate> <cp> <inline> <static-var> <pure-const>Assembling functions: int main() Execution times (seconds) name lookup : 0.01 (100%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall 101 kB ( 5%) ggc tree gimplify : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 5%) wall 1 kB ( 0%) ggc tree CFG construction : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 5%) wall 1 kB ( 0%) ggc CSE : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.02 (10%) wall 0 kB ( 0%) ggc CSE 2 : 0.00 ( 0%) usr 0.01 (100%) sys 0.00 ( 0%) wall 0 kB ( 0%) ggc peephole 2 : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 5%) wall 0 kB ( 0%) ggc scheduling 2 : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 5%) wall 1 kB ( 0%) ggc TOTAL : 0.01 0.01 0.21 1875 kB COLLECT_GCC_OPTIONS='-v' '-Q' '-O3' '-shared-libgcc' as -V -Qy -o /tmp/ccpvbszv.o /tmp/cco7J6Lc.s GNU assembler version 2.20 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.20 COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.4.1/:/usr/lib/gcc/x86_64-linux-gnu/4.4.1/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.4.1/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.4.1/:/usr/lib/gcc/x86_64-linux-gnu/ LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.4.1/:/usr/lib/gcc/x86_64-linux-gnu/4.4.1/:/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../:/lib/:/usr/lib/:/usr/lib/x86_64-linux-gnu/ COLLECT_GCC_OPTIONS='-v' '-Q' '-O3' '-shared-libgcc' /usr/lib/gcc/x86_64-linux-gnu/4.4.1/collect2 --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=both -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro /usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.4.1/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/4.4.1 -L/usr/lib/gcc/x86_64-linux-gnu/4.4.1 -L/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../.. -L/usr/lib/x86_64-linux-gnu /tmp/ccpvbszv.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/4.4.1/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crtn.o
-
Hmmm.
Da ich ja nicht für meine Entwicklermaschine optimieren will, sondern eher für den Rest der Welt bzw. ein Minimalsystem ist -march=native nicht so passend, oder?
Trotzdem vielen Dank
Sören
-
Also dem gcc sagst du, optimiere mal fuer jede Kruecke. Was sagst du zu Visual Studio? Dann einen Unterschied in der Prozessorauslastung als Benchmark vorzuzeigen, ist nicht ganz ... schlau.
-
Ich vermute, soerenP, das die Ergebnisse von VS noch besser würden, wenn Du nichtmehr den 05er Compiler nutzen würdest, sondern den 10er oder wenigstens den 08er nimmst.
Der Compiler der Expressversion ist m.E. identisch zu dem der Kauf-Version.
EDIT: Und Prozessorauslastungen sind wirklich nicht sehr sinnvoll als Performance-Messlatte...
-
soerenP schrieb:
Das ganze ist ein Audio-Plugin und beim GCC zeigt der Host 33% Auslastung an. Beim VS-Compiler sind es 24%.
Auf meinem MAC mit 2.53 GHz Intel Core 2 Duo sind das höchstens 5%. (GCC!)( Zum Vergleich: Meine Windows-Maschine hat nen 1.6 GHz Dual Core)Was meinst du mit Auslastung? Prozessorauslastung? Das ist wirklich keine gute Vergleichsgröße. Ein hoher Wert kann ja entweder bedeuten, dass das Programm extrem effizient ist und es schafft den Prozessor voll auszulasten oder das es extrem ineffizient ist und daher den Prozessor mehr auslasten muss.
-mtune=native, wenn du das Resultat auch auf anderen Systemen nutzen willst.
-
Mr X schrieb:
Der Compiler der Expressversion ist m.E. identisch zu dem der Kauf-Version.
Nicht ganz. Profiling zum Beispiel gibts nicht für die Expressversion. Das kann schon deutlich was bringen. Leider finde ich die Produktvergleichsseite nur noch für 2010, nicht für 2008 und 2005.
Aber irgendwie ist es auch klar dass Microsoft ein bisschen mehr Ahnung von Windows hat als ein paar gcc-Portierer.
-
Meinst Du mit "Profiling" die PGO-Optimierungen (Bringt das viel?)?
Ansonsten würds ja nur dem Programmierer was bringen...
-
Ich kriegs nicht mehr ganz zusammen, aber es gibt ein Projekt, dass einen Emulator mit Visual Studio geschrieben hat. Alle möglichen Leute wollen mitmachen, laden sich die Quellen runter, aber eine Optimierungsflag gibts nicht in VCExpress. Dann nehmen sie die Option raus und der Emulator ruckelt, was er mit der Option nicht oder deutlich weniger tut.
Daher meine ich, dass VCProfessional nochmal wesentlich schneller als VCExpress ist. Ich werde mal irgendwie nachfragen, das ist alles zu wage. Ich dachte nur irgendwer listet die Unterschiede auf bevor jemand nachfragt
-
rüdiger schrieb:
Was meinst du mit Auslastung? Prozessorauslastung? Das ist wirklich keine gute Vergleichsgröße. Ein hoher Wert kann ja entweder bedeuten, dass das Programm extrem effizient ist und es schafft den Prozessor voll auszulasten oder das es extrem ineffizient ist und daher den Prozessor mehr auslasten muss.
-mtune=native, wenn du das Resultat auch auf anderen Systemen nutzen willst.
Das ganze sind Prozessorauslastungen, die mir von der Hostanwendungen für mein Plugin angezeigt werden. Hoch heißt hier schlecht, da die Rechenarbeit pro Zeit fest definiert ist (Echtzeitanwendung!). Wenn ich weniger brauche, habe ich mehr Platz auf dem Prozessor um andere Audio-Plugins laufen zu lassen.
Es ist die Größe, auf die meine Anwender schauen werden. Die haben keinen Profiler oder sonstiges installiert sondern nur die Anzeige ihres Hosts... (Ein Marketing-Futzie würde sagen: Scheißegal, ob das Ding besser performt, hauptsache, es wird weniger im Host angezeigt)
Vielleicht sollte ich mal im CodeAnalyst schauen, woran es bei den verschiedenen Compilern so hapert. Und die 2010er Version ausprobieren.
Vielen Dank soweit
Grüße
Sören
-
rüdiger schrieb:
btw. für windows gibt es doch gar keinen offiziellen GCC :p
Doch Out of the Box in der SUA ..
http://technet.microsoft.com/en-us/library/cc779522(WS.10).aspx
-
btw ^^ schrieb:
rüdiger schrieb:
btw. für windows gibt es doch gar keinen offiziellen GCC :p
Doch Out of the Box in der SUA ..
http://technet.microsoft.com/en-us/library/cc779522(WS.10).aspx
Das ist kein offizieller GCC. Ein offizieller GCC käme vom GNU-Projekt bzw. den GCC Maintainern. Das ist ein GCC-Port von Microsoft. So wie MinGW ein GCC-Port vom MinGW-Projekt ist. Beides ist nicht offiziell. Laut Wikipedia handelt es sich ja sogar nur um einen 3.3er GCC http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX (der ist mehr als 7 Jahre alt!)