[2 htp] Jump table. Pitkät valintalauseet (switch-lauseet) voivat hidastaa
ohjelman suoritusta huomattavasti, jos usein suoritettavassa silmukassa
joka kerta valitaan yksi kerrallaan oikea case-tapaus esimerkiksi 60 eri
mahdollisuuden joukosta. Tähän menee keskimäärin 30 vertailua ja kuhunkin
vertailuun ainakin 2 konekäskyä!
Jos valinta-arvot ovat kokonaislukuarvoisia, nollasta alkavia ja muodostavat
(liki) yhtenäisen arvoalueen, niin usean if-then-else -vertailun asemesta
voidaan käyttää hyppytaulua (jump table). Hyppytaulun avulla päästää oikeaan
case-tapaukseen aina suoraan muutamalla konekäskyllä. Hyppytaulu sisältää
monta hyppykäskyä (yksi per case-tapaus), joista valintamuuttujan perusteella
valitaan indeksoitua osoitusmoodia käyttäen oikea hyppykäsky. Esimerkiksi,
jos rekisteri R3 sisältää valinta-arvon ja hyppytaulun osoite on JTBL,
niin oikeaan case-tapaukseen (siihen liittyvään hyppykäskyyn) päästään
konekäskyn
"JUMP JTBL(R3)" avulla.
- Anna (Titokoneessa suorituskelpoinen) ttk-91 esimerkki hyppytaulun
käytöstä,
kun case-tapauksia on 10.
- Miten em. valintalause toteutetaan, jos hyppytaulussa onkin hyppykäskyjen
asemesta ainoastaan case-tapausten osoitteet? Anna toteutus samalle
esimerkille kuin kohdassa (a).
- Milloin toteutustapa (a) on parempi kuin (b)? Miksi?
- Milloin toteutustapa (b) on parempi kuin (a)? Miksi?
- Jos kukin case-tapaus vaatii 10 konekäskyä ja case-tapauksia on 60,
niin kuinka paljon (%) hyppytaulun käyttö nopettaa valintalauseen suoritusta
(verrattuna usean peräkkäisen vertailun toteutukseen)? Eroavatko em.
toteutustavat (kohdat a ja b) tässä suhteessa? Käytä nopeusmittana
suoritettujen käskyjen lukumäärää.