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.
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.
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.
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.
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.
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.