High Performance Computing: convergentie of divergentie?
Bestaan er straks nog generieke high performance computing experts of vergt elk HPC-platform zijn eigen expertise? Dat is de vraag die wordt opgeworpen door het artikel “Next-generation software: who will write it?“, geschreven door Robert Roe (Twitter: @ESRobertRoe) in het oktober/november-nummer van het tijdschrift Scientific Computing World.
Er is in de wereld van HPC altijd al een spanning geweest tussen portabiliteit en performance. Voordat je goed en wel je software voor een bepaald platform geoptimaliseerd had, diende zich alweer een nieuw hardwareparadigma aan. Dus het beste dat je kon doen was een generiek programmeermodel gebruiken dat op zo’n beetje elke architectuur zou draaien. Waarbij je dan maar accepteerde dat het nooit het maximale uit de hardware zou halen.
Inmiddels kennen we een breed scala aan hardware-architecturen die naast elkaar bestaan. Zo zijn er shared memory (multi-core) architecturen, waarvoor OpenMP of multi-threading de logische aanpak is. Daarnaast zijn er distributed memory architecturen, waarvoor je al snel naar MPI grijpt. En verder zijn er natuurlijk de accelerators, zoals de GPU’s, die meestal met CUDA of OpenCL geprogrammeerd worden. Veel computers bevatten combinaties van deze architecturen. En dan hebben we het nog niet eens over hybride FPGA of ARM platformen…
De stille hoop was nog dat er uiteindelijk weer een dominant programmeermodel zou komen, waarna we weer goede overdraagbare programmatuur konden gaan maken. De grote vraag was alleen welk model dat zou worden en wanneer het dominant zou worden.
Het artikel in Scientific Computing World suggereert dat de technologie misschien helemaal niet meer gaat convergeren. Dat we te maken blijven hebben met verschillende technologieën die allemaal naast elkaar bestaan met ieder een apart programmeermodel, bijbehorende tools en bijbehorende experts. Dat al die technieken nodig zijn om de verschillende vormen van parallellisme uit te nutten.
Degenen die in deze nieuwe wereld overdraagbare software ontwikkelen, maken ofwel aparte versies voor de verschillende architecturen, ofwel software waarin meerdere paradigma’s naast elkaar worden ondersteund. Dat is misschien teveel gevraagd voor een enkele ontwikkelaar, zodat je aparte experts nodig hebt voor de verschillende paradigma’s.
Misschien dat de redding ligt in bibliotheken die een extra abstractielaag bieden (Paralution is een mooi voorbeeld). Of misschien laten we steeds meer werk aan de compiler over, die dan van een hoog-niveau beschrijving een geoptimaliseerd programma genereert. Dat laatste is overigens een droom die al meer dan 20 jaar bestaat maar die vooralsnog niet erg werkelijkheid wil worden. De praktijk bij VORtech is toch nog dat we de compiler in detail moeten vertellen wat er geoptimaliseerd kan worden voordat de compiler dat zelf ook door heeft.
Kortom: programmeren van high performance programmatuur kan de komende jaren door de divergentie van hard- en softwarearchitecturen eerder moeilijker worden dan eenvoudiger.