Til hovedinnhold
Norsk English

GPU-akselerert simulering og numerikk

Vi utvikler numeriske metoder og simuleringsprogramvare som utnytter GPU-er og moderne maskinvare effektivt. Ved å kombinere matematisk innsikt med parallell programmering hjelper vi deg å redusere beregningstiden, håndtere større modeller og gjennomføre flere simuleringer. Erfaringen spenner fra tidlige pionerarbeider på grafikkort til akselerasjon av krevende industrisimulatorer.

Kontaktpersoner

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

Programvare

GPU Ocean

GPU Ocean

Et GPU-akselerert simuleringssystem for å kjøre store ensembler av forenklede havmodeller i virkelige utsnitt av havet.

Jutul

Jutul

Eksperimentelt Julia-rammeverk for fullstendig differensierbare multifysikk-simulatorer basert på implisitte finit-volum-metoder med automatisk differensiering.

Utvalgte prosjekter

SWAMP: the Surface Water Analysis and Modelling Project

SWAMP: the Surface Water Analysis and Modelling Project

Start:
End:

SWAMP aims at developing open-source software for simulation and analysis of surface water caused by flooding and intense rain, and using this simulation software to make demonstrators show casing our experience and expertise.

ACROSS

ACROSS

Start:
End:

ACROSS aims to combine traditional High-Performance Computing (HPC) techniques and workflows with Artificial Intelligence (AI) and Big Data analytic techniques to enhance productivity and efficiency.