16 cores in 2011? Als er nu NOG programmeurs zijn die denken dat multi-core onzin is en blijven weigeren om zich te verdiepen in hoe parallel programmeren werkt dan weet ik het ook niet meer...
Het overgrote deel van bestaande programma's is moeilijk om parallel te maken.
Dat heeft niets te maken met luiheid of met het feit dat niet iedereen jouw geniale kwaliteiten beschikt, het ligt gewoon in de aard van het beestje.
Het is een ding om een paar triviale bewerkingen in een aparte thread te steken (vb. GUI afsplitsen van zwaardere berekeningen). Het is heel iets anders om een inherent serieel algoritme over 12 processoren te splitsen. Helaas zijn zo goed als alle algorithmes van nature serieel.
En zelfs als er parallelle massa berekeningen aanwezig zijn is de overhead om ze te spreiden dikwijls groter dan het nut. Die cores moeten allemaal mooi samenwerken, hebben een coherente cache nodig en, erger, willen ook allemaal naar het externe geheugen dat bijlange niet zo snel scalet als het aantal inwendige cores.
Kijk gewoon eens naar intensief opdrachten van het dagelijkse gebruik.
E.g. iets opzoeken in 10000 emails via Outlook.
Search is veel meer een probleem van snel geheugen toegang dan van CPU capaciteit. Een CPU cache heeft hier weinig nut: bijna alles moet ingestreamd worden vanuit DRAM (in het allerbeste geval.)
E.g. complex page rendering in een browser
Er is nog geen enkele ziel die er in geslaagd is om dat specifieke probleem te paralleliseren. Dat is niet verwonderlijk: alle elementen in een pagina zijn afhankelijk van elkaar. Als je de grootte van 1 element aanpast, moet al de rest herberekend worden. Je kan beginnen schermen met mutex'en en andere semaforen, maar voor het overgrote deel van de tijd zullen de CPU's wachten op de andere.
E.g. compilers
Ja, het is gemakkelijk om veel files in parallel te compileren, maar meerdere CPU's op 1 probleem te laten werken gaat hoegenaamd niet. Zelfde probleem als de web browser: je moet met gigantische DAG's werken en dat is verschrikklijk moeilijk om parallel te doen.
E.g. XML parsing
Ja, daar kruipt verdomd veel tijd in, maar het is een puur linear process.
E.g. digitale of analoge simulaties
Dat lijkt echt heel eenvoudig om parallel te doen, maar in de praktijk steken er allemaal addertjes de kop op.
De voorbeelden zijn eindeloos en je moet echt niet ver zoeken om ze tegen het lijf lopen.
Volgens mij heb jij nog nooit meer dan een speelgoed parallel programmaatje in elkaar gestoken.
[Reactie gewijzigd door newinca op woensdag 26 augustus 2009 06:31]
Search is veel meer een probleem van snel geheugen toegang dan van CPU capaciteit. Een CPU cache heeft hier weinig nut: bijna alles moet ingestreamd worden vanuit DRAM (in het allerbeste geval.)
You wish, lieve schat...
Zeg je dit nu zomaar omdat je -denkt- dat dit zo is, of omdat je het echt met een profiler en of je system tools hebt bewezen?
In het systeem waar ik aan werk kan ik zeer makkelijk 1 core door een hele eenvoudige zoekopdracht op 100% zetten. Er is genoeg memory (16GB) en de IO (slechts 4 redelijk eenvoudige SSDs) bieden genoeg bandwidth. Het is echter de CPU (een 3Ghz recente C2Q) die de bottleneck vormt.
Als ik mijn search opdracht splits in 8 stukken, dan zet ik eenvoudig weg 8 cores helemaal op 100%. Zelfs met 8 cores die 100% nagenoeg alleen compares doen, is de IO bandwidth klaarblijkelijk nog groot genoeg om het bij te houden en is de CPU nog steeds de bottleneck.
Don't underestimate the performance requirements of a string compare...
Nu is momenteel 16GB, 8 cores en 4xSSD (slc) nog net even meer dan wat de gemiddelde consument heeft staan, maar dit is wel duidelijk een systeem waar de consument op redelijk korte termijn heen zal gaan. SSDs beginnen ook al redelijk richting de consument te gaan, en de performance die ik nu met 4xSSD in RAID0 haal, zal zeer waarschijnlijk over een jaar of 2 de performance van 1 enkele SSD zijn. 4 cores zitten nu al in erg cheape huis tuin en keuken computers, 8 cores zal echt niet lang meer duren dan.
Op het moment dat ik mijn search splits over 8 cores, gaat het simpelweg nagenoeg 8 keer zo hard. In plaats van 1 minuut wachten, hoef ik nu nog maar ongeveer 8 seconden te wachten. Eigenlijk zou ik het liever in 1 seconde ofzo hebben. Laat die 64 core CPU dus maar komen!
