Prestationsförutsägelse - Performance prediction
I datavetenskap , prestanda förutsägelse innebär att uppskatta exekveringstid eller andra prestandafaktorer (såsom cache missar) av ett program på en viss dator. Det används allmänt för datorarkitekter för att utvärdera nya datorkonstruktioner, för kompilatorförfattare för att utforska nya optimeringar och även för avancerade utvecklare att ställa in sina program.
Det finns många sätt att förutsäga programmets prestanda på datorer. De kan grovt delas in i tre huvudkategorier:
- simuleringsbaserad förutsägelse
- profilbaserad förutsägelse
- analytisk modellering
Simuleringsbaserad förutsägelse
Prestandadata kan erhållas direkt från datorsimulatorer , inom vilka varje instruktion i målprogrammet faktiskt utförs dynamiskt med tanke på en viss ingångsdatauppsättning. Simulatorer kan förutsäga programmets prestanda mycket exakt men tar mycket tid att hantera stora program. Exempel inkluderar PACE- och Wisconsin Wind Tunnel- simulatorer samt den nyare WARPP- simuleringsverktygssatsen som försöker avsevärt minska den tid som krävs för parallell systemsimulering.
Ett annat tillvägagångssätt, baserat på spårbaserad simulering, kör inte alla instruktioner utan kör en spårfil som bara lagrar viktiga programhändelser. Detta tillvägagångssätt förlorar viss flexibilitet och noggrannhet jämfört med cykel-exakt simulering som nämns ovan men kan vara mycket snabbare. Genereringen av spår förbrukar ofta stora mängder lagringsutrymme och kan påverka applikationernas körtid om en stor mängd data registreras under körningen.
Profilbaserad förutsägelse
Det klassiska tillvägagångssättet för prestationsförutsägelse behandlar ett program som en uppsättning grundläggande block som är kopplade till exekveringsväg. Således är exekveringstiden för hela programmet summan av exekveringstiden för varje basblock multiplicerat med dess exekveringsfrekvens, såsom visas i följande formel:
Exekveringsfrekvenserna för basblock genereras från en profiler , varför denna metod kallas profilbaserad förutsägelse. Exekveringstiden för ett grundblock erhålls vanligtvis från en enkel instruktionsplanerare.
Klassisk profilbaserad förutsägelse fungerade bra för tidiga exekveringsprocessorer med en enda fråga, men misslyckas med att exakt förutsäga prestanda för moderna processorer. Det huvudsakliga skälet är att moderna processorer kan utfärda och utföra flera instruktioner samtidigt, ibland ur den ursprungliga ordningen och korsa gränsen för grundblock.