Instruktionsvägens längd
I datorprestanda är instruktionsväglängden antalet maskinkodinstruktioner som krävs för att exekvera en del av ett datorprogram . Den totala sökvägslängden för hela programmet kan betraktas som ett mått på algoritmens prestanda på en viss datorhårdvara . Väglängden för en enkel villkorlig instruktion skulle normalt betraktas som lika med 2, [ citat behövs ] en instruktion för att utföra jämförelsen och en annan för att ta en gren om det specifika villkoret är uppfyllt. Tidslängden för att exekvera varje instruktion beaktas normalt inte vid bestämning av väglängden och så väglängden är bara en indikation på relativ prestanda snarare än i någon mening absolut.
När du kör ett benchmarkprogram är det mesta av instruktionsvägens längd vanligtvis inne i programmets inre loop .
Före införandet av cacher var väglängden en approximation av körtiden, men i moderna processorer med cacher kan det vara en mycket sämre approximation, med vissa laddningsinstruktioner som tar hundratals cykler när data inte finns i cache, eller beställningar på magnitud snabbare i cache (även samma instruktion i en annan runda i en loop).
Monteringsprogram
Eftersom det typiskt finns ett ett-till-ett-förhållande mellan monteringsinstruktioner och maskininstruktioner, tas instruktionsvägens längd ofta som antalet monteringsinstruktioner som krävs för att utföra en funktion eller en speciell kodsektion. Att utföra en enkel tabellsökning på en osorterad lista med 1 000 poster kan kräva kanske 2 000 maskininstruktioner (i genomsnitt, förutsatt enhetlig fördelning av indatavärden), medan att utföra samma sökning på en sorterad lista med hjälp av en binär sökalgoritm kan kräva endast cirka 40 maskininstruktioner, en mycket betydande besparing. Uttryckt i termer av instruktionsväglängd, skulle detta mått reduceras i detta fall med en massiv faktor på 50 – en anledning till att faktiska instruktionstidpunkter kan vara en sekundär faktor jämfört med ett bra val av algoritm som kräver en kortare väglängd.
Instruktionsväglängden för ett assemblerspråksprogram är i allmänhet mycket annorlunda än antalet källrader med kod för det programmet, eftersom instruktionsvägens längd endast inkluderar kod i det exekverade kontrollflödet för den givna ingången och inte inkluderar kod som inte är relevant för den specifika ingången, eller oåtkomlig kod .
Program på hög nivå (HLL).
Eftersom en sats skriven på ett högnivåspråk kan producera flera maskininstruktioner med variabelt antal, är det inte alltid möjligt att bestämma instruktionsväglängden utan till exempel en instruktionsuppsättningssimulator – som kan räkna antalet " exekverade" instruktioner under simulering. Om högnivåspråket stöder och eventuellt producerar en "sammansättningslista", är det ibland möjligt att uppskatta instruktionsvägens längd genom att undersöka denna lista.
Faktorer som bestämmer instruktionsvägens längd
- in-line-kod kontra omkostnaderna för att anropa och returnera från en funktion, procedur eller metod som innehåller samma programsatser
- ordning av objekt i osorterad uppslagslista – de vanligaste objekten bör placeras först för att undvika långa sökningar
- val av algoritm – indexerad , binär eller linjär (artikel för artikel) sökning
- beräkna på nytt kontra behåll tidigare beräknade ( memoization ) – kan minska flera komplexa iterationer
- läs vissa tabeller i minnet en gång jämfört med extern läsning igen varje gång – undviker lång väglängd genom flera I/O-funktionsanrop
Användning av instruktionsvägslängder
Av ovanstående kan det inses att kunskap om instruktionsvägslängder kan användas:
- att välja en lämplig algoritm för att minimera de totala sökvägslängderna för program på vilket språk som helst
- för att övervaka hur väl ett program har optimerats på något språk
- för att bestämma hur effektiva specifika HLL-satser är för något HLL-språk
- som ett ungefärligt mått på datorns totala prestanda
externa länkar
- [1] Datorarkitektur av John L. Hennessy, David A. Patterson, David Goldberg, Krste Asanovic
- [2] IBM – Ordlista över prestandavillkor