Browse Source

Doc - Add, ExScan1

master
Daniel Gyulai 3 years ago
parent
commit
0a8ae056ca
  1. 31
      Primitives/primitives.md

31
Primitives/primitives.md

@ -2,6 +2,8 @@
## Hisztogram számítás ## Hisztogram számítás
A feladathoz tartozó host kód a `primitives/Histogram.cpp` fájlban található.
### Globális memória ### 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: Az implementációban csak a globális memória kerül felhasználásra, az alábbi pszeudokód szerint:
@ -11,7 +13,7 @@
histogram[data[id]] := histogram[data[id]] + 1 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?** **1. Vizsgálja meg, hogy mi történik szinkronizáció nélkül! Helyes-e a kiszámolt eredmény?**
@ -83,4 +85,29 @@ hisztogram számtást!**
| **local** | 0.006592 ms | 0.004064 ms | 0.004512 ms | 0.004448 ms | | **local** | 0.006592 ms | 0.004064 ms | 0.004512 ms | 0.004448 ms |
| **global** | 0.00784 ms | 0.0064 ms | 0.0064 ms | 0.005952 ms | | **global** | 0.00784 ms | 0.0064 ms | 0.0064 ms | 0.005952 ms |
A futási időkből látszik, hogy a lokális memóriát használó kernel minden értékkészletre gyorsabb, viszont a lokális és globális kernelek is gyorsabban futnak, ha ez az értékkészlet nagyobb. A futási időkből látszik, hogy a lokális memóriát használó kernel minden értékkészletre gyorsabb, viszont a lokális és globális kernelek is gyorsabban futnak, ha ez az értékkészlet nagyobb.
## Összegzés redukcióval
A feladathoz tartozó host kód a `primitives/ReduceAdd.cpp` fájlban található. Az implementáció során a programs.cl forrásfájl pszeudokódja alapján dolgoztam, és feltételeztem, hogy a tömb mérete legfeljebb a workgroup megengedett maximális mérete.
## Exkluzív prefix összeg scan operátorral
A feladathoz tartozó host kód a `primitives/ExclusiveScan.cpp` fájlban található.
```
ID := get_global_id(0)
VAL := 0
IF ID > 0 THEN VAL = data[ID - 1]
ELSE VAL = 0
BARRIER
data[ID] = VAL
FOR s = 1; s < get_global_size(0); s *= 2 DO:
tmp := data[ID]
IF ( ID + s < get_global_size(0) THEN
data[ID + s] += tmp;
BARRIER
IF(ID = 0) THEN data[ID] = 0;
```
Loading…
Cancel
Save