VC++ 2005 vs. Mingw 3.4.5





  • Jochen Kalmbach schrieb:

    Ab VC2008 gibt es Compiler-Intrinsics für SSEx
    http://blogs.msdn.com/vcblog/archive/2007/10/18/new-intrinsic-support-in-visual-studio-2008.aspx

    VC 200[3|5] hatten doch schon Intrinsics, oder?

    2. gibt es bereits kostenlose C++ Compiler, die auf SSE optimieren können? Und wird mir das etwas bringen?

    Ja, natuerlich. Beim GCC/MingW besonders interessant in diesem Zusammenhang sind sicher die Versionen >= 4, die besitzen Auto-Vectorisation, d.h. sie koennen gewissen Schleifen automatisch in SSE-Varianten umschreiben. Ich koennt mir vorstellen, dass der VC2005 sowas auch hat.
    Aber kompilier dein Programm doch einfach mal mit dem MinGW 4.2 und schau, ob es merkbar schneller wird.

    Ansonsten musst du wohl mit Intrinsics o. AE. arbeiten. Dazu wuerdest du aber Teile deines Programmes umschreiben muessen. Sollte aber in beiden Compilern funktionieren.



  • VC 200[3|5] hatten doch schon Intrinsics, oder?

    Ja

    Mir wäre es aber lieber wenn der Compiler das alleine packt.

    Ja, natuerlich. Beim GCC/MingW besonders interessant in diesem Zusammenhang sind sicher die Versionen >= 4, die besitzen Auto-Vectorisation, d.h. sie koennen gewissen Schleifen automatisch in SSE-Varianten umschreiben. Ich koennt mir vorstellen, dass der VC2005 sowas auch hat.
    Aber kompilier dein Programm doch einfach mal mit dem MinGW 4.2 und schau, ob es merkbar schneller wird.

    Ich hab mal Mingw 4.2 runtergeladen aber beim kompilieren, tritt ein Fehler auf.

    C:\myProjects\Primer1.0\BoolArray.cpp:19: warning: unused parameter 'addr'
    ...)]+0x8e):: undefined reference to \_\_mingw\_vsnprintf' ...)]+0xdf):: undefined reference to__mingw_vsnprintf'
    :: === Build finished: 2 errors, 1 warnings ===

    Pfade sind eigentlich alle gesetzt.



  • Mach mal ein komplettes Rebuild aller Dateinen und versuch mal -lmingw zu den Linker-Optionen hinzuzufuegen, vielleicht hilft das 🙂

    EDIT: und solltest du den GCC 4.2 ueber deine alte MinGW-Installation drueber installiert haben, dann vergiss nicht, dass du auch neue Versionen der binutils, der mingw-runtime und der WinAPI installieren musst!



  • EDIT: und solltest du den GCC 4.2 ueber deine alte MinGW-Installation drueber installiert haben, dann vergiss nicht, dass du auch neue Versionen der binutils, der mingw-runtime und der WinAPI installieren musst!

    Jo das hat ich vergessen.

    Ich kanns jetzt compilieren, das problem ist nur, das die Performance nur noch knapp die hälfte beträgt.



  • walljumper schrieb:

    EDIT: und solltest du den GCC 4.2 ueber deine alte MinGW-Installation drueber installiert haben, dann vergiss nicht, dass du auch neue Versionen der binutils, der mingw-runtime und der WinAPI installieren musst!

    Jo das hat ich vergessen.

    Ich kanns jetzt compilieren, das problem ist nur, das die Performance nur noch knapp die hälfte beträgt.

    Wow, das ueberrascht mich. Mit welchen Compileroptionen denn?



  • mich hat es auch gewundert

    mit minGW 4.2.1 hat das Program eine laufzeit von ~4,7 sec

    mit minGw 3.4.5 ~2,3 sec

    die Optionen sind beidesmal die selben

    -O3
    -fexpensive-optimizations
    -march=nocona



  • Auch wenn es vermutlich nichts bringen wird, verwende mal statt -march=... -mtune=pentium-m. Zudem lass mal das -fexpensive-optimizations Flag weg. Ansonsten habe ich das Gefühl, dass Version 4 vom GCC noch nicht wirklich gut optimiert, speziell wenn es um SSE geht.



  • jop bringt wirklich nix.

    Ich hab jetzt folgende Zeiten

    VC++ 2005 : ~ 1,3 sec
    MinGw 3.4.5 : ~1,6 sec
    Min Gw 4.2.1: ~ 3,3 Sec

    Ich guck jetzt mal ob ich es mit den Intrinsics von VC++ beschleunigt bekomm.

    Kennt vieleicht jemand eine Übersicht über die SSE Befehle?



  • Was meinst du mit Übersicht? ZB die Dokus von AMD (26568) oder Intel (253666, 253667)?

    Ansonsten, die Intrinsics sollten auch in den entsprechenden Headern (xmmintrin.h, emmintrin.h, pmmintrin.h) ausreichend beschrieben sein.

    Btw, hast du mal GCC 4.2.2 probiert?



  • Was meinst du mit Übersicht? ZB die Dokus von AMD (26568) oder Intel (253666, 253667)?

    Ansonsten, die Intrinsics sollten auch in den entsprechenden Headern (xmmintrin.h, emmintrin.h, pmmintrin.h) ausreichend beschrieben sein.

    Hat sich erledigt, hab die Intel Dokus von nem Kumpel bekommen.

    Aber die Header alleine reichen nicht wirklich.

    Ich hab den Code jetzt so optimiert, dass 4 additionen aufeinmal erledigt werden, leider sinkt die Performance dadurch deutlich.
    Multiplikationen können leider nur 2 gleichzeitig erledigt werden.

    scheint sich also nicht zu lohnen.

    den gcc 4.2.2 probier ich aber mal aus.


Anmelden zum Antworten