Automatikus többszálúsítás támogatást kap a GCC

Címkék

Razya Ladelsky IBM alkalmazott körvonalazta a terveket az automatikus többszálúság támogatására a GNU fordítócsalád számára. A magas szintű ciklus optimalizációt nyújtó Graphite keretrendszer bekerült a GCC következő, 4.4-es kiadásának fájába, ami így bizonyos szintű többszálúsítást tartalmaz.

A Graphite-on kívül a következő lépés az autopar beolvasztása, amely GOMP-on alapuló automatikus többszálúsítást végez az OpenMP segítségével.

Ha mindez elkészül, a GCC képes lesz önállóan több szálra optimalizálni a ciklusokat és ez meg fogja dobni a többprocesszoros (és Hyper-Threading-es) gépek teljesítményét.

Razya levelezőlistás üzenete. A Phoronix cikke itt.

Hozzászólások

A gép teljesítményét? Nem inkább a fordításét?

--
\\-- blog --//

Nem néztem meg a hivatkozásokat, de a fenti leírás alapján én azt vontam le, hogy azt fogja támogatni, hogy a fordító *eleve* többszálú működésre alkalmas kódot fordítson. (És ne ő fusson többszálúan. Bár mivel ugya GCC-t az ember önmagával fordít, akár a fordítást is gyorsíthatja.) Ha jól emlékszem, az SGI-nek volt ilyen tudású C-fordítója.

Pont most kezdem beleásni magam az openMP-be. És most mindezt feleslegesen??!! :)

Ez brutál munka lehet. Hogy mit össze szenvedtem én azzal, hogy egy thread akkor és úgy fussan amikor akarom...... Ezt automatikusan. Minden elismerésem.

Jól fogja csinálni. (Ha nem, az bug, javítják.)

Nyilván csak olyan esetben fogja párhuzamosítani, amikor biztos, hogy a ciklusmag különböző futásai nem interferálnak. Vagy ha interferálnak, akkor pár triviális esetben.
Sokat azért ne várjunk.

Kicsit olyan ez, mint az automatikus vektorizáció (SSE). Elvileg gcc csinál ilyet, de gyakorlatilag én még a viszonylag triviális esetben sem láttam, hogy megtörtént volna... (Bár az újabb verziókkal nem néztem.)

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Ez azert egy picit mas... csak a ciklusokat bontja tobb szalra, ami azert lenyegesen egyszerubb feladat, mint egy teljes alkalmazas tobbszalusitasa.

Persze attol meg eleg brutalis feladat tenyleg, de nem ugy kell elkepzelni a dolgot, mint amikor az ember leul es ir egy tobbszalu valamit :)

Igen, igen... Meg szokták különböztetni a párhuzamos és többszálú futtatást.
A párhuzamos futtatás során az egyidőben futó szálak egymástól függetlenek, nem kommunikálnak, nincs szükség köztük semmilyen szinkronizációra.

Ettől persze még mindezt automatikusan megcsinálni kemény dió. Annak azonosítása hogy melyik ciklus párhuzamosítható nem triviális.

azert ez durvan brutal...
big respect!
nagyon kivancsi vagyok az elso benchmarkokra :)

Ebben a brutal az, hogy a gcc nem csak c fordító. Régóta léteznek már fordítók automatikus párhuzamosítással, az openmp meg 3-4 tucat(fixme) függvénnyel oldja meg az egész mutatványt, de ez mind egy nyelvre vonatkozott.