From 0a8ae056ca8ddc434f86e0e62b9585467ef240b0 Mon Sep 17 00:00:00 2001 From: Daniel Gyulai Date: Wed, 2 Mar 2022 18:54:06 +0000 Subject: [PATCH] Doc - Add, ExScan1 --- Primitives/primitives.md | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/Primitives/primitives.md b/Primitives/primitives.md index 445a738..77f5d8e 100644 --- a/Primitives/primitives.md +++ b/Primitives/primitives.md @@ -2,6 +2,8 @@ ## Hisztogram számítás +A feladathoz tartozó host kód a `primitives/Histogram.cpp` fájlban található. + ### 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: @@ -11,7 +13,7 @@ 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?** @@ -83,4 +85,29 @@ hisztogram számtást!** | **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 | -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. \ No newline at end of file +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; +``` \ No newline at end of file