View previous topic :: View next topic |
Author |
Message |
KingCrimson n00b
Joined: 12 May 2006 Posts: 5 Location: London
|
Posted: Fri May 12, 2006 1:51 am Post subject: g++ vs MSVisual Studio C++: g++ code nur halb so schnell??? |
|
|
Hallo,
ich bin neu hier! Gentoo nutze ich seit kurzem und bin begeistert, ganz ehrlich. Ich komme von SuSE, was ich nicht schlecht finde, dennoch will ich näher dran sein. Soviel vorweg.
ICH BIN KEIN IT-PROFI, eher einer der Dinge tut von denen er noch zu wenig Ahnung hat um sie tun zu dürfen.
Wir haben hier viel unter MS VisualStudioC++.NET 1.1 selbstgeschriebene Software auf Windows XP prof SP2 am laufen. Ich habe ein Linux-Rechen-Grid unter SuSE 9.3 mit pvm aufgesetzt, und es wurden die rechenaufwedigen Teile auf Linux portiert, für den pvm-Grid (1 Server, 12 Rechenknechte). Wobei in dieser Anwendung (noch) nicht parallel gerechnet wird, sondern immer nur das gleiche Programm mit verschiedenem Input an die Rechenknechte verschickt wird.
Problem: auf den Linux Maschinen läuft der g++ code nur halb so schnell wie der MSVS code unter XP. Ich habe eine Maschine mit Linux (SuSE und Gentoo) und Windows aufgestzt, um direkt vergleichen zu können, es bleibt dabei. Laufzeit des Beispielprogrammes (min:sec):
-XP: 15:02
-SuSE: 29:20
- Gentoo:22:05
Compiliert man mit dem Intel Compiler, sieht es nicht viel besser aus.
-Compiler:
gcc (GCC) 3.3.5 20050117 (prerelease) (SUSE Linux)
icc (ICC) 9.0 20051201
Der Beispielrechner ist eine hp xw6000 Intel Pentium4 Xeon Doppelprozessormaschine (wie der Rest des Grids auch ...). Die benutzten g++ flags waren
Code: |
make CXXFLAGS=''-O3 -march=pentium4 -ffast-math -msse2 -funroll-loops'' programmname
|
habe auch und und und ...probiert, reißt es aber alles nicht so recht raus.
Fragen: Ist der MSVS compiler tatsächlich besser? Bin ich zu blöd? Kann es an der Betriegssystemkonfiguration (anderen Kernel compilieren) liegen? Soll ich Hyperthreading im BIOS an oder abstellen, und muss dann der Kernel angepasst werden? Warum ist Gentoo etwas schneller als SuSE?
Ich liebe Linux und mag Win gar nicht, drum trifft mich das so hart. Wenn jemand eine oder mehrere der obigen Fragen beantworten kann würde er mir sehr helfen. Ich vermute immer noch, daß ich zu blöd bin, bisher wars fast immer so, und hoffe recht zu behalten, Linux und dem Grid zuliebe, sonst kauft mein Chef noch Win-Lizenzen. Nichts wäre mir peinlicher
Gruss, KC. |
|
Back to top |
|
|
misterjack Veteran
Joined: 03 Oct 2004 Posts: 1657
|
Posted: Fri May 12, 2006 2:05 am Post subject: |
|
|
Quote: | make CXXFLAGS=''-O3 -march=pentium4 -ffast-math -msse2 -funroll-loops'' programmname |
mal -Os statt -O3 probiert? von den restlichen optionen hat man auch nichts unbedingt gutes gehört, funroll-loops zum beispiel lässt ja den code anschwillen _________________ „Meine Meinung steht fest! Bitte verwirren Sie mich nicht mit Tatsachen.“ |
|
Back to top |
|
|
KingCrimson n00b
Joined: 12 May 2006 Posts: 5 Location: London
|
Posted: Fri May 12, 2006 5:19 am Post subject: |
|
|
Danke für den Hinweis, hab 's probiert, der code ist zwar nur halb so groß, aber dafür langsamer als "-O3", ist eher in der Größenordnung von "-O0". Schade. |
|
Back to top |
|
|
Anarcho Advocate
Joined: 06 Jun 2004 Posts: 2970 Location: Germany
|
Posted: Fri May 12, 2006 7:45 am Post subject: |
|
|
Vielleicht liegt es aber auch am Code selber. Du hast ja gesagt er wurde portiert.
Gab es dabei probleme oder musstet ihr nur einen kleinen Teil portieren?
Dazu kommt das g++ noch nicht ganz so toll sein soll wie der C-Compiler vom gcc (habe ich gehört).
Das soll sich wohl mit gcc 4.x geändert haben. Eventuell könntest du mal nen gcc-4.x probieren.
EDIT: Ach ja, was für Operationen führt das Programm aus? Ist es eher Plattenintensiv oder nur Integerzahlen/Realzahlen? _________________ ...it's only Rock'n'Roll, but I like it! |
|
Back to top |
|
|
_hephaistos_ Advocate
Joined: 07 Apr 2004 Posts: 2694 Location: salzburg, austria
|
Posted: Fri May 12, 2006 7:53 am Post subject: |
|
|
jo, mich würd auch interessieren, wie das mit gcc-4.1.X ausschaut und wie der code so aufgebaut is...
@Anarcho: g++ is der c++ compiler von der gcc (gnu compiler collection). cc is der c compiler
cheers _________________ -l: signature: command not found |
|
Back to top |
|
|
franzf Advocate
Joined: 29 Mar 2005 Posts: 4565
|
Posted: Fri May 12, 2006 7:54 am Post subject: |
|
|
Halb so schnell...
Habt ihr da nur Multi-Prozessor-Rechner rumstehen?
Ist der Code darauf ausgelegt?
Hast du dann den Linux-Kernel mit Unterstützung für Multiple prozessors übersetzt?
(-> Prozessor type an features im menuconfig)
Wenn nicht wäre es eine Erklärung... |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Fri May 12, 2006 8:28 am Post subject: |
|
|
Die große Frage ist: Was macht das Programm? Welche Bibliotheken werden benutzt? Evtl. liegt dort die Ursache... _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
|
hoschi Advocate
Joined: 19 Jul 2003 Posts: 2517 Location: Ulm, Germany, Europe
|
Posted: Fri May 12, 2006 2:03 pm Post subject: |
|
|
Oder kurz gesagt: Das Programm sollte erstmal unter der GPL erscheinen... _________________ Just you and me strogg! |
|
Back to top |
|
|
_hephaistos_ Advocate
Joined: 07 Apr 2004 Posts: 2694 Location: salzburg, austria
|
Posted: Fri May 12, 2006 2:35 pm Post subject: |
|
|
danke hoshi für deinen beitrag... _________________ -l: signature: command not found |
|
Back to top |
|
|
Anarcho Advocate
Joined: 06 Jun 2004 Posts: 2970 Location: Germany
|
Posted: Fri May 12, 2006 3:05 pm Post subject: |
|
|
_hephaistos_ wrote: | jo, mich würd auch interessieren, wie das mit gcc-4.1.X ausschaut und wie der code so aufgebaut is...
@Anarcho: g++ is der c++ compiler von der gcc (gnu compiler collection). cc is der c compiler
cheers |
Und was habe ich gesagt, bitte? _________________ ...it's only Rock'n'Roll, but I like it! |
|
Back to top |
|
|
_hephaistos_ Advocate
Joined: 07 Apr 2004 Posts: 2694 Location: salzburg, austria
|
Posted: Fri May 12, 2006 4:39 pm Post subject: |
|
|
omg sorry
net gscheid gelesen... _________________ -l: signature: command not found |
|
Back to top |
|
|
Ampheus l33t
Joined: 19 Oct 2005 Posts: 814 Location: Rheine, NRW, Germany
|
Posted: Fri May 12, 2006 6:05 pm Post subject: |
|
|
Es wäre auf jeden Fall einen Versuch wert, SMP im Kernel zu aktivieren. Findet sich unter "Processor type and features". |
|
Back to top |
|
|
platinumviper l33t
Joined: 12 Feb 2004 Posts: 658 Location: Munich, Germany
|
Posted: Sat May 13, 2006 12:18 am Post subject: Re: g++ vs MSVisual Studio C++: g++ code nur halb so schnell |
|
|
KingCrimson wrote: | Kann es an der Betriegssystemkonfiguration (anderen Kernel compilieren) liegen? Soll ich Hyperthreading im BIOS an oder abstellen, und muss dann der Kernel angepasst werden? |
Sieht so aus, als ob Du SMP im Kernel nicht aktiviert hättest, Was kommt denn bei "cat /proc/cpuinfo" raus? Bei aktiviertem Hyperthreading sollten vier, ohne HT zwei CPUs angezeigt werden. Meistens ist es sinnvoll HT einzuschalten, immer wenn ein Thread auf eine I/O Operation wartet, langweilt sich nur eine virtuelle CPU, die zweite kann weiter arbeiten. Für HT solltest Du im Kernel zusätzlich die Option SMT einschalten, SMP reicht zwar prinzipiell auch, aber mit SMT wird noch einmal optimiert.
KingCrimson wrote: | Warum ist Gentoo etwas schneller als SuSE? |
Weil Du Dein System auf Pentium 4 optimiert hast, SuSE muss aber auch auf älteren Prozessoren laufen, das schränkt die Optimierungsmölichkeiten natürlich stark ein. Außerdem sind unterschiedliche GCC Versionen installiert.
Die Compiler liefern sich ein ständiges Kopf-an-Kopf Rennen, Du hast mit Sicherheit etwas falsch konfiguriert. Da Du die "Rechenknechte" für ihre Aufgabe optimieren kannst, solltest Du bessere Ergebnisse erziehlen als unter Windows. Schmeiß alles aus dem Kernel was Du nicht brauchst, USB, SATA, IDE, Parallelport ... sind überflüssig.
platinumviper _________________ No money back garantee. In case of problems, don't call us, we call you. |
|
Back to top |
|
|
misterjack Veteran
Joined: 03 Oct 2004 Posts: 1657
|
Posted: Sat May 13, 2006 3:26 am Post subject: Re: g++ vs MSVisual Studio C++: g++ code nur halb so schnell |
|
|
platinumviper wrote: | KingCrimson wrote: | Kann es an der Betriegssystemkonfiguration (anderen Kernel compilieren) liegen? Soll ich Hyperthreading im BIOS an oder abstellen, und muss dann der Kernel angepasst werden? |
Sieht so aus, als ob Du SMP im Kernel nicht aktiviert hättest, Was kommt denn bei "cat /proc/cpuinfo" raus? Bei aktiviertem Hyperthreading sollten vier, ohne HT zwei CPUs angezeigt werden. Meistens ist es sinnvoll HT einzuschalten, immer wenn ein Thread auf eine I/O Operation wartet, langweilt sich nur eine virtuelle CPU, die zweite kann weiter arbeiten. Für HT solltest Du im Kernel zusätzlich die Option SMT einschalten, SMP reicht zwar prinzipiell auch, aber mit SMT wird noch einmal optimiert. |
Um das ganze voll aus zu nutzen sollte glibc mit USE="ntpl ntplonly" kompiliert sein _________________ „Meine Meinung steht fest! Bitte verwirren Sie mich nicht mit Tatsachen.“ |
|
Back to top |
|
|
KingCrimson n00b
Joined: 12 May 2006 Posts: 5 Location: London
|
Posted: Mon May 15, 2006 6:37 am Post subject: |
|
|
Erstmal vielen Dank
für die zahlreichen Antworten. Ich beginne nun mit der Aufarbeitung.
Antworten meinerseits:
+ Hyperthreading ist BIOS-seitig an.
+ viel war nicht zu portieren, eher kleinere Änderungen.
+ es wird fast aussschließlich gerechnet, nur am Anfang etwas von Platte gezogen (approx. 1s) und am Ende was kleines geschrieben.
+ GPL: code posten geht nicht, ich habe eine Familie zu ernähren.
+ SMP und SMT sind aktiviert. Ich sehe vier cpus.
Gruß KC. |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Mon May 15, 2006 6:45 am Post subject: Re: g++ vs MSVisual Studio C++: g++ code nur halb so schnell |
|
|
misterjack wrote: |
Um das ganze voll aus zu nutzen sollte glibc mit USE="ntpl ntplonly" kompiliert sein
|
Du meinst nptl (Native POSIX Thread Library).
nptlonly braucht man nicht unbedingt, das kann sogar zu Problemen mit einigen Programmen führen.
Und da KingCrimson schreibt, daß vor allem gerechnet wird, wird das im konkreten Fall sicher nicht viel bringen (ebensowenig wie Hyperthreading).
Ich würde mal probieren, in BIOS und Kernel SMP zu aktivieren, Hyperthreading aber zu deaktivieren. _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
|
KingCrimson n00b
Joined: 12 May 2006 Posts: 5 Location: London
|
Posted: Tue May 16, 2006 4:18 am Post subject: |
|
|
@schachti:
Es scheint als hättest Du den Nagel auf den Kopf getroffen.
Der Chef hat an den genutzten libs gedreht und siehe da, alles wird besser. Es liegt wohl daran, daß Zeit/Datums und Kalenderroutinen aufgerufen werden und die Linux lib da wohl sehr viel langsamer ist als die unter win oder einfach ungünstig oft aufgerufen wird. Da wurde jetzt ein wenig nachgebessert und schon sind wir bei Laufzeiten von 21 min (Linux) zu 15 min (win) angekommen. Damit sind SuSE und Gentoo etwa gleichauf, Gentoo immer noch etwas besser, ich bastle noch an alternativem SuSE-Kernel. Langfristig will ich ohnehin auf schmale schnelle Gentoo-Systeme wechseln.
Gruss KC. |
|
Back to top |
|
|
misterjack Veteran
Joined: 03 Oct 2004 Posts: 1657
|
Posted: Tue May 16, 2006 5:17 am Post subject: Re: g++ vs MSVisual Studio C++: g++ code nur halb so schnell |
|
|
schachti wrote: | nptlonly braucht man nicht unbedingt, das kann sogar zu Problemen mit einigen Programmen führen. |
halte ich für ein gerücht. jedenfalls habe ich auf zwei x86er und amd64er damit fahren. keine probs, die ich auf dieses useflag rückgeführt habe _________________ „Meine Meinung steht fest! Bitte verwirren Sie mich nicht mit Tatsachen.“ |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Tue May 16, 2006 8:41 am Post subject: |
|
|
Ich hatte das mal mit einem Paket, das sich partout nicht installieren ließ. Erst, als ich die glibc nur mit nptl und ohne nptlonly neu kompiliert hatte, ging es. Ist inzwischen aber schon einige Monate her. Und da der einzige Nachteil, die glibc ohne nptlonly zu kompilieren, darin besteht, daß die glibc zwei Mal gebaut wird und das kompilieren daher doppelt so lange dauert, ist das doch ok... _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
|
|