Multi core processors en parallel programming

Een van de belangrijkste revoluties in ICT-land is de stagnatie van die kloksnelheid van chips en de opkomst van multi-core processors in computers. Globaal gezegd: processors van nu kunnen nauwelijks meer achterelkaar, maar kunnen nu steeds meer tegelijk.
Dit biedt een flinke uitdaging voor softwareontwikkelaars (programmeurs, architecten): in plaats van programmacode die achter elkaar wordt uitgevoerd, moet programmacode geschreven worden die tegelijkertijd uitgevoerd kan worden.

Metafoor van werkverdelen
Voor heel veel software is dit buitengewoon moeilijk. Om in metaforen te spreken: heel veel werk, of het nu het verven van een huis is of het ontwikkelen van nieuwe belastingsoftware kan niet door een iemand gedaan worden. Het werk moet met meerdere mensen gebeuren. Om te zorgen dat het werk nog steeds goed gaat, is alleen wel een coördinator of leider nodig, in de vorm van projectleider, hoofdschilder, aannemer, etc. Daarnaast zijn vaak secretaress, boekhouders, etc. nodig ter ondersteuning van de leider. Die leiders en ondersteunend personeel dragen niets direct bij aan het eindproduct: dan doen de schilders, programmeurs, timmermannen. Bij een goed bedrijf zal er ook zo min mogelijk ondersteunend en coordinerend personeel zijn.
Om de metafoor verder te trekken: voor de bovenstaande problemen is geen generieke oplossing. Het aannemersbedrijf, of schildersbedrijf, of softwarehuis dat slecht loopt kan niet al zijn problemen oplossen door een algemeen coordinator in te huren. Als iemand ingehuurd wordt, zal hij zich eerst in de problemen en de bedrijfssituatie moeten verdiepen, voor hij een passende oplossing kan aanbieden of mensen kan gaan aansturen.
Bij een slecht werkend bedrijf zal er heel veel coordinerend en ondersteunend personeeel nodig zijn. Of het gebeurt zeer vaak dat een schilder erachter komt dat alle verf al door iemand anders in gebruikt wordt. Of verwarmingsinstalleur wil de buizen gaan aanleggen terwijl de stuccadoor al alle muren heeft afgewerkt.

Zelfde geldt ook binnen de softwareontwikkeling: generieke oplossingen als een gedistribueerd database, een nieuwe applicatieserver of hercompileren van programmacode zorgt er niet voor dat oude software meteen goed werkt op een multi-coreprocessor.
Evenzo is het zomaar verdelen van werk over meerdere threads of processen meestal niet mogelijk, of levert dit verdelen zoveel overhead dat de prestatiewinst minimaal is.

Parellel programming, Nightmare on core street
Eerder schreef ik al, dat programmeurs en architecten dit probleem negeren of in het gunstige geval schromelijk onderschatten. Desalniettemin waren ten tijde van mijn posting al fraaie artikelen die het probleem van parellel programming goed uitleggen. Op een weblog van Rebel Science News, staat een erg heldere serie van postings die het probleem goed uitleggen: Nightmare on core street. De eerste entry legt al heel helder het probleem van software schrijven voor meerdere cores, en waarom threads niet de beste oplossing zijn.
De stelling van de weblogauteur, dat we (de programmeurs) in de toekomst geen algoritmes meer schrijven vind ik alleen wat kort door de bocht: dat hangt geheel van je interpretatie van algoritme af.

Uitdagingen voor multi-core

Het schrijven van gedistribueerde software of parellele software door een programma op te splitsen in meerdere threads werkt voor simpele taken als sorteren (zie de heldere posting op javaworld: Java Concurrency in Practice), maar naar mate het werk ingewikkeld wordt (volgens de bovenstaande metafoor) wordt de overhead van coordineren van threads èn de kans op fouten exponentieel groter (zie ook een latere artikel op javaworld: Multicore: New chips mean new challenges).
Bedrijven als NVIDIA werken aan ander model van chips: GPU’s: vectorprocessors, terwijl Intel blijft vast houden aan thread-based programming volgens de auteur. Wellicht een antwoord op de auteur van Rebel Science: ik vond een weblog entry waar Intel elk geval onderkent dat programmeren met meerdere threads niet bruikbaar is om parallelle software te schrijven en een andere model nodig is om met de multi-core processors van Intel om te gaan. Desalniettemin geloof ik de auteurs van Rebel Science dat een geheel ander model van chips nodig is: Parallel Computing: Why the Future Is Non-Algorithmic.

Kortom parellel programming wordt komend jaar denk ik een erg hot onderwerp! Zelfs met of zelfs dankzij de kredietcrisis: softwareontwikkel- en -consultancybedrijven zullen moeten zoeken naar oplossing om zo goedkoop mogelijk, zulke goed mogelijke programma’s te schrijven die gebruiken van van multi-core processors. Simpel het budget verhogen om veel meer servers en mankracht in te kopen of te huren leidt niet tot een oplossing.