Grootschalig rekenen is nieuw zelfstandig onderzoeksgebied

Uit: Automatisering Gids 14 juni 1996

Verbeterde simulatieprogramma's maken moeilijke experimenten overbodig

Het wetenschappelijk of grootschalig rekenen is definitief doorgebroken. De Universiteit Utrecht begint als eerste universiteit in Nederland een erkende opleiding Computational Science. Grootschalig rekenen is de basis voor onder meer computersimulaties. Van autobotsingen, het ontwerpen van medicijnen tot het voorspellen van het weer. Deze doorbraak, zegt dr Rob H. Bisseling maakt een bloeiende parallelle software-industrie mogelijk. En Nederland zou daar een belangrijke rol in kunnen spelen.

Had de tragische vliegtuigramp in de Bijlmer van 4 oktober 1992 voorkomen kunnen worden als we in het verleden beter hadden kunnen simuleren op de computer? Was het El Al-toestel in de lucht gebleven als vliegtuigbouwer Boeing het gedrag van borgpennen voor motorophanging beter had kunnen doorrekenen? Niemand kan deze speculatieve vragen met zekerheid beantwoorden, maar het staat wel vast dat onze mogelijkheden op het gebied van computersimulaties enorm zijn vergroot sinds de tijd dat de Boeing 747 werd ontworpen.

De berekening van het gedrag van een borgpen onder invloed van trekkrachten kostte tijdens het onderzoek naar de oorzaak van de ramp zo'n elf uur rekentijd op een Cray-supercomputer. Deze rekentijd was nodig om de pen in 34.000 kleine stukjes op te delen en zo de belasting op de afzonderlijke delen te berekenen. Het bleek dat de belasting tien keer zo groot was dan was voorzien tijdens het ontwerpen van het vliegtuig dertig jaar geleden. Door beter te simuleren hopen we deze fouten in de toekomst te vermijden.

Het vakgebied dat zich met de verbetering van dit soort simulaties bezighoudt is computational science: de discipline van het grootschalig rekenen aan natuurwetenschappelijke modellen. Typerend voor de aanpak in dit vakgebied is dat een volledig traject wordt afgelegd van probleemformulering tot softwaregebruik. Een fysisch, chemisch of technisch probleem wordt geformuleerd. Vervolgens wordt het in wiskundige taal gegoten en opgelost. Een efficiënt algoritme wordt ontworpen en in een computerprogramma ingevoerd. Tot slot wordt het programma getest en gebruikt om nieuwe inzichten te krijgen in het probleemgebied. Alle stappen in dit traject hebben met elkaar te maken. Goede wiskundige methoden zijn immers nodig om het probleem hanteerbaar te maken en efficiënte algoritmen te bedenken. Fysische benaderingen zijn vaak nodig om de complexiteit in te perken.

Vier miljoen roosterpunten

Toepassingsgebieden van grootschalig rekenen zijn onder meer het simuleren van autobotsingen, het ontwerpen van medicijnen, het al tijdens de ontwerpfase ontstoren van elektronische apparatuur, het nabootsen van de geboorte van sterrenstelsels en het voorspellen van het weer. In de meeste gevallen is computersimulatie een aanvulling op de theorie en het laboratoriumexperiment. Experimenten kunnen veel gerichter worden uitgevoerd dankzij voorafgaande computersimulaties.

Moleculair modelleren op de computer zorgt ervoor dat potentiële medicijnen niet lukraak hoeven te worden getest. Oliereservoirsimulaties verminderen het gemiddeld aantal benodigde proefboringen per olievondst. Soms vervangt de simulatie het experiment volledig. Met op grote afstand gelegen sterrenstelsels valt weinig te experimenteren. Het zou nogal roekeloos zijn als we bij wijze van experiment het KNMI en het weermodel dat de hele wereld omspant en opdeelt in vakken van 60 bij 60 km. De atmosfeer boven een vak wordt verdeeld in 31 lagen. Alles bij elkaar levert dit vier miljoen roosterpunten op in een driedimensionaal rekenrooster. Voor ieder punt worden waarden zoals temperatuur en luchtdruk doorgerekend. De periode van tien dagen wordt opgesplitst in tijdstappen van vijftien minuten. De resulterende rekenpartij vergt 30 teraflops. (Flops zijn elementaire rekenoperaties zoals floating point optellingen en aftrekkingen, een Tflop, spreek uit 'teraflop', is een miljoen x miljoen flop.) Ondanks dit immense aantal is de klus in ongeveer drie uur geklaard op een Cray C90-supercomputer met zestien processoren.

Doorbraak

De recente doorbraak van het wetenschappelijk rekenen is te danken aan drie ontwikkelingen. Om te beginnen zijn computers veel sneller en goedkoper geworden. De eerste supercomputer, de Cray-1 uit 1976, met een gemeten topsnelheid van 110 Mflop/s (miljoen flops per seconde), zou het nu moeten afleggen tegen de krachtigste desktop werkstations. De Cray-1 kostte destijds miljoenen dollars. Onlangs werd hij op het Internet voor ruim 20.000 dollar tweedehands aangeboden. (De bijbehorende electriciteitsrekening is overigens gigantisch.)

In de privésfeer kan men deze vooruitgang ook constateren. De machine waarop ik dit artikel schrijf, een Apple Performa 5200 met Power PC chip, klokt ongeveer 10 Mflop/s. Dit is een factor 2000 sneller dan mijn vorige computer, een Atari Mega ST uit 1988. Deze vooruitgang betekent dat veel computersimulaties ook op de huidige generatie PC's kunnen draaien. Het einde van de snelheidsverbetering van afzonderlijke processoren is overigens in zicht, door steeds duurdere submicrontechnologie en ook vanwege inherente fysische limieten. Verdere snelheidsverbetering zal op termijn dan ook slechts te bewerkstelligen zijn door computers te bouwen met meer processoren, de zogenaamde parallelle computers.

Een andere (tweede) belangrijke ontwikkeling is de verbetering van algoritmen, dat wil zeggen rekenrecepten die ten grondslag liggen aan simulaties. Een voorbeeld hiervan is het Fast Fourier Transform (FFT)-algoritme van James Cooley en John Tukey uit 1965, dat het mogelijk maakt om een signaal snel in frequentiecomponenten te ontleden. Om een idee te krijgen van de grootte van de verbetering het volgende rekenvoorbeeld.

Voor een geluidssignaal met 1024 monsterpunten (ruwweg 25 milliseconden CD-geluid) kost een snelle Fourier-berekening 51.200 flops. Met de trage Fourier-transformatie zou dat 8.388.608 flops hebben gekost. Door de uitvinding van het FFT-algoritme werd de Fourier-analyse praktisch toepasbaar. We vinden haar dan ook terug in veel simulaties, van weersvoorspelling tot medische tomografie. Een interessant historisch detail is dat de wiskundige Carl Friedrich Gauss al in 1805 het basisidee van het FFT-algoritme had ontdekt, maar dat dit onbekend bleef tot ruim na de komst van de digitale computer.

Nieuwe algoritmen worden ook ontwikkeld om parallelle computers beter te kunnen benutten. Dit is belangrijk omdat de vraag naar rekenkracht nog steeds toeneemt. Tweedimensionale FFT's (die bijvoorbeeld worden toegepast bij de bewerking van beelden met 1024 bij 1024 pixels) en driedimensionale FFT's (voor de bewerking van 3D-beelden zoals dwarsdoorsneden van het menselijk lichaam) vergen veel meer rekentijd dan eendimensionale FFT's. Hier houdt het overigens niet op: vier- en hoger-dimensionale FFT's worden gebruikt in de simulatie van chemische reacties met behulp van quantumdynamica. Een derde ontwikkeling (voor de doorbraak van het wetenschappelijk rekenen) is de toenemende interactie tussen toepassingsgebieden. Vanaf het begin werden digitale computers gebruikt voor het oplossen van grootschalige rekenproblemen. De belangrijkste gebruikers van het eerste uur waren natuurkundigen, later gevolgd door scheikundigen en vele anderen. Dit is ook te herkennen in de wetenschappelijke vakliteratuur, in tijdschriften als het Journal of Computational Physics, dat bestaat sinds de jaren zestig, en het Journal of Computational Chemistry uit 1980.

Langzaam groeide het inzicht dat dezelfde methoden in zeer uiteenlopende vakgebieden kunnen worden toegepast en dat er behoefte bestaat aan kruisbestuiving. De term `computational science' werd geïntroduceerd.

Een halve minuut

Om te komen tot snelheidsverbeteringen zijn parallelle computers onmisbaar. Dat zijn computers met verschillende processoren die samen een probleem oplossen, zoals bijvoorbeeld de nabootsing van oceaanstromingen. De eerste parallelle computer die op de markt verscheen was de Intel iPSC/1 uit 1985. De grootste iPSC/1 bestond uit 128 chips van het type 80286, ieder met een 80287 coprocessor, verbonden door een communicatienetwerk in de vorm van een zogenaamde hyperkubus. De snelheid van een enkele processor was 0,03 Mflop/s, zodat de totale snelheid 3,84 Mflop/s was. Sindsien zijn er vele, vaak exotische architecturen op de markt gekomen.

Dit jaar zal er voor het eerst een computer worden gebouwd met een snelheid van meer dan een Tflop/s . Deze Intel-machine, bestaande uit 9000 Pentium Pro-processoren, zal bij het Sandia National Laboratory in de Verenigde Staten worden geïnstalleerd. In principe zal deze computer 9000 keer zo snel zijn als de krachtigste PC van dit moment. De weersvoorspelling van het KNMI zou op deze teraflop-machine in een halve minuut kunnen worden berekend.


``Parallel programmeren is niet moeilijker dan sequentieel programmeren''

Ter illustratie, volgende maand (juli) zal Cleve Moler, directeur van het softwarebedrijf MathWorks, een lezing houden op het jaarlijks congres van de Society for Industrial and Applied Mathematics in Kansas City, met als pessimistische titel `Why is it so hard to program parallel computers?'. Als onderzoeker op het Shell Laboratorium in Amsterdam schreef ik in 1987 een programma om een linear stelsel van vergelijkingen op te lossen. Ik gebruikte de parallelle programmeertaal Occam, bestemd voor parallelle computers gebaseerd op de transputer (een destijds geavanceerde chip met snelle communicatiemogelijkheden). Het programma besloeg twintig pagina's tekst, veel meer dan de twee pagina's van een standaard sequentieel programma.

In de afgelopen jaren is de grootte van een dergelijk parallel programma teruggebracht tot vier pagina's tekst in de programmeertaal C met enige uitbreidingen voor parallellisme. Deze lengte is acceptabel in vergelijking met de lengte van de sequentiële tekst. Omdat de lengte van de programmatekst een simpele maat is voor de complexiteit van een programma, is dit een indicatie dat parallel programmeren tegenwoordig niet veel moeilijker is dan sequentieel programmeren.

Hoe ziet een parallel programma er tegenwoordig uit? Een veelbelovende manier van parallel programmeren is gebaseerd op het Bulk Synchroon Parallelle (BSP)-model van Leslie Valiant uit 1990. In dit model bestaat een parallel programma afwisselend uit rekenfasen en communicatiefasen, de zogenaamde superstappen. Aan het eind van elke superstap is er een globale synchronisatie, waarbij alle processoren op elkaar wachten. Dit geeft iedere processor zekerheid over de situatie van de andere processoren. Elke processor heeft zijn eigen geheugen. Communicatie is eenzijdig: een processor zet gegevens rechtstreeks in het geheugen van de ontvanger, zonder dat deze bij de actie is betrokken. Zo'n actie heet een `put'. Internetfreaks kennen het put-gevoel omdat je files kunt `putten' met een ftp-programma.

Een processor kan ook gegevens ophalen door middel van een `get'-operatie. (Dit lijkt nog belangrijker op het Internet.) Eenzijdige communicatie is een opmerkelijke vereenvoudiging ten opzichte van het vroegere tweezijdige alternatief, `message passing', waarbij zowel een zender als een ontvanger actief zijn. Sinds 1994 bestaat er een goede implementatie van het BSP-model. In april 1996 werd het voorstel voor de BSP Worldwide standaard gepubliceerd. Deze standaard moet het mogelijk maken om hetzelfde parallelle programma op zeer verschillende parallelle computers te draaien en dit ook nog efficiënt te doen.

Uitdagingen voor de computational science zijn er in overvloed. Een officiële lijst van dertien Grand Challenges uit 1992 bevat als onderwerpen onder meer klimaatvoorspelling, het modelleren van supergeleiders, het human genome project (dat het menselijk DNA in kaart brengt) en het modelleren van halfgeleiders. Deze lijst geeft richting aan federaal ondersteund onderzoek in de USA.

Omdat het grootschalig rekenen de grenzen overschrijdt heeft een dergelijke lijst ook veel invloed in Europa en elders. Nog dichter bij huis zijn er ook specifieke uitdagingen. Er bestaat in Nederland een software-industrie die volledig gebaseerd is op sequentiële programmatuur. Nergens ter wereld bestaat er een parallelle-software-industrie van enige betekenis. Dit was economisch te begrijpen, maar de situatie is onlangs drastisch veranderd.


``Nederland bezit de kennisinfrastructuur voor een parallelle-software-industrie''

Sinds kort heeft fundamenteel onderzoek het gebruik van parallelle computers veel makkelijker gemaakt. Bovendien hoeft men tegenwoordig parallelle programmatuur slechts eenmaal te ontwikkelen, in plaats van telkens opnieuw voor elke nieuwe machine-architectuur die op de markt verschijnt. Dit biedt het perspectief van een bloeiende parallelle-software-industrie. En waarom zou die zich niet in Nederland kunnen concentreren?

De hiervoor benodigde kennisinfrastructuur bestaat (nog). Parallelle computers van uiteenlopende architectuur zijn er op verschillende plaatsen in Nederland. Zo is er een IBM SP2 met 76 processoren in Amsterdam, een Cray T3E met 64 processoren komt naar Delft, een Thinking Machines CM-5 met zestien processoren staat in Groningen en kleinere machines bevinden zich in Utrecht en elders.

Belangrijker dan de hardware zijn echter de mensen. Universiteit Utrecht is daarom begonnen met de opleiding computational science. De studenten leren parallel programmeren als een natuurlijke bezigheid, tevens krijgen zij oog voor het correct modelleren van de fysische realiteit. Deze generatie zal het succes van de discipline computational science bepalen.

Rob Bisseling
Dr Rob H. Bisseling is hoofddocent computational science bij de vakgroep wiskunde van de Universiteit Utrecht.