Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
g++ vs MSVisual Studio C++: g++ code nur halb so schnell???
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
KingCrimson
n00b
n00b


Joined: 12 May 2006
Posts: 5
Location: London

PostPosted: Fri May 12, 2006 1:51 am    Post subject: g++ vs MSVisual Studio C++: g++ code nur halb so schnell??? Reply with quote

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 :oops:

Gruss, KC.
Back to top
View user's profile Send private message
misterjack
Veteran
Veteran


Joined: 03 Oct 2004
Posts: 1657

PostPosted: Fri May 12, 2006 2:05 am    Post subject: Reply with quote

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
View user's profile Send private message
KingCrimson
n00b
n00b


Joined: 12 May 2006
Posts: 5
Location: London

PostPosted: Fri May 12, 2006 5:19 am    Post subject: Reply with quote

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
View user's profile Send private message
Anarcho
Advocate
Advocate


Joined: 06 Jun 2004
Posts: 2970
Location: Germany

PostPosted: Fri May 12, 2006 7:45 am    Post subject: Reply with quote

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
View user's profile Send private message
_hephaistos_
Advocate
Advocate


Joined: 07 Apr 2004
Posts: 2694
Location: salzburg, austria

PostPosted: Fri May 12, 2006 7:53 am    Post subject: Reply with quote

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
View user's profile Send private message
franzf
Advocate
Advocate


Joined: 29 Mar 2005
Posts: 4565

PostPosted: Fri May 12, 2006 7:54 am    Post subject: Reply with quote

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
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Fri May 12, 2006 8:28 am    Post subject: Reply with quote

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
View user's profile Send private message
hoschi
Advocate
Advocate


Joined: 19 Jul 2003
Posts: 2517
Location: Ulm, Germany, Europe

PostPosted: Fri May 12, 2006 2:03 pm    Post subject: Reply with quote

Oder kurz gesagt: Das Programm sollte erstmal unter der GPL erscheinen... ;)
_________________
Just you and me strogg!
Back to top
View user's profile Send private message
_hephaistos_
Advocate
Advocate


Joined: 07 Apr 2004
Posts: 2694
Location: salzburg, austria

PostPosted: Fri May 12, 2006 2:35 pm    Post subject: Reply with quote

danke hoshi für deinen beitrag... :roll:
_________________
-l: signature: command not found
Back to top
View user's profile Send private message
Anarcho
Advocate
Advocate


Joined: 06 Jun 2004
Posts: 2970
Location: Germany

PostPosted: Fri May 12, 2006 3:05 pm    Post subject: Reply with quote

_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
View user's profile Send private message
_hephaistos_
Advocate
Advocate


Joined: 07 Apr 2004
Posts: 2694
Location: salzburg, austria

PostPosted: Fri May 12, 2006 4:39 pm    Post subject: Reply with quote

omg sorry ;-)
net gscheid gelesen...
_________________
-l: signature: command not found
Back to top
View user's profile Send private message
Ampheus
l33t
l33t


Joined: 19 Oct 2005
Posts: 814
Location: Rheine, NRW, Germany

PostPosted: Fri May 12, 2006 6:05 pm    Post subject: Reply with quote

Es wäre auf jeden Fall einen Versuch wert, SMP im Kernel zu aktivieren. Findet sich unter "Processor type and features".
Back to top
View user's profile Send private message
platinumviper
l33t
l33t


Joined: 12 Feb 2004
Posts: 659
Location: Munich, Germany

PostPosted: Sat May 13, 2006 12:18 am    Post subject: Re: g++ vs MSVisual Studio C++: g++ code nur halb so schnell Reply with quote

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
View user's profile Send private message
misterjack
Veteran
Veteran


Joined: 03 Oct 2004
Posts: 1657

PostPosted: Sat May 13, 2006 3:26 am    Post subject: Re: g++ vs MSVisual Studio C++: g++ code nur halb so schnell Reply with quote

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
View user's profile Send private message
KingCrimson
n00b
n00b


Joined: 12 May 2006
Posts: 5
Location: London

PostPosted: Mon May 15, 2006 6:37 am    Post subject: Reply with quote

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
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Mon May 15, 2006 6:45 am    Post subject: Re: g++ vs MSVisual Studio C++: g++ code nur halb so schnell Reply with quote

misterjack wrote:

Um das ganze voll aus zu nutzen sollte glibc mit USE="ntpl ntplonly" kompiliert sein


Du meinst nptl (Native POSIX Thread Library). :wink:

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
View user's profile Send private message
KingCrimson
n00b
n00b


Joined: 12 May 2006
Posts: 5
Location: London

PostPosted: Tue May 16, 2006 4:18 am    Post subject: Reply with quote

@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
View user's profile Send private message
misterjack
Veteran
Veteran


Joined: 03 Oct 2004
Posts: 1657

PostPosted: Tue May 16, 2006 5:17 am    Post subject: Re: g++ vs MSVisual Studio C++: g++ code nur halb so schnell Reply with quote

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
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Tue May 16, 2006 8:41 am    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum