Laulau fa'alava faigofie mo le GPU

Laulau fa'alava faigofie mo le GPU
Na ou lafoina i luga ole Github poloketi fou O se Laulauafi Hash GPU faigofie.

O se laulau hash GPU faigofie e mafai ona fa'agasolo le fiaselau miliona o fa'aofi i le sekone. I luga o laʻu komepiuta NVIDIA GTX 1060, o loʻo faʻapipiʻi e le code le 64 miliona faʻapipiʻi faʻapipiʻi taua i le tusa ma le 210 ms ma aveese le 32 miliona paga i le tusa ma le 64 ms.

O lona uiga, o le saoasaoa i luga o se komepiuta feaveai e tusa ma le 300 miliona faʻapipiʻi / sec ma 500 miliona tapes / sec.

O le laulau o loʻo tusia i le CUDA, e ui o le auala lava e tasi e mafai ona faʻaoga i le HLSL poʻo le GLSL. O le faʻatinoga e iai ni tapulaʻa e faʻamautinoa ai le maualuga o le faʻatinoga i luga o se kata vitio:

  • E naʻo 32-bit ki ma tutusa tau e faʻatautaia.
  • O le laulau hash e iai se lapo'a tumau.
  • Ma o lenei tele e tatau ona tutusa ma le lua i le mana.

Mo ki ma tau, e tatau ona e faʻaagaga se faʻailoga faigofie (i le faʻailoga o loʻo i luga o le 0xffffffff).

Hash laulau e leai ni loka

O lo'o fa'aogaina e le laulau hash le tu'uga tatala ma su'esu'e laina, o lona uiga, ua na o se fa'asologa o pa'aga autu-taua o lo'o teuina i le manatua ma e sili atu le fa'atinoga o le fa'aoga. E le mafai foi ona fai le mea lava e tasi mo filifili, lea e aofia ai le suʻeina o se faʻailoga i se lisi fesoʻotaʻi. O le laulau hash o se fa'asologa faigofie e teu ai elemene KeyValue:

struct KeyValue
{
    uint32_t key;
    uint32_t value;
};

Ole tele ole laulau ole malosi ole lua, ae le o se numera muamua, aua e tasi le faʻatonuga vave e lava e faʻaoga ai le pow2 / AND mask, ae o le modulus operator e sili atu le lemu. E taua tele lea i le tulaga ole su'esu'ega laina, talu ai ile su'esu'ega o le laulau laina e tatau ona afifi le fa'ailoga o le slot i avanoa ta'itasi. Ma o se taunuuga, o le tau o le taotoga ua faaopoopo modulo i slot taitasi.

Na'o le laulau e teu ai le ki ma le tau mo elemene ta'itasi, ae le o se hash o le ki. Talu ai e na'o le laulau e teu ai 32-bit ki, o le hash e fa'atatau vave. O le tulafono o loʻo i luga e faʻaaogaina ai le Murmur3 hash, lea e naʻo ni nai suiga, XORs ma faʻateleina.

O lo'o fa'aogaina e le laulau hash auala e puipuia ai le loka e tuto'atasi mai le fa'atonuga o manatuaga. E tusa lava pe faʻalavelaveina e nisi o galuega tusitusi le faʻatonuga o isi gaioiga faapena, o le laulau hash o le a tumau pea le tulaga saʻo. O le a tatou talanoa e uiga i lenei mea i lalo. O le metotia e aoga tele i kata vitio e faʻatautaia le faitau afe o filo faʻatasi.

O ki ma tau i totonu o le laulau hash ua amatalia e gaogao.

E mafai ona suia le code e faʻatautaia ai 64-bit ki ma faʻatauga. O ki e mana'omia ai le faitau, tusitusi, ma fa'atusatusaga-ma-swap galuega. Ma o tau e manaʻomia ai le atomic faitau ma tusitusi gaioiga. O le mea e lelei ai, i le CUDA, faitau-tusi faʻagaioiga mo 32- ma 64-bit faʻatatau e atomic pe afai e masani ona faʻaogaina (silasila i lalo). iinei), ma kata vitio faʻaonaponei e lagolagoina le 64-bit atomic faʻatusatusa-ma-fetufaʻiga gaioiga. Ioe, pe a agai i le 64 bits, o le faʻatinoga o le a faʻaitiitia teisi.

Tulaga o le laulau saisai

E mafai ona i ai se tasi o le fa setete ta'i ta'i ta'i-taua i totonu o se laulau hash:

  • Ua gaogao le ki ma le tau. I lenei tulaga, ua amata le laulau hash.
  • Ua uma ona tusi i lalo le ki, ae leʻi tusia le tau. Afai o loʻo faitau nei e le isi filo faʻamatalaga, ona toe foʻi mai lea e leai se mea. E masani lava, o le mea lava lea e tasi e tupu pe ana fai o se isi filo o le faʻatinoga na galue i sina taimi muamua, ma o loʻo matou talanoa e uiga i le faʻatulagaina o faʻamaumauga.
  • E fa'amaumau uma le ki ma le tau.
  • O loʻo avanoa le tau i isi filo o le faʻatinoga, ae o le ki e leʻi iai. E mafai ona tupu lenei mea ona o le faʻataʻitaʻiga polokalame a le CUDA o loʻo i ai se faʻataʻitaʻiga faʻapitoa e manatua ai. Ole mea masani lea; i so'o se mea e tupu, o lo'o gaogao pea le ki, tusa lava pe le toe fa'apea le tau.

O se faʻamatalaga taua o le taimi lava e tusi ai le ki i le slot, e le toe gaoioi - tusa lava pe tape le ki, o le a tatou talanoa e uiga i lenei mea i lalo.

O le lisi o le laulau o le hash e galue foi i faʻataʻitaʻiga manatua e le o iloa le faasologa e faitau ma tusia ai le manatua. A'o tatou va'ava'ai i le fa'aofiina, su'e, ma le tapeina i totonu o se laulau hash, ia manatua o ta'i ta'i-taua ta'itasi o lo'o i totonu o se tasi o setete e fa o lo'o fa'amatalaina i luga.

Fa'aofi i totonu o se laulau hash

O le galuega a le CUDA e fa'aofi ai pa'aga autu-taua i totonu o se laulau hash e pei o lenei:

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);
    }
}

Ina ia fa'aofi se ki, e fa'asolosolo le fa'ailoga i le fa'asologa o laulau hash e amata i le hash o le ki fa'aofi. O avanoa ta'itasi i le fa'asologa e fa'atino ai se fa'atusatusaga-ma-swap fa'atomu e fa'atusatusa ai le ki i totonu o lena avanoa i le gaogao. Afai e iloa se mea e le fetaui, o le ki i totonu o le avanoa e faʻafouina i le ki faʻapipiʻi, ona toe faʻafoʻi mai lea o le ki muamua. Afai o le ulua'i ki e gaogao pe fetaui ma le ki fa'aofi, ona maua lea e le code se avanoa talafeagai mo le fa'aofiina ma fa'aofi le tau fa'aofi i totonu o le avanoa.

Afai i le tasi kernel valaau gpu_hashtable_insert() e tele elemene ma le ki lava e tasi, ona mafai lea ona tusi soʻo se mea o latou taua i le ki slot. E manatu lenei mea masani: o se tasi o ki-taua tusitusi i le taimi o le valaau o le a manuia, ae talu ai o nei mea uma e tupu tutusa i totonu o le tele o filo o le faʻataunuʻuina, e le mafai ona tatou vaʻai po o le a le mea e manatua ai tusitusiga o le a mulimuli.

Su'e laulau fa'ailo

Code mo su'e ki:

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);
        }
}

Ina ia maua le tau o se ki o loʻo teuina i totonu o se laulau, matou te suʻesuʻe i le laina amata i le hash o le ki o loʻo matou sailia. I slot taitasi, matou te siaki pe o le ki o le mea lea matou te sailia, ma afai o lea, matou te toe faafoi atu lona tau. Matou te siaki foi pe leai se ki, ma afai o lea, matou te faʻaumatia le sailiga.

Afai e le mafai ona tatou mauaina le ki, e toe faafoi mai e le code se tau gaogao.

O nei su'esu'ega uma e mafai ona faia fa'atasi e ala i fa'aofi ma tape'ese. O paga taitasi i le laulau o le ai ai se tasi o setete e fa o loʻo faʻamatalaina i luga mo le tafe.

Aveese i se laulau hash

Code mo le tapeina o ki:

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);
    }
}

O le tapeina o se ki e faia i se auala e le masani ai: matou te tuʻu le ki i le laulau ma faʻailoga lona tau (ae le o le ki lava ia) e leai se mea. O lenei code e tutusa lelei ma lookup(), se'i vagana ua maua se afitusi i luga o se ki, e fa'agaogao ai lona tau.

E pei ona taʻua i luga, a tusi loa se ki i se slot, e le toe faʻagaoioia. E tusa lava pe tape se elemene mai le laulau, e tumau pea le ki, o lona tau e na o le gaogao. O lona uiga tatou te le manaʻomia le faʻaogaina o se galuega tusitusi atomic mo le tau o le slot, aua e le afaina pe leai se aoga o loʻo iai nei pe leai - o le a gaogao lava.

Toe suiina se laulau hash

E mafai ona e suia le tele o le laulau hash e ala i le fatuina o se laulau lapoʻa ma faʻapipiʻi elemene e le o gaogao mai le laulau tuai i totonu. Ou te leʻi faʻatinoina lenei galuega ona sa ou manaʻo e faʻafaigofie le faʻataʻitaʻiga code. E le gata i lea, i polokalame CUDA, e masani ona faia le vaevaega manatua i le code host nai lo le CUDA kernel.

Le tusitusiga Se Laua'i Hash e leai se loka e fa'atali o lo'o fa'amatalaina pe fa'afefea ona toe fa'aleleia se fa'amaumauga o fa'amaumauga e puipuia ai loka.

Fa'atauva

I luga ole galuega tauave code snippets gpu_hashtable_insert(), _lookup() и _delete() fa'agasolo le tasi pa'aga taua i le taimi. Ma lalo ifo gpu_hashtable_insert(), _lookup() и _delete() fa'agasolo se fa'asologa o paga e tutusa, o paga ta'itasi i se filo fa'atinoina o le 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);
    }
}

E lagolagoina e le laulau fa'apipi'i fa'apipi'i fa'atasi, su'ega, ma tape'ese. Talu ai o pa'aga autu-taua e masani ona i ai i se tasi o setete e fa ma e le minoi ki, o le laulau e fa'amaonia le sa'o e tusa lava pe fa'aaogaina ituaiga gaioiga eseese i le taimi e tasi.

Ae peita'i, afai tatou te fa'agasolo se vaega o fa'aofi ma tape'esega fa'atasi, ma afai o lo'o iai ki fa'alua i totonu o paga, ona le mafai lea ona tatou va'ai po'o fea paga o le a "manumalo"—o le a tusia i le laulau fa'ai'u mulimuli. Fa'apea na ta'ua le fa'aofi fa'ailoga fa'atasi ai ma se fa'asologa o ta'iga A/0 B/1 A/2 C/3 A/4. A mae'a le fa'ailoga, ona ta'ilua B/1 и C/3 e mautinoa e iai i le laulau, ae i le taimi lava e tasi o le a faʻaalia ai soʻo se paga i totonu A/0, A/2 poʻo A/4. Atonu o se faʻafitauli pe leai foi - e faʻalagolago uma i le talosaga. Atonu e te iloa muamua e leai ni ki fa'alua i totonu o le fa'aulu, pe e te le popole po'o le a le tau na tusia mulimuli.

Afai o se faʻafitauli lea mo oe, ona e manaʻomia lea ona tuʻueseese le lua faʻalua i ni telefoni CUDA system. I totonu o le CUDA, so'o se fa'agaioiga e vala'au ai le fatu e fa'amae'a i taimi uma a'o le'i o'o i le isi kernel call (a itiiti ifo i totonu o le tasi filo. I filo eseese, kernels e fa'atino tutusa). I le faʻataʻitaʻiga o loʻo i luga, pe afai e te valaʻau tasi kernel ma A/0 B/1 A/2 C/3, ma le isi ma A/4, ona sosoo ai lea ma le ki A o le a maua le tau 4.

Se'i o tatou talanoa nei pe tatau ona fai galuega lookup() и delete() fa'aoga se fa'asino manino po'o se fa'asolo i se fa'asologa o paga i le laulau hash. CUDA Fa'amaumauga Fai mai e faapea:

E mafai e le tagata tu'ufa'atasi ona filifili e fa'amalieina le faitau ma le tusitusi i le lalolagi po'o le fa'asoa manatua... O nei fa'ata'ita'iga e mafai ona fa'aletonu e fa'aaoga ai le upu autu. volatile: ... soʻo se faʻamatalaga i lenei fesuiaiga o loʻo tuʻufaʻatasia i se manatua moni faitau pe tusitusi faatonuga.

O iloiloga sa'o e le mana'omia le fa'aoga volatile. Afai e fa'aogaina e le filo fa'ataunu'u se tau fa'aoga mai se fa'agaioiga faitau muamua, ona fa'aaogaina lea o fa'amatalaga tuai. Ae ui i lea, o faʻamatalaga lea mai le tulaga saʻo o le laulau hash i se taimi patino o le kernel call. Afai e te manaʻomia le faʻaogaina o faʻamatalaga lata mai, e mafai ona e faʻaogaina le faasino igoa volatile, ae o le faʻatinoga o le a faʻaitiitia laʻititi: e tusa ai ma aʻu suʻega, pe a tape le 32 miliona elemene, o le saoasaoa na faʻaitiitia mai le 500 miliona tape / sec i le 450 miliona tape / sec.

Gaioiga

I le suʻega mo le faʻaofiina o le 64 miliona elemene ma le tapeina o le 32 miliona o latou, tauvaga i le va std::unordered_map ma e toetoe lava leai se laulau hash mo le GPU:

Laulau fa'alava faigofie mo le GPU
std::unordered_map fa'aalu le 70 ms e fa'aofi ma aveese elemene ma fa'asa'oloto ai unordered_map (o le faʻaumatia o le faitau miliona o elemene e manaʻomia tele le taimi, aua o totonu unordered_map e tele vaevaega manatua ua faia). tautala faamaoni, std:unordered_map fa'atapula'aina atoatoa. O se filo se tasi o le CPU o le faʻataunuʻuina, lagolago ki-taua o soʻo se tele, faʻatino lelei i le maualuga o le faʻaogaina o fua faatatau, ma faʻaalia le faʻatinoina o galuega pe a maeʻa le tele o tape.

O le umi o le laulau hash mo le GPU ma fesoʻotaʻiga i le va o polokalame e 984 ms. E aofia ai le taimi e faʻaalu ai le tuʻuina o le laulau i le manatua ma tapeina (tuʻuina le 1 GB o le manatua i le taimi e tasi, e umi se taimi i le CUDA), faʻaofi ma tapeina elemene, ma faʻataʻitaʻi i luga. O kopi uma i ma mai le manatua o le kata vitio o loʻo faʻaaogaina foi.

O le laulau hash lava ia e 271 ms e faʻamaeʻa ai. E aofia ai le taimi e faʻaalu e le kata vitio faʻapipiʻi ma tape elemene, ma e le amanaʻia le taimi e faʻaalu kopi i le mafaufau ma faʻasolosolo i luga o le laulau e maua ai. Afai o le laulau GPU e ola mo se taimi umi, pe afai o le laulau hash o loʻo i ai atoa i le manatua o le kata vitio (mo se faʻataʻitaʻiga, e fai ai se laulau hash o le a faʻaaogaina e isi code GPU ae le o le ogatotonu), ona e talafeagai le i'uga o le su'ega.

O le laulau hash mo se kata vitio o loʻo faʻaalia ai le maualuga o le faʻatinoga ona o le maualuga o le gaosiga ma le parallelization malosi.

vaivaiga

O le fausaga o le laulau hash e iai nai fa'afitauli e tatau ona nofouta i ai:

  • Ole su'esu'ega laina e fa'alavelaveina e le fa'aputuina, lea e mafua ai ona fa'aitiitia le tu'u lelei o ki o le laulau.
  • E le aveesea ki e faaaoga ai le galuega delete ma i le aluga o taimi latou te fa'ateteina le laulau.

O se taunuuga, o le faatinoga o se laulau hash e mafai ona faasolosolo malie, aemaise lava pe afai o loʻo i ai mo se taimi umi ma e tele mea faʻapipiʻi ma tape. O se tasi o auala e faʻaitiitia ai nei faʻaletonu o le toe faʻafoʻi i totonu o se laulau fou ma e maualalo le faʻaogaina o le faʻaoga ma faʻamama ese ki ua aveese i le taimi o le toe faʻaogaina.

Ina ia faʻaalia mataupu o loʻo faʻamatalaina, o le a ou faʻaogaina le faʻailoga o loʻo i luga e fatu ai se laulau ma 128 miliona elemene ma faʻaoga i le 4 miliona elemene seia oʻo ina ou faʻatumuina le 124 miliona avanoa (faʻaaogaina fua faatatau o le 0,96). Ole laulau fa'ai'uga lea, o laina ta'itasi o le CUDA kernel call e fa'aofi 4 miliona elemene fou i totonu o le laulau e tasi:

Fa'aoga fua
Taimi fa'aofi 4 elemene

0,00
11,608448 ms (361,314798 miliona ki/sec.)

0,03
11,751424 ms (356,918799 miliona ki/sec.)

0,06
11,942592 ms (351,205515 miliona ki/sec.)

0,09
12,081120 ms (347,178429 miliona ki/sec.)

0,12
12,242560 ms (342,600233 miliona ki/sec.)

0,16
12,396448 ms (338,347235 miliona ki/sec.)

0,19
12,533024 ms (334,660176 miliona ki/sec.)

0,22
12,703328 ms (330,173626 miliona ki/sec.)

0,25
12,884512 ms (325,530693 miliona ki/sec.)

0,28
13,033472 ms (321,810182 miliona ki/sec.)

0,31
13,239296 ms (316,807174 miliona ki/sec.)

0,34
13,392448 ms (313,184256 miliona ki/sec.)

0,37
13,624000 ms (307,861434 miliona ki/sec.)

0,41
13,875520 ms (302,280855 miliona ki/sec.)

0,44
14,126528 ms (296,909756 miliona ki/sec.)

0,47
14,399328 ms (291,284699 miliona ki/sec.)

0,50
14,690304 ms (285,515123 miliona ki/sec.)

0,53
15,039136 ms (278,892623 miliona ki/sec.)

0,56
15,478656 ms (270,973402 miliona ki/sec.)

0,59
15,985664 ms (262,379092 miliona ki/sec.)

0,62
16,668673 ms (251,627968 miliona ki/sec.)

0,66
17,587200 ms (238,486174 miliona ki/sec.)

0,69
18,690048 ms (224,413765 miliona ki/sec.)

0,72
20,278816 ms (206,831789 miliona ki/sec.)

0,75
22,545408 ms (186,038058 miliona ki/sec.)

0,78
26,053312 ms (160,989275 miliona ki/sec.)

0,81
31,895008 ms (131,503463 miliona ki/sec.)

0,84
42,103294 ms (99,619378 miliona ki/sec.)

0,87
61,849056 ms (67,815164 miliona ki/sec.)

0,90
105,695999 ms (39,682713 miliona ki/sec.)

0,94
240,204636 ms (17,461378 miliona ki/sec.)

A'o fa'ateleina le fa'aoga, fa'aitiitia le fa'atinoga. E le mana'omia lenei mea i le tele o tulaga. Afai e fa'aofi e se talosaga elemene elemene i totonu o se laulau ona tia'i lea (mo se fa'ata'ita'iga, pe a faitauina upu i totonu o se tusi), e le o se fa'afitauli lea. Ae afai e faʻaaogaina e le talosaga se laulau hash umi (mo se faʻataʻitaʻiga, i totonu o se faʻataʻitaʻiga ata e teu ai vaega e le o gaogao o ata e faʻapipiʻi soo ai e le tagata faʻaoga ma tapeina faʻamatalaga), ona mafai lea ona avea lenei amio ma faʻafitauli.

Ma fuaina le loloto ole su'esu'eina o le laulau i le mae'a ai o le 64 miliona fa'aofi (fa'aoga 0,5). Ole loloto ole averesi ole 0,4774, ole tele o ki sa i totonu ole avanoa sili ona lelei pe tasi le avanoa e mamao ese mai le tulaga sili. Ole loloto ole leo aupito maualuga e 60.

Ona ou fuaina lea o le loloto su'esu'e i luga o se laulau ma 124 miliona fa'aofi (fa'aoga 0,97). Ole loloto ole averesi ua uma ona 10,1757, ma le maualuga - 6474 (!!). E matua pa'ū le fa'atinoga o le fa'aogaina o laina laina ile maualuga ole fa'aoga.

E sili ona fa'atumauina le maualalo o le fa'aoga o lenei laulau. Ae matou te faʻateleina le faʻatinoga i le faʻaaluina o le faʻaaogaina o mafaufauga. O le mea e lelei ai, i le tulaga o 32-bit ki ma tau, e mafai ona faʻamaonia. Afai i le faʻataʻitaʻiga o loʻo i luga, i totonu o se laulau ma 128 miliona elemene, matou te tausia le faʻaaogaina o le 0,25, ona mafai lea ona matou tuʻuina atu e le sili atu i le 32 miliona elemene i totonu, ma o le 96 miliona avanoa o totoe o le a leiloa - 8 paita mo paga taʻitasi. , 768 MB o manatua leiloa.

Faamolemole ia matau o loʻo matou talanoa e uiga i le leiloa o le manatua o kata vitio, o se punaoa sili atu ona taua nai lo le manatuaina o le polokalama. E ui lava o le tele o kata faʻataʻitaʻi faʻaonaponei o loʻo lagolagoina le CUDA o loʻo i ai le itiiti ifo i le 4 GB o le manatua (i le taimi o le tusitusi, o le NVIDIA 2080 Ti o loʻo i ai le 11 GB), e le o se filifiliga sili ona atamai le leiloa o ia aofaiga.

Mulimuli ane o le a ou tusia atili e uiga i le fatuina o laulau hash mo kata vitio e leai ni faʻafitauli i le loloto o suʻesuʻega, faʻapea foʻi ma auala e toe faʻaaoga ai avanoa ua tapeina.

Fuaina o le loloto o le leo

Ina ia iloa le loloto o le suʻesuʻeina o se ki, e mafai ona tatou suʻeina le hash o le ki (lona faʻasologa o le laulau sili) mai lona faʻailoga o le laulau:

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

Ona o le togafiti faʻatauvaʻa a lua's lua faʻaopoopo numera binary ma le mea moni o le gafatia o le laulau hash e lua i le mana o le lua, o lenei auala o le a aoga e tusa lava pe siitia le faasino igoa i le amataga o le laulau. Sei o tatou ave se ki e fa'asolo i le 1, ae fa'aofi i totonu o le slot 3. Ona mo se laulau e mafai ona 4 tatou te maua. (3 — 1) & 3, lea e tutusa ma le 2.

iʻuga

Afai ei ai ni au fesili po'o ni fa'amatalaga, fa'amolemole imeli mai ia te a'u ile Twitter pe tatala se autu fou i totonu faleteuoloa.

O lenei tulafono na tusia i lalo o musumusuga mai tala lelei:

I le lumanaʻi, o le a faʻaauau pea ona ou tusi e uiga i faʻatinoga o laulau hash mo kata vitio ma auʻiliʻili a latou faʻatinoga. O aʻu fuafuaga e aofia ai le filifiliina, Robin Hood hashing, ma le cuckoo hashing e faʻaogaina ai le atomic operations i fausaga faʻamaumauga e faʻafeiloaʻi GPU.

puna: www.habr.com

Faaopoopo i ai se faamatalaga