Citat:
Ursprungligen inskrivet av Flamso
Vilket i praktiken innebär att detta grafikkortet klarar av att behandla enormt många trådar men blir ineffektiv vid få trådar jämfört med en CPU?
likheterna med trådar i en CPU är ganska många, men det är inte exakt samma sak. På GPUn (FireSTREAM eller vilket annat modernt grafikkort som helst) så måste varje tråd utföra exakt samma sak. Det är bara datan man räknar på som skiljer trådarna åt, programmkoden som gör beräkningen (=shadern) är samma för alla trådar. Dessutom är GPUn lite begränsad i hur avancerade dessa program får vara. (t.ex. hur långa dom kan vara och hur man använder if-satser osv..). Dessutom kan man inte skriva data med "random access" (däremot kan man läsa med random access..)
ett enkelt exempel:
(1): a[i] = b[ c[i] ]
(2): a[ c[i] ] = b[i]
där i=[0..6], b= {a,b,c,d,e,f,g} och c = {6,5,4,3,2,1,0} ger båda resultatet resultatet a = { g,f,e,d,c,b,a } om det kompileras med en for-loop på CPUn. Endast alternativ (1) går att implementera på GPU. I den första fallet läses datan i omvänd ordning och skrivs i rätt ordning. I det andra fallet läses datan i rätt ordning och skrives i omvänd ordning. På CPU skrivs ett element åt gången, på GPU skrivs alla elementen samtidigt.
Så för att sammanfatta så har du rätt på det stora hela, men man får komma ihåg att varje "tråd" är betydligt mer begränsad än en CPU-tråd.