Programming Parallel Computers

Open 2026

Pre: Lähtötasotesti

Lue ensin tällä sivulla olevat yleisohjeet. Tarkemmat tiedot löytyvät tehtäväkohtaisista ohjeista. Jokaiseen tehtävään on saatavilla oma zip-tiedosto, josta löytyvää koodia voit käyttää ratkaisujesi pohjana.

Tehtävä Palautuksia Pisteet Max. Taso Suos. Määräaika
Pre0: Lähtötasotesti

Tässä tehtävässä ei tarvitse erikseen miettiä suoritustehoa. Yksinkertaisin mieleesi tuleva ratkaisu on todennäköisesti riittävän nopea. Tehtävä ei vaadi erityisiä tekniikoita tai rinnakkaisuuden hyödyntämistä, vaan kaikenlaiset oikein toimivat ratkaisut hyväksytään.

1 Suos. 2026-09-23 klo 23:59:59

Yleiset ohjeet

Kirjoita funktio, joka käyttää syötteenä bittikarttakuvaa ja suorakulmion koordinaatteja. Funktion tehtävä on laskea suorakulmion sisällä olevien pikselien keskimääräinen väriarvo.

Rajapinta

Tulosten tallentamista varten on määritelty seuraava tyyppi:

struct Result {
    float avg[3];
};

Toteuta seuraavanlainen funktio:

Result calculate(int ny, int nx, const float *data,
                 int y0, int x0, int y1, int x1)

Tässä data on värikuva, jossa on ny*nx pikseliä. Jokainen pikseli muodostuu punaisesta, vihreästä ja sinisestä värikanavasta. Taulukossa nimeltä data on yhteensä ny*nx*3 liukulukua.

Värikanavat on numeroitu 0 <= c < 3, x-koordinaatit 0 <= x < nx ja y-koordinaatit 0 <= y < ny. Väriarvo tallennetaan taulukon alkioon data[c + 3 * x + 3 * nx * y].

Parametrit y0, x0, y1 ja x1 kuvaavat suorakulmion sijaintia. Suorakulmion vasemman yläkulman koordinaatit ovat (x0y0) ja oikean alakulman koordinaatit (x1-1y1-1). Suorakulmion leveys on siis x1-x0 pikseliä ja korkeus y1-y0 pikseliä. Koordinaatit täyttävät ehdot 0 <= y0 < y1 <= ny ja 0 <= x0 < x1 <= nx.

Tuloksen alkion avg[c] tulee sisältää aritmeettinen keskiarvo suorakulmion sisällä olevien pikseleiden värikanavan c arvoista.

Lisätietoja

Vaikka syöte ja tuloste ovat yksinkertaisen tarkkuuden liukulukuja, kaikissa laskutoimituksissa on käytettävä kaksinkertaisen tarkkuuden liukulukuja. Vasta tulos pyöristetään yksinkertaiseen tarkkuuteen.

Voit olettaa, että syötekuvassa on enintään 10 miljoonaa pikseliä.