Sto se tice dfinicije sta je thread ne bih se skroz slozio sa tobom. Mislim da je thread u GPU malo drugaciji.. U principu, vise procesora dele isti program i isti IP ali taj program ima razlicite ulazne parametre. Sa jedne strane, svi dele isti IP a sa druge rade sa razlicitim podacima. Medjutim, rezultat rada svih tih procesora je razlicit, tj posao koji obavljaju je vesestruko paralelizovan.
Znaci i jeste thread i nije thread.
Da, otvoreno je za tumacenje i bas sam iz tog razloga posebno naveo sta podrazumevam pod thread-om.
Koliko sam video, nVidia uvodi sledece pojmove za CUDA: grid, block i thread.
-Problem se prvo deli u sekvencijalne delove - grids. Oni ne mogu paralelno da se izvrsavaju.
-Grid se deli na nezavisne paralelne block-ove koji mogu paralelno da se izvrsavaju i svaki block cini nezavisan program (dakle svakom je potreban po jedan IP).
-Block se deli na paralelne elemente. Izvrsavalje razlicitih podataka koji prate isti IP - nVidia ovo naziva thread-om.
E sad, stvar je u tome sto izvrsavanje istih instrukcija nad razlicitim podacima u stvari predstavlja SIMD (Single Instructon Multiple Data) - npr. nad 8 razlicitih podatak se izvrsava ista instrukcija. NVidia svaki podatak racuna kao thread.
S druge strane, MIMD (Multiple Instruction Multiple Data) izvrsavanje koje dozvoljava nezavisne poslove je ono sto se tradicionalno podrazumevam pod "thread-om". NVidia ovo naziva block.
Ovo bi se moglo posmatrati kao kada bi x86 instrukcija [bold]mov reg, mem[/bold] moga da izazove promenu threada dok ne stigne rezultat iz memorije.
Bas je to radio P4 sa hyperthreading. Jedan thread radi dok drugi ceka.
Pored toga, out-of-order izvrsavanje ovo regulise i unutar jednog thread-a.
Dok ce Larrabee jezgra biti in-order, ona bi mogla imati load-lookahead koji je relativno lako realizovati i bez potpunog OoO jezgra. In-order procesor sa load-lookahead odrzava redosled svih instrukcija sem load-ova, koji mogu vanredno da se izvrsavaju. Load se izvrsava sto pre kako bi amortizovao memory latency.
Strategija za CPU: Kako naterati par threadova da rade brzo?
Taktika je smanjivanje latencije. Veliki cache da bi bila veca verovatnoca "pogotka", instrukcijski i data prefetch i spekulativno (OoO) izvrsavanje. Limit je bandwidth. Siroka oblast primene, relativno mala racnska moc.
Rekao bih da je ovo strategija za klasicna fat CPU jezgra, dok nova mini jezgra koja cine Larrabee mnogo blize prate ovu strategiju koju si predlozio za GPU. A postoje i mini jezgra tipa Atom, koja imaju treci cilj.
Kako li ce Intel sa Larrabee-em da pomiri ova dva sveta?
Larrabee definitivno ne moze da ih pomiri. To bi eventualno mogao procesor sa heterogenim jezgrima (2 ili vise razlicitih tipova jezgara). Mada ni takav procesor ne moze da zadovolji sve segmente podjednako.