Párhuzamos tördelő GPU valós idejű
ParallelnoeheshirovanienaGPU valós időben
Az absztrakt bemutatott egy hatékony algoritmust adatpárhuzamosság építeni nagy hash táblák több millió példány valós időben. Úgy véljük, két párhuzamos algoritmus: klasszikus megközelítés tökéletes hash kifinomult és kakukk tördelési módszer, amelyben az elemek szorosan tömörítik, így az elem alatt egy több lehetséges helyszín. Azt is javasolták egy hibrid megközelítés, amely hasznosítja mindkét algoritmus. Mértük az építkezés során a táblák, az elérési idő és a memória használat a javasolt végrehajtási és demonstrációs valós időben nagy adathalmazok: 5 millió kulcsértékpárokat hash tábla gyártani 35,7 ms, a 1,42-szor több memóriát , mint a bemenő adatokat, és akkor kap hozzáférést minden eleme a hash tábla 15,3 ms. Összehasonlításképpen, rendezni ugyanazokat az adatokat igényel 36,6 ms, és a hozzáférést az összes elem egy bináris keresést igényel 79,5 ms.
Hashelés (néha tördeljük Engl hasítás.) - átalakító bemeneti tömb tetszőleges hosszúságú be kimenő adatok bitsorozat fix hosszúságú. Ezeket az átalakításokat is nevezik hash függvény vagy konvolúciós funkciókat.
Hash tábla - olyan adatszerkezetet, amely megvalósítja a felület egy asszociatív tömb, azaz lehetővé teszi, hogy tárolja egy pár (kulcs, érték) és végre három lépésből áll:
működését, hogy egy új párt;
törlését a kulcspár.
Ütközés a hash függvény h nevezzük két különböző bemeneti adatok blokk x és y, hogy h (x) = h (Y). Ütközések léteznek legtöbb hash függvények, de „jó” hash a frekvencia függvényében előfordulásuk közel van az elméleti minimum.
Az advent a programozható grafikus hardver kompatibilis párhuzamos grafikus processzorok (GPU), hogy ki tudja számítani és használja a különböző adatok ábrázolása.
Például a kutatók nemrégiben kimutatták hatékony párhuzamos építési térbeli hierarchikus adatszerkezetek, mint például a K-d fa (k-dimenziós fa). Általában jelentős probléma a tanulmány - a meghatározása megfelelő párhuzamos adatszerkezeteket lehet létrehozni, módosítani, és amely elérhető lett volna. Eszközök feldolgozására adatstruktúrák és a kapcsolódó algoritmusok lényegesen nagyobb, a skalár építészet, mint például a központi feldolgozó egység (CPU), mint a párhuzamos architektúra, mint például a grafikus processzor (GPU).
Ez a cikk azt a problémát végrehajtási párhuzamos adatszerkezet, amely véletlenszerű hozzáférést millió elemek és amely lehet kialakítani egy rövid időre. Ilyen adatszerkezet számos alkalmazás a számítógépes grafika, alkalmazásokra összpontosító, hogy kell tárolni egy sor ritka példány egy kompakt képviselet. A központi processzor a leggyakoribb adatstruktúra erre - a hash táblában. Mindazonáltal a hagyományos szekvenciális algoritmusok az épület, és hívja a hash tábla nem könnyű lefordítani, hogy a GPU párhuzamos környezetben három okból.
Algoritmusok töltésére hagyományos hash táblák hajlamosak bevonni szekvenciális műveleteket. Láncolása például megköveteli, hogy sok elem hozzáadva az egyes kapcsolt lista, amely szükségessé tenné serialization való hozzáférés a szerkezet a lista a GPU.
2) A minták szekvenciája.
A sorrend, amelyben a megtekintéséhez a hash tábla a sejt, az úgynevezett próba szekvencia. A minták száma szükséges cellakeresés egy tipikus egymást követő hash táblák, függ a kérést, például, a lánc igényel áthaladását kapcsolt listák, amelyek hossza változó. Ez vezet a hatékonyság, a GPU, ahol a SIMD mag teszi minden szál vár a legrosszabb esetben.
Hash táblák önmagában tartalmaz kis teljessége minden esetben az építési vagy hozzáférési úgy, hogy a számítástechnika hierarchia kevés lehetőségük a teljesítmény javítása érdekében.
Az egyik legnagyobb előnye a hash tábla az egymást követő számítások az, hogy valójában, a dinamikus adatszerkezeteket, amelyek esetében a eltávolítása és behelyezése formájában O (1). De gyakran nincs szükség, hogy dinamikus adatstruktúra a GPU: ha néhány vagy az összes adat elemek a hash táblában megváltozott minden lépésnél, az asztal helyreáll a semmiből.
Épület egy hash tábla valós és a hozzáférési időt hasznosak a különböző alkalmazásokhoz, amelyek szórványos adatok. Például, a grafikai alkalmazások: a térbeli hash kimutatására mozgó kereszteződés adatok és geometriai tördelő számára megfelelő. Úgy tűnik, hogy a térbeli hash a virtuális rács 1283 épülhet minden egyes képkockát körülbelül 27 képkocka másodpercenként. Geometriai tördelő - a csoport GPU igénylő intenzív véletlen elérésű táblázatot pár jellemző pontok.
3 fajta tördeljük
3.1 A tökéletes hash
Mint sok munka építeni a GPU hash táblák, koncentrálunk az építkezés egy tökéletes hash tábla. A klasszikus építési ideális hash tábla Friedman et al. [1984] (FKS-konstrukció) alapja az a megfigyelés, hogy ha a táblázat mérete m sokkal nagyobb, mint az elemek száma n. különösen akkor, ha m = O (n2). majd állandó valószínűsége, hogy egy hash függvény nem véletlenszerűen kiválasztott, hogy egy ütközés egyáltalán, és ad egy állandó keresési időt. Ahhoz, hogy egy állandó keresési idő lineáris tér, FKS-épület használják kétszintű táblázatban. A legfelső szinten elemek kivonatos szegmensekbe, és az alsó szinten hash szegmens k elemek puffer mérete O (k 2). Míg minden egyes szegmens csak O (1) a várt elemek, a várt méret a hash tábla O (n) és a keresési idő minden egyes elem O (1). A fő hátránya az, hogy ahhoz, hogy optimális terhelés, mondjuk, 1/4, szükség nagyon sok kis szegmensben.
3.2 Hashelés feleletválasztós (alternatív) és a hasító módszerrel Kakukk
3.3 Párhuzamos hasító módszerrel Cuckoo
A fő probléma a párhuzamosság darabolási algoritmus kakukk módszer meghatározásakor a megfelelő szemantikai párhuzamos táblázat frissítésekről közötti ütközések elemek megfelelően megszűnt. Az algoritmus három subtables (d = 3), mindegyik mérete n * (1 + γ) / 3, ahol γ elég nagy konstans. Az első iteráció próbálják tartani az összes elemet az első al-tábla T1. egyidejűleg regisztrálja az egyes elemeket a helyére a táblázatban. Szemantika megköveteli, hogy pontosan egy bejegyzés óta sikeres, az Ütközés esetén, és hogy minden egyes folyam képes volt azonosítani ezt a rekordot. Ez úgy történik, hogy az írás minden elemét egymástól függetlenül, és a hívást ezután szinkronizálni szálak, úgy, hogy a tábla tartalmát nem változtatják ellenőrzése során a siker érdekében. Mintegy 2n / 3 elem meghibásodik, akkor ki kell írni a második T2 subtable iteráció. Ezek az elemek, amelyek nem voltak képesek bejutni a subtable T2. küldött T3. Végül, ezeket az elemeket nem sikerült T3. vissza a T1. tolni bizonyos elemek, amelyek már a subtable, és próbálja meg a helyüket. Kilakoltatták elemek, valamint azokat, akik nem találnak helyet a T1. továbbra is ugyanazon cselekmények T2. Az ismétlések folytatni, amíg amíg minden elem nem fogja megtalálni a helyét az asztalnál, vagy a maximális iterációk száma, és ebben az esetben úgy tekintjük, hogy a rossz hash funkció lett kiválasztva. Bár 2 d = a várható legnagyobb iterációk száma O (lg n) a soros algoritmus; nehezebb megszerezni elméleti felső határérték, ha D> 3. A gyakorlatban azonban azt látjuk, hogy az iterációk mérsékelt.
Azonban, egy párhuzamos Kakukk hasító módszerrel nem lesz hatékony, és alkalmas a nagy hash táblázatot GPU, mivel minden egyes iteráció igényel shuffling elemek a globális memóriában globális szinkronizálás mindegyik ismétlésnél. De ez nagyon alkalmas táblázatokat lehet célja a kis és gyors belső memória belsejében a kristály. Így lehetséges, hogy egy hibrid módszerrel. Mint a reakcióvázlaton FKS-építési, először azt találjuk, a hash függvény az első réteg lehet osztani kisebb szegmensekre. Minden egyes szegmensen belül, akkor használja a párhuzamos hasító módszerrel Cuckoo forgalomba elemeket a három subtables. Mert fut teljesen on-chip memória, a gyakorlatban bizonyítja, hogy nagyon gyors.
Ez a fejezet leírja implementáció, amely CUDA hardver és szoftver architektúra számítások elvégzésére az NVIDIA GPU.
Tegyük fel, hogy a bemenet egy sor n elem - annyi, mint kulcsértékpárokat (k, v). ahol minden a kulcsok egyediek. A folyamatot a adjuk algoritmus 1, és két lépésből áll.
Stage 1 forgalmaz elemek közötti szegmensek használatával egy hash függvény h. átrendezésével az adatokat úgy, hogy az elemek az egyes szegmens egy folyamatos memória terület, ez javítja a memória-hozzáférés mintát két fázisban.
Stage 2 épít párhuzamos egyéni hash tábla szerinti eljárással kakukk minden egyes szegmens a gyors osztott memóriát, majd átírja a táblázatot a memóriájában egyetlen globális tömb, váltakozó kulcsok és értékek.