Forum: Compiler & IDEs GCC bei kompilieren beschleuigen


von Frederick (Gast)


Lesenswert?

Hallo,

Ich nutze Codesourcery g++ und finde das kompilieren sehr langsam.

Ich kenne zwar make -j5 (Quadcore) allerdings habe ich keine Möglichkeit 
das irgendwo anzugeben da meine IDE (Winidea von iSystem) eine interne 
make durchführt. Kann nur Schalter füe arm-eabi-gcc.exe angeben.
Gibt es noch andere Möglichkeiten mehrere Kerne beim kompilieren zu 
nutzen?

von Ben _. (burning_silicon)


Lesenswert?

Kauf einen schnelleren Computer!

von Stefanie B. (sbs)


Lesenswert?

clang

von (prx) A. K. (prx)


Lesenswert?

Ben _ schrieb:
> Kauf einen schnelleren Computer!

Billiger: Den Compiler schön klassisch über Makefiles benutzen. Das geht 
beim Codesourcery immer, mit jeder IDE, weil man die dann einfach 
weglässt, bzw. nur als Editor/Debugger nutzt. Ausserdem kann man 
Quellfiles so strukturieren, dass nicht bei jeder kleine Änderung stets 
das ganze Projekt neu übersetzt werden muss.

von Frederick (Gast)


Lesenswert?

Der Gedanke dahin war durchaus schon da, allerdings weiß ich im moment 
nicht wie ich das extraieren kann. Eine make.exe exitiert auch nicht.

Früher hatte ich yagarto und externes Makefile, gestört hat mich aber 
das alles immer wieder eingetragen werden muste bei neuen Modulen.

Aber wenn es keine andere Möglichkeit gibt, es ist schon ein großer 
unterschied zwischen -j2 und -j5.

von Sven P. (Gast)


Lesenswert?

Wenn du elendige C++-Header hast, könntest du die vorkompilieren lassen.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Frederick schrieb:
> Schalter füe arm-eabi-gcc

- -O0 optimiert auf Resourcenverbrauch des Hosts
- -pipe beim Compilieren
- -g0 denn debug-Info wie DWARF-3 vergrößert massiv dir Objekte und
   Symboltabellen, insbesondere geht das Linken schneller
- Preprocessed Headers (PPH) verwenden
- Auf Optimierungen wie LTO verzichten
- Keine Dumps oder temporären Dateien erstellen lassen
- Bei selbsterstelltem GCC darauf achten, daß dieser mit -O2 o.ä.
  erzeugt wurde!

von Frederick (Gast)


Lesenswert?

Eigendlich mache ich "nur" c mit STMf103/105/107. Arbeite aber mit der 
lib zusammen nd das kann schonmal 10Sekunden dauern. Mit -j5 wären es ca 
3 Sekunden (geschätzt).

Wenn man es also nutzen kann will ich es auch, aber abgesehen von diesem 
Schalter hab ich im Netz nichts gefunden.

von Frederick (Gast)


Lesenswert?

@Johann

Ich meine nicht die Code Optimierungen, sondern die Zeit für das 
Kompilieren an sich wenn es nur auf einem Kern läuft bzw. immer nur ein 
Modul gleichzeitig bearbeitet wird.

von pilieren beschleu (Gast)


Lesenswert?

ccache

oder gibt's das nicht für W*dows?

von (prx) A. K. (prx)


Lesenswert?

Frederick schrieb:
> Ich meine nicht die Code Optimierungen,

Er auch nicht. Ohne Optimierung zu übersetzen spart Übersetzungszeit.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Frederick schrieb:

> Ich kenne zwar make -j5 (Quadcore)

Da geht gerne auch -j10, denn Operationen wie I/O können parallelisiert 
werden durch Plattencontroller, DMA etc.  Während ein Prozess auf seine 
Daten wartet, kann der andere schon compilieren.

von Frederick (Gast)


Lesenswert?

OK, da ich noch debugge ist der Schalter -O0

von pilieren beschleu (Gast)


Lesenswert?

Hallo Johann,

>- -pipe beim Compilieren

Wieso wird das eigentlich nicht standardmässig verwendet?
Wäre doch mehr als logisch

von Frederick (Gast)


Lesenswert?

Also makefile, Wo ist den wohl mein make.exe geblieben oder muss man das 
extra heunterladen.

Beim ITAG FIFTY ist es nicht dabei.

von (prx) A. K. (prx)


Lesenswert?

-j10 bringt aber nur was wenn Projekt riesig gross (bei µCs 
unwahrscheinlich) oder zu wenig RAM vorhanden ist. Andernfalls ist nach 
dem ersten Lauf alles was relevant ist im Disk-Cache.

von (prx) A. K. (prx)


Lesenswert?

Frederick schrieb:
> Also makefile, Wo ist den wohl mein make.exe geblieben oder muss man das
> extra heunterladen.

Such mal dort: http://www.mingw.org/

von pilieren beschleu (Gast)


Lesenswert?

Noch 'ne Frage:

> debug-Info wie DWARF-3 vergrößert massiv dir Objekte

Was ist eigentlich der spezifische Nutzen von DWARF-3?

Wo kann ich das nachlesen?

Danke!

von (prx) A. K. (prx)


Lesenswert?

Ohne Debug-Info ist der Debugger ziemlich aufgeschmissen. Wenn du 
Debugging per printf machst, dann brauchst du die nicht. Bei JTAG&Co 
hingegen schon.

von pilieren beschleu (Gast)


Lesenswert?

Hallo prx

>Ohne Debug-Info ist der Debugger ziemlich

Das ist mir schon klar.
Die Frage war eigentlich "Was bringt DWARF-3 im
Vergleich zu DWARF-1,2 oder anderen, kompakteren  Debuginfo-Formaten"
Sorry war unklar formuliert.

von martin (Gast)


Lesenswert?

Tja. Das spawnen eines Prozesses ist in Windows echt lahm.
Ein DS-Projekt von mir (cross) kompiliert auf linux 4 minuten (-j5),
auf Windows (selbe GCC-version, selbes target) knapp 15

von (prx) A. K. (prx)


Lesenswert?


von (prx) A. K. (prx)


Lesenswert?

Da er Codesourcery verwendet kann er auf Linux umsteigen. Das erspart 
ihn die Suche nach make. ;-)

von Alex W. (a20q90)


Lesenswert?

pilieren beschleu schrieb:
> ccache
>
> oder gibt's das nicht für W*dows?

>>  W*dows?

Was ist das?

von Marco M. (marco_m)


Lesenswert?

In der aktuellen Version scheint CodeSourcery Eclipse+CDT zu sein, hier 
auf Seite 5:

http://communities.mentor.com/mgcx/servlet/JiveServlet/previewBody/3033-102-2-5991/Building%20a%20Linux%20Kernel%20Using%20Sourcery%20CodeBench.pdf

steht wie man parallel baut:

a. Select Projects > properties.
   b. Select C/C++ Build.
   c. Select the Behavior tab.
   d. Enable Parallel Builds.
     i. Select the Use Parallel Build option.
     ii. Select Use Parallel Jobs.
     iii. Enter the number of parallel jobs to run

..genauso wie bei Eclipse+CDT eben. Ist das bei dir auch so?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

A. K. schrieb:
> -j10 bringt aber nur was wenn Projekt riesig gross

Konkret: es muss aus mindestens 10 Quelldateien bestehen, denn die
Parallelisierung erfolgt auf der Ebene von "make".  Wenn man nur
eine Quelldatei hat, die compiliert und gelinkt werden muss, wird
"make" auch mit -j5 oder -j10 nur in der Lage sein, diese zuerst
compilieren und danach linken zu lassen.

Zusammen mit -pipe ließe sich beim Compilieren der Assembler auf
einem zweiten Prozessor ausführen.  Allerdings braucht der insgesamt
so wenig CPU-Zeit, dass das auf aktuellen Prozessoren vernachlässigbar
ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.