GCC + VS Compiler kombinieren?



  • 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.

    Siehe http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options



  • 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.

    Siehe http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

    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!)


Anmelden zum Antworten