Computers met meerdere processorkernen zijn nu nagenoeg standaard, maar de prestatiewinst valt in de praktijk nog tegen. Omdat parallel programmeren vrij complex is, zijn veel softwareapplicaties nog niet geoptimaliseerd om meerdere processen (threads) tegelijkertijd uit te voeren. Maar hulp is nabij; Intel komt met vier plugins voor Microsoft Visual Studio.
Volgens onderzoeker IDC zijn alle computerplatformen in 2010 multicore. Dat markeert de stap van chipbakkers om hun ontwerpstrategie te verleggen van meer gigahertzen naar meerdere cores per processor. Deze koerswijziging legt een zware druk op de schouders van softwareontwikkelaars, want zij moeten hun programma's optimaliseren. Immers: applicaties die slechts één proces (thread) gebruiken, hebben weinig baat bij multicore-processors.
Om hogere prestatieniveaus mogelijk te maken moeten programmeurs hun software (her)programmeren, zodat het efficiënt gebruik maakt van meerdere threads (oftewel: parallel programmeren). En dan het liefst ook zo, dat de software niet alleen inspeelt op huidige processors met twee, drie, vier of acht cores, maar ook op toekomstige chips met tweeëndertig en nóg meer processorkernen. Intel demonstreerde in 2006 al een prototype van een processor met 80 cores.
Parallel programmeren
Software heeft pas profijt van een multicore-architectuur wanneer code parallel uitgevoerd kan worden. Een besturingssysteem kan de processen verdelen over meerdere cores (multitasking), maar één applicatie kan op zichzelf ook meerdere processen starten.
Multicore-processors zijn tot nu toe vooral een aanwinst voor werkstations waar veel software naast elkaar draait of voor cpu-intensieve taken zoals het zoeken van data, bijvoorbeeld in een lokale database, en voor complexe berekeningen. Indien er meerdere virtuele machines (vm's) draaien op één systeem, zijn multicore-systemen ook een grote plus, omdat elke vm een eigen core toebedeeld kan krijgen.
Knelpunten
Afhankelijk van het type software kan het complex zijn om de programmataken op te delen in verschillende onafhankelijke processen die ook nog eens parallel uitgevoerd worden. Ze kunnen elkaar namelijk in de weg zitten, bijvoorbeeld omdat de processen op elkaars uitkomsten wachten. Het hangt ook af van het soort applicatie; multithreading levert niet in alle gevallen een enorme prestatiewinst op. Sterker nog, multithreaded software kan op een chip met één kern zelfs trager werken dan een singlethreaded applicatie.
Parallel programmeren is bovendien een uitdaging op zich, omdat het lastig is alle processen te coördineren. Bovendien kan het subtiele bugs opleveren die lastig te detecteren zijn, bijvoorbeeld omdat de processen niet alle data onderling delen. Softwaremakers moeten deze hordes echter wel nemen. Chipproducenten concentreren zich namelijk op het uitbreiden van het aantal cores in plaats van op het verhogen van de klokfrequentie. Software is dus het voornaamste sluitstuk om het aantal instructies per klokcyclus verder te verhogen door middel van multithreading. Een helpende hand van de processorfabrikanten is daarom wel op zijn plaats.
Ontwikkelhulpmiddelen
De eerste serieuze handreiking van chipbakker Intel kwam in augustus 2006 toen het een aantal ontwikkelhulpmiddelen bood waarmee het voor programmeurs makkelijker werd om multithreaded programma's te ontwikkelen. In tegenstelling tot programmeertalen Java, OpenMP en C# bood de veelgebruikte C++ standaard geen ondersteuning voor parallel programmeren. Intel kwam daarom met Threading Building Blocks (TBB), dat later ook als open source beschikbaar werd gesteld (naast een commerciële versie).
Ook AMD speelde in op deze behoefte en kwam met Light-Weight Profiling en compilers die binaries optimaliseren voor multicore-processors. Dat was echter nog niet voldoende. Softwareontwikkelaars bleven zitten met een groot aantal struikelblokken en vraagtekens, waarvoor ze de aandacht van de chipmakers vroegen.
Parallel Studio
Op het Intel Developer Forum (IDF) van dit najaar kwam Intel met een antwoord; vier plugins voor Microsoft Visual Studio (C/C++). Volgens Renee James, vice-president en general manager van Intels Software and Solutions Group, speelt deze software in op de vier grootste problemen van softwareontwikkelaars.
Die vier problemen zijn deze vier vragen. Wat is de beste plek om parallele code te implementeren, zonder dat ik alles moet herprogrammeren? Hoe doe ik dat, zodat het geoptimaliseerd is en veilig? Hoe controleer en voorkom ik bugs? En hoe zorg ik voor optimale prestaties en schaalbaarheid voor toekomstige multicore cpu's?
Als antwoord op deze vragen heeft Intel onder de noemer Parallel Studio vier softwarepakketten geïntroduceerd, genaamd Parallel Advisor, -Composer, -Inspector en -Amplifier. De eerste kijkt naar bestaande programmacode en geeft advies waar parallellisatie kan worden toegevoegd in het ontwerp. De Composer regelt het optimaal compileren, de Inspector zorgt voor validatie en met de Amplifier kan de ontwikkelaar zijn software optimaliseren voor huidige processorplatformen.
Future-proof
Bovendien zou software dankzij deze hulpmiddelen ook schaalbaar zijn voor processors met beduidend meer kernen dan nu gangbaar is. Intel noemt dat ‘forward scaling'. Hierbij gaat de processorproducent uit van huidige multicore-chips en toekomstige ‘manycores' (chips met zestien of meer cores). Voor dergelijke processors zal de toegang tot het geheugen en de communicatie tussen de kernen onderling anders verlopen. Intel wil met het nu geboden ‘forward scaling' voorkomen dat ontwikkelaars hun multithreaded software opnieuw moeten herzien tegen de tijd dat manycores op de markt komen.
Adviserende guru
Intel noemt Parallel Studio een all-in-one oplossing, die op basis van feedback van ontwikkelaars en in nauw overleg met Microsoft tot stand is gekomen. Intel denkt hiermee veel meer ontwikkelaars te bereiken dan Microsoft met de reguliere uitvoering van Visual Studio, die niet is aangepast voor multicore.
James Reinders, directeur software development products en chief software evangelist bij Intel, noemt de Parallel Advisor een soort guru die met je meekijkt tijdens het programmeren. "Je kunt hiermee blijven programmeren zoals je gewend bent en de Advisor helpt je dan met het parallelliseren van nieuwe of bestaande software. De software doet niet het werk voor je, maar geeft je wel concreet advies. Het kan aangeven waar je multithreading kunt toevoegen en kan je ook de consequenties daarvan tonen." Riender geeft wel aan dat programmeurs ook ‘parallel moeten gaan denken' om de ontwikkelsoftware optimaal te gebruiken.
Beschikbaarheid
De Parallel Studio-software van Intel is momenteel nog in ontwikkeling. In november moet een publieke bèta uitkomen en het uiteindelijke product volgt ongeveer een half jaar later (mei 2009). De verwachting is dat er op termijn ook plugins komen voor ontwikkelpakketten op Linux en Mac OS X. Het zal al met al dus nog wel even duren voor de ict'er concreet iets merkt van geoptimaliseerde software die de huidige multi- en toekomstige manycores volledig benut.
Ondersteuning voor parallel programmeren is een goede zaak, maar biedt pas op de lange termijn een oplossing voor effectief gebruik van multicore systemen.
Voor de kortere termijn kan hardware-virtualisatie ervoor zorgen dat je meerdere virtuele machines effectief parallel laat draaien op multicore systemen.
Dit geldt met name voor typische ‘scale-out’ applicaties (die in performance kunnen groeien door er meer dozen naast te zetten) en minder voor de ‘scale-up’ applicaties (die alleen maar in performance kunnen groeien door de huidige doos door een zwaardere te vervangen). Alleen deze laatste categorie lijkt me de kandidaat bij uitstek voor parallel programmeren.
De grootste aantallen PC’s/laptops staan toch bij de mensen thuis of op kantoor.
Voor PC’s/laptops gaat die manycores ontwikkeling een onzinnige excercitie worden. Veel gebruikte programma’s zoals tekstverwerkers, browsers, kantoortoepassingen e.d. kun je nauwelijks zinnig dingen tegelijktertijd laten doen, inderdaad omdat er teveel is wat alleen maar als een serie achter elkaar uitgevoerd kan worden. Wat parallel kan, is al gedaan, zie de Chrome architectuur.
Enige uitzondering in PC’s en laptops is fotorealistische games, hi-res video en andere 3D dingen, daar heeft manycore nog zin.
De meeste dingen die ’traag’ worden in een computer, wachten uiteindelijk ergens op de harddisk of het netwerk. Zolang dat de beperkende factor blijft, staan er gerust 80 cores te wachten en is er verder niks anders wat ze kunnen doen.
Mijn voorspelling is dat de desktop van de toekomst niet zo veel meer sneller wordt, maar dat je alleen maar meer cores hebt die niks aan het doen zijn.