Hva kan vi hjelpe deg med?
Raskere beregninger kan gjøre det mulig å undersøke flere alternativer, bruke mer detaljerte modeller eller levere resultater tidsnok til å støtte en beslutning. Vi utvikler og tilpasser numeriske metoder slik at simuleringsverktøy kan utnytte parallelliteten og minnekapasiteten i moderne maskinvare.
Vi kan hjelpe deg med å:
- Identifisere flaskehalser og vurdere potensialet for GPU-akselerasjon i eksisterende programvare.
- Utvikle og tilpasse diskretiseringer, løsningsmetoder og prekondisjonering for parallelle beregninger.
- Effektivisere datastrukturer, minnetilgang og dataoverføring mellom CPU og GPU.
- Integrere akselererte beregningskomponenter i simulatorer og tilpasse programvare til ulike maskinvareplattformer.
- Organisere beregninger for store modeller, ensembler og omfattende parameterstudier.
- Evaluere ytelse, skalerbarhet og numerisk kvalitet på representative problemer.
Har du en simulator som bruker for lang tid, eller beregningsoppgaver du ikke får gjennomført med dagens verktøy? Ta kontakt med vår forskningsgruppe for Anvendt beregningsvitenskap.
Samspillet mellom matematikk, algoritmer og maskinvare
God utnyttelse av en GPU avhenger av hvordan beregningene er formulert og organisert. En metode som fungerer godt på en CPU, kan ha avhengigheter eller minnetilgangsmønstre som begrenser ytelsen på en GPU. I noen tilfeller gir en annen numerisk metode større gevinst enn å optimalisere implementeringen av den opprinnelige.
Vi vurderer derfor modellbeskrivelse, algoritmer og implementering i sammenheng. Arbeidet kan omfatte å endre rekkefølgen på beregninger, samle operasjoner, redusere databevegelse eller velge løsningsmetoder som gir mer parallelt arbeid. Målet er å redusere den samlede beregningstiden samtidig som kravene til nøyaktighet og robusthet ivaretas.
Fra lokale beregninger til koblede ligningssystemer
Eksplisitte metoder for transport og bølgeutbredelse gir ofte mange lokale beregninger som kan utføres parallelt. Her er effektiv organisering av beregningsnettet og god utnyttelse av minnebåndbredden sentralt. Vi har lang erfaring med slike metoder for konserverings- og balanselover, blant annet anvendt på vannstrømning.
Implisitte simulatorer krever i tillegg løsning av store, koblede ligningssystemer. Da avhenger ytelsen av samspillet mellom oppbygging av systemene, sparsomme matriseoperasjoner, iterative løsere og prekondisjonering. Vi arbeider med hvordan disse komponentene kan tilpasses GPU-er, og hvordan akselerasjonen kan integreres i simulatorens samlede beregningsløp.
Arbeidet med GPU-akselerasjon av OPM Flow er et eksempel på hvordan vi videreutvikler beregningskomponenter i en etablert reservoarsimulator.
Én stor modell eller mange simuleringer
Behovet for regnekraft kan skyldes størrelsen på én modell eller antallet ganger den skal kjøres. Usikkerhetsanalyser, dataassimilasjon, modellkalibrering og optimering krever ofte mange beslektede simuleringer. Da er det viktig å vurdere både parallellitet innenfor den enkelte simuleringen og fordeling av uavhengige beregninger.
Vi tilpasser beregningsopplegget til oppgaven og tilgjengelige ressurser. For tidskritiske anvendelser kan målet være kortest mulig svartid. For ensembleberegninger kan det være viktigere å gjennomføre flest mulig simuleringer innenfor et gitt tids- og ressursbudsjett.
I GPU Ocean brukes GPU-akselerasjon til å kjøre ensembler av havmodeller. Dette gir et grunnlag for å undersøke usikkerhet og kombinere simuleringer med observasjoner.
Integrasjon og portabilitet
En akselerert komponent må fungere sammen med resten av programvaren. Overføring av data mellom CPU og GPU, synkronisering og gjentatte konverteringer kan spise opp gevinsten fra raske enkeltoperasjoner. Vi undersøker derfor hele beregningsløpet og vurderer hvilke data og operasjoner som bør bli værende på akseleratoren.
Vi arbeider også med programvarestruktur og abstraksjoner som gjør det mulig å støtte ulike maskinvareplattformer uten å vedlikeholde helt separate implementeringer av den samme numeriske metoden. Valg av verktøy og programmeringsmodell må balansere ytelse, portabilitet og behovet for videre utvikling.
Ytelse som er relevant for anvendelsen
En rask beregningskjerne er bare nyttig dersom den gir bedre ytelse i den samlede simuleringen. Vi måler derfor både enkeltkomponenter og komplette beregningsforløp, med oppmerksomhet på problemstørrelse, minnebruk, konvergens og dataoverføring.
Sammenligninger må bygge på tilsvarende krav til numerisk kvalitet. Endringer i presisjon, løsertoleranser eller algoritmer kan påvirke både kjøretid og resultater. Vi bruker representative testproblemer for å undersøke gevinstene og avklare når en løsning er fordelaktig.
Over to tiår med GPU-beregninger
Vi var blant pionerene som tidlig på 2000-tallet tok i bruk programmerbare grafikkort til numerisk løsning av konserverings- og balanselover. Vårt innføringskapittel fra 2007 beskriver hvordan høyoppløselige numeriske metoder kan tilpasses grafikkprosessorer.
Maskinvaren og utviklingsverktøyene har endret seg vesentlig siden den gang. Den grunnleggende erfaringen er fortsatt relevant: God ytelse krever forståelse av både det matematiske problemet og hvordan beregningene utføres. Denne kombinasjonen viderefører vi i utviklingen av simulatorer og numeriske komponenter for forskning og industri.
Les mer
- Hagen, T. R., Henriksen, M. O., Hjelmervik, J. M. og Lie, K.-A. (2007). How to Solve Systems of Conservation Laws Numerically Using the Graphics Processor as a High-Performance Computational Engine. I Geometric Modelling, Numerical Simulation, and Optimization, s. 211–264. Et tidlig arbeid om samspillet mellom numeriske metoder og GPU-beregninger.
- Accelerated performance with GPUs for OPM Flow. Prosjekt om GPU-akselerasjon av reservoarsimulering.
- GPU Ocean. GPU-akselerert programvare for ensembler av havmodeller.