This is an old revision of the document!


Tema 3

  • Deadline soft: 10 mai 2020, ora 23:55. Primiți un bonus de 10% din punctajul obtinut pentru trimiterea temei înainte de 22 aprilie 2020, ora 23:55.
  • Deadline hard: 17 mai 2020, ora 23:55. Veți primi o depunctare de 10% din punctajul maxim al temei pentru fiecare zi de întârziere, până la maxim 7 zile, adică până pe 29 aprilie 2020, ora 23:55.

Enunț

Se va implementa o structură de date tip hashtable folosind CUDA, având ca target GPU Tesla K40 (hp-sl.q).

Această structură de date tip hashtable va avea următoarele caracteristici:

  • va face maparea key → value, (o singură valoare per key)
  • va putea stoca date de tip int32, mai mari strict ca 0, atât pentru chei, cât și pentru valori
    1. valid (key→value): 1234 → 8965, 12334244 → 8223965
    2. invalid (key→value): 0 → 9779, -12334244 → 83965, 7868 → -977, “jknjjk” → 78
  • va stoca datele în VRAM și va putea să își reajusteze dimensiunea cât să poată acomoda numărul de perechi key→value, având un *
  • loadFactor decent (sloturi ocupate / sloturi disponibile)
  • va rezolva intern coliziunile (exemplu: prin resize, folosind multe funcții de hash etc.)
  • funcțiile hash vor fi pentru cazurile generale (ex. cele de tip ax % b, a si b prime)
  • exemplu de funcție hash neacceptată: h(x) = x % limit, atunci când cheile sunt tot timpul în ordine crescătoare pe intervale și unice (nu tratează cazul general)
  • va face update la valoarea unei chei → operația de insert nu va conține niciodată 2 chei identice, însă operații succesive de insert nu au restricții (se va face update de valoare)
  • va putea întoarce corect, într-un timp rapid, valoarea corespunzătoare unei chei
  • va întoarce încărcarea (memoria efectiv folosită / memoria alocată) via funcția load_factor

o implementare greșită sau neclară poate duce la o depunctare suplimentară

Implementarea temei are design la liber, cât timp testele trec și soluția este una rezonabilă, neavând ca scop trecerea testelor (ex. «așa nu» comportamentul tabelei hash e strict modelat pe teste, când se face resize etc).

Exemple de implementări: Linear probing - se calculează hash(key) și se dacă slotul nu e liber se încearcă succesiv hash(key) + 1… hash(key) + N Cuckoo based - se folosesc 2-3 funcții hash și se caută un slot liber, alternativ se face evict la key2-value2 din acel slot, se inserează nouă pereche key-value, iar key2-value2 se caută să se insereze folosind o altă funcție hash din cele disponibile Bucketized cuckoo - se folosește tehnica cuckoo, având buckets cu 2, 4, 8 sloturi fiecare.

asc/teme/tema3.1587230018.txt.gz · Last modified: 2020/04/18 20:13 by grigore.lupescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0