From 7bbc592553ce20505a370790b7e32252efb9bd0f Mon Sep 17 00:00:00 2001
From: Daniel Gyulai <gyulaid@gyulai.cloud>
Date: Wed, 2 Mar 2022 17:56:44 +0000
Subject: [PATCH] Doc - Histogram/global

---
 Primitives/primitives.md | 51 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 50 insertions(+), 1 deletion(-)

diff --git a/Primitives/primitives.md b/Primitives/primitives.md
index 7dcc473..d57e188 100644
--- a/Primitives/primitives.md
+++ b/Primitives/primitives.md
@@ -1 +1,50 @@
-# Párhuzamos primitívek
\ No newline at end of file
+# 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.
\ No newline at end of file