Ik ben bang dat ze bij Intel en Microsoft over een jaar of 5 tot de conclusie komen dat extreem parallele architecturen (zoals een 80-core chip) voor de meeste toepassingen niet geschikt zijn en de performance in veel taken heel erg tegen gaat vallen.
Ik denk dat dat wel mee zal vallen. We zullen denk ik niet langer in de hoogte gaan als het aankomt op snelheid (dus steeds meer MHz of GHzjes voor een proc). We zullen langzaamaan gaan uitbreiden naar meerdere cores (in de breedte dus). Voor nu is dat nog niet zo heel boeiend, maar de software en OSen zullen erop geschreven moeten worden.
Threads zullen in dat geval kort gemaakt worden, zodat je heel veel threads hebt, die daardoor gelijk afgehandeld kunnen gaan worden. Op die manier kun je de snelheid behalen.
In het geval van games bijvoorbeeld is het nu zo dat er 1 of 2 threads zijn die alles renderen (al dan niet met behulp van wat hardware acceleratie voor 3d, physics etc). Stel je dit eens voor op een 128core bak. Je hebt 1 core voor het uitrekenen van de bewegingen van het haar van het karakter waar je mee speelt. 1 voor de linkerarm, 1 voor de rechterarm, 1 voor de torso, 1 voor het linkerbeen, 1 voor het rechterbeen etc.
Ditzelfde geldt voor alle andere dingen die er in het spel gebeuren. Je kunt een core hebben die zich alleen bezig houdt met grassprietjes renderen, 1 voor de regendruppels, 1 voor de belichting afhankelijk van het tijdstip etc etc. Op deze manier kun je een veel realistischer beeld maken, omdat dingen totaal onafhankelijk van elkaar kunnen gebeuren maar aan de andere kant natuurlijk ook dat er een samenwerking tussen de cores zit (wie weet gebruik je wel 1 core om de invloed van de ene thread op de andere te berekenen).
Dit geldt natuurlijk ook voor andere applicaties die uitgebreidt zijn. Het renderen van video bijvoorbeeld, laat iedere core een frame renderen, zet per 4 cores 1 core in om te syncen zodat je geen verschillen krijgt in frames die je niet wilt en je haalt hier potentieel flink wat snelheid uit, als je met een flinke hoeveelheid cores zit.
Bovenstaande geldt denk ik niet alleen voor de CPU, maar ook voor de GPU en Physics die er baat bij hebben om met meerdere gebruikt te worden.
Door de beschikking te hebben over veel cores bestaat de mogelijkheid om veel zaken tegelijkertijd te doen. Het is een andere aanpak dan hoe het nu gedaan wordt (veel losse threads zijn nu alleen maar traag ivm 1 langere thread).
Het duurt nog wel even voordat we zover zijn, maar ik denk dat die onderzoeken daarvoor best zinnig kan zijn.
Het voorbeeld dat je aanhaalt is interessant, maar games is natuurlijk maar een heel beperkt stukje van het totale spectrum aan applicaties. De meeste PC's worden ingezet voor 'zakelijk' gebruik en alle applicaties die continue user input moeten verwerken hebben één beperkende factor: de gebruiker.
Veel standaard kantoor applicaties lenen zich niet zo geweldig voor paralellisatie. Een thread voor de UI, een thread voor de I/O, een aantal threads voor langer lopende bewerkingen en dat is het wel zo'n beetje.
Bovendien is in jouw aanpak ook nogal wat intelligentie nodig in de applicatie: wat nu als je in een game meer karakters hebt rondlopen dan het aantal cores dat je hebt? Je zult dan alsnog een behoorlijk probleem krijgen want je wilt wel het complete beeld hebben waarin alle bewegingen zijn meegenomen. Elke keer wachten totdat de langzaamste thread klaar is kan dan een behoorlijke vertraging opleveren.
Bovendien moet je het probleem van synchronisatie niet onderschatten. Als onderdelen op elkaar inwerken moet er gecommuniceerd worden. Als dat ook nog betekent dat er dan opeens iets heel anders moet gebeuren dan heb je een uitdaging.
De uitdaging op dit moment bestaat eruit dat het ontwikkelgereedschap dat software bouwers hebben niet zo veel (eigenlijk geen) ondersteuning biedt voor automatische parallellisatie. Er zijn wel talen die beogen om concurrency gemakkelijker te maken (
Erlang bijvoorbeeld), maar dat is nog lang geen mainstream.
Allebei +1 wat mij betreft, als ik nog kon moderaten. Multicore systemen zijn zeker interessant en bruikbaar en waarschijnlijk gaat de technologie voorlopig ook sterk in die richting. Heb ik ook nooit ontkend overigens. Maar wat bobco zegt is ook helemaal waar: games, 3D rendering en video zijn allemaal zo'n beetje de poster-toepassingen van heterogene multicore systemen: de PS3 is er natuurlijk het schoolvoorbeeld van, maar in principe is een xbox 360 of een dikke PC+GPU ook gewoon een soort heterogeen multi-core systeem. Helaas is het percentage CPU verkopen voor consoles en game-pc's denk ik zo ontzettend beperkt ten opzichte van de totale markt, en zullen de ontwikkelkosten waarschijnlijk erg hoog zijn (want zeer specifiek). Ik denk dat Intel en AMD een beetje jaloers zijn op IBM, die alle consoles al van CPU's voorziet, en bang is dat de markt erachter komt dat een entry-level CPU (ok dual-core is wel handig) eigenlijk voor 80% van de markt voor PC-toepassingen voorlopig wel een beetje het eindstation is. Vandaar dat we nu allemaal moeten geloven dat je voor dagelijks gebruik een quadcore of een nieuw soort chip met 80 cores nodig hebt.
[Reactie gewijzigd door johnbetonschaar]