Alimman ykkösbitin etsintä

Koko: px
Aloita esitys sivulta:

Download "Alimman ykkösbitin etsintä"

Transkriptio

1 Alimman ykkösbitin etsintä Hannu Peltola hpeltola(at)cs.hut.fi Seminaariesitelmä T Algoritmien virittäminen -seminaari Tietotekniikan laitos Teknillinen korkeakoulu Tiivistelmä Algoritmit koostuvat alkeistoimenpiteistä. Algoritmin aikavaativuuden laskeminen menee helposti väärin, jos jonkin yksittäisen alkeistoimenpiteen suoritusajan riippuvuus syötteestä jää huomaamatta tai oletetaan virheellisesti vakioiksi. Toisinaan joidenkin mutkikkaampien alkeistoimenpiteiden implementointi jätetään määrittelemättä tarkasti. Keskeisten alkeistoimenpiteiden tehokkuus on usein ratkaisevaa koko algoritmin käytännön suorituskyvyn kannalta. SVM-merkkijononhakualgoritmin implementoinnin keskeinen ongelma on se, miten paljon hahmon tarkastelukohtaa voidaan siirtää eteenpäin tekstissä. Siinä tarkoituksessa täytyy etsiä bittivektorista alkaen vähemmän merkitsevistä biteistä seuraava mahdollista kohtaa vastaava bitti. Algoritmissa tämä on määritelty funktioksi BSF. Algoritmin analyysissä BSF on oletettu suoritettavaksi vakioaikaisena konekäskynä. Alkuperäisessä muodossa, jossa ei kurkistella merkkejä etukäteen, siirtymän enimmäispituus on hahmon pituus. Mikään nyt käsiteltävistä BSF:n implementoinneista ei hyödynnä tietoa hahmon pituudesta. Haarukointiin perustuvat versiot ovat siksi enemmän tai vähemmän vakioaikaisia. Tässä esityksessä tarkastellaan BSF:n useiden erilaisten toteutusten käytännön suoritusnopeutta erilaisilla testiaineistoilla. Implementointikokeilut painottuvat ehdollisten hyppykäskyjen nopeuttamiseen ja korvaamiseen laskennalla. Esityksessä keskitytään C-kieleen ja rajoitutaan x86-arkkitehtuuriin sekä gcc-kääntäjään. 1 Johdanto Merkkijononhaussa (engl. string matching) etsitään kohdat, joissa annettu hahmo esiintyy tekstissä. Merkitään n merkin mittaista tekstiä T = t 1 t 2 t n ja m merkin mittaista hahmoa P = p 1 p 2 p m. Bittivektori (engl. bitvector) tarkoittaa biteistä koostuvaa muuttujatyyppiä, jota voidaan käsitellä loogisilla operaattoreilla (maskauksia): (inklusiivinen) OR; & AND; (yhden) komplementti; ˆ XOR, ekslusiivinen OR;! negaatio (ei kovin käyttökelpoinen) sivuttaissiirrot: << vasemmalle ja >> oikealle (tyypillisesti täytetään nollilla). Sivuttaissiirroissa käytetään tyypillisesti samaa rajoitusta kuin C-kielessä: siirron pituuden täytyy olla pienempi kuin operandin bittimäärä. 1

2 vertailuoperaattoreilla: ==,! =, >=, >, <= ja < aritmeettisilla operaattoreilla: + ja harvoin myös kahden komplementti 1 : Paras bittivektorin koko on käytetyn laitteiston rekisterin leveys. Toisaalta gcc-kääntäjä on jo pitkään osannut tuottaa 32-bittistä koodia, joka käsittelee 64 bittisiä muuttujia (useammalla operaatiolla). C-kielessä käyttökelpoisin muuttujatyyppi on etumerkittömissä tarkan levyisissä kokonaisluvuissa (engl. Exact-width integer types); erityisesti uint32 t ja uint64 t 2. Kannattaa muistaa, että x86:n SSE-käskykanta puolestaan käsittelee 128 bittisiä rekistereitä. Muutamissa bittirinnakkaisissa merkkijononhakualgoritmeissa tarvitaan alkeistoimenpidettä, jossa bittivektorista haetaan seuraavaa tietyn arvoista bittiä. Terminologiassa tehtävä on vakiintunut ykkösbitin hakemiseksi; nollabittihän löytyy triviaalisti komplementoimalla argumentti. Jos etsintä aloitetaan vähemmän merkitsevistä biteistä, selvitetään lopussa olevien nollien määrä (engl. number of trailing zeros). Päinvastaiseen suuntaan edetessä ratkaistaan edeltävien nollien määrä (engl. number of leading zeros). Bitin haku -ongelma on vanha ja ratkaisuja on useita [6, s. 15, ss ], mutta suuri osa lienee dokumentoimatta ja julkaisematta. Tässä esityksessä keskitytään Shift-Vector Matching (SVM) algoritmissa [5] tarvittavaan alinta bittiä seuraavan nollabitin etsintätapoihin. Käytännössä useimmissa tapauksissa bittivektoria siirretään ensin bitti oikealle ja komplementoidaan sitten, jolloin itseasiassa haetaan alinta ykkösbittiä. 2 Shift-Vector Matching Tavanomaisilla syötteillä Boyer Moore-algoritmi [2] ja sen eri variaatiot ovat erinomaisia. Niiden akilleen kantapäänä ovat toisteiset hahmot ja tekstit. Sillä tavallinen Boyer Moore-pohjainen algoritmi unohtaa hahmon siirron yhteydessä kaiken näkemästään. Tuon tyyppisten algoritmien aikavaativuuden kannalta keskeistä on hahmon siirtäminen useampia positioita kerrallaan. Jokainen tekstistä tutkittu merkki rajoittaa sitä, missä kohdissa hahmo voi esiintyä tekstissä; näin ei käy, jos hahmo koostuu samasta merkistä ja löydettiin tekstistä juuri se. SVM-algoritmin idea on käyttää bittivektoria, johon talletetaan tieto siitä, missä hahmo ei voi esiintyä. Hahmon siirron yhteydessä bittivektoria päivitetään samanmittaisella sivuttaissiirrolla. SVM-algoritmin [5] pseudokoodi on esitetty seuraavassa Algoritmina 1. Kaikkien mahdollisten merkkien joukkoa aakkostoa merkitään Σ:lla. Koska sivuttaissiirroissa vapautuvat bitit täytetään nollilla, on luontevaa käyttää mahdottoman esiintymiskohdan merkkinä arvoa yksi. Silloin päädytään automaattisesti bittivektorin päivittämiseen OR-operaatioilla. Jotta saadaan mahdollisimman paljon positioita bittivektoriin, täytyy tutkittavana olevaa kohdistusta vastaavan bitin olla jommassa kummassa päässä. Algoritmissa 1 tutkittavana oleva kohta on vähiten merkitsevässä bittissä. Valinnan syynä oli se, että rivillä 8 käytettävä maski 1 on helppo ja nopea muodostaa. Jos eri suuntiin toimivien sivuttaissiirtojen suorituskyvyssä on eroa, niin niiden suunnan muuttamista kannattaa harkita. 1 C:ssä erityisesti tyypeille Exact-width integer types on taattu kahden komplementtiesitys 2 Vielä versio ei osaa 64 bittiä laajempia tyyppejä 2

3 Algoritmi 1 SVM(P = p 1 p 2 p m, T = t 1 t 2 t n ) /* Preprocessing */ 1: for all c Σ do C[c] 1 m 2: for j 1 to m do 3: C[p j ] C[p j ] & 1 j 1 01 m j /* Searching */ 4: epos m; S 0 5: while epos n do 6: S S C[tepos] 7: j 1 8: while (S&1) = 0 do 9: if j m then 10: report an occurrence at epos + 1 m 11: goto Over 12: S S (C[tepos j] >> j) 13: j j : Over: 15: last BSF( (S >> 1))+1 16: S S >> last 17: epos epos + last Funktioon BSF tultaessa nykyinen kohdistus on tutkittu ja voidaan siirtyä ainakin yksi positio eteenpäin. Rivillä 15 olevassa kutsussa bittivektoria on siirretty jo eteenpäin. Siitä seuraa, että bittivektorissa on aina ainakin yksi ehdot täyttävä bitti. Näin helpotetaan funktion BSF toimintaa. Samalla taataan, että bittivektorin tarvittava sivuttaissiirto on laillisen mittainen. SVM-algoritmi tyypillisesti tutkii vähemmän tekstin merkkejä ja tekee keskimäärin pidempiä siirtymiä kuin muut merkkijononhakualgoritmit. Kätevä piirre on muiden bittivektoreita käyttävien algoritmien tapaan se, että esimerkiksi isojen ja pienten kirjainten samaistus hoituu helposti alustuksen yhteydessä. Nykyään prosessoreiden ja muistiväylien nopeutuminen on vienyt siihen suuntaan, että hyvin suoraviivaiset algoritmit toimivat nopeimmin. Esimerkiksi esiintymiä tarkastettaessa (rivillä 8) jokaisen tekstistä poimitun merkin jälkeen tapahtuva testaus lienee hidaste; (rivillä 6) kannattaisi samantien lisätä useamman tekstin merkin tiedot summavektoriin S. Myös BSF on suhteellisen raskas toimenpide. SVM-algoritmi on parhaimmillaan, kun etsittävät hahmot ovat melko pitkiä ja sisältävät samoja merkkejä useammassa positiossa. 3 Mahdollisia tehostuskeinoja 3.1 Likely / Unlikely Linuxin kernelissä totuusarvolausekkeissa on käytössä funktiokutsuilta näyttävät likely() ja unlikely(). Ne ovat itseasiassa makromäärittelyjä, jotka vinkkaavat gcc-kääntäjälle kumpi vaihtoehto on todennäköisempi: 3

4 /* from linux/compiler.h */ #define likely(x) builtin_expect(!!(x), 1) #define unlikely(x) builtin_expect(!!(x), 0) Tavoitteena on generoida sikäli optimaalista konekoodia, että todennäköisemmässä vaihtoehdossa ei tehdä yhtään hyppykäskyä, jotka tyhjentäisivät prosessorin liukuhihnan. Yleisesti likely()- ja unlikely()-makroja neuvotaan käyttämään vain, kun toinen vaihtoehdoista on hyvin paljon todennäköisempi. Kääntäjän sisäisen funktion long builtin expect (long exp, long c) semantiikkana on ilmaista, että todennäköisesti exp == c Haarautumisten poistaminen Haarautumisia ehdolliset, epäsuorat ja suorat (JMP) hyppykäskyt sekä aliohjelmakutsut (CALL) ja paluut pyritään ennustamaan prosessoreissa omassa yksikössä. Haarautumisten vähentäminen parantaa suorituskykyä, koska [9, luku ] mahdollisuus ennustaa väärin poistuu haarautumiskohtapuskurissa (branch targer buffer (BTB)) tarvitaan vähemmän alkioita. Ehdolliset hyppykäskyt, joita ei koskaan suoriteta, eivät kuluta BTB:tä Intelin uusissa prosessoreissa hyppykäskyt eivät mielellään saisi olla kolmea sisäistä käskyä (µops) lähempänä toisiaan [9, luku 3.4.1]. AMD Athlon 64 ja Opteron kykenee ennustamaan 16 tavun alueella enintään kolme haarautumista. Haarautuminen, joka ylittää 16 tavun rajan, kirjataan kohdealueelle. Ennustettujen rajoja ylittävien haarautumisten tapauksessa käskyjen valmistelu pysähtyy. Haarautumiset kannattaisi siis järjestää niin, ettei 16 tavun alueen rajaa ylitetä; täytekäskyjen lisääminen väliin ei ole kannattavaa. (Koskee myös 32-bittistä koodia.) [10, ss ] Haarautumisten poistamisessa viisi keskeistä keinoa ovat [9, luku ] järjestetään ohjelmakoodi niin, että peruslohkot kasvavat puretaan (unroll) silmukoita (osittain tai kokonaan) käytetään ehdollisia siirtokäskyjä x86-arkkitehtuurissa cmov (Intelillä Pentium II ja myöhemmät; AMD:llä K7:sta lähtien) lataamalla totuusarvo rekisteriin x86-arkkitehtuurissa setcc ja käyttämällä näin saatua kahta vaihtoehtoista arvoa käytetään SSE ja SSE2 käskyjä, jotka suorittavat muuten ehdollisia operaatiota: ANDPS, ANDPD, ANDNPS, ANDNPD, CMPPS, CMPSS, CMPPD, CMPSD, MINPS, MINSS, MINPD, MINSD, MAXPS, MAXSS, MAXPD, ORPS, ORPD, PAND, PANDN, PCMPEQB, PCMPEQD, PCMPEQW, PCMPGTB, PCMPGTD, PCMPGTW, PMAXSW, PMAXUB, PMAXSW, PMAXUB, PMINSW, PMINUB, POR, PXOR, XORPS ja XORPD. 32- bittisessä koodissa on käytettävissä 3DNow! käskyistä PCMPGTB, PCMPGTD, PCMPGTW, 3 4

5 PFCMPGT, PFCMPGE, PFMIN, PFMAX, PAND, PANDN, POR, PXOR ja PXOR. [10, s. 136] Hyppykäskyjen poistaminen Ohjelmointikielissä totuusarvoja vastaavat numeeriset arvot 0 ja 1. Ne voidaan muuttaa muiksi kokonaislukuarvoiksi monella tavalla; vaikka kertolaskulla ja sitten yhteenlaskulla. Perinteinen temppu C-kielellä on kahden komplementtimuotoa hyödyntävä lauseke (<totuusarvo>)-1)&<arvo> Toinen vastaava on (-(!<totuusarvo>))&<arvo> Numeerisen arvon muuntaminen totuusarvoksi käy esimerkiksi ( Bool),!! ja ==0. Prosessorivalmistajien optimointioppaissa neuvotaan tyypillisesti hyppykäskyjen poistoa vain symbolisella konekielellä [9, s. 3-8] ja [10, ss ]. C-kielisiä haarautumatonta koodia käyttäviä ratkaisuja löytyy yleisesti minimin tai maksimin laskemiseen. Yleensä ne eivät varaudu mitenkään yli- tai/ja alivuotoihin [6, ss ] Ehdolliset siirtokäskyt Ehdolliset siirtokäskyt (engl. conditional move) [6, s. 8, 38] ovat tehokkaita käskyjä: esimerkiksi minimin tai maksimin laskeminen sujuu kahdella käskyllä. Valitettavasti niiden käyttö C-kielestä ei ole kovin luontevaa ja objektikoodin optimaalisuus heikkenee, jos sivuvaikutusten takia joudutaan käyttämään volatile-tarkenninta. Toisaalta kääntäjät voivat halutessaan generoida ehdollisia siirtokäskyjä. 4 BSF variaatioita Seuraavaksi esitellään joukko BSF-funktion implementointeja C-kielellä. Niissä bittivektorit voivat olla joko 32 tai 64 bittisiä; tyyppimäärittelyinä vastaavasti uint32 t ja uint64 t. Bittivektoreiden bittimäärää ohjataan käännösaikaisella vakiolla BITS, jonka voi halutessaan määritellä käännöskomennossa. Summavektorina käytetään muuttujaa sv (pseudokoodissa S). Apubittivektori x on saman kokoinen. Tutkittavan kohdistuksen loppukohtaan tekstissä osoittaa osoitin s (pseudokoodissa epos). Testiajot on suoritettu 2,8 GHz Pentium D (dual core) prosessorilla, jonka molemmilla loogisilla prosessoreilla on 16 KB L1 data välimuistia ja 1024 KB L2 välimuistia. Keskusmuistia on 1 GB. Käyttöjärjestelmänä on Fedora 8. Prosessin vaihto toiselle prosessorille tyhjentää vaihtelevassa määrin välimuisteja. Tämä hidastaa datan noutoa keskusmuistista ja tuo testiajojen ajanmittauksiin vaihtelua. Tässä tarkoituksessa on käytetty Linux in funktiota sched setaffinity, jolla prosessi on kiinnitetty yhteen (loogiseen) prosessoriin. Testattavat ohjelmat on käännetty gcc-kääntäjän versiolla optimointitasolla -O3. Testiajoissa käytettiin aineistona kolmen tyyppistä tekstiä: englantia, DNA jonoa ja satunnaisesti tasanjakautuneesti kahta merkkiä sisältävää binääridataa. Kunkin tekstin koko on vajaa miljoona merkkiä. Etsittävinä hahmojoukkoina käytettiin vastaavantyyppisiä 200 hahmon joukkoja. Hahmojen pituudet ovat 5, 10, 20, 30, 40, 50 ja 60 merkkiä. Tuloksissa on tilan säästämiseksi annettu tulokset neljältä lyhimmältä hahmojoukolta ja DNA:lta lisäksi 50 mittaisilta hahmoilta. 5

6 Yksittäisen BSF-funktion suorituksen kesto on niin pieni, että sen mittaaminen suoraan on lähes mahdotonta. Koska se on SVM-algoritmin suoritettavassa koodissa ainoa muuttuva kohta, on luontevaa mitata koko algoritmin suoritukseen kuluvaa aikaa. Kunkin hahmon haku on toistettu 50 kertaa, jotta ajanmittaukseen saadaan tarkkuutta. 4.1 BSF-0 Intelin IA-32-arkkitehtuurin käskykannassa on konekäskyt bsfw ja bsfl. bsfw tuo ensimmäisen argumentin osoittamassa kohdassa olevan sanan (word = 16 bittiä) vähiten merkitsevässä päässä olevien nollabittien määrän toisena argumenttina annettuun rekisteriin. Jos ensimmäinen argumentti sisältää pelkästään nollia, prosessorin ZF lippu (flag) asetetaan (eli saa arvon 1). bsfl-käskyn operandina on kaksoissana (longword) ja 64-bitin käskykannassa bsfq-käskyn operandina on nelisana (quadword)[8]. BSF-käsky lisättiin käskykantaan 80386:ssa [3, s. 112]. asm on gcc-kääntäjän laajennus, jolla voidaan sisällyttää ohjelmaan symbolisia konekäskyjä niin, että operandit on määritelty C-kielen tavoin. 4 On myös mahdollista käyttää useampia peräkkäisiä symbolisia konekäskyjä. Seuraavassa on bsfl- ja bsfq-käskyille käytetyt esittelyt: #if defined x86_64 static inline unsigned long asm_bsf(bitv x) { #if BITS==64 asm ("bsfq %0, %0" : "=r" (x) : "0" (x)); #else asm ("bsfl %0, %0" : "=r" (x) : "0" (x)); #elif defined i386 static inline unsigned long asm_bsf(unsigned long x) { asm ("bsfl %0, %0" : "=r" (x) : "0" (x)); #else # error wrong kind of instruction set return x; } Alimman nollabitin etsintä käy edellisten määrittelyjen avulla helposti [1]. Seuraavaa koodia mutkistaa tilanne, jossa 64 bittisiä bittivektoreita käsitellään 32-bittisellä käskykannalla: x = (sv >>= 1); /* where is lowest zero bit in sv */ /* */ /* if bitvectors have 64 bits, but registers only 32 */ #if BITS==64 && defined i386 j = asm_bsf(x); if((j==0) && ((x&0xffffffff)==0)) { 4 6

7 #else } j = asm_bsf(x); sv >>= j; s += j+1; j = 32 + asm_bsf(x>>32); Taulukko 1: Hakuajat BSF-0:lla millisekunteina eri käskykannoilla (KK) ja bittivektoreilla (BV). hahmot Englannin kieli DNA binääri KK / BV / / / / SVM-algoritmin tapauksessa suorituskykyero 64- ja 32-bittisen käskykannan välillä näyttää olevan mitätön ja jopa vähän ristiriitainen: binääridatalla 64-bittinen näyttää olevan nopeampi, mutta muilla aineistoilla hitaampi. Bittivektorin koolla on huomattava merkitys. 64 bittisillä vektoreilla aikaa kuluu jopa yli 20% enemmän kuin 32 bittisillä. Suhteellinen ero ei näytä riippuvan hahmojen pituudesta; ei myöskään tutkittujen merkkien lukumäärästä. Tilanteeseen vaikuttaa mahdollisesti se, että 32 bittisen operandin etumerkin laajennus (sign extension) 64 bittiin on nopeampaa kuin yläosa nollaus (zero extension) [9, luku 9.2.4]. 32-bittisellä koodilla ja 64 bittisillä bittivektoreilla tehty testi osoittaa, että 64-bittisellä koodilla voisi käsitellä 128 bittisiä bittivektoreita vielä siedettävän nopeasti ja hakea hahmoja, joiden pituus on enintään 128 merkkiä. 4.2 BSF-1 Kaikkein yksinkertaisin ratkaisu on siirtää summavektoria yhdellä bitillä oikealle, ja lopettaa, kun nollabitti löytyy: do { /* NOT EFFICIENT, BUT WORKS */ sv >>= 1; s += 1; } while(sv&1); Menetelmän hyviä puolia ovat ne, ettei tarvita mitään valmisteluita eikä lopuksi päivityksiä. Nopeuskin on hyvä, jos nollabitti löytyy pian; näin käy ainakin, kun hahmo on melko lyhyt. Navarro ja Raffinot ovat käyttäneet tätä tekniikkaa implementoidessaan BM BNDM:ää ja TurboBNDM:ää [4]. Vastaava on myös Warrenin kirjassa [6, s. 86] koodina

8 Kannattaa huomata, että kaikki rivit while-silmukassa suoritetaan jokaisella mahdollisella kohdistuksella; siis vähintään n m + 1 kertaa. Tämä saattaa vaikuttaa koko SVM-algoritmin aikavaativuuteen. while-lauseesta generoitavan ehdollisen hyppykäskyn valinta voi vaikuttaa huomattavasti suoritusnopeuteen. Lopetusehdon testauksessa on hyvin luonteva paikka kokeilla likely- ja unlikely-makroja. Koska kyseessä lienee kohdekoneen arkkitehtuurista riippuva tilanne, kokeiltiin käännöksessä vaihtoehtona vipuja -march=nocona -mno-sse3. Testiajon tulokset ovat taulukossa 2. Taulukko 2: Hakuajat BSF-1:lla millisekunteina likely- (L) ja unlikely-makroilla (U). hahmot Englannin kieli DNA binääri versio ei kohdekoneen valintaa BSF BSF-1L BSF-1U kohdekoneen valintana -march=nocona -mno-sse3 BSF BSF-1L BSF-1U Keskim. siirtymä 4,56 7,99 14,10 19,93 3,69 6,33 10,85 15,03 22,52 2,97 5,01 8,68 11,96 Suurin testissä havaittu ero ilmeni BSF-1:llä: kohdekoneen määrittely tuotti selvästi hitaampaa koodia muilla kuin vähintään 30 mittaisilla ja sitä pidemmillä hahmoilla. Toisaalta niillä BSF-1 ei ole muutenkaan kilpailukykyinen. Likely-makroa käyttävästä BSF-1L:stä generoitui nopeampaa koodiaa määrittelemällä kohdekone (paitsi 5 mittaisilla hahmoilla). Unlikely-makrolla varustetulla BSF-1U:lla kävi päinvastoin paitsi yli 30 mittaisilla DNA jonoilla. Perusversioon BSF-1 verrattuna likely- ja unlikely-makroilla näyttää olevan selvää merkitystä vain kun kohdekone valitaan; silloinkin niiden kahden ero on aika pieni. Intel neuvoo, että usein suoritettavissa silmukoissa tulisi olla enintään 16 iteraatiota kullakin suorituskerralla [9, s. 3-7]. Toisaalla todetaan, että Pentium M prosessoreilla ei kannata purkaa silmukoita, joissa on iteraatioita yli 64 [9, s. 3-15]. Englannin kielellä 16 iteraation raja ylittyy melko usein jo 20 merkin mittaisia hahmoilla. DNA:lla 30 mittaisilla hahmojonoilla 16 iteraatiota ylittyy likimain joka toinen kerta. Kun verrataan BSF-1:n (taulukossa 2 ilman kohdekoneen valintaa) BSF-0:n hakuaikoihin (taulukossa 1), havaitaan 5 mittaisilla binäärihahmoilla BSF-1:n olevan nopeampi. Tämä johtuu ilmeisesti siitä, että keskimääräinen hahmon siirto on vain 2,97, kun se on 5:n mittaisilla DNA-hahmoilla 3, BSF-2 Lauseke x & (-x) eristää oikeanpuoleisimman (=vähiten merkitsevän) 1-bitin; tulos on nolla, jos yksikään bitti ei ole viritetty. Toisin sanoen kaikki muut paitsi oikeanpuoleisin 1-bitti nollataan. Ilmeisesti vastaavaa lauseketta vasemmanpuolimmaiselle 1-bitille ei ole [6, ss ]. Edellä olevassa 8

9 lausekkeessa oletetaan kahden komplementtimuoto. Kun täsmälleen yksi bitti on viritetty, BSF ratkaisee itseasiassa kaksikantaisen logaritmin. Kun täsmälleen yksi bitti on viritetty, sen etsintä maskeilla käy puolitusperiaatteella seuraavasti [1]. Käytettävien testien järjestys on vapaa. j = 0; x = (sv >>= 1); x &= -x; /* clear all other but the lowest set bit */ /* where is lowest zero bit in sv */ /* */ #if(bits==32) if(x & 0xffff0000) j += 16; if(x & 0xff00ff00) j += 8; if(x & 0xf0f0f0f0) j += 4; if(x & 0xcccccccc) j += 2; if(x & 0xaaaaaaaa) j += 1; #elif(bits==64) if(x & 0xffffffff ) j += 32; if(x & 0xffff0000ffff0000) j += 16; if(x & 0xff00ff00ff00ff00) j += 8; if(x & 0xf0f0f0f0f0f0f0f0) j += 4; if(x & 0xcccccccccccccccc) j += 2; if(x & 0xaaaaaaaaaaaaaaaa) j += 1; #else abort(); sv >>= j; s += j+1; Tuo implementointi on vakioaikainen. Jos käytettäisiin hyväksi sitä, että siirtymä on enintään hahmon pituinen, aikavaativuus riippuisi pituuden logaritmista. Täysleveät bittimaskit ovat potentiaalinen ongelma: Ainakin Intelin NetBurst-arkkitehtuurissa voi ilmetä hidastumista, jos yli 16 bittisiä vakioita (immediates) käyttävän käskyn perään laitetaan toisia käskyjä, jotka käyttävät vakioita [9, s. 3-4]. 4.4 BSF-3 BSF-2:ssa tavun sisällä olevien bittien haarukointiin kuluu kolme testiä! Tavun sisältä vähiten merkitsevien nollabittien määrä voidaan taulukoida seuraavasti: static const unsigned char lowest_bit_in_byte[] = { 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 9

10 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 }; Sivuttaissiirroilla tutkittavaa aluetta puolittamalla voidaan ainoan ykkösbitin sisältävä tavu siirtää näppärästi oikeaan laitaan. Tavusta ykkösbitti löytyy nopeasti edellä määritellyn taulukon avulla: j = 0; x = (sv >>= 1); x &= -x; /* clear all other but the lowest set bit */ /* where is lowest zero bit in sv */ #if(bits==32) if(x >> 16) {j += 16; x >>= 16;} if(x >> 8) {j += 8; x >>= 8;} #elif(bits==64) if(x >> 32) {j += 32; x >>= 32;} if(x >> 16) {j += 16; x >>= 16;} if(x >> 8) {j += 8; x >>= 8;} #else abort(); j += lowest_bit_in_byte[x & 0xFF]; sv >>= j; s += j+1; Hahmon pituushan on maksimisiirtymä. Siten BSF-3:ssa on itseasiassa tiedossa, että ensimmäinen if-ehto ei ole tosi koskaan, kun hahmonpituus on enintään puolet bittivektorista. Lisäämällä ensimmäiseen if-ehtoon ja 64 bittisessä tapauksessa myös toiseen unlikely-makro saadaan aikaan BSF-3U. BSF-3 on toteutettavissa myös luvussa esitetyllä tavalla ilman hyppykäskyjä esimerkiksi seuraavasti: #if(bits==32) j = (((x >> 16)==0)-1)&16; /* j gets 0 or 16 */ 10

11 j += (((x >> j+8)==0)-1)&8; #elif(bits==64) j = (((x >> 32)==0)-1)&32; /* j gets 0 or 32 */ j += (((x >> j+16)==0)-1)&16; j += (((x >> j+8)==0)-1)&8; #else abort(); j += lowest_bit_in_byte[(x >> j) & 0xFF]; 4.5 BSF-4 Jos sivuttaissiirtojen suoritusnopeudessa eri suuntiin on eroja, BSF-3:n if-ehdoissa käytetyt sivuttaissiirrot voidaan kääntää, jolloin saadaan seuraava versio: j = 0; x = (sv >>= 1); x &= -x; /* clear all other but the lowest set bit */ /* where is lowest zero bit in sv */ #if(bits==32) if(!(x << 16)) {j += 16; x >>= 16;} if(!(x << 24)) {j += 8; x >>= 8;} #elif(bits==64) if(!(x << 32)) {j += 32; x >>= 32;} if(!(x << 48)) {j += 16; x >>= 16;} if(!(x << 56)) {j += 8; x >>= 8;} #else abort(); j += lowest_bit_in_byte[x & 0xFF]; sv >>= j; s += j+1; Warrenin kirjassa [6, s. 85] koodi 5-15 on samankaltainen; vastaava ylimmän ykkösbitin etsintä on koodissa 5-6. Samaan tapaan kuin BSF-3 on implementoitavissa ilman hyppykäskyjä myös BSF-4 voidaan toteuttaa vaikkapa seuraavasti. Sivuttaissiirtoja oikealle on vain yksi indeksoinnissa! #if(bits==32) j = (((_Bool)(x << 16))-1)&16; j += (((_Bool)(x << 24-j))-1)&8; #elif(bits==64) j = (((_Bool)(x << 32))-1)&32; j += (((_Bool)(x << 48-j))-1)&16; j += (((_Bool)(x << 56-j))-1)&8; 11

12 #else abort(); j += lowest_bit_in_byte[(x>>j) & 0xFF]; Warrenin kirjassa [6, s. 80] on myös etumerkin laajentamiseen perustuva ratkaisu koodina Sitä kutsutaan seuraavassa nimellä BSF-5a. Taulukko 3: Hakuajat BSF-3:lla ja BSF-4:lla perus- ja haarautumattomilla (BF) versioilla millisekunteina. hahmot Englannin kieli DNA binääri versio BSF BSF-3BF BSF BSF-4BF BSF-3U BSF-5a Sivuttaissiirtoihin perustuvien versioiden vertailu on taulukossa 3. BSF-5a ja BSF-3:n versio unlikely-makrolla ovat selvästi toivottoman hitaita. BSF-4 toimii nopeammin kuin BSF-3. Vielä selkeämmin perusversiot ovat nopeampia kuin haarautumattomat versiot. Niiden välinen ero on suurempi lyhyillä kuin pidemmillä hahmoilla. Koska lyhyillä hahmoilla siirtoja on enemmän, tuo ero viittaa siihen, että haarautumaton koodi on huomattavasti hitaampaa. 5 Yhteenvetoa ja täydentäviä havaintoja Liitteessä A taulukon 5 laadinnassa käytetty prosessori on varsin lähellä testeissä käytettyä. Niistä vahvistuu edellisistä testeistä syntynyt epäilys sille, että sivuttaissiirto oikealle on hidas. Erityisen hidasta se näyttää olevan 64 bittisillä tiedolla. Siksi yhteenvetotesti on mielekkästä tehdä 32 bittisillä bittivektoreilla. Taulukko 4: Hakuaikojen (millisekunteina) vertailu 32 bittisillä bittivektoreilla. hahmot Englannin kieli DNA binääri versio BSF BSF BSF-1L BSF BSF BSF Testeissä käytetyssä prosessorissa BSF-konekäskyt ovat suhteellisen hitaita. Niitä kannattaa 12

13 käyttää 32 bittisillä bittivektoreilla vasta, kun keskimääräinen siirtymä on vähintään bittisillä bittivektoreilla kannattavuusraja on alempana. Alle 10 mittaisilla hahmoilla BSF-1 on todennäköisesti paras binääridatalla; muuntyyppisellä aineistolla BSF-4 on paras. Sivuttaissiirrot kannattaa järjestää tällä prosessorilla mahdollisuuksien mukaan vasemmalle. Jos siirretään oikealle, niin käytetään mieluummin 32 kuin 64 bittisiä bittivektoreita. Likely- ja unlikely-makrot eivät näytä hyödyllisiltä. Haarautumaton koodi ei vaikuta nopealta. Core 2 -sarjan prosessoreissa kaikki näyttää olevan toisin ;-) Viitteet [1] Jörg Arndt: Jörgs useful and ugly BIT WIZARDRY page. URL: bitwizardrypage.html. [2] Robert S. Boyer and J Strother Moore: A fast string searching algorithm. Communications of the ACM, 20(10): , [3] Agner Fog: 4. Instruction tables. Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel and AMD CPU s. Copenhagen University Collage of Engineering. (Last updated ) URL: tables.pdf [4] Gonzalo Navarro and Mathieu Raffinot: Fast and flexible string matching by combining bitparallelism and suffix automata. ACM Journal of Experimental Algorithms, 5(4):1 36, [5] Hannu Peltola and Jorma Tarhio. Alternative algorithms for bit-parallel string matching. In String Processing and Information Retrieval, 10th International Symposium, SPIRE 2003, volume 2857 of Lecture Notes in Computer Science, pages 80 94, Springer-Verlag, Berlin, [6] Henry S. Warren, Jr.: Hacker s Delight. ISBN-10: , ISBN-13: Addison-Wesley, 2003 [7] Assembler Instructions with C Expression Operands URL: Extended-Asm.html [8] Intel R 64 and IA-32 Architectures Software Developer s Manual. Volume 2A: Instruction Set Reference, A-M. Order Number: US URL: processor/manuals/ pdf November 2008 [9] Intel R 64 and IA-32 Architectures Optimization Reference Manual. Order Number: URL: December 2008 [10] Software Optimization Guide for AMD64 Processors. Publication # Revision: 3.06 URL: type/white papers and tech docs/25112.pdf September

14 A Eräiden keskeisten käskyjen suorituskykytietoja Operandit i = käskyssä oleva vakio; r = joku rekisteri, r16 = 16 bitin rekisteri, r32 = 32 bitin rekisteri, r64 = 64 bitin rekisteri; m = muistissa oleva operandi; myös epäsuorasti osoitettu. cl tarkoittanee rekisteristä tavun kokoista osaa. µops Ops Dekoodattujen mikrokäskyjen määrä. (Ne talletetaan trace cache een.) Dekoodattujen (sisäisten) makrokäskyjen määrä. Latenssi Minimi määrä kellojaksoja ennenkuin seuraavan riippuvan käskyn suoritus voi alkaa samassa (suoritus)yksikössä. Ei sisällä muistista noutoa, jos operandi voi olla rekisterissä tai muistissa (r/m). Tavallisempi merkitys termille latenssi kuin seuraava. P4 ja P4E prosessoreissa tulee yhden kellojakson ylimääräinen latenssi, kun jossain (suoritus)yksikössä suoritettavan mikrokäskyn (µop) tulosta tarvitaan jossain muussa yksikössä. Läpäisykyky Keskimääräinen määrä kellojaksoja (suorituksen alusta) ennenkuin seuraavan saman tyyppisen riippumattoman käskyn suoritus voi alkaa samassa (suoritus)yksikössä. Esimerkiksi arvo 0.25 tarkoittaa 4 käskyä kellojaksossa (yhdessä threadissä). Harvinaisempi merkitys termille latenssi (issue latency). Taulukko 5: Intel Pentium 4E (Family 15, Model 4) [3]. Käsky operandit µops latenssi läpäisykyky ADD, SUB r,r ADD, SUB r,m ADD, SUB m,r AND, OR, XOR r,r AND, OR, XOR r,m AND, OR, XOR m,r BSF, BSR r,r/m SHL r,i SHL r,cl SHL, SHR m8/16/32,i 3 10 SHL, SHR m8/16/32,cl 2 10 SHR r8/16/32,i SHR r64,i SHR r8/16/32,cl SHR r64,cl

15 Taulukko 6: Intel Core 2 (45nm) (Family 6, Model 23) [3]. Käsky operandit µops latenssi läpäisykyky ADD, SUB r,r/i ADD, SUB r,m ADD, SUB m,r/i AND, OR, XOR r,r/i AND, OR, XOR r,m AND, OR, XOR m,r/i BSF, BSR r,r BSF, BSR r,m 2 1 SHL, SHR r,i/cl SHL, SHR m,i/cl Taulukko 7: AMD K7 (Family 6 Model 6) [3]. Käsky operandit Ops latenssi läpäisykyky ADD, SUB r,r/i 1 1 1/3 ADD, SUB r,m 1 1 1/2 ADD, SUB m,r AND, OR, XOR r,r 1 1 1/3 AND, OR, XOR r,m 1 1 1/2 AND, OR, XOR m,r BSF r,r BSF r,m BSR r,r BSR r,m SHL, SHR r,i/cl 1 1 1/3 Taulukko 8: AMD K8 (Family 15, Model 5) [3]. Käsky operandit Ops latenssi läpäisykyky ADD, SUB r,r/i 1 1 1/3 ADD, SUB r,m 1 1 1/2 ADD, SUB m,r AND, OR, XOR r,r 1 1 1/3 AND, OR, XOR r,m 1 1 1/2 AND, OR, XOR m,r BSF r16/r32,r BSF r64,r BSF r16,m BSF r32,m BSF r64,m BSR r,r BSR r,m SHL, SHR r,i/cl

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten, Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten, että se pystyy suorittamaan kaikki mahdolliset algoritmit?

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla ohjelmoida useita komponenteiltaan ja rakenteeltaan

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 30.4.2019 Timo Männikkö Luento 13 Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Ositus ja rekursio Rekursion toteutus Algoritmit 2 Kevät 2019 Luento 13 Ti 30.4.2019

Lisätiedot

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100 Tiedonsiirtokäskyt LOAD LOAD-käsky toimii jälkimmäisestä operandista ensimmäiseen. Ensimmäisen operandin pitää olla rekisteri, toinen voi olla rekisteri, vakio tai muistiosoite (myös muuttujat ovat muistiosoitteita).

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto

Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto Luento 6 (verkkoluento 6) Tiedon esitysmuodot Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto Ohjelman esitysmuoto Rakenteellinen tieto 1 Tiedon tyypit Kommunikointi

Lisätiedot

Tietokonearitmetiikka

Tietokonearitmetiikka Tietokoneen rakenne Luento 6 Tietokonearitmetiikka Stallings: Ch 9 Kokonaislukuesitys Kokonaislukuaritmetiikka Liukulukuesitys Liukulukuaritmetiikka Luento 6-1 ALU: Aritmeettis-Looginen Yksikkö ALU = Aritmetic

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin

Lisätiedot

Tietotyypit ja operaattorit

Tietotyypit ja operaattorit Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) Toistaiseksi helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Vaikeaa eroavuudet Pythonin ja C:n

Lisätiedot

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat Sisällys 12. Javan toistorakenteet Ylstä toistorakentsta. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirhtä. Silmukan rajat asetettu kierroksen

Lisätiedot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

Tietokonearitmetiikka

Tietokonearitmetiikka Luento 6 ALU: Aritmeettis-Looginen Yksikkö Tietokonearitmetiikka Stallings: Ch 9 Kokonaislukuesitys Kokonaislukuaritmetiikka Liukulukuesitys Liukulukuaritmetiikka Luento 6-1 ALU = Aritmetic Logic Unit

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 25.1.2010 1 / 41 Valintakäsky if Tähänastiset ohjelmat ovat toimineen aina samalla tavalla. Usein ohjelman pitäisi

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 21.9.2016 CSE-A1111 Ohjelmoinnin peruskurssi Y1 21.9.2016 1 / 22 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

Lisätiedot

Algoritmit 2. Luento 12 To Timo Männikkö

Algoritmit 2. Luento 12 To Timo Männikkö Algoritmit 2 Luento 12 To 3.5.2018 Timo Männikkö Luento 12 Geneettiset algoritmit Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Algoritmit 2 Kevät 2018 Luento 12 To 3.5.2018 2/35 Algoritmien

Lisätiedot

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms. Kokeellinen algoritmiikka (3 ov) syventäviä opintoja edeltävät opinnot: ainakin Tietorakenteet hyödyllisiä opintoja: ASA, Algoritmiohjelmointi suoritus harjoitustyöllä (ei tenttiä) Kirjallisuutta: Johnson,

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2009 1 / 33 Valintakäsky if syote = raw_input("kerro tenttipisteesi.\n") pisteet = int(syote) if pisteet >=

Lisätiedot

52480S TIETOKEARKKITEHTUURIT Tentti 6.2.1998

52480S TIETOKEARKKITEHTUURIT Tentti 6.2.1998 S Ä H K Ö T E K N I I K A N O S A S T O 548S TIETOKEARKKITEHTUURIT Tentti 6..998 Oulu 8..999. Selosta lyhyesti käsitteet: a. set associative memory b. conflict miss c. consistency of cached data d. access

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 06.09.2005 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 24.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 24.1.2011 1 / 36 Luentopalaute kännykällä alkaa tänään! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

Lisätiedot

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö Algoritmit 2 Luento 14 Ke 3.5.2017 Timo Männikkö Luento 14 Ositus ja rekursio Rekursion toteutus Kertaus ja tenttivinkit Algoritmit 2 Kevät 2017 Luento 14 Ke 3.5.2017 2/30 Ositus Tehtävän esiintymä ositetaan

Lisätiedot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

Lisätiedot

Intel Pentium Pro -prosessori. tietokonearkkitehtuurit, syksy -96 Ari Rantanen

Intel Pentium Pro -prosessori. tietokonearkkitehtuurit, syksy -96 Ari Rantanen Intel Pentium Pro -prosessori tietokonearkkitehtuurit, syksy -96 Ari Rantanen Tarkasteltavat aiheet Katsaus Pentium Pro:n ominaisuuksiin Käskyn suoritus Pentium Pro:n liukuhihnalla Pentium Pro:n suorituskyky

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Ohjelmoijan binaarialgebra ja heksaluvut

Ohjelmoijan binaarialgebra ja heksaluvut Paavo Räisänen Ohjelmoijan binaarialgebra ja heksaluvut www.ohjelmoinaan.net Tätä opasta saa vapaasti kopioida, tulostaa ja levittää ei kaupallisissa tarkoituksissa. Kuitenkaan omille nettisivuille opasta

Lisätiedot

Numeropelissä 3x3-ruudukko sisältää luvut 1, 2,, 9. Tehtäväsi on järjestää ruudukko näin:

Numeropelissä 3x3-ruudukko sisältää luvut 1, 2,, 9. Tehtäväsi on järjestää ruudukko näin: A Numeropeli Numeropelissä 3x3-ruudukko sisältää luvut 1, 2,, 9. Tehtäväsi on järjestää ruudukko näin: 1 2 3 4 5 6 7 8 9 Voit jokaisella siirrolla vaihtaa keskenään kaksi vierekkäistä lukua vaaka- tai

Lisätiedot

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Tietokonearitmetiikka

Tietokonearitmetiikka Tietokoneen rakenne Luento 6 Tietokonearitmetiikka (Computer Arithmetic) Stallings: Ch 9 Kokonaislukuesitys Kokonaislukuaritmetiikka Liukulukuesitys Liukulukuaritmetiikka Luento 6-1 ALU: Aritmeettis-Looginen

Lisätiedot

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset 1 Tieto ja sen osoite (3) X DC LOAD, =X LOAD R2, X int x =; symbolin X arvo muuttujan X arvo

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Tietokonearitmetiikka

Tietokonearitmetiikka Luento 6 ALU: Aritmeettis-Looginen Yksikkö Tietokonearitmetiikka (Computer Arithmetic) Stallings: Ch 9 Kokonaislukuesitys Kokonaislukuaritmetiikka Liukulukuesitys Liukulukuaritmetiikka Luento 6-1 ALU =

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 2. Luento 8 To Timo Männikkö Algoritmit 2 Luento 8 To 4.4.2019 Timo Männikkö Luento 8 Algoritmien analysointi Algoritmien suunnittelu Rekursio Osittaminen Rekursioyhtälöt Rekursioyhtälön ratkaiseminen Master-lause Algoritmit 2 Kevät

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

Lisätiedot

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä Sisällys 11. Javan toistorakenteet Laskuri- ja lippumuuttujat.. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin lopettaminen break-lauseella.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

Lisätiedot

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö Algoritmit 2 Luento 7 Ti 4.4.2017 Timo Männikkö Luento 7 Joukot Joukko-operaatioita Joukkojen esitystapoja Alkiovieraat osajoukot Toteutus puurakenteena Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 2/26

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

Lisätiedot

TIE448 Kääntäjätekniikka, syksy 2009. Antti-Juhani Kaijanaho. 7. joulukuuta 2009

TIE448 Kääntäjätekniikka, syksy 2009. Antti-Juhani Kaijanaho. 7. joulukuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 7. joulukuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe F maanantai 14.12. klo 12 rekisteriallokaatio Arvostelukappale

Lisätiedot

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Tietorakenteet, laskuharjoitus 7, ratkaisuja Tietorakenteet, laskuharjoitus, ratkaisuja. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet ja 5 mahtuvat lehtisolmuihin, joten niiden lisäys ei muuta puun rakennetta. Avain 9

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten Sisällys 16. Ohjelmoinnin tekniikkaa Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

Kappale 20: Kantaluvut

Kappale 20: Kantaluvut Kappale 20: Kantaluvut 20 Johdanto: Kantaluvut... 328 Kantalukujen syöttäminen ja muuntaminen... 329 Matemaattiset toiminnot Hex- ja Bin-luvuilla... 330 Bittien vertaileminen ja manipulointi... 331 Huom!

Lisätiedot

Laitteistonläheinen ohjelmointi

Laitteistonläheinen ohjelmointi Laitteistonläheinen ohjelmointi 4 op Luennoija: Pertti Lehtinen Luennot: Perjantai 12-14 TB104 Esitiedot: Mikroprosessorit Perusohjelmointikurssi Kurssin osat: luennot, harjoitustyö, tentti Materiaali:

Lisätiedot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit. 3. Muuttujat ja operaatiot Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi.. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit. Arvojen

Lisätiedot

1. Keskusyksikön rakenne

1. Keskusyksikön rakenne 1. Keskusyksikön rakenne Kuvassa on esitelty TTK-91 esimerkkikoneen keskusyksikkö. Oikeiden tietokoneiden keskusyksiköt ovat luonnollisesti monimutkaisempia, mutta tämä riittää oikein mainiosti asian havainnollistamiseen.

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 11.08.2010 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

Lisätiedot

Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista).

Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista). Esimerkki Lomitusjärjestäminen merge-sort(a, p, q): var k % paikallinen muuttuja, vakiotila 1. if p < q then 2. r := (p + q)/2 3. merge-sort(a, p, r) 4. merge-sort(a, r + 1, q) 5. merge(a, p, r, q) Olkoon

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto Osa VIII Liitteet Liitteet A B C Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto Osa VIII A. Liite Operaattoreiden suoritusjärjestys On tärkeää ymmärtää, että operaattoreilla on prioriteettinsa,

Lisätiedot

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset 1 Muuttujan X osoite on 230 Muuttujan X arvo on 12 Symbolin X arvo on 230 symbolit ovat yleensä

Lisätiedot

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 21.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 21.1.2009 1 / 32 Tyypeistä Monissa muissa ohjelmointikielissä (esim. Java ja C) muuttujat on määriteltävä ennen

Lisätiedot

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö Algoritmit 1 Luento 11 Ti 14.2.2017 Timo Männikkö Luento 11 Algoritminen ongelmanratkaisu Osittaminen Lomituslajittelu Lomituslajittelun vaativuus Rekursioyhtälöt Pikalajittelu Algoritmit 1 Kevät 2017

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.2.2010 1 / 41 Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys For-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. If-else-lause vaihtoehtoisesti

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

Tietokoneen rakenne: Harjoitustyö. Motorola MC68030 -prosessori

Tietokoneen rakenne: Harjoitustyö. Motorola MC68030 -prosessori kevät 2004 TP02S-D Tietokoneen rakenne: Harjoitustyö Motorola MC68030 -prosessori Työn valvojat: Seppo Haltsonen Pasi Lankinen RAPORTTI 13.5.2004 Sisällysluettelo sivu Tiivistelmä... 1 Lohkokaavio... 2

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu 811312A Tietorakenteet ja algoritmit, 2018-2019, Harjoitus 3, Ratkaisu Harjoituksessa käsitellään algoritmien aikakompleksisuutta. Tehtävä 3.1 Kuvitteelliset algoritmit A ja B lajittelevat syötteenään

Lisätiedot

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä olevilla komponenteilla? Voisiko jollakin ohjelmointikielellä

Lisätiedot

Numeeriset menetelmät

Numeeriset menetelmät Numeeriset menetelmät Luento 2 To 8.9.2011 Timo Männikkö Numeeriset menetelmät Syksy 2011 Luento 2 To 8.9.2011 p. 1/33 p. 1/33 Lukujen tallennus Kiintoluvut (integer) tarkka esitys aritmeettiset operaatiot

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

Lisätiedot

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä. TIETOKONEOHJELMIEN RAKENNE Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä. Teollisuusautomaation ohjelmiin on lainattu runsaasti perinteisen

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 81122P (4 ov.) 30.5.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2 TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos TKT-3200 Tietokonetekniikka I Harjoitustyö 4: Cache, osa 2.. 2010 Ryhmä Nimi Op.num. 1 Valmistautuminen Cache-työn toisessa osassa

Lisätiedot

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan

Lisätiedot

7.4 Sormenjälkitekniikka

7.4 Sormenjälkitekniikka 7.4 Sormenjälkitekniikka Tarkastellaan ensimmäisenä esimerkkinä pitkien merkkijonojen vertailua. Ongelma: Ajatellaan, että kaksi n-bittistä (n 1) tiedostoa x ja y sijaitsee eri tietokoneilla. Halutaan

Lisätiedot

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset 1 Muuttujan X osoite on 230 Muuttujan X arvo on 12 Symbolin X arvo on 230 Tieto ja sen osoite

Lisätiedot

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö Algoritmit 1 Luento 4 Ke 18.1.2017 Timo Männikkö Luento 4 Tietorakenteet Pino Pinon toteutus Jono Jonon toteutus Lista Listaoperaatiot Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 2/29 Pino Pino, stack,

Lisätiedot

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer) Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer) 1 Suorituksenaikainen suorittimen ja muistin sisältö muisti suoritin

Lisätiedot

811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto

811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto 811312A Tietorakenteet ja algoritmit 2015-2016 I Johdanto Sisältö 1. Algoritmeista ja tietorakenteista 2. Algoritmien analyysistä 811312A TRA, Johdanto 2 I.1. Algoritmeista ja tietorakenteista I.1.1. Algoritmien

Lisätiedot

ANSI/IEEE Std

ANSI/IEEE Std Digitaalitekniikan matematiikka Luku 9 Sivu 1 (26) Lukujärjestelmät ja lukujen esittäminen ANSI/IEEE Std 754-2008 0 1 0 1 1 0 0 0 B = Σ B i 2 i Digitaalitekniikan matematiikka Luku 9 Sivu 2 (26) Johdanto

Lisätiedot

Määrittelydokumentti

Määrittelydokumentti Määrittelydokumentti Aineopintojen harjoitustyö: Tietorakenteet ja algoritmit (alkukesä) Sami Korhonen 014021868 sami.korhonen@helsinki. Tietojenkäsittelytieteen laitos Helsingin yliopisto 23. kesäkuuta

Lisätiedot

Teemun juustokakku Rekisterien, välimuistin, muistin, levymuistin ja magneettinauhan nopeudet suhteutettuna juuston hakuaikaan juustokakkua tehdessä?

Teemun juustokakku Rekisterien, välimuistin, muistin, levymuistin ja magneettinauhan nopeudet suhteutettuna juuston hakuaikaan juustokakkua tehdessä? Tietokonejärjestelmän rakenne ttk-91 ja sillä ohjelmointi 27.1.2011 Tietokone suoritin (CPU) väylä tai väylät laiteohjaimet muiden koneiden kanssa Ethernet, modeemi,... laitteiden kanssa Levy, DVD, CD,

Lisätiedot

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin Sisällys 17. Ohjelmoinnin tekniikkaa for-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. if-else-lause vaihtoehtoisesti

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 2. Lukujen esittäminen ja aritmetiikka 2.1 Kantajärjestelmät ja lukujen esittäminen Käytettävät lukujoukot: Luonnolliset luvut IN = {0,1,2,3,... } Positiiviset kokonaisluvut

Lisätiedot

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot