Citat:
Stvari koje sam slusao i polozio na postdiplomskim studijama (koje nijesam zavrsio) jos 90-e, a ti se vidi koja je danas godina. Teorija za takve stvari poodavno postoji, prakticne implementacije nema, a da je ja znam. Ovaj "autovectorizer" iz GCC je prvi iskorak u prakticne implementacije iz tih domena, ja sam pricao o teoretskom maksimumu ne cipova sa vise procesorskih jezgara, vec Altivec kao jedinice za vektorsku aritmetiku.
Ispravi me ako gresim, Apatrid - ali moderni Intel kompajleri (> 6, danas 8.1) imaju i vektorizaciju preko SSE registara, i loop unrolling i optimizaciju pipeline izvrsavanja, kao i baznu hyperthreading optimizaciju - i jos podosta prilicno modernih tehnologija optimizacije.
Tako da GCC nije izmislio nikakvu toplu vodu, a sve to postoji u komercijalnim kompajlerima za takve sisteme i arhitekture (tipa Alpha) jos ohoho odavno.
Ono o cemu je ovde rec, je da kompajler
ne moze (i to uz pomoc bilo kakve teorije) da bude uporediv sa
dizajnom (ne pricamo o implementaciji, pa je asemblersko poredjenje neprimereno) aplikacije gde se vodilo racuna o ciljnoj arhitekturi a u pogledu optimizacije programskih modula i niti.
To ni jedan kompajler ne moze da uradi bez asistencije coveka, i to veceg dela posla na covekovoj strani - iz prostog razloga sto kompajler ne moze da nasluti izvrsnu logiku ili redosled racunanja nekih parametara u vise niti - to ne ide, niti je iko normalan radio na tako necemu (mozda za neki bogus Ph.D)
Evo ti prost primer - imas dupli DSP / dual corei, recimo, video enkoder - zavisnost frejmova jedan od drugog (predikcije), problem zavisnosti jednog algoritamskog bloka od drugog i sl... jednostavno cine kompajler nemocnim u optimizaciji osim povrsnih optimizacija.
Ako dobar projektant onda preuredi algoritam tako da a-priori bude poznato da ima vise jezgara i podele se zadaci i sinhronizuje posao izmedju jezgara - takav proizvod ce trcati mnogo brze nego puki pokusaj kompajlera da grubo nesto opimizuje.
Naravno, ima softverskih aplikacija koje pukim forkovanjem mogu da budu brze, tipa HTTP serveri, ali i tu moze da se ucini dosta boljim
dizajnom koji kompajler ne moze da nasluti... e sad, pitanje je da li tebi treba takav boost u performansama, ili ces se samo osloniti na "kupi jaci hardver" ... to zavisi od tvoje poslovne politike.
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos:
http://www.digicortex.net/node/17 Gallery:
http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! -
https://github.com/psyq321/PowerMonkey