Softwareleveranciers hebben decennia lang gratis en voor niks kunnen meeliften op de steeds hogere prestaties van de onderliggende hardware. Dat de hoeveelheid code van Windows jarenlang onbelemmerd kon groeien, was alleen mogelijk door inefficiënties te compenseren met steeds snellere processors en steeds meer geheugen. Elke nieuwe versie van Windows vraagt weer meer resources, terwijl er functioneel nauwelijks iets verandert.

Hetzelfde geldt voor de manier waarop zakelijke toepassingen tegenwoordig worden ontwikkeld. Dat begint in een GUI builder, waarna de achterliggende code wordt gegenereerd uit een high-level specificatie-taal. Dat Java tegenwoordig goed inzetbaar is, is voor een groot deel te danken aan de ontwikkelingen in de hardware die de bytecode moet uitvoeren.

32 kernen

Van de verschillende factoren die hardware steeds sneller maakte – architectuur, grotere caches en hogere kloksnelheden – is een hele belangrijke inmiddels weggevallen. De kloksnelheden zijn de afgelopen jaren niet omhoog maar juist omlaag gegaan. De snelste Pentium-processors liepen destijds op bijna vier Gigahertz. De snelheid van de laatste Core 2 en Phenom-processorss ligt nu een hele Gigahertz lager. Nu de nadruk niet langer op prestaties per prijs ligt maar op prestaties per watt, is het ook niet waarschijnlijk dat de kloksnelheden op korte termijn weer flink omhoog zullen gaan.

In plaats daarvan zullen we het moeten doen met steeds meer kernen per processor. De huidige processors van Intel en AMD bevatten maximaal vier kernen. Maar de komende jaren zal dat aantal snel stijgen. De Nehalem van Intel die over een jaar verschijnt, heeft waarschijnlijk acht kernen aan boord. Bovendien zit daar nog eens een Graphics Processing Unit (GPU) bij. De opvolger daarvan, codenaam Sandy Bridge, verschijnt twee jaar later. Deze bevat misschien wel 32 kernen. De collega's van AMD komen over twee jaar met de Sand Tiger processor, voorzien van acht of zestien kernen.

Voorproefje

Hoewel we met die aantallen al het many-core tijdperk betreden, is dat nog niets bij wat de processorfabrikanten nog voor ons in petto hebben. Intel verwacht dat we in de toekomst honderden en later zelfs duizenden kernen in onze processors zullen hebben. Onderdeel van hun onderzoeksproject 'Tera-scale' is de Polaris-processor. Deze bevat al tachtig kernen.

De laatste UltraSparc-processors van Sun geven ons alvast een voorproefje. Hun T1 (codenaam Niagara) bevat acht kernen die elk vier threads kunnen draaien. De T2 (Niagara 2) die eind vorig jaar op de markt kwam, verdubbelt het aantal kernen nog eens, waarmee het totaal aantal threads op 64 komt.

Met deze productlijn richt Sun zich specifiek op horizontaal schaalbare werklasten. Dat wil zeggen, netwerkintensieve toepassingen als webservers, applicatieservers en SaaS-toepassingen. Voor verticaal schaalbare werklasten is het wachten op de Rock-processor. Deze zal 16 kernen met elk twee threads bevatten.

Beperkt profiteren

Juist die verticaal schaalbare werklasten zullen maar beperkt kunnen profiteren van de nieuwe many-core architecturen. Hetzelfde geldt voor onze desktopsystemen. Dat soort applicaties heeft maar weinig parallelliteit in zich, een voorwaarde om het werk in multi-threaded algoritmen te kunnen vangen. Veel van die toepassingen staan het leeuwendeel van de tijd op I/O te wachten. Voor het naast elkaar draaien daarvan heb je echt geen twintig kernen nodig. De scheduler van het besturingssysteem kan dat prima regelen.

Virtualisatie wordt genoemd als de toepassing die het meest gaat profiteren van de nieuwe many-core processors. Omdat de virtuele machines volledig onafhankelijk van elkaar zijn, kunnen deze inderdaad heel goed naast elkaar op de verschillende kernen worden gedraaid. Maar omdat ze elk een volledige kopie van het besturingssysteem bevatten, komt er nog meer druk te staan op de toch al overbelaste en in verhouding trage geheugenbus.

Throughput computing

Willen we daadwerkelijk iets hebben aan de performance die many-core processoren ons in de vorm van parallelle verwerkingskracht beschikbaar stellen, dan zullen onze applicaties drastisch aangepast moeten worden. Bedrijven als Microsoft, AMD en Intel proberen software-ontwikkelaars daarbij te helpen. Zo werkt die laatste aan een hele nieuwe programmeertaal, Ct (C/C++ for Throughput Computing), waarmee programmeurs in de taal zelf allerlei parallelle datastructuren en parallelle flow commando's ter beschikking hebben. Denk bij die eerste aan sparse matrices, associatieve arrays en boomstructuren als [[1, 3], 6, [2, 4, 7]], bij die laatste aan futures (functies die zoveel mogelijk in parallelle threads worden uitgevoerd, alleen beperkt door afhankelijkheden in de parameters en return-waarden). Daarnaast zijn ook universiteiten inmiddels op deze ontwikkelingen ingesprongen, door hun curriculum met een cursus thread-programming uit te breiden (MIT en Rice University).

Of het allemaal voldoende is, zal moeten blijken. De Wet van Amdahl stelt een harde bovengrens voor de versnelling van parallelle algoritmen. Maar ook de bedenkers van C++ en Java, Bjarne Stroustrup en James Gosling, hebben in de media hun zorgen uitgesproken. Komen we aan de grenzen van wat we praktisch gezien nog aan kernen kunnen uitnutten, dan zal op termijn weer teruggegrepen moeten worden naar het beproefde middel van de hogere klok.

Bron: Techworld