BMEVIIIMB01
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

2.5 KiB

Párhuzamos primitívek

Hisztogram számítás

Globális memória

Az implementációban csak a globális memória kerül felhasználásra, az alábbi pszeudokód szerint:

id  := get_global_id(0)
histogram[data[id]] := histogram[data[id]] + 1

A feladathoz tartozó kód a primitives/Histogram.cpp fájlban találhatóak.

1. Vizsgálja meg, hogy mi történik szinkronizáció nélkül! Helyes-e a kiszámolt eredmény?

Szinkronizáció nélkül a szálak egymásba akadnak végrehajtás során, így nem lesz helyes az eredmény.

2. Vizsgálja meg, hogy mi történik, ha a hisztogram megfelelő elemének növelése atomi módon történik!

Ezzel a módszerrel egy elemhez csak egy szál férhet hozzá egyszerre, így jó értékeket fog számolni.

3. Vizsgálja meg, hogy hogyan változik a kernel futási ideje, ha a data tömb értékkészlete nagyon szűk (pl. csak 0 és 1 értékek lehetségesek), valamint abban az esetben, ha megközelíti a data tömb méretét!

A méréshez négy futás eredményeit használtam fel, az 5. feladat leírásában található segédosztály segítségével. Minden esetben 4096 elemű vektorokat elemez, az értékkészletük rendre 2, 128, 1024 és 4096 elemű. A vektorok elemei véletlenszerűen generáltak ezen értékkészleten belül. A következő ábrán a program kimenete szerepel, négysoronként csoportosítva a négy tesztesetre. Egy teszthez tartozó kimenet első során a futtatás paraméterei olvashatók (értékkészlet, bemeneti vektor méret), alatta a CPU, majd a GPU futtatási idő milliszekundumban, végül a teszt sikerességét jelző egy szavas visszajelzés a CPU és GPU eredményeinek összehasonlítása alapján.

Histogram (type=gobal,data_size=4096,valueSet=2)
    CPU [time] 0.23806
    GPU [time] 0.009472 ms
      Success
Histogram (type=gobal,data_size=4096,valueSet=128)
    CPU [time] 0.23646
    GPU [time] 0.005728 ms
        Success
Histogram (type=gobal,data_size=4096,valueSet=1024)
    CPU [time] 0.22818
    GPU [time] 0.00416
        Success
Histogram (type=gobal,data_size=4096,valueSet=4096)
    CPU [time] 0.22962
    GPU [time] 0.003968 ms
        Success

A GPU sorok összehasonlításával leolvasható, hogy a kisebb értékkészlet jelentősen hosszabb futási időt erdményezett. Ez visszavezethető arra, hogy a szálaknak várakozniuk kellett egymásra, amíg a hisztogram értékeit frissítették.