Forum: Compiler & IDEs Compile Geschwindigkeit


von Frank (Gast)


Lesenswert?

Hallo,

Bei der Verwendung von Yagarto (2009) hatte ich make mit J2 oder -j4 
ausgeführt. Ein ganzes Projekt wurde schnell Compiliert.

Bei GNU ARM habe ich keine make Files da es in WinIdea integriert ist. 
Gibt es irgendeine Möglichkeit Gnu Arm auf mehreren PC CPUs ausführen zu 
lassen und gibt hier ausch einen -j Schalter

von Anderer Frank (Gast)


Lesenswert?

Frank schrieb:
> gibt hier ausch einen -j Schalter

Ja

von MaWin (Gast)


Lesenswert?

Was soll denn "Gnu Arm" sein?

von Frank (Gast)


Angehängte Dateien:

Lesenswert?

gcc

von MaWin (Gast)


Lesenswert?

Der gcc selbst hat keine Möglichkeit mehrere Dateien zugleich zu 
übersetzen. Dafür braucht es etwas wie make, was den gcc mehrfach 
aufruft.

von foobar (Gast)


Lesenswert?

Der gcc kennt noch -pipe, dann werden Compiler und Assembler parallel 
ausgeführt. Ob das auf Windows geht bzw was bringt, weiß ich aber nicht.

von MaWin (Gast)


Lesenswert?

foobar schrieb:
> dann werden Compiler und Assembler parallel ausgeführt

Wie soll das gehen?

-pipe verwendet pipes statt temporärer Dateien. Auf modernen 
Betriebsystemen mit ordentlichem Page Cache, spielt das aber kaum eine 
Rolle.

von Carl D. (jcw2)


Lesenswert?

MaWin schrieb:
> foobar schrieb:
>> dann werden Compiler und Assembler parallel ausgeführt
>
> Wie soll das gehen?
>
> -pipe verwendet pipes statt temporärer Dateien. Auf modernen
> Betriebsystemen mit ordentlichem Page Cache, spielt das aber kaum eine
> Rolle.

Und dessen Prozessverwaltung die Eigenheiten von Unix hat, die da ist 
Prozesse schnell clones zu können. Hatten wir erst vor ein paar Wochen 
diskutiert, ein ganz beliebtes OS ohne X im Namen kann das nicht und 
braucht deshalb zum Übersetzen gern mal 5..10 fache Zeit.

von foobar (Gast)


Lesenswert?

Bei -pipe geht es darum, Compiler und Assembler parallel zu starten und 
die Daten per Pipe vom ersten zum zweiten zu schicken. Es findet eine 
(begrenzte) parallele Verarbeitung statt. Ohne -pipe wird der Assembler 
erst gestartet, wenn der Compiler fertig ist - schön seriell.

von MaWin (Gast)


Lesenswert?

foobar schrieb:
> Ohne -pipe wird der Assembler
> erst gestartet, wenn der Compiler fertig ist - schön seriell.

Was soll denn der Assembler machen, wenn der Compiler noch am optimieren 
ist?
Ich sehe da keine Möglichkeit zu parallelisieren.

Der Vorteil von -pipe ist eher das Nichtanlegen von Dateien im 
Dateisystem.

von foobar (Gast)


Lesenswert?

> Was soll denn der Assembler machen, wenn der Compiler noch am optimieren
> ist?

Ich weiß nicht, wie es heute ist, aber vor einigen Jahren (als die 
Rechner noch langsamer waren und man das direkt sehen konnte g) kam 
der Assembler-Output funktionsweise raus.

von Carl D. (jcw2)


Lesenswert?

foobar schrieb:
>> Was soll denn der Assembler machen, wenn der Compiler noch am optimieren
>> ist?
>
> Ich weiß nicht, wie es heute ist, aber vor einigen Jahren (als die
> Rechner noch langsamer waren und man das direkt sehen konnte g) kam
> der Assembler-Output funktionsweise raus.

Heute hat man LTO und der Assembler erhält erst am Ende alles an Stück.

von Frank (Gast)


Lesenswert?

OK, der Assembler hat ehe wenig zu tun. Die 50 Files C Code machen den 
Löwenanteil aus.
Ich werde mich mal in die make Geschichte (wieder) einarbeiten. Scheint 
ja die einzige Lösung zu sein meine 32 Kerne (Proll...) mal zu nutzen.

von Sheeva P. (sheevaplug)


Lesenswert?

Frank schrieb:
> OK, der Assembler hat ehe wenig zu tun. Die 50 Files C Code machen den
> Löwenanteil aus.
> Ich werde mich mal in die make Geschichte (wieder) einarbeiten. Scheint
> ja die einzige Lösung zu sein meine 32 Kerne (Proll...) mal zu nutzen.

Wenn ich mich übrigens Recht entsinne, brauchen aktuelle Versionen von 
GNU Make den Schalter "-j" nicht mehr.

von Markus F. (mfro)


Lesenswert?

Sheeva P. schrieb:
> Frank schrieb:
>> OK, der Assembler hat ehe wenig zu tun. Die 50 Files C Code machen den
>> Löwenanteil aus.
>> Ich werde mich mal in die make Geschichte (wieder) einarbeiten. Scheint
>> ja die einzige Lösung zu sein meine 32 Kerne (Proll...) mal zu nutzen.
>
> Wenn ich mich übrigens Recht entsinne, brauchen aktuelle Versionen von
> GNU Make den Schalter "-j" nicht mehr.

Das wäre mir neu.

Kann ich mir auch nicht vorstellen. Dafür sind viel zu viele Makefiles 
draussen, die im Parallelbetrieb Fehler erzeugen.

von Safari (Gast)


Lesenswert?

Markus F. schrieb:
> Das wäre mir neu.
>
> Kann ich mir auch nicht vorstellen. Dafür sind viel zu viele Makefiles
> draussen, die im Parallelbetrieb Fehler erzeugen.

Dem ist nicht so, die letzten Wochen (mit aktuellem make) habe ich 
mehrere Male einen Kernel und Projekte von mir übersetzt, da war immer 
-j nötig/zu vermeiden.

Vielleicht gibt's da eine neue Funktion, dass ein Makefile um mehrere 
Kerne bitten kann, oder so...

von Safari (Gast)


Lesenswert?

Achja, die 32 Kerne bekommst du auch nur ein paar Sekunden damit 
ausgelastet, einen Linux Kernel zu compilieren.

Ich würde da zum Testen Firefox, Chrome oder OpenOffice compilieren.

OpenOffice habe ich das erste mal auf einem 600er Celeron compiliert. 
Das war eine Aufgabe für den Rechner...

von I <3 Makefiles (Gast)


Lesenswert?

Markus F. schrieb:
> Sheeva P. schrieb:
>> Frank schrieb:
>>> OK, der Assembler hat ehe wenig zu tun. Die 50 Files C Code machen den
>>> Löwenanteil aus.
Was ist denn das für eine Zauberei? Löwenanteil beginnt ab einigen 
hundert C++ Dateien mit ordentlich Template-programming...



> Kann ich mir auch nicht vorstellen. Dafür sind viel zu viele Makefiles
> draussen, die im Parallelbetrieb Fehler erzeugen.
Oder der Schalter -j bringt kein Zeitgewinn.
Es handelt sich dabei um stümperhaft geschriebene Makefiles, in denen 
nicht alle Abhängigkeiten unter den Dateien und Subsysteme sauber 
erfasst sind.

Zur Verkürzung der Builddauer lohnt es sich gut & GRÜNDLICH in Make 
einzusteigen. Da kann man ins Staunen geraten, wieviel "Luft" in ganz 
vielen Projekten drin ist.

von dma (Gast)


Lesenswert?

I <3 Makefiles schrieb:

> Zur Verkürzung der Builddauer lohnt es sich gut & GRÜNDLICH in Make
> einzusteigen. Da kann man ins Staunen geraten, wieviel "Luft" in ganz
> vielen Projekten drin ist.

Naja, bei dem üblichen Edit-Compile-Link-Test Zyklus spielt die Compile 
Dauer bei großen Programmen eigentlich keine Rolle mehr.

Die Link Dauer aber sehr wohl! Und da helfen leider keine 22 Cores - da 
braucht man GHz! Ein großer L3 Cache kann auch etwas helfen..

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.