Compiler mit Multi Core unterstätzung? Also Multithreaded?
-
Das ist ein undokumentierter Schalter: /MP
Sutters Mill schrieb:
Enjoy! Many of you will no doubt like /MP -- parallel builds.
(I probably shouldn't say this, but I just can't help myself: /MP is actually already there in VC++ 2007, and I use it all the time myself -- on a 2-core machine the compile phase goes nearly 2x faster, but there's not much difference in the link phase. We just didn't document it because we didn't have time to fit-and-finish it, and if you try it you will find rough edges. For example, you may see oddly interleaved build messages in the output window, and if you Ctrl-Break a build you may need to do a full rebuild next time. You Have Been Warned. But have fun experimenting, and just don't tell anyone I told you...)
-
frenki schrieb:
Das ist ein undokumentierter Schalter: /MP
Sutters Mill schrieb:
Enjoy! Many of you will no doubt like /MP -- parallel builds.
(I probably shouldn't say this, but I just can't help myself: /MP is actually already there in VC++ 2007, and I use it all the time myself -- on a 2-core machine the compile phase goes nearly 2x faster, but there's not much difference in the link phase. We just didn't document it because we didn't have time to fit-and-finish it, and if you try it you will find rough edges. For example, you may see oddly interleaved build messages in the output window, and if you Ctrl-Break a build you may need to do a full rebuild next time. You Have Been Warned. But have fun experimenting, and just don't tell anyone I told you...)
sehr geil. naja, so nen schalter sollte man auf keinen fall public machen, am ende würde MS auch noch mit ihrem studio gewinn machen
-
Danke, ich benutze jetzt Codeblocks mit MinGW, läuft super schnell (alte CPU 6-8 Minuten jetzt etwas mehr als 1 Minute).. Aber der Linker kann wohl kein Multicore.. gibt es da noch alternativen (ich kann ja ziemlich viele Compiler in Codeblocks einbinden)...
-
Ich bezweifel mal stark, dass es Sinn macht, denn Link-Vorgang auf mehrere Threads aufzuteilen. Der Linker Packt ja alle Daten hintereinander in die Datei. Was soll man da parallelisieren?
-
ich kann euch nach wie vor nur incrediBuild ans Herz lesen oder zumindest mal die readme durchzulesen. es gibt auch IncrediLink, aber wie mein Vorredner schon sagt ist das Linken nicht wirklich einfach zum Parallelisieren...
-
muffmolch schrieb:
wie mein Vorredner schon sagt ist das Linken nicht wirklich einfach zum Parallelisieren...
Mir ist doch egal wie schwer das ist wenn fähige Programmierer das hinkriegen
Naja und Incredibuild, ich bevorzuge Sachen die auch unter Linux laufen und nur wegen dem Linker werd ich nicht zu Windows wechseln ^^
-
NeWs0fTzzz schrieb:
Mir ist doch egal wie schwer das ist wenn fähige Programmierer das hinkriegen
Die Frage ist, ob das überhaupt möglich ist. Die Zahlen von 1 bis 1000000 der Reihe nach ausgeben, lässt sich definitiv nicht parallelisieren.
Beim Linken hast du ein ähnliches Problem. Du musst nämlich etwas in einer bestimmten Reihenfolge tun. Man kann vielleicht ein Paar nebensächliche Sachen (Hash-Tabelle verwalten usw.) in Threads auslagern. Ich weis nur nicht, ob das was bringt.
Ich kann dir die Frage nicht beantworten, ob es schwer oder garnicht möglich ist. Nur... es könnte halt sein, dass es keinen Sinn macht, zu parallelisieren.
-
ProgChild schrieb:
Die Frage ist, ob das überhaupt möglich ist. Die Zahlen von 1 bis 1000000 der Reihe nach ausgeben, lässt sich definitiv nicht parallelisieren.
Man nehme imaginäre Funktion "void putLine(int zeile, std::string text)" und "std::string intToStr(int input)"
Code:
Thread1{ for(int i=1; i<=500000; i++){ putLine(i*2, intToStr(i*2)); } } Thread2{ for(int i=0; i<500000; i++){ putLine( (i*2)+1, intToStr( (i*2)+1 )); } }
-
NeWs0fTzzz schrieb:
muffmolch schrieb:
wie mein Vorredner schon sagt ist das Linken nicht wirklich einfach zum Parallelisieren...
Mir ist doch egal wie schwer das ist wenn fähige Programmierer das hinkriegen
Naja und Incredibuild, ich bevorzuge Sachen die auch unter Linux laufen und nur wegen dem Linker werd ich nicht zu Windows wechseln ^^ach komm schon
aber das hattest du zuvor auch nicht erwähnt, hehe
-
muffmolch schrieb:
aber das hattest du zuvor auch nicht erwähnt, hehe
Fürs Kompilieren WÄRE ich auf Windows gewechselt. Aber das Linken dauert jetzt gerade mal 5 Sekunden und für 2,5 Sekunden Zeitersparnis ist es mir das definitiv nicht Wert!
-
NeWs0fTzzz schrieb:
muffmolch schrieb:
aber das hattest du zuvor auch nicht erwähnt, hehe
Fürs Kompilieren WÄRE ich auf Windows gewechselt. Aber das Linken dauert jetzt gerade mal 5 Sekunden und für 2,5 Sekunden Zeitersparnis ist es mir das definitiv nicht Wert!
ich glaub da hast du mich missverstanden. das linken unter windows ist auch nicht schneller... das gibt sich nicht viel. aber unter linux brauchst du ja nun wirklich nur "make -j 4" eingeben und wenn du auf mehreren Rechnern parallel Kompilieren möchtest, dann bietet sich distcc an.
Makefiles lassen sich schoen mit cmake generieren, zumal du dann platform spezifisch mit zwei maus-/tasenklicks project-makefiles erstellen kannst.
-
NeWs0fTzzz schrieb:
Man nehme imaginäre Funktion "void putLine(int zeile, std::string text)" und "std::string intToStr(int input)"
Code:
Thread1{ for(int i=1; i<=500000; i++){ putLine(i*2, intToStr(i*2)); } } Thread2{ for(int i=0; i<500000; i++){ putLine( (i*2)+1, intToStr( (i*2)+1 )); } }
Ich schrieb der Reihe nach. Genau das tust du nicht. Dein Problem ist nämlich deine imaginäre Funktion. Zeig mir mal eine Funktion, die das mit dem Aufwand in eine Datei schreibt.
Der Festplattenzugriff lässt sich nicht parallelisieren, ganz einfach, weil die Festplatte nur seriell angesprochen werden kann.