01110111010110 11110101010101 00101011010011 01010111010101 01001010101010 10101010101010 CS-A1120 Ohjelmointi 2 (5 op, IV V, kevät 2018) Petteri Kaski Tietotekniikan laitos Aalto-yliopisto 19. helmikuuta 2018 10101011110101 01010101011101 01010111010110 10101101010110 10101110101010 11101010101101 01110111010110 10111011010101 11110101010101 00010101010101 01011010101110
Rekisteröidy kurssille Oodissa https://oodi.aalto.fi/a/ Want to take CS-A1120 in English as a self-study? Please follow the instructions here: https://mycourses.aalto.fi/course/view.php?id=16895
Ohjelmointi 2 Ohjelmoinnin ja laskennan periaatteita porttitasolta funktionaaliseen rinnakkaisohjelmointiin Laskenta: Eräs vähiten ymmärretyistä luonnonilmiöistä Ohjelmointi: Keino valjastaa laskenta haluttuun tarkoitukseen
Tuhat miljoonaa laskutoimitusta sekunnissa def test(m: Long) = { var i = 1L var s = 0L } while(i <= m) { s = s + i i = i + 1 } s // s = 1 + 2 +... + m val NANOS_PER_SEC = 1e9 val test_start_time = System.nanoTime test(4000000000l) val test_end_time = System.nanoTime val test_duration = test_end_time - test_start_time println("test took %.2f seconds".format(test_duration/nanos_per_sec))
Tuhat miljoonaa kappaletta sekunnissa Valon nopeus tyhjiössä 299 792 458 m/s Laskutoimituksia ~1 000 000 000 kpl/s Yhden laskutoimituksen suorittamiseen kuluvassa ajassa valo etenee tyhjiössä 299 792 458 m/s 1 000 000 000 kpl/s ~ 30 cm/kpl
Koneen suorituskyvyn äärirajoilla (***) [demo]
Laitteisto Apple MacBook Pro, Late 2016 model Intel Core i7-6567u CPU @ 3.30 GHz 1 prosessori 2 suoritusydintä AVX2-vektoriyksiköillä 3.30 GHz kello Skylake -mikroarkkitehtuuri (14 nm prosessi) 2 x 8 GiB LPDDR3-2133 DIMM 16 GiB keskusmuistia 2 muistikanavaa prosessorille
Tehtävä c4e27d1902 vbroadcastsd (%rdx),%ymm0 c4e27d190c0a vbroadcastsd (%rdx,%rcx,1),%ymm1 c4e27d19144a vbroadcastsd (%rdx,%rcx,2),%ymm2 4883c208 add $0x8,%rdx c5fd2818 vmovapd (%rax),%ymm3 c4e2fdb8e3 vfmadd231pd %ymm3,%ymm0,%ymm4 c4e2f5b8eb vfmadd231pd %ymm3,%ymm1,%ymm5 c4e2edb8f3 vfmadd231pd %ymm3,%ymm2,%ymm6 c5fd285820 vmovapd 0x20(%rax),%ymm3 c4e2fdb8fb vfmadd231pd %ymm3,%ymm0,%ymm7 c462f5b8c3 vfmadd231pd %ymm3,%ymm1,%ymm8 c462edb8cb vfmadd231pd %ymm3,%ymm2,%ymm9 c5fd285840 vmovapd 0x40(%rax),%ymm3 c462fdb8d3 vfmadd231pd %ymm3,%ymm0,%ymm10 c462f5b8db vfmadd231pd %ymm3,%ymm1,%ymm11 c462edb8e3 vfmadd231pd %ymm3,%ymm2,%ymm12 c5fd285860 vmovapd 0x60(%rax),%ymm3 c462fdb8eb vfmadd231pd %ymm3,%ymm0,%ymm13 c462f5b8f3 vfmadd231pd %ymm3,%ymm1,%ymm14 c462edb8fb vfmadd231pd %ymm3,%ymm2,%ymm15 4801c8 add %rcx,%rax 48ffcb dec %rbx 7594 jne 1029 Kerrotaan kaksi tuplatarkkuusliukulukumatriisia kokoa 6144 6144 (n. 300 MB/matriisi) Toteutus klassisella algoritmilla (vasemmalla toteutuksen sisin silmukka Intel 64 konekielellä AVX2.0 käskykantalaajennuksin) Tällöin suoritetaan noin 2 6144 3 ~ 464 000 000 000 laskutoimitusta https://github.com/pkaski/cluster-play/blob/master/haswell-mm-test/libmynative.c
http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf
http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf
Teoreettinen maksimisuorituskyky 1 3.3 2 2 2 4 = 105.6 Gflop/s (miljardia tuplatarkkuus-liukulukulaskutoimitusta sekunnissa; teoreettinen maksimi) 1 prosessori (Intel Core i7-6567u) 3.3 GHz kellotaajuus (3.3 miljardia kellojaksoa sekunnissa) 2 suoritusydintä/prosessori 2 FMA (fused-multiply-add) AVX2 suoritusporttia/suoritusydin 2 liukulukulaskutoimitusta/kellojakso/suoritusportti 4 tuplatarkkuus-liukulukua / AVX2-rekisteri http://ark.intel.com/products/91167/intel-core-i7-6567u-processor-4m-cache-up-to-3_60-ghz
Myöhemmillä luennoilla lisää, mm. dgx01.triton.aalto.fi (NVIDIA DGX-1, 8 x Tesla V100 GPU, 40960 suoritusydintä, 3.2 kw)
Laskenta ja ohjelmointi Laskenta on luonnonilmiö Ohjelmointi on keino valjastaa laskenta haluttuun tarkoitukseen Ohjelmointitaito ja ymmärrys laskennasta ovat välttämätön osa tieteellistä yleissivistystä tietojenkäsittelytieteen alkeet
Tietojenkäsittelytiede on nuori tieteenala (P vs NP -ongelma on erinomainen esimerkki siitä että ymmärryksemme laskennasta ja siitä mitä tehtäviä voidaan ratkoa tehokkaasti ei ole vielä erityisen kypsä töitä siis riittää!) http://cacm.acm.org/magazines/2009/9/38904-the-status-of-the-p-versus-np-problem/fulltext
Esimerkki NP-täydellisestä tehtävänasettelusta Voidaanko luku 2018 muodostaa summana kokonaisluvuista 87, 116, 153, 265, 394, 476, 516, 664, 670, 792 jos jokaista lukua saa käyttää enintään kerran? Ei tunneta menetelmää joka tehokkaasti ratkaisisi tehtävän sen yleisessä muodossa (= mielivaltaisen monta mielivaltaisen suurta lukua)
2018 = 87 + 116 + 153 + 394 + 476 + 792 (Pienillä syötteillä ratkaisu toki onnistuu.)
Osajoukkosumma-ongelmasta enemmän (***) http://dx.doi.org/10.4230/lipics.stacs.2016.13
Comm. ACM, January 2016 (***) Comm. ACM, March 2013 (***)
Ohjelmointi 2 Ohjelmoinnin ja laskennan periaatteita porttitasolta funktionaaliseen rinnakkaisohjelmointiin Laskenta: Eräs vähiten ymmärretyistä luonnonilmiöistä Ohjelmointi: Keino valjastaa laskenta haluttuun tarkoitukseen
Porttitasolta tehdashallitietokoneeseen (NVIDIA GV100 GPU, 5120 FP32-suoritusydintä, 21.1 miljardia transistoria, 12 nanometrin prosessi) (Google Hamina)
CS-A1120 kevät 2018 12 tehtäväkierrosta (yhteispisteistä arvosana) Huom: Kevään 2018 toteutuksessa kurssisuoritukseen ei kuulu tenttiä Lämmittelykierros + 3 moduulia (4+4+3 tehtäväkierrosta)
Sisältö (kierrokset ja moduulit) I 1. Lämmittelykierros Tietokoneen mysteeri 2. Bitit ja data 3. Kombinaatiologiikka 4. Sekventiaalilogiikka 5. Ohjelmoitava kone II Abstraktiot ja analyysi 6. 7. 8. 9. III Funktionaalinen ohjelmointityyli Suorituskykyanalyysi Rekursio Algoritmit ja informaation esitykset Uuden äärellä 10. Rinnakkaisuus ja samanaikaisuus 11. Virtualisointi ja skaalautuvuus 12. Ohjelmoitava vai oppiva kone?
Määräajat Jokaisen kierroksen tehtäviin liittyy kaksi kierroskohtaista määräaikaa ("deadline"): varsinainen palautusmääräaika, ja jatkoajan määräaika Kierroskohtaiset tarkat määräajat seuraavalla kalvolla Kaikki määräajat Suomen aikaa Kierroksen varsinaiseen määräaikaan mennessä palautetut tehtävät arvostellaan täysillä pisteillä Kierroksen varsinaisen määräajan umpeuduttua alkaa jatkoaika Jatkoajalla, jatkoajan määräaikaan mennessä palautetut tehtävät arvostellaan 70% täysistä pisteistä Jatkoajan määräajan umpeuduttua kierroksen tehtäviä ei ole enää mahdollista palauttaa arvosteltavaksi
Määräajat (klo 20:00) 1. Lämmittelykierros I Tietokoneen mysteeri 2. Bitit ja data 3. Kombinaatiologiikka 4. Sekventiaalilogiikka 5. Ohjelmoitava kone II Abstraktiot ja analyysi 6. Funktionaalinen ohjelmointityyli 7. Suorituskykyanalyysi 8. Rekursio 9. Algoritmit ja informaation esitykset III Uuden äärellä 10. Rinnakkaisuus ja samanaikaisuus 11. Virtualisointi ja skaalautuvuus 12. Ohjelmoitava vai oppiva kone? Tämän viikon Varsinainen määräaika perjantai 23.2. 2.3. 9.3. 16.3. 23.3. 29.3. 10.4. 17.4. 24.4. 4.5. 11.5. 18.5. Jatkoajan määräaika (70% pisteistä) 6.3. 13.3. 20.3. 27.3. 13.4. 20.4. 27.4. 2.5. 8.5. 31.5. 31.5. 31.5.
Mitoitus (= 5 op) 5 op = noin 133h työtä 12 tehtäväkierrosta Kierros = 11h työtä 2h luento 9h itsenäinen työskentely (tehtävät)
Tehtävät Saatavilla ja palautetaan A+ järjestelmään: https://plus.cs.hut.fi Jaetaan Eclipse -paketteina Kahta tyyppiä: Normaalit tehtävät Haastetehtävät ( Challenge problems )
Kurssin suorittaminen ja arvostelu Ratkaisemalla tehtäviä (riittävä pistemäärä arvosanaan 1) 12 kierrosta Jokaiselta mahdollisuus saada ainakin 400 pistettä, poislukien lämmittelykierros, josta mahdollista saada ainakin 200 pistettä Arvosteluasteikko: alle 1200 pistettä hylätty vähintään 1200 pistettä arvosana 1 vähintään 1900 pistettä arvosana 2 vähintään 2600 pistettä arvosana 3 vähintään 3300 pistettä arvosana 4 vähintään 4000 pistettä arvosana 5
Normaalit tehtävät ja haastetehtävät Assistentti auttaa, normaalitehtävissä Arvosanan 5 saa täysin ilman haastetehtäviäkin Haastetehtävät = haasta itsesi, omalla vastuulla Tausta: Miksi haastetehtävät? Ohjelmointitaito vaihtelee suuresti Ohjelmointi 1 kurssipalautteessa toive myös haastavammasta materiaalista Mainos: Kilpaohjelmointia http://cs.aalto.fi/fi/studies/competitive_programming/
Kotitehtävät ovat luottamuksellisia yksilötöitä Ohjelmointi on sekä yksilö- että joukkuelaji, jossa riittävät itsenäiset taidot luovat pohjan tuottavalle joukkuetyöskentelylle Kurssilla CS-A1120 Ohjelmointi 2 työskennellään itsenäisesti riittävän itsenäisen ohjelmointitaidon saavuttamiseksi Koska ohjelmatekstin itsenäinen laatiminen on ohjelmointityössä välttämätön yksilötaito, ohjelmatekstin laatiminen yhteistyössä on kurssilla kielletty Kurssin ohjelmointitehtävät ratkaistaan ja palautetaan sähköisesti arvosteltavaksi itse, luottamuksellisina yksilötöinä Luottamuksellisuudella tarkoitetaan tässä sitä, että omaa yksilötyötä ei saa erikseen tai julkisesti jakaa siten, että toisen opiskelijan itsenäiset ohjelmointitaidot jäävät puutteellisiksi tai niitä ei voida arvosteltavaksi palautettujen kurssisuoritteiden perusteella arvioida, esimerkiksi ohjelmatekstin kopioinnin takia
Työmuodot ja foorumit Luennot (luentoaikataulu ks. MyCourses) Itsenäinen työ Palaute assistenteilta (A+ kautta) Vastuuopettajan vastaanottoaika Assistentit auttavat (vuorot Maari A ja T7) (keskiviikkoisin klo 16 17 T-talo 3.krs. huone B304; tenttiviikkoina ei vastaanottoa) tarkista poikkeukset MyCourses-sivulta
Kurssikalenteri
Viikkoharjoitukset (Maari A ja T7) Svenskspråkig: Alpi & Axel
Materiaali Tehtävät ja palautus (A+ kautta) https://plus.cs.hut.fi Lukemisto https://algorithms.cs.aalto.fi/teaching/cs- A1120/2018/notes/index.html MyCourses https://mycourses.aalto.fi/course/view.php?id=16895
1. Lämmittelykierros Scala-konsoli, yksikkötestit, ym. tutuksi (ks. lukemisto) Kerrataan jonojen (sequence) käsittelyä Kerrataan rekursion perusteet Kerrataan luokat, oliot, perintä
Tehtävät sequences workout jonojen käsittelyä (map, filter, jne) Pascal s triangle rekursion harjoittelua polynomials luokkien, olioiden, perinnän ja rakenteellisen rekursion harjoittelua longest increasing subsequence (haastetehtävä) pisin kasvava alijono lukujonossa
Kolme tärkeää asiaa (demo): 1) Verkkolukemisto https://algorithms.cs.aalto.fi/teaching/cs-a1120/2018/notes/index.html 2) Oikeat työkalut ja kirjastot asennettuna https://algorithms.cs.aalto.fi/teaching/cs-a1120/2018/notes/start-libs.html 3) Eclipse-taitojen ABC A) Tehtäväpakettien tuonti Eclipseen B) Scala-konsolin käynnistäminen C) ** Yksikkötestit ennen tehtäväpalautusta ** https://algorithms.cs.aalto.fi/teaching/cs-a1120/2018/notes/start-basics.html
Lämmittely-tehtäväkierros Määräaika perjantaina (23.2.) Rohkeasti tehtävien pariin!