GCC bude automaticky paralelizovat
12. 3. 2009 13:12
Adam Štrauch
Do GCC 4.4 byl zařazen Graphite Framework, který bude použit pro automatickou paralelizaci některých cyklů. Zatím není jasné o kolik by se měl na multiprocesorových systémech zvednout výkon ani kolik procent cyklů bude moci být takhle zparalelizováno. Je to ale dobrý krok vpřed.
Dále čtěte…
- Srovnání výkonu GCC, LLVM/Clang a AMD Open64 8. 11. 2011 7:07
- Vyšlo GCC 4.6.2 1. 11. 2011 13:59
- Vyšlo GCC 4.6 28. 3. 2011 17:12
- Vyšel první release candidate GCC 4.6.0 15. 3. 2011 11:31
- GCC 4.4.5 už netrpí problémy s výkonem 4. 10. 2010 9:15
Karásek (neregistrovaný)
12. 3. 2009 13:31
Nový
Co to vlastně je?
celé vlákno
Zkoušel jsem hledat pojem "paralelizace" ve slovníčku pojmů (tady na Rootu) a nenašel:-(
Ray (neregistrovaný)
12. 3. 2009 13:34
Nový
Re: Co to vlastně je?
celé vlákno
V podstatě jde o to, že kromně už tak zbugovanýho kódu, co GCC už tak produkuje, bude bugovat ještě víc a to na více CPU najednou :) Už se těším, jak rozloží algoritmy na paralelní.... Přibude další "must use" volba --disable :D
R.
R.
Karásek (neregistrovaný)
12. 3. 2009 13:38
Nový
Re: Co to vlastně je?
celé vlákno
Můžete uvést nějaký (jednoduchý) příklad toho zbugovaného kódu vyprodukovaného GCC?
12. 3. 2009 13:44
Nový
Re: Co to vlastně je?
celé vlákno
Jen co nekde najde ten vnitropodnikovy obeznik z Reedmondu ...
ultra force 3000 (neregistrovaný)
13. 3. 2009 1:33
Nový
Re: Co to vlastně je?
celé vlákno
jaktoze mas porad auru 71?
TiCo (neregistrovaný)
12. 3. 2009 15:14
Nový
Re: Co to vlastně je?
celé vlákno
Mno když nejaka lamka zapina optimalizaci kodu, tak se pak nemuze divit, ze to generuje zbugovanej kod :-D (btw to dela i VS)
Marex (neregistrovaný)
12. 3. 2009 16:26
Nový
Re: Co to vlastně je?
celé vlákno
jo, obcas se stava napr. to, ze gcc nedogeneruje funkce a podobne. Bohuzel pro lidi bez dostatecnych znalosti v oblasti prekladacu se to muze jevit jako bug a pak zacnou rvat kolem sebe, ze gcc je nahouby.
12. 3. 2009 16:48
Nový
Re: Co to vlastně je?
celé vlákno
Co je to "nedogeneruje funkce" -co si mám pod tím představit? Ptám se se seriozně, protože jako člověk neznalý překladačů nechci roztrubovat, že GCC je na houby. :-)
12. 3. 2009 19:28
Nový
Re: Co to vlastně je?
celé vlákno
Kazdy prekladac ma sve bugy, nejen gcc. Ale rekl bych ze MSCC je pri optimalizovanem kodu mirne stabilnejsi, hlavne pri okrajovych volbach typu optimalizace na rychlost/velikost ma gcc tendenci produkovat nefunkcni strojovy kod. Ale nerek bych ze GCC je na houby, v podstate je docela jedno ktery C++ prekladac pouzijete, na neco temer urcite narazite, pokud je to trochu vetsi/komplexnejsi kod. (i kdyz neni toho moc, odhadem bych rekl ze tak pod 0.5% bugu se ukaze jako chyba kompilace, vetsina je na strane zdrojaku)
uživatel si přál zůstat v anonymitě
12. 3. 2009 23:50
Nový
Re: Co to vlastně je?
celé vlákno
k VS od MS. stava sa mi s zeleznou pravidelnostou ze ich inkrementalne skompilovana binarka robi uplne blbosti. Clovek sa divi co mu to z debugera lezie, ked zistuje kde je problem. no jo... zmazat a zbuildovat cele znovu... V starsom vs 6.0 sa mi to nestavalo.
na druhej strane myslim, ze VS generuje rychlejsi kod, C++ builder cca 10x pomalsi ako VS. gc++ este zmeriam.
na druhej strane myslim, ze VS generuje rychlejsi kod, C++ builder cca 10x pomalsi ako VS. gc++ este zmeriam.
13. 3. 2009 9:19
Nový
Re: Co to vlastně je?
celé vlákno
"VS generuje rychlejsi kod" s novejsim 4.x gcc uz to nemusi byt tak pravidelne, kdyz uz z gcc vyleze neco funkcniho, tak to ma obcas lepsi vykon nez MSCC, nektere veci se povedou gcc zkompilovat lip. A taky zalezi na konkretnim CPU. Ale proste automaticky predpokladat ze MSCC v release udela rychlejsi binarku nez gcc uz nejde, pokud cloveku chybi i opravdu poslednich par procent vykonu, tak je nutne zkusit oboji a merit, merit, merit.
Hlavne VS6 (C++) bylo opravdu hodne stabilni, jenom obcas se sesype cely kompilator kdyz je .cpp moc velky/slozity nebo ma spoustu vnitrnich cyklu v jedne funkci, ale kdyz prezije bez padu, tak vysledni kod byl snad pokazde co pamatuji spravny. Novejsi MSCC jsem uz tolik nepouzival, nemam dost zkusenosti na hodnoceni. Ale problemy s neaktualnimi predkompilovanymi hlavickami byly obcas i u VS6, v pripade podivneho chovani bylo "Rebuild All" prvnim krokem lazeni.
Hlavne VS6 (C++) bylo opravdu hodne stabilni, jenom obcas se sesype cely kompilator kdyz je .cpp moc velky/slozity nebo ma spoustu vnitrnich cyklu v jedne funkci, ale kdyz prezije bez padu, tak vysledni kod byl snad pokazde co pamatuji spravny. Novejsi MSCC jsem uz tolik nepouzival, nemam dost zkusenosti na hodnoceni. Ale problemy s neaktualnimi predkompilovanymi hlavickami byly obcas i u VS6, v pripade podivneho chovani bylo "Rebuild All" prvnim krokem lazeni.
uživatel si přál zůstat v anonymitě
13. 3. 2009 11:38
Nový
Re: Co to vlastně je?
celé vlákno
Me u MSCC vytacelo, ze hlasi nepodporovane konstrukce jako chybu syntaxe, takze se takova chyba opravdu vyborne hleda... GCC v takovem pripade napise neco jako "sorry, not implemented".
Meril jsem rychlost behu vysledne binarky na jednom nasem pocitacim programu a jak GCC tak ICC udelalo rychlejsi kod (muze byt rozdil i v tom, ze binarku z ICC a GCC jsem poustel na linuxu, kdezto z MSCC ve win).
Meril jsem rychlost behu vysledne binarky na jednom nasem pocitacim programu a jak GCC tak ICC udelalo rychlejsi kod (muze byt rozdil i v tom, ze binarku z ICC a GCC jsem poustel na linuxu, kdezto z MSCC ve win).
uživatel si přál zůstat v anonymitě
12. 3. 2009 23:32
Nový
Re: Co to vlastně je?
celé vlákno
v klidu, jestli ono "nedogenerování" není bug, tak taky netuším, co tím chtěl autor říct, skoro bych si totiž mohl představovat, že ta věc nedělá co má a přitom je to dobře :-)))
13. 3. 2009 9:13
Nový
Re: Co to vlastně je?
celé vlákno
No rekl bych ze vsechny nebo alespon vyssi stupne (od O3 jsem si na 99% jisty, ale jsem liny si to overit) optimalizace v gcc jsou salamounsky v dokumentaci oznacene jako experimentalni, takze svym zpusobem je v poradku kdyz to nefunguje, experiment se proste nepovedl.
Ale z pohledu uzivatele ktery si kompiluje nejaky projekt do release verze mi to prijde jako spatny vtip.
Ale z pohledu uzivatele ktery si kompiluje nejaky projekt do release verze mi to prijde jako spatny vtip.
13. 3. 2009 11:10
Nový
Re: Co to vlastně je?
celé vlákno
Nesmysl! Pokud byste nebyl líný napsat "man gcc<enter>/-O3<enter>nnn", dozvěděl byste se:
-O3 Optimize yet more. -O3 turns on all optimizations specified by -O2
and also turns on the -finline-functions, -funswitch-loops,
-fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize
A pokud byste se podíval do zdrojového kódu, zjistil byste, že žádná vyšší optimalizace než -O3 tam není. Uživatel si sice může napsat třeba -O9999, ale stále je to jen (optimize > 2).
ultra force 3000 (neregistrovaný)
13. 3. 2009 1:34
Nový
Re: Co to vlastně je?
celé vlákno
sak vpoho..
12. 3. 2009 22:28
Nový
Re: Co to vlastně je?
celé vlákno
Mno když nejaka lamka zapina optimalizaci kodu, tak se pak nemuze divit, ze to generuje zbugovanej kod :-D (btw to dela i VS)
Kompilátor, který při zapnuté optimalizaci je chybný a chybně pracující kompilátor. Dobře pracující kompilátor nesmí generovat chybný kód při zapnuté optimalizaci.
Kompilátor, který při zapnuté optimalizaci je chybný a chybně pracující kompilátor. Dobře pracující kompilátor nesmí generovat chybný kód při zapnuté optimalizaci.
Sten (neregistrovaný)
20. 3. 2009 9:49
Nový
Re: Co to vlastně je?
celé vlákno
Z mých zkušeností je -O2 v GCC bezpečné, -O3 v GCC 3 ne (blbne -frename-registers, v GCC 4 jsem nezkoušel)
Karásek (neregistrovaný)
12. 3. 2009 13:37
Nový
Re: Co to vlastně je?
celé vlákno
Odpověď jsem našel v devátém výsledku hledání fráze "paralelizace cyklu".
Takže paralelizace cyklu znamená jeho rozdělení na části které mohou být u víceprocesorového systému provedené na více procesorech a tím pádem rychleji.
Takže paralelizace cyklu znamená jeho rozdělení na části které mohou být u víceprocesorového systému provedené na více procesorech a tím pádem rychleji.
Timy (neregistrovaný)
12. 3. 2009 15:18
Nový
Re: Co to vlastně je?
celé vlákno
Nemusí nutně jít rozdělení na více procesorů, i jeden procesor dokáže rozvětvit kód do více procesů/vláken.
12. 3. 2009 14:00
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
Jedná se o paralelizaci kompilace nebo následného provádění kódu?
-nd- (neregistrovaný)
12. 3. 2009 14:12
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
nasledneho provadeni kodu.... paralelizaci kompilace uz muzete zkusit dnes parametrem -jx u prikazu make, kde x je pocet jader + 1
12. 3. 2009 14:19
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
cize to moze za istych okolnosti a priaznivej konstelacie prepinacov programatorovi povodne single thread program skompilovat a zlinkovat s pouzitim nevyziadanej kniznice a s behom v inom pocte vlakien, nez by program bezal normalne?
no z toho mozu vzniknut vcelku zaujimave situacie, ak sa to pouzije s nativne vlaknovanymi programami, nebodaj ak to bude zapnute by default.
no z toho mozu vzniknut vcelku zaujimave situacie, ak sa to pouzije s nativne vlaknovanymi programami, nebodaj ak to bude zapnute by default.
12. 3. 2009 15:11
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
S tím už ale programátor, co dělá s vláknama, bude muset počítat a volby podle toho upravit.
Defaultně to imho právě kvůli tomuto nebude.
Defaultně to imho právě kvůli tomuto nebude.
Let_Me_Be (neregistrovaný)
12. 3. 2009 15:37
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
Ne, tohle opravdu nema nic spolecneho s vlakny. Jediny problem, ktery muze realne vzniknout je snizeni vykonu dusledkem cache ping-pongu.
Sten (neregistrovaný)
20. 3. 2009 10:05
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
Samozřejmě může jít i o vlákna. Nevím, jak přesně to má Graphite implementované, ale autoparalelizaci lze dělat i ve vláknech (a podle nástinu, že to bude používat OpenMP, na Wiki GCC bych řekl, že i dělá).
Sten (neregistrovaný)
20. 3. 2009 10:08
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
Ano, může, ale tak, aby to ten program pokud možno nepoznal.
Konkrétně jaké zajímavé situace by mohly vzniknout?
Konkrétně jaké zajímavé situace by mohly vzniknout?
Che (neregistrovaný)
13. 3. 2009 11:19
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
No ona paralelizacia buildovacieho procesu prepinacom -jx nieje zase az taka super vec. Clovek si pri pisani makefile musi davat pozor na zopar veci. Inak mu make v najlepsom pripade skonci s chybou. V tom horsom vypluje chybny kod.
Sten (neregistrovaný)
20. 3. 2009 9:52
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
Tohle ale dělá paralelizaci na úrovni Makefile (spustí se několik gcc s různými zdrojáky), ne na úrovni gcc (a jednoho zdrojáku).
12. 3. 2009 14:45
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
Já bych to trochu upřesnil:
Graphite nemá dělat jen autoparalelizace, ale všemožné HL transformace smyček - štěpení, fúzi, záměnu pořadí, peeling, unswitching atd., takže se bezpochyby jedná o užitečnou věc. Podobné věci dělají například Intelské překladače. Autoparalelizaci moc nevěřím, a mám s ní bídné zkušenosti. On programátor má většinou lepší povědomí o tom, které smyčky za to stojí.
Graphite nemá dělat jen autoparalelizace, ale všemožné HL transformace smyček - štěpení, fúzi, záměnu pořadí, peeling, unswitching atd., takže se bezpochyby jedná o užitečnou věc. Podobné věci dělají například Intelské překladače. Autoparalelizaci moc nevěřím, a mám s ní bídné zkušenosti. On programátor má většinou lepší povědomí o tom, které smyčky za to stojí.
12. 3. 2009 16:37
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
Vetsina programatoru ani nevi, jak se multithreading pouziva :(.
12. 3. 2009 21:31
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
To jsou lepici kodu, ty se nepocitaj. Je jich teda velka vetsina, ale nema vyznam kvuli nim neco delat na toolsech, at jim das cokoli, tak to urcite znasilni takovym zpusobem, ze cloveku zustava nad tim hlava stat.
12. 3. 2009 22:19
Nový
RE: GCC bude automaticky paralelizovat
celé vlákno
Ja s ni mam dobre zkusenosti, u Sunovskych prekladacu. Obycejne for cykly jsou stejne rychle pres automatiku i openmp, takze uspora casu pri programovani. Neni pak tak prenosne, ale kod stejne pouzivam jen ja. Navic dokaze urychlit i 30 let stare knihovny, se kterymi bych se rucne tedy nepredelaval.

