Programming Parallel Computers

Ohjeet

Säännöt

Lue kunkin tehtävän kuvaus huolellisesti nähdäksesi tarkemmat säännöt. Huomaathan, että joissakin tehtävissä sinun on käytettävä jotakin tiettyä algoritmia tai tekniikkaa, kun taas toisissa on paljon enemmän vapautta.

Koodin on käännyttävä ja toimittava oikein niillä koneilla, joita käytämme automaattiseen arviointiin. Muuten noudatettavia erityissääntöjä on vain muutama (ks. alla). Sinulla on paljon vapautta ja tilaa luovuudelle — voit esimerkiksi käyttää vapaasti OpenMP:tä, GCC:n vektorilaajennuksia ja muita GCC-kohtaisia ominaisuuksia, kääntäjän intrinsic-funktioita, inline-assemblya, POSIX-kirjastofunktioita jne.

Pidä mielessä, että automaattiset testit on tarkoitettu ensisijaisesti auttamaan rehellisten virheiden löytämisessä. Koodin täytyy toimia oikein kaikilla mahdollisilla syötteillä. Kurssihenkilökunta lukee palautuksesi ja tarkistaa, että olet noudattanut sääntöjä.

Ole varovainen näiden kanssa

Koodissa ei saa olla kilpatilanteita (data race) tai muita vastaavia virheitä, jotka johtavat määrittelemättömään käyttäytymiseen voimassa olevien spesifikaatioiden mukaan. Ei riitä, että ohjelma “näyttää toimivan” — sen on oltava kirjoitettu siten, että sen toiminta on taatusti oikein.

GPU-koodissa sinun on tarkistettava virheet kaikista CUDA-API-kutsuista — katso esimerkkejä kurssimateriaalista.

Mitä et voi käyttää

CPU-koodissa et saa käyttää std::valarray-tyyppiä etkä mitään rinnakkaistettuja tai vektorisoituja kokoelmia tai algoritmeja C++-standardikirjastosta (esimerkiksi _GLIBCXX_PARALLEL, __gnu_parallel, std::experimental::parallel, std::execution).

GPU-koodissa on pysyttävä perus-CUDA-rajapinnassa. Esimerkiksi kirjastoja Thrust, cuBLAS, NVBLAS tai muita vastaavia ei ole sallittua käyttää.

GPU-tehtävissä et saa käyttää OpenMP:tä (etkä muitakaan monisäikeistysratkaisuja) CPU-puolen koodissa. Näin varmistetaan, että suurin osa laskennallisesti raskaasta työstä tehdään GPU:lla. Kevyt yksisäikeinen esikäsittely CPU:lla on silti sallittua, jos siitä on hyötyä.