Tafole e bonolo ea hash bakeng sa GPU

Tafole e bonolo ea hash bakeng sa GPU
Ke e kentse ho Github morero o mocha Tafole e Bonolo ea GPU Hash.

Ke tafole e bonolo ea GPU hash e khonang ho sebetsana le limilione tse makholo tsa ho kenya ka motsotsoana. Ho laptop ea ka ea NVIDIA GTX 1060, khoutu e kenya limilione tse 64 tse hlahisitsoeng ka mokhoa o sa reroang ka lipara tsa bohlokoa tse ka bang 210 ms le ho tlosa lipara tse limilione tse 32 hoo e ka bang 64 ms.

Ka mantsoe a mang, lebelo la laptop ke hoo e ka bang limilione tse 300 tsa ho kenya ka motsotsoana le ho tlosa limilione tse 500 ka metsotsoana.

Tafole e ngotsoe ka CUDA, le hoja mokhoa o tšoanang o ka sebelisoa ho HLSL kapa GLSL. Ts'ebetsong e na le meeli e mengata ho netefatsa ts'ebetso e phahameng ea karete ea video:

  • Ke linotlolo tsa 32-bit feela le litekanyetso tse tšoanang tse sebetsoang.
  • Tafole ea hash e na le boholo bo tsitsitseng.
  • 'Me boholo bona bo tlameha ho lekana le tse peli ho matla.

Bakeng sa linotlolo le boleng, o hloka ho boloka lesupa le bonolo la delimiter (khoutung e kaholimo sena ke 0xffffffff).

Tafole ea Hash ntle le linotlolo

Tafole ea hash e sebelisa aterese e bulehileng le ho hlahloba ka mela, ke hore, ke feela letoto la li-key-value pairs tse bolokiloeng mohopolong 'me li na le ts'ebetso e phahameng ea cache. Ho ke ke ha boleloa se tšoanang bakeng sa ketane, e kenyelletsang ho batla pointer lethathamong le amanang. Tafole ea hash ke mokhoa o bonolo oa ho boloka likarolo KeyValue:

struct KeyValue
{
    uint32_t key;
    uint32_t value;
};

Boholo ba tafole ke matla a tse peli, eseng palo e kholo, hobane taeo e le 'ngoe e potlakileng e lekane ho sebelisa pow2 / AND mask, empa mokhanni oa modulus o lieha haholo. Sena ke sa bohlokoa tabeng ea ho hlahloba ka mela, kaha ha ho shejoa tafole ka mela, index ea slot e tlameha ho phutheloa sekoting ka seng. 'Me ka lebaka leo, litšenyehelo tsa ts'ebetso li eketsoa modulo sebakeng se seng le se seng.

Tafole e boloka feela senotlolo le boleng ba ntho ka 'ngoe, eseng hash ea senotlolo. Kaha tafole e boloka linotlolo tsa 32-bit feela, hash e baloa kapele haholo. Khoutu e ka holimo e sebelisa hash ea Murmur3, e etsang liphetoho tse 'maloa feela, XORs le ho atisa.

Tafole ea hash e sebelisa mekhoa ea ts'ireletso ea ho notlela e ikemetseng ho latela taelo ea memori. Le ha ts'ebetso e meng ea ho ngola e ka senya tatellano ea lits'ebetso tse ling tse joalo, tafole ea hash e ntse e tla boloka boemo bo nepahetseng. Re tla bua ka sena ka tlase. Mokhoa ona o sebetsa hantle ka likarete tsa video tse tsamaisang likhoele tse likete ka nako e le ngoe.

Linotlolo le litekanyetso tse ka har'a tafole ea hash li qalisoa ho se na letho.

Khoutu e ka fetoloa ho sebetsana le linotlolo tsa 64-bit le boleng. Linotlolo li hloka tšebetso ea ho bala, ho ngola, le ho bapisa le ho fapanyetsana athomo. Mme boleng bo hloka ts'ebetso ea ho bala le ho ngola atomic. Ka lehlohonolo, ho CUDA, ts'ebetso ea ho bala-ho ngola bakeng sa boleng ba 32- le 64-bit ke atomic ha feela li hokahane ka tlhaho (sheba ka tlase). mona), le likarete tsa sejoale-joale tsa video li ts'ehetsa ts'ebetso ea ho bapisa le phapanyetsano ea athomo ea 64-bit. Ha e le hantle, ha u fallela ho li-bits tse 64, tshebetso e tla fokotseha hanyenyane.

Boemo ba tafole ea Hash

Para e 'ngoe le e' ngoe ea boleng ba bohlokoa tafoleng ea hash e ka ba le e 'ngoe ea linaha tse' nè:

  • Senotlolo le boleng ha li na letho. Boemong bona, tafole ea hash e qala.
  • Senotlolo se ngotsoe fatše, empa boleng ha bo so ngoloe. Haeba khoele e 'ngoe e ntse e bala data hajoale, e khutla e se na letho. Sena se tloaelehile, ntho e tšoanang e ka be e etsahetse haeba khoele e 'ngoe ea ts'ebetso e ne e sebetsa pejana,' me re bua ka sebopeho sa data se tšoanang.
  • Bobeli senotlolo le boleng li tlalehiloe.
  • Boleng bo fumaneha ho likhoele tse ling tsa ts'ebetso, empa senotlolo ha se so fihle. Sena se ka etsahala hobane mofuta oa lenaneo la CUDA o na le mofuta oa memori o laetsoeng ka mokhoa o hlephileng. Sena se tloaelehile; leha ho le joalo, senotlolo se ntse se se na letho, le haeba boleng ha bo sa le joalo.

Ntho ea bohlokoa ke hore hang ha senotlolo se ngotsoe ho slot, ha se sa sisinyeha - le haeba senotlolo se tlosoa, re tla bua ka sena ka tlase.

Khoutu ea tafole ea hash e bile e sebetsa le mefuta ea memori e laetsoeng ka mokhoa o hlephileng eo tatellano eo memori e baloang le ho ngoloa ka eona e sa tsejoeng. Ha re ntse re sheba ho kenya, ho sheba, le ho hlakola tafoleng ea hash, hopola hore para e 'ngoe le e' ngoe ea bohlokoa e ho e 'ngoe ea linaha tse' nè tse hlalositsoeng ka holimo.

Ho kenya tafoleng ea hash

Mosebetsi oa CUDA o kenyang lipara tsa bohlokoa ka har'a tafole ea hash o shebahala tjena:

void gpu_hashtable_insert(KeyValue* hashtable, uint32_t key, uint32_t value)
{
    uint32_t slot = hash(key);

    while (true)
    {
        uint32_t prev = atomicCAS(&hashtable[slot].key, kEmpty, key);
        if (prev == kEmpty || prev == key)
        {
            hashtable[slot].value = value;
            break;
        }
        slot = (slot + 1) & (kHashTableCapacity-1);
    }
}

Ho kenya senotlolo, khoutu e pheta-pheta ka har'a lethathamo la tafole ea hash ho qala ka hash ea senotlolo se kentsoeng. Sekotjana se seng le se seng sa sehlopha se etsa ts'ebetso ea ho bapisa le ho fapanyetsana athomo e bapisang senotlolo se sekoting seo le se se nang letho. Haeba ho fumanoa ho se lumellane, senotlolo se ka har'a sekotjana se ntlafatsoa ka senotlolo se kentsoeng, ebe ho khutlisetsoa senotlolo sa pele. Haeba senotlolo sena sa pele se ne se se na letho kapa se tšoana le senotlolo se kentsoeng, joale khoutu e fumane sebaka se loketseng bakeng sa ho kenngoa le ho kenya boleng bo kentsoeng ka har'a slot.

Haeba ka kernel call gpu_hashtable_insert() ho na le likarolo tse ngata tse nang le senotlolo se le seng, ebe leha e le efe ea boleng ba tsona e ka ngolloa ho slot ea bohlokoa. Sena se nkoa e le ntho e tloaelehileng: e 'ngoe ea bohlokoa-boleng bo ngotsoeng nakong ea mohala e tla atleha, empa kaha sena sohle se etsahala ka tsela e ts'oanang ka har'a likhoele tse' maloa tsa ts'ebetso, re ke ke ra bolela esale pele hore na ho ngola memori e tla ba efe ea ho qetela.

Ho sheba tafole ea hash

Khouto ea ho batla linotlolo:

uint32_t gpu_hashtable_lookup(KeyValue* hashtable, uint32_t key)
{
        uint32_t slot = hash(key);

        while (true)
        {
            if (hashtable[slot].key == key)
            {
                return hashtable[slot].value;
            }
            if (hashtable[slot].key == kEmpty)
            {
                return kEmpty;
            }
            slot = (slot + 1) & (kHashTableCapacity - 1);
        }
}

Ho fumana boleng ba senotlolo se bolokiloeng tafoleng, re pheta-pheta ka lethathamo ho qala ka hash ea senotlolo seo re se batlang. Karolong e 'ngoe le e' ngoe, re hlahloba hore na senotlolo ke sona seo re se batlang, 'me haeba ho joalo, re khutlisetsa boleng ba sona. Re boetse re hlahloba hore na senotlolo ha se na letho, 'me haeba ho joalo, re khaotsa ho batla.

Haeba re sitoa ho fumana senotlolo, khoutu e khutlisa boleng bo se nang letho.

Ts'ebetso tsena kaofela tsa ho batla li ka etsoa ka nako e le 'ngoe ka ho kenya le ho hlakola. Para e 'ngoe le e' ngoe e tafoleng e tla ba le e 'ngoe ea linaha tse' nè tse hlalositsoeng ka holimo bakeng sa phallo.

Ho tlosa ka har'a tafole ea hash

Khoutu ea ho hlakola linotlolo:

void gpu_hashtable_delete(KeyValue* hashtable, uint32_t key, uint32_t value)
{
    uint32_t slot = hash(key);

    while (true)
    {
        if (hashtable[slot].key == key)
        {
            hashtable[slot].value = kEmpty;
            return;
        }
        if (hashtable[slot].key == kEmpty)
        {
            return;
        }
        slot = (slot + 1) & (kHashTableCapacity - 1);
    }
}

Ho hlakola senotlolo ho etsoa ka tsela e sa tloaelehang: re siea senotlolo tafoleng ebe re tšoaea bohlokoa ba eona (eseng senotlolo ka boeona) ha se na letho. Khoutu ena e ts'oana haholo le lookup(), ntle le hore ha papali e fumanoa holim'a senotlolo, e etsa hore boleng ba eona e be lefeela.

Joalokaha ho boletsoe ka holimo, hang ha senotlolo se ngoletsoe slot, ha se sa sisinngoa. Le ha element e hlakotsoe tafoleng, senotlolo se lula se le teng, boleng ba sona bo fetoha lefeela. Sena se bolela hore ha ho hlokahale hore re sebelise ts'ebetso ea ho ngola athomo bakeng sa boleng ba slot, hobane ha ho tsotellehe hore na boleng ba hona joale ha bo na letho kapa che - bo ntse bo tla fetoha lefeela.

Ho fetola boholo ba tafole ea hash

U ka fetola boholo ba tafole ea hash ka ho etsa tafole e kholoanyane le ho kenya lintho tse se nang letho ho tloha tafoleng ea khale ho eona. Ha kea sebelisa ts'ebetso ena hobane ke ne ke batla ho boloka mohlala oa khoutu o le bonolo. Ho feta moo, mananeong a CUDA, kabo ea memori hangata e etsoa ka khoutu ea moamoheli ho fapana le kernel ea CUDA.

Sengoloa Tafole ea Hash ea Lock-Mahala ea Mahala e hlalosa mokhoa oa ho fetola sebopeho sa data se sirelelitsoeng ka senotlolo.

Tlholisano

Likarolong tse ka holimo tsa khoutu ea ts'ebetso gpu_hashtable_insert(), _lookup() и _delete() sebetsana le para e le 'ngoe ea bohlokoa ka nako. Le tlase gpu_hashtable_insert(), _lookup() и _delete() sebetsa mefuta e mengata ea lipara ka ho bapisa, para e 'ngoe le e 'ngoe ka khoele e arohaneng ea GPU:

// CPU code to invoke the CUDA kernel on the GPU
uint32_t threadblocksize = 1024;
uint32_t gridsize = (numkvs + threadblocksize - 1) / threadblocksize;
gpu_hashtable_insert_kernel<<<gridsize, threadblocksize>>>(hashtable, kvs, numkvs);

// GPU code to process numkvs key/values in parallel
void gpu_hashtable_insert_kernel(KeyValue* hashtable, const KeyValue* kvs, unsigned int numkvs)
{
    unsigned int threadid = blockIdx.x*blockDim.x + threadIdx.x;
    if (threadid < numkvs)
    {
        gpu_hashtable_insert(hashtable, kvs[threadid].key, kvs[threadid].value);
    }
}

Tafole ea hash e thibelang ho notlela e ts'ehetsa tse kentsoeng ka nako e le 'ngoe, li- lookups, le ho hlakolwa. Hobane lipara tsa bohlokoa li lula li le sebakeng se seng sa linaha tse 'ne' me linotlolo ha li tsamaee, tafole e tiisa ho nepahala le ha mefuta e fapaneng ea ts'ebetso e sebelisoa ka nako e le 'ngoe.

Leha ho le joalo, haeba re sebetsana le sehlopha sa lintho tse kenngoeng le tse hlakotsoeng ka ho tsamaisana, 'me haeba lethathamo la lipara le na le linotlolo tse kopitsoang, re ke ke ra khona ho bolela esale pele hore na ke lipara life tse tla "hlōla" -e tla ngoloa lethathamong la hash la ho qetela. Ha re re re bitsitse khoutu ea ho kenya ka mefuta e mengata ea lipara A/0 B/1 A/2 C/3 A/4. Ha khoutu e felile, lipara B/1 и C/3 li tiisetsoa hore li tla ba teng tafoleng, empa ka nako e ts'oanang ho tla hlaha leha e le efe ea lipara ho eona A/0, A/2 kapa A/4. Sena se kanna sa ba bothata kapa ha se na bothata - tsohle li ipapisitse le ts'ebeliso. U ka 'na ua tseba esale pele hore ha ho na linotlolo tse kopitsoang lethathamong la lintho tse kentsoeng, kapa mohlomong ha u tsotelle hore na ho ngotsoe boleng bofe.

Haeba sena e le bothata ho uena, joale u hloka ho arola lipara tse peli ho li-call tse fapaneng tsa tsamaiso ea CUDA. Ho CUDA, ts'ebetso efe kapa efe e bitsang kernel e lula e phethela pele ho mohala o latelang oa kernel (bonyane ka har'a khoele e le 'ngoe. Likhoeleng tse fapaneng, linaoa li etsoa ka ho bapa). Mohlala o ka holimo, haeba u letsetsa kernel e le 'ngoe ka A/0 B/1 A/2 C/3, le e mong ka A/4, ebe senotlolo A tla fumana boleng 4.

Joale ha re bue ka hore na mesebetsi e lokela ho etsoa lookup() и delete() sebelisa sesupa se hlakileng kapa se feto-fetohang ho lihlopha tse ngata tafoleng ea hashi. CUDA Litokomane E bolela hore:

Moqapi a ka 'na a khetha ho ntlafatsa ho bala le ho ngola mohopolong oa lefats'e kapa o arolelanoang... Ntlafatso ena e ka emisoa ka lentsoe la sehlooho volatile: ... tšupiso efe kapa efe e mabapi le phapang ena e bokelloa ho ba mohopolo oa 'nete oa ho bala kapa ho ngola taelo.

Maikutlo a ho nepahala ha a hloke kopo volatile. Haeba khoele ea ts'ebetso e sebelisa boleng bo bolokiloeng ho tsoa ts'ebetsong e baloang pejana, e tla be e sebelisa tlhaiso-leseling e siiloeng ke nako. Empa leha ho le joalo, ena ke tlhaiso-leseling e tsoang ho boemo bo nepahetseng ba tafole ea hash ka motsotso o itseng oa mohala oa kernel. Haeba u hloka ho sebelisa boitsebiso ba morao-rao, u ka sebelisa index volatile, empa joale ts'ebetso e tla fokotseha hanyenyane: ho ea ka liteko tsa ka, ha u tlosa likarolo tse limilione tse 32, lebelo le fokotsehile ho tloha ho limilione tse 500 tsa ho tlosoa / sec ho ea ho ho tlosoa ha limilione tse 450 / sec.

Tlhahiso

Tekong ea ho kenya likarolo tse limilione tse 64 le ho hlakola tse limilione tse 32 tsa tsona, tlholisano lipakeng tsa std::unordered_map 'me ha ho na tafole ea hash bakeng sa GPU:

Tafole e bonolo ea hash bakeng sa GPU
std::unordered_map e sebelisitse 70 ms ho kenya le ho tlosa likarolo ebe lia li lokolla unordered_map (ho tlosa lintho tse limillione ho nka nako e ngata, hobane kahare unordered_map ho etsoa kabo ea memori e mengata). Ho bua 'nete, std:unordered_map lithibelo tse fapaneng ka ho feletseng. Ke khoele e le 'ngoe ea ts'ebetso ea CPU, e ts'ehetsa litekanyetso tsa bohlokoa tsa boholo bofe kapa bofe, e sebetsa hantle ka litheko tse phahameng tsa ts'ebeliso, mme e bonts'a ts'ebetso e tsitsitseng kamora ho hlakoloa hangata.

Nako ea tafole ea hash bakeng sa GPU le puisano ea lipakeng tsa mananeo e ne e le 984 ms. Sena se kenyelletsa nako e sebelisitsoeng ho beha tafole mohopolong le ho e hlakola (ho fana ka 1 GB ea mohopolo ka nako e le 'ngoe, e nkang nako e itseng ho CUDA), ho kenya le ho hlakola likarolo, le ho pheta-pheta holim'a tsona. Likopi tsohle ho ea le ho tsoa memoring ea karete ea video le tsona li hlokomeloa.

Tafole ea hash ka boeona e nkile 271 ms ho phetheloa. Sena se kenyelletsa nako e sebelisoang ke karete ea video ho kenya le ho hlakola likarolo, 'me ha e nahane ka nako e sebelisitsoeng ho kopitsa mohopolong le ho pheta-pheta holim'a tafole e hlahisoang. Haeba tafole ea GPU e phela nako e telele, kapa haeba tafole ea hash e fumaneha ka botlalo mohopolong oa karete ea video (mohlala, ho etsa tafole ea hash e tla sebelisoa ke khoutu e 'ngoe ea GPU eseng processor e bohareng), joale sephetho sa teko ke sa bohlokoa.

Tafole ea hash bakeng sa karete ea video e bonts'a ts'ebetso e phahameng ka lebaka la phallo e phahameng le parallelization e sebetsang.

Mathata

Meaho ea tafole ea hash e na le lintlha tse 'maloa tseo u lokelang ho li ela hloko:

  • Ho hlahloba ka mela ho sitisoa ke ho kopanya, e leng se etsang hore linotlolo tse tafoleng li behoe ka tlase ho e phethahetseng.
  • Linotlolo ha li tlosoe ho sebelisoa ts'ebetso delete mme ha nako e ntse e ya ba phutha tafole.

Ka lebaka leo, ts'ebetso ea tafole ea hash e ka fokotseha butle-butle, haholo-holo haeba e le teng ka nako e telele 'me e na le lintho tse ngata tse kenyang le ho hlakola. Mokhoa o mong oa ho fokotsa litsietsi tsena ke ho khutlisetsa tafoleng e ncha ka sekhahla se tlase sa ts'ebeliso le ho sefa linotlolo tse tlositsoeng nakong ea ho nchafatsa.

Ho hlakisa litaba tse hlalositsoeng, ke tla sebelisa khoutu e kaholimo ho theha tafole e nang le likarolo tse limilione tse 128 le ho hokahanya likarolo tse limilione tse 4 ho fihlela ke tlatsitse li-slots tse limilione tse 124 (sekhahla sa ts'ebeliso se ka bang 0,96). Mona ke tafole ea sephetho, mola o mong le o mong ke mohala oa CUDA oa ho kenya likarolo tse ncha tse limilione tse 4 tafoleng e le 'ngoe ea hash:

Sekhahla sa tšebeliso
Nako ea ho kenya lintlha tse 4

0,00
11,608448 ms (linotlolo tse limilione tse 361,314798/mots.)

0,03
11,751424 ms (linotlolo tse limilione tse 356,918799/mots.)

0,06
11,942592 ms (linotlolo tse limilione tse 351,205515/mots.)

0,09
12,081120 ms (linotlolo tse limilione tse 347,178429/mots.)

0,12
12,242560 ms (linotlolo tse limilione tse 342,600233/mots.)

0,16
12,396448 ms (linotlolo tse limilione tse 338,347235/mots.)

0,19
12,533024 ms (linotlolo tse limilione tse 334,660176/mots.)

0,22
12,703328 ms (linotlolo tse limilione tse 330,173626/mots.)

0,25
12,884512 ms (linotlolo tse limilione tse 325,530693/mots.)

0,28
13,033472 ms (linotlolo tse limilione tse 321,810182/mots.)

0,31
13,239296 ms (linotlolo tse limilione tse 316,807174/mots.)

0,34
13,392448 ms (linotlolo tse limilione tse 313,184256/mots.)

0,37
13,624000 ms (linotlolo tse limilione tse 307,861434/mots.)

0,41
13,875520 ms (linotlolo tse limilione tse 302,280855/mots.)

0,44
14,126528 ms (linotlolo tse limilione tse 296,909756/mots.)

0,47
14,399328 ms (linotlolo tse limilione tse 291,284699/mots.)

0,50
14,690304 ms (linotlolo tse limilione tse 285,515123/mots.)

0,53
15,039136 ms (linotlolo tse limilione tse 278,892623/mots.)

0,56
15,478656 ms (linotlolo tse limilione tse 270,973402/mots.)

0,59
15,985664 ms (linotlolo tse limilione tse 262,379092/mots.)

0,62
16,668673 ms (linotlolo tse limilione tse 251,627968/mots.)

0,66
17,587200 ms (linotlolo tse limilione tse 238,486174/mots.)

0,69
18,690048 ms (linotlolo tse limilione tse 224,413765/mots.)

0,72
20,278816 ms (linotlolo tse limilione tse 206,831789/mots.)

0,75
22,545408 ms (linotlolo tse limilione tse 186,038058/mots.)

0,78
26,053312 ms (linotlolo tse limilione tse 160,989275/mots.)

0,81
31,895008 ms (linotlolo tse limilione tse 131,503463/mots.)

0,84
42,103294 ms (linotlolo tse limilione tse 99,619378/mots.)

0,87
61,849056 ms (linotlolo tse limilione tse 67,815164/mots.)

0,90
105,695999 ms (linotlolo tse limilione tse 39,682713/mots.)

0,94
240,204636 ms (linotlolo tse limilione tse 17,461378/mots.)

Ha ts'ebeliso e ntse e eketseha, ts'ebetso ea fokotseha. Sena ha se lakatsehe maemong a mangata. Haeba kopo e kenya likarolo ka har'a tafole ebe e li lahla (mohlala, ha u bala mantsoe bukeng), joale sena ha se bothata. Empa haeba sesebelisoa se sebelisa tafole ea nako e telele ea hash (mohlala, ka har'a mohlophisi oa litšoantšo ho boloka likarolo tse se nang letho tsa litšoantšo moo mosebelisi a kenang khafetsa le ho hlakola tlhaiso-leseling), joale boitšoaro bona bo ka ba bothata.

Le ho lekanya botebo ba tafole ea hash kamora ho kenya limilione tse 64 (tafole ea ts'ebeliso ea 0,5). Karolelano ea botebo e ne e le 0,4774, kahoo linotlolo tse ngata li ne li le sebakeng se setle ka ho fetisisa se ka khonehang kapa sekoti se le seng hole le boemo bo botle ka ho fetisisa. Boemo bo phahameng ba molumo e ne e le 60.

Ka mor'a moo ke ile ka lekanya botebo ba ho hlahloba holim'a tafole e nang le limilione tse 124 tse kentsoeng (lisebelisoa tsa tšebeliso 0,97). Karolelano ea botebo e ne e se e ntse e le 10,1757, 'me boholo - 6474 (!!). Ts'ebetso ea li-linear sensing e theoha haholo ka litekanyetso tse phahameng tsa tšebeliso.

Ho molemo ho boloka sekhahla sa tšebeliso ea tafole ena ea hash se le tlase. Empa joale re eketsa ts'ebetso ka litšenyehelo tsa tšebeliso ea memori. Ka lehlohonolo, tabeng ea linotlolo le litekanyetso tsa 32-bit, sena se ka lokafatsoa. Haeba mohlala o ka holimo, tafoleng e nang le likarolo tse limilione tse 128, re boloka karolo ea ts'ebeliso ea 0,25, joale re ke ke ra beha likarolo tse fetang limilione tse 32 ho eona, 'me tse setseng tse limilione tse 96 li tla lahleha - li-byte tse 8 bakeng sa para e' ngoe le e 'ngoe. , 768 MB ea mohopolo o lahlehileng.

Ka kopo hlokomela hore re bua ka tahlehelo ea memori ea karete ea video, e leng mohloli oa bohlokoa ho feta mohopolo oa tsamaiso. Le hoja likarete tse ngata tsa morao-rao tsa lik'homphieutha tse tšehetsang CUDA li na le bonyane 4 GB ea memori (ka nako ea ho ngola, NVIDIA 2080 Ti e na le 11 GB), e ntse e ke ke ea e-ba qeto e bohlale ka ho fetisisa ea ho lahleheloa ke chelete e joalo.

Hamorao ke tla ngola haholoanyane mabapi le ho theha litafole tsa hash bakeng sa likarete tsa video tse se nang mathata ka botebo ba ho hlahloba, hammoho le mekhoa ea ho sebelisa li-slots tse tlositsoeng hape.

Tekanyo ea botebo ba molumo

Ho tseba botebo ba senotlolo, re ka ntša hashi ea senotlolo (index ea eona e nepahetseng ea tafole) ho tsoa ho index ea eona ea tafole:

// get_key_index() -> index of key in hash table
uint32_t probelength = (get_key_index(key) - hash(key)) & (hashtablecapacity-1);

Ka lebaka la boselamose ba linomoro tse peli tse tlatselletsang tsa binary le taba ea hore bokhoni ba tafole ea hash ke tse peli ho isa ho tse peli, mokhoa ona o tla sebetsa le ha index ea senotlolo e isoa qalong ea tafole. Ha re nke senotlolo se hashed ho 1, empa se kentsoe ka har'a slot 3. Ebe bakeng sa tafole e nang le bokhoni ba 4 re e fumana. (3 — 1) & 3, e lekanang le 2.

fihlela qeto e

Haeba u na le lipotso kapa maikutlo, ka kopo imeile ho 'na Twitter kapa bula sehlooho se secha ho bobolokelo.

Khoutu ena e ngotsoe ka tšusumetso ho tsoa ho lingoliloeng tse ntle haholo:

Nakong e tlang, ke tla tsoelapele ho ngola ka ts'ebetsong ea tafole ea hash bakeng sa likarete tsa video le ho sekaseka ts'ebetso ea bona. Merero ea ka e kenyelletsa ketane, Robin Hood hashing, le cuckoo hashing e sebelisa ts'ebetso ea athomo meahong ea data e nang le botsoalle ba GPU.

Source: www.habr.com

Eketsa ka tlhaloso