เบเปเบญเบเปเบเปเปเบเบเบกเบฑเบเบขเบนเปเปเบ Github
เบกเบฑเบเปเบเบฑเบเบเบฒเบเบฐเบฅเบฒเบ GPU hash เบเปเบฒเบเบเบฒเบเบเบตเปเบชเบฒเบกเบฒเบเบเบฐเบกเบงเบเบเบปเบเบซเบผเบฒเบเบฎเปเบญเบเบฅเปเบฒเบเบเบญเบ inserts เบเปเปเบงเบดเบเบฒเบเบต. เปเบเบเบญเบกเบเบดเบงเปเบเบตเปเบเบเบเบธเบ NVIDIA GTX 1060 เบเบญเบเบเปเบญเบ, เบฅเบฐเบซเบฑเบเปเบชเป 64 เบฅเปเบฒเบเบเบนเปเบเบต-เบกเบนเบเบเปเบฒเบเบตเปเบชเปเบฒเบเบเบถเปเบเปเบเบเบชเบธเปเบกเปเบเบเบฐเบกเบฒเบ 210 ms เปเบฅเบฐเปเบญเบปเบฒ 32 เบฅเปเบฒเบเบเบนเปเปเบเบเบฐเบกเบฒเบ 64 ms.
เบเบฑเปเบเปเบกเปเบ, เบเบงเบฒเบกเปเบงเปเบเบเบญเบกเบเบดเบงเปเบเบตเปเบเบเบเบธเบเปเบกเปเบเบเบฐเบกเบฒเบ 300 เบฅเปเบฒเบ inserts/sec เปเบฅเบฐ 500 เบฅเปเบฒเบ deletes/sec.
เบเบฒเบเบฐเบฅเบฒเบเปเบกเปเบเบเบฝเบเปเบ CUDA, เปเบเบดเบเปเบกเปเบเบงเปเบฒเปเบเบฑเบเบเบดเบเบเบฝเบงเบเบฑเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบเบฑเบ HLSL เบซเบผเบท GLSL. เบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบเบกเบตเบเปเปเบเบณเบเบฑเบเบซเบผเบฒเบเบขเปเบฒเบเปเบเบทเปเบญเบฎเบฑเบเบเบฐเบเบฑเบเบเบฐเบชเบดเบเบเบดเบเบฒเบเบชเบนเบเปเบเบเบฑเบเบงเบตเบเบตเปเบญ:
- เบเบฝเบเปเบเป 32-bit keys เปเบฅเบฐเบเปเบฒเบเบฝเบงเบเบฑเบเปเบเปเบเบทเบเบเบฐเบกเบงเบเบเบปเบ.
- เบเบฒเบเบฐเบฅเบฒเบ hash เบกเบตเบเบฐเบซเบเบฒเบเบเบปเบเบเบตเป.
- เปเบฅเบฐเบเบฐเบซเบเบฒเบเบเบตเปเบเปเบญเบเปเบเบปเปเบฒเบเบฑเบเบชเบญเบเบเบฑเบเบเบฐเบฅเบฑเบเบเบฒเบ.
เบชเปเบฒเบฅเบฑเบเบฅเบฐเบซเบฑเบเปเบฅเบฐเบเปเบฒ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบชเบฐเบซเบเบงเบเบเบปเบงเบเปเบฒเบเบปเบเบเบปเบงเบเบฑเปเบเบเปเบฒเบเบเบฒเบ (เปเบเบฅเบฐเบซเบฑเบเบเปเบฒเบเปเบเบดเบเบเบตเปเปเบกเปเบ 0xffffffff).
เบเบฒเบเบฐเบฅเบฒเบ hash เปเบเบเบเปเปเบกเบตเบเบฒเบ locks
เบเบฒเบเบฐเบฅเบฒเบ hash เปเบเปเบเบฒเบเปเบเบตเบเบเบตเปเบขเบนเปเบเบฑเบ KeyValue
:
struct KeyValue
{
uint32_t key;
uint32_t value;
};
เบเบฐเบซเบเบฒเบเบเบญเบเบเบฒเบเบฐเบฅเบฒเบเปเบกเปเบเบเบฐเบฅเบฑเบเบเบฒเบเบเบญเบเบชเบญเบ, เบเปเปเปเบกเปเบเบเบปเบงเปเบฅเบเบเบปเปเบเบเป, เปเบเบฒเบฐเบงเปเบฒเบเปเบฒเปเบเบฐเบเปเบฒเบเบตเปเปเบงเบญเบฑเบเบซเบเบถเปเบเปเบกเปเบเบเบฝเบเบเปเบเบตเปเบเบฐเบเปเบฒเปเบเปเบซเบเปเบฒเบเบฒเบ pow2 / AND, เปเบเปเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบ modulus เปเบกเปเบเบเปเบฒเบเบงเปเบฒเบซเบผเบฒเบ. เบเบตเปเปเบกเปเบเบชเบดเปเบเบชเปเบฒเบเบฑเบเปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบฒเบเบชเบทเบเบชเบงเบเปเบชเบฑเปเบ, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเปเบเบเบฒเบเบฐเบฅเบฒเบเปเบชเบฑเปเบเบเบทเปเบเบญเบเบเบฒเบเบฐเบฅเบฒเบเบเบฒเบเปเบเบดเปเบเบเบฑเบเบเบฐเบเบตเบชเบฐเบฅเบฑเบญเบเบเบดเบเบเปเบญเบเบเบทเบเบซเปเปเบขเบนเปเปเบเปเบเปเบฅเบฐเบเปเบญเบ. เปเบฅเบฐเบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเปเบเปเบเปเบฒเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเปเบกเปเบเปเบเบตเปเบก modulo เปเบเปเบเปเบฅเบฐเบเปเบญเบเบชเบฝเบ.
เบเบฒเบเบฐเบฅเบฒเบเบเบฝเบเปเบเปเปเบเบฑเบเบฎเบฑเบเบชเบฒเบฅเบฐเบซเบฑเบเปเบฅเบฐเบเปเบฒเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบญเบปเบเบเบฐเบเบญเบ, เบเปเปเปเบกเปเบ hash เบเบญเบเบเบฐเปเบ. เปเบเบทเปเบญเบเบเบฒเบเบเบฒเบเบฐเบฅเบฒเบเบเบฝเบเปเบเปเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบฐเปเบ 32-bit, hash เปเบเปเบเบทเบเบเบดเบเปเบฅเปเบขเปเบฒเบเปเบงเบงเบฒ. เบฅเบฐเบซเบฑเบเบเปเบฒเบเปเบเบดเบเปเบเป Murmur3 hash, เปเบเบดเปเบเบเบฐเบเบดเบเบฑเบเบเบฝเบเปเบเปเบชเบญเบเบชเบฒเบก shifts, XORs เปเบฅเบฐเบเบฒเบเบเบนเบ.
เบเบฒเบเบฐเบฅเบฒเบ hash เปเบเปเปเบเบฑเบเบเบดเบเบเบฒเบเบเปเบญเบเบเบฑเบเบเบฒเบเบฅเบฑเบญเบเบเบตเปเบเปเปเบเบถเปเบเบเบฑเบเบเปเบฒเบชเบฑเปเบเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ. เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบฒเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฒเบเบเบฝเบเบเบฑเบเบเบงเบฒเบเบเปเบฒเบชเบฑเปเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบง, เบเบฒเบเบฐเบฅเบฒเบ hash เบเบฐเบเบฑเบเบเบปเบเบฎเบฑเบเบชเบฒเบชเบฐเบเบฒเบเบฐเบเบตเปเบเบทเบเบเปเบญเบ. เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเปเบเปเบฒเบเบฅเบธเปเบกเบเบตเป. เปเบเบฑเบเบเบดเบเบเบฑเปเบเบเปเบฒเบงเปเบฎเบฑเบเบงเบฝเบเปเบเปเบเบตเบเบฑเบเบเบฑเบเบงเบตเบเบตเปเบญเบเบตเปเปเบฅเปเบเบซเบผเบฒเบเบเบฑเบเบเบฐเบเบนเปเบเปเบญเบกเบเบฑเบ.
เบเบธเปเบกเปเบฅเบฐเบเปเบฒเปเบเบเบฒเบเบฐเบฅเบฒเบ hash เปเบเปเบเบทเบเปเบฅเบตเปเบกเบเบปเปเบเปเบซเปเบซเบงเปเบฒเบเปเบเบปเปเบฒ.
เบฅเบฐเบซเบฑเบเบชเบฒเบกเบฒเบเบเบทเบเบเบฑเบเปเบเบเปเบเบทเปเบญเบเบฑเบเบเบฒเบเบเบฑเบเบเบต 64-bit เปเบฅเบฐเบเปเบฒเปเบเบฑเปเบเบเบฝเบงเบเบฑเบ. เบเบฐเปเบเบเปเบญเบเบเบฒเบเบเบฒเบเบญเปเบฒเบ, เบเบฝเบ, เปเบฅเบฐเบเบฒเบเบเบฝเบเบเบฝเบเบเบฐเบฅเปเบฒเบกเบฐเบเบน. เปเบฅเบฐเบเปเบฒเบเปเบฒเบเปเบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบญเปเบฒเบเปเบฅเบฐเบเบฝเบเบเบฐเบฅเปเบฒเบกเบฐเบเบน. เปเบเบเบเบต, เปเบ CUDA, เบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบญเปเบฒเบ - เบเบฝเบเบชเปเบฒเบฅเบฑเบเบเปเบฒ 32- เปเบฅเบฐ 64-bit เปเบกเปเบเบเบฐเบฅเปเบฒเบกเบฐเบเบนเบเบฒเบเปเบเบเบตเปเบเบงเบเบกเบฑเบเบชเบญเบเบเปเบญเบเบเบฒเบกเบเปเบฒเบกเบฐเบเบฒเบ (เปเบเบดเปเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเป).
เบชเบฐเบเบฒเบเบฐเบเบฒเบเบฐเบฅเบฒเบ Hash
เปเบเปเบฅเบฐเบเบนเปเบเบต-เบเปเบฒเปเบเบเบฒเบเบฐเบฅเบฒเบ hash เบชเบฒเบกเบฒเบเบกเบตเบซเบเบถเปเบเปเบเบชเบตเปเบฅเบฑเบ:
- เบฅเบฐเบซเบฑเบ เปเบฅเบฐเบเปเบฒเบซเบงเปเบฒเบเปเบเบปเปเบฒ. เปเบเบชเบฐเบเบฒเบเบฐเบเบตเป, เบเบฒเบเบฐเบฅเบฒเบ hash เปเบกเปเบเปเบฅเบตเปเบกเบเบปเปเบ.
- เบเบตเปเบเปเบเบทเบเบเบฝเบเบฅเบปเบ, เปเบเปเบกเบนเบเบเปเบฒเบเบฑเบเบเปเปเบเบฑเบเปเบเปเบเบฝเบ. เบเปเบฒเบเบฐเบเบนเปเบญเบทเปเบเบเบณเบฅเบฑเบเบญเปเบฒเบเบเปเปเบกเบนเบเบขเบนเป, เบกเบฑเบเบเบฐเบเบฑเบเบเบทเบเบกเบฒเบซเบงเปเบฒเบเปเบเบปเปเบฒ. เบเบตเปเปเบกเปเบเปเบฅเบทเปเบญเบเบเบปเบเบเบฐเบเบด, เบชเบดเปเบเบเบฝเบงเบเบฑเบเบเบฐเปเบเบตเบเบเบถเปเบเบเปเบฒเบซเบฒเบเบงเปเบฒเบเบฐเบเบนเปเบญเบทเปเบเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเปเปเบฎเบฑเบเบงเบฝเบเปเบฅเบฑเบเบเปเบญเบเบเปเบญเบเบซเบเปเบฒเบเบตเป, เปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเปเบเบเบชเปเบฒเบเบเปเปเบกเบนเบเบเปเบญเบกเบเบฑเบ.
- เบเบฑเบเบเบตเปเบฅเบฐเบกเบนเบเบเปเบฒเบเบทเบเบเบฑเบเบเบถเบ.
- เบกเบนเบเบเปเบฒเปเบกเปเบเบกเบตเบขเบนเปเปเบเบเบฐเบเบนเปเบญเบทเปเบเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เปเบเปเบเบตเปเบกเปเบเบเบฑเบเบเปเปเบเบฑเบ. เบเบตเปเบชเบฒเบกเบฒเบเปเบเบตเบเบเบถเปเบเปเบเปเปเบเบฒเบฐเบงเปเบฒเบฎเบนเบเปเบเบเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบก CUDA เบกเบตเบฎเบนเบเปเบเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเบกเบตเบเปเบฒเบชเบฑเปเบเบงเปเบฒเบ. เบเบตเปเปเบกเปเบเปเบฅเบทเปเบญเบเบเบปเบเบเบฐเบเบด; เปเบเบเปเบฅเบฐเบเบตเปเบเบเปเปเบเบฒเบก, เบเบฐเปเบเบเบฑเบเบซเบงเปเบฒเบเปเบเบปเปเบฒ, เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเปเบฒเบเบฐเบเปเปเปเบเบฑเบเบเบฑเปเบเบเบฑเปเบ.
เบเบงเบฒเบกเปเบเบเบเปเบฒเบเบเบตเป เบชเบณ เบเบฑเบเปเบกเปเบเบงเปเบฒเปเบกเบทเปเบญเบฅเบฐเบซเบฑเบเบเบทเบเบเบฝเบเปเบชเปเบชเบฐเบฅเบฑเบญเบเบเบดเบ, เบกเบฑเบเบเปเปเปเบเปเบเปเบฒเบเบญเบตเบเบเปเปเปเบ - เปเบเบดเบเปเบกเปเบเบงเปเบฒเบฅเบฐเบซเบฑเบเบเบฐเบเบทเบเบฅเบถเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเปเบเปเบฒเบเบฅเบธเปเบกเบเบตเป.
เบฅเบฐเบซเบฑเบเบเบฒเบเบฐเบฅเบฒเบ hash เปเบเบดเบเปเบกเปเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบปเบงเปเบเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเบกเบตเบเปเบฒเบชเบฑเปเบเบงเปเบฒเบเบเบตเปเบฅเปเบฒเบเบฑเบเบเบตเปเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบทเบเบญเปเบฒเบเปเบฅเบฐเบเบฝเบเปเบกเปเบเบเปเปเบฎเบนเป. เปเบกเบทเปเบญเบเบงเบเปเบฎเบปเบฒเปเบเบดเปเบเบเบฒเบเปเบเบ, เบเบญเบเบซเบฒ, เปเบฅเบฐเบเบฒเบเบฅเบถเบเปเบเบเบฒเบเบฐเบฅเบฒเบ hash, เบเบทเปเปเบงเปเบงเปเบฒเปเบเปเบฅเบฐเบเบนเปเบเบต-เบเปเบฒเปเบกเปเบเบขเบนเปเปเบเบซเบเบถเปเบเปเบเบชเบตเปเบฅเบฑเบเบเบตเปเบญเบฐเบเบดเบเบฒเบเบเปเบฒเบเปเบเบดเบ.
เบเบฒเบเปเบชเปเปเบเบปเปเบฒเปเบเปเบเบเบฒเบเบฐเบฅเบฒเบ hash
เบเบฑเบเบเบฑเบ CUDA เบเบตเปเปเบเบเบเบนเปเบเบต-เบเปเบฒเปเบเบปเปเบฒเปเบเปเบเบเบฒเบเบฐเบฅเบฒเบ hash เปเบเบดเปเบเบเบทเบงเปเบฒ:
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);
}
}
เปเบเบทเปเบญเปเบชเปเบเบฐเปเบ, เบฅเบฐเบซเบฑเบเบเบฐเปเบฎเบฑเบเบเปเบณเบเปเบฒเบเบญเบฒเปเบฃเบเบฒเบเบฐเบฅเบฒเบ hash เปเบเบเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบ hash เบเบญเบเบเบฐเปเบเบเบตเปเปเบชเป. เปเบเปเบฅเบฐเบเปเบญเบเปเบ array เบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบฝเบเบเบฝเบเปเบฅเบฐเบชเบฐเบซเบผเบฑเบเบเบฐเบฅเปเบฒเบกเบฐเบเบนเบเบตเปเบเบฝเบเบเบฝเบเบเบฐเปเบเปเบเบเปเบญเบเบเบฑเปเบเบซเบงเปเบฒเบเปเบเบปเปเบฒ. เบเปเบฒเบเบงเบเบเบปเบเบเปเปเบเบปเบเบเบฑเบ, เบเบฐเปเบเปเบเบชเบฐเบฅเบฑเบญเบเบเบดเบเบเบทเบเบเบฑเบเบเบธเบเบเปเบงเบเบเบฐเปเบเบเบตเปเปเบชเป, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฐเปเบเบชเบฐเบฅเบฑเบญเบเบเบดเบเปเบเบตเบกเบเบฐเบเบทเบเบชเบปเปเบเบเบทเบ. เบเปเบฒเบเบฐเปเบเบเบปเปเบเบชเบฐเบเบฑเบเบเบตเปเบซเบงเปเบฒเบเปเบเบปเปเบฒ เบซเบผเบทเบเบปเบเบเบฑเบเบเบฐเปเบเบเบตเปเปเบชเปเปเบฅเปเบง, เบฅเบฐเบซเบฑเบเปเบเปเบเบปเบเบเปเบญเบเบชเบฝเบเบเบตเปเปเปเบฒเบฐเบชเบปเบกเบชเบณเบฅเบฑเบเบเบฒเบเปเบชเป เปเบฅเบฐเปเบชเปเบเปเบฒเบเบตเปเปเบชเปเปเบชเปเปเบเบเปเบญเบเปเบชเป.
เบเปเบฒเบขเบนเปเปเบเบซเบเบถเปเบ kernel เปเบ gpu_hashtable_insert()
เบกเบตเบซเบผเบฒเบเบญเบปเบเบเบฐเบเบญเบเบเบตเปเบกเบตเบฅเบฐเบซเบฑเบเบเบฝเบงเบเบฑเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเปเบเบญเบเบเบงเบเบกเบฑเบเบชเบฒเบกเบฒเบเบเบทเบเบเบฝเบเปเบชเปเบเปเบญเบเบชเบฝเบ. เบญเบฑเบเบเบตเปเบเบทเบงเปเบฒเปเบเบฑเบเปเบฅเบทเปเบญเบเบเบปเบเบเบฐเบเบด: เบซเบเบถเปเบเปเบเบเปเบฒเบชเปเบฒเบเบฑเบเบเบตเปเบเบฝเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเปเบเบเบฐเบเบฐเบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบ, เปเบเปเบงเปเบฒเบเบฑเบเบซเบกเบปเบเบเบตเปเปเบเบตเบเบเบทเปเบเปเบเบเบฐเบซเบเบฒเบเบเบฒเบเปเบเบซเบผเบฒเบเปเบซเบปเบงเบเปเปเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบเปเปเบชเบฒเบกเบฒเบเบเบฒเบเปเบเบปเบฒเปเบเปเบงเปเบฒเบเบฒเบเบเบฝเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเปเบเบเบฐเปเบเบฑเบเบญเบฑเบเบชเบธเบเบเปเบฒเบ.
เบเบฒเบเบเบญเบเบซเบฒเบเบฒเบเบฐเบฅเบฒเบ Hash
เบฅเบฐโเบซเบฑเบโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบเบญเบโเบซเบฒโเบเบฐโเปเบโ:
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);
}
}
เปเบเบทเปเบญเบเบญเบเบซเบฒเบเปเบฒเบเบญเบเบเบฐเปเบเบเบตเปเปเบเบฑเบเปเบงเปเปเบเบเบฒเบเบฐเบฅเบฒเบ, เบเบงเบเปเบฎเบปเบฒ iterate เบเปเบฒเบ array เปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบ hash เบเบญเบ key เบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเบเบญเบเบซเบฒ. เปเบเปเบเปเบฅเบฐเบเปเบญเบ, เบเบงเบเปเบฎเบปเบฒเบเบงเบเปเบเบดเปเบเบงเปเบฒเบเบฐเปเบเปเบกเปเบเบญเบฑเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเบเบญเบเบซเบฒ, เปเบฅเบฐเบเปเบฒเปเบเบฑเบเบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบชเบปเปเบเบเบทเบเบกเบนเบเบเปเบฒเบเบญเบเบกเบฑเบ. เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบงเบเปเบเบดเปเบเบงเปเบฒเบเบฐเปเบเบซเบงเปเบฒเบเปเบเบปเปเบฒ, เปเบฅเบฐเบเปเบฒเปเบเบฑเบเบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเบปเบเปเบฅเบตเบเบเบฒเบเบเบปเปเบเบซเบฒ.
เบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเปเบชเบฒเบกเบฒเบเบเบญเบเบซเบฒเบฅเบฐเบซเบฑเบเปเบเป, เบฅเบฐเบซเบฑเบเบเบฐเบชเบปเปเบเบเบทเบเบเปเบฒเบซเบงเปเบฒเบเปเบเบปเปเบฒ.
เบเบฑเบเบซเบกเบปเบเบเบญเบเบเบฒเบเบเบปเปเบเบซเบฒเปเบซเบผเบปเปเบฒเบเบตเปเบชเบฒเบกเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบญเบกเบเบฑเบเปเบเบเบเปเบฒเบเบเบฒเบเปเบเบเปเบฅเบฐเบเบฒเบเบฅเบถเบ. เปเบเปเบฅเบฐเบเบนเปเปเบเบเบฒเบเบฐเบฅเบฒเบเบเบฐเบกเบตเบซเบเบถเปเบเปเบเบชเบตเปเบฅเบฑเบเบเบตเปเบญเบฐเบเบดเบเบฒเบเบเปเบฒเบเปเบเบดเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบซเบผ.
เบเบฒเบเบฅเบถเบเปเบเบเบฒเบเบฐเบฅเบฒเบ hash
เบฅเบฐเบซเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบฅเบถเบเบฅเบฐเบซเบฑเบ:
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);
}
}
เบเบฒเบเบฅเบถเบเบเบฐเปเบเปเบกเปเบเปเบฎเบฑเบเปเบเปเบเบเบเบตเปเบเบดเบเบเบปเบเบเบฐเบเบด: เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเปเบซเปเบเบตเปเบเบเบฒเบเบฐเบฅเบฒเบเปเบฅเบฐเบซเบกเบฒเบเบกเบนเบเบเปเบฒเบเบญเบเบกเบฑเบ (เบเปเปเปเบกเปเบเบฅเบฐเบซเบฑเบเบเบปเบงเบกเบฑเบเปเบญเบ) เบซเบงเปเบฒเบเปเบเบปเปเบฒ. เบฅเบฐเบซเบฑเบเบเบตเปเปเบกเปเบเบเปเบฒเบเบเบทเบเบฑเบเบเบฑเบ lookup()
, เปเบงเบฑเปเบเปเบชเบเปเบเปเบงเปเบฒเปเบกเบทเปเบญเบเบปเบเบเปเบฒเบเบตเปเบเบปเบเบเบฑเบ, เบกเบฑเบเปเบฎเบฑเบเปเบซเปเบกเบนเบเบเปเบฒเบเบญเบเบกเบฑเบเบซเบงเปเบฒเบเปเบเบปเปเบฒ.
เบเบฑเปเบเบเบตเปเปเบเปเบเปเบฒเบงเบกเบฒเบเปเบฒเบเปเบเบดเบ, เปเบกเบทเปเบญเบฅเบฐเบซเบฑเบเบเบทเบเบเบฝเบเปเบชเปเบเปเบญเบ, เบกเบฑเบเบเบฐเบเปเปเบเบทเบเบเปเบฒเบเบญเบตเบเบเปเปเปเบ. เปเบเบดเบเปเบกเปเบเบงเปเบฒเปเบเปเบงเบฅเบฒเบเบตเปเบญเบปเบเบเบฐเบเบญเบเบเบทเบเบฅเบปเบเบญเบญเบเบเบฒเบเบเบฒเบเบฐเบฅเบฒเบ, เบเบธเบเปเบเบเบฑเบเบเบปเบเบขเบนเปเปเบเบชเบฐเบเบฒเบเบเบตเป, เบกเบนเบเบเปเบฒเบเบญเบเบกเบฑเบเบเบฝเบเปเบเปเบเบฒเบเปเบเบฑเบเบซเบงเปเบฒเบเปเบเบปเปเบฒ. เบเบตเปเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบฝเบเบเบฐเบฅเปเบฒเบกเบฐเบเบนเบชเปเบฒเบฅเบฑเบเบเปเบฒเบเปเบญเบ, เปเบเบฒเบฐเบงเปเบฒเบกเบฑเบเบเปเปเบชเปเบฒเบเบฑเบเบงเปเบฒเบเปเบฒเบเบฐเบเบธเบเบฑเบเปเบกเปเบเบซเบงเปเบฒเบเบซเบผเบทเบเปเป - เบกเบฑเบเบเบฐเบเบฒเบเปเบเบฑเบเบซเบงเปเบฒเบเปเบเบปเปเบฒ.
เบเบฑเบเบเบฐเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบ hash
เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฝเบเบเบฐเบซเบเบฒเบเบเบญเบเบเบฒเบเบฐเบฅเบฒเบ hash เปเบเบเบเบฒเบเบชเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบเบเบฐเบซเบเบฒเบเปเบซเบเปเปเบฅเบฐเปเบชเปเบญเบปเบเบเบฐเบเบญเบเบเบตเปเบเปเปเบซเบงเปเบฒเบเปเบเบปเปเบฒเบเบฒเบเบเบฒเบเบฐเบฅเบฒเบเปเบเบปเปเบฒเปเบเบปเปเบฒเปเบเปเบเบกเบฑเบ. เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเปเบเปเบเบฐเบเบดเบเบฑเบเบซเบเปเบฒเบเบตเปเบเบตเปเปเบเบฒเบฐเบงเปเบฒเบเปเบญเบเบเปเบญเบเบเบฒเบเบฎเบฑเบเบชเบฒเบฅเบฐเบซเบฑเบเบเบปเบงเบขเปเบฒเบเบเปเบฒเบเบเบฒเบ. เบเบดเปเบเปเบเบเบงเปเบฒเบเบฑเปเบ, เปเบเปเบเบเบเบฒเบ CUDA, เบเบฒเบเบเบฑเบเบชเบฑเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบกเบฑเบเบเบฐเปเบฎเบฑเบเบขเบนเปเปเบเบฅเบฐเบซเบฑเบเปเบเบปเปเบฒเบเบฒเบเปเบเบเบเบตเปเบเบฐเบขเบนเปเปเบ CUDA kernel.
เบเบปเบเบเบฝเบ
เบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเปเบเปเบเบเบฑเบ
เปเบ snippet เบฅเบฐเบซเบฑเบเบเบฑเบเบเบฑเบเบเปเบฒเบเปเบเบดเบ gpu_hashtable_insert()
, _lookup()
ะธ _delete()
เบเบฐเบกเบงเบเบเบปเบเบเบนเปเบเบต-เบเปเบฒเปเบเบทเปเบญเบฅเบฐเบญเบฑเบ. เปเบฅเบฐเบเปเปเบฒเบเบงเปเบฒ gpu_hashtable_insert()
, _lookup()
ะธ _delete()
เบเบฐเบกเบงเบเบเบปเบ array เบเบญเบเบเบนเปเบเบฐเบซเบเบฒเบ, เปเบเปเบฅเบฐเบเบนเปเปเบเบเบฐเบเบนเปเบเบฐเบเบดเบเบฑเบ 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);
}
}
เบเบฒเบเบฐเบฅเบฒเบ hash เบเบปเบเบเบฒเบเบเปเป lock เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบฒเบเปเบเบ, เบเบญเบเบซเบฒ, เปเบฅเบฐเบเบฒเบเบฅเบถเบเบเปเบญเบกเบเบฑเบ. เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเบนเปเบเบต-เบเปเบฒเบชเบฐเปเบซเบกเบตเบขเบนเปเปเบเบซเบเบถเปเบเปเบเบชเบตเปเบฅเบฑเบเปเบฅเบฐเบเบฐเปเบเบเปเปเบเปเบฒเบเบญเบญเบ, เบเบฒเบเบฐเบฅเบฒเบเบฎเบฑเบเบเบฐเบเบฑเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฐเปเบเบเบเปเบฒเบเปเบเบทเบเบเปเบฒเปเบเปเบเปเบญเบกเบเบฑเบ.
เปเบเบงเปเบเบเปเปเบเบฒเบก, เบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเบฐเบกเบงเบเบเบปเบเบเบธเบเบเบฒเบเปเบเบเปเบฅเบฐเบเบฒเบเบฅเบถเบเปเบเบเบเบฐเบซเบเบฒเบ, เปเบฅเบฐเบเปเบฒ input array เบเบญเบเบเบนเปเบกเบตเบฅเบฐเบซเบฑเบเบเบตเปเบเปเปเบฒเบเบฑเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเปเบชเบฒเบกเบฒเบเบเบฒเบเปเบเบปเบฒเปเบเปเบงเปเบฒเบเบนเปเปเบเบเบฐ "เบเบฐเบเบฐ" - เบเบฐเบเบทเบเบเบฝเบเปเบงเปเปเบเบเบฒเบเบฐเบฅเบฒเบ hash. เบชเบปเบกเบกเบธเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบญเบตเปเบเบงเปเบฒเบฅเบฐเบซเบฑเบเปเบเบเบเบตเปเบกเบต array input เบเบญเบเบเบนเป A/0 B/1 A/2 C/3 A/4
. เปเบกเบทเปเบญเบฅเบฐเบซเบฑเบเบชเปเบฒเปเบฅเบฑเบ, เบเบนเป B/1
ะธ C/3
เบกเบตเบเบฒเบเบฎเบฑเบเบเบฐเบเบฑเบเบงเปเบฒเบกเบตเบขเบนเปเปเบเบเบฒเบเบฐเบฅเบฒเบ, เปเบเปเปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบเบเบนเปเปเบเบเบฐเบเบฒเบเบปเบเบขเบนเปเปเบเบกเบฑเบ A/0
, A/2
เบซเบผเบท A/4
. เบเบตเปเบญเบฒเบเบเบฐเปเบเบฑเบเบซเบผเบทเบญเบฒเบเบเบฐเบเปเปเปเบเบฑเบเบเบฑเบเบซเบฒ - เบกเบฑเบเบเบฑเบเบซเบกเบปเบเปเบกเปเบเบเบถเปเบเบเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ. เปเบเบปเปเบฒเบญเบฒเบเบเบฐเบฎเบนเปเบฅเปเบงเบเปเปเบฒเบงเปเบฒเบเปเปเบกเบตเบเบฐเปเบเบเบตเปเบเปเปเบฒเบเบฑเบเบขเบนเปเปเบ array เบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบ, เบซเบผเบทเปเบเบปเปเบฒเบญเบฒเบเบเบฐเบเปเปเบชเบปเบเปเบเบงเปเบฒเบเปเบฒเปเบเบเบทเบเบเบฝเบเบซเบผเปเบฒเบชเบธเบ.
เบเปเบฒเบเบตเปเปเบกเปเบเบเบฑเบเบซเบฒเบชเปเบฒเบฅเบฑเบเบเปเบฒเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเบเบเบนเปเบเบตเปเบเปเปเบฒเบเบฑเบเปเบเบปเปเบฒเปเบเปเบเบเบฒเบเปเบเบฅเบฐเบเบปเบ CUDA เบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ. เปเบ CUDA, เบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเปเบเบตเปเปเบญเบตเปเบ kernel เบชเบฐเปเบซเบกเบตเบเบฐเบชเปเบฒเปเบฅเบฑเบเบเปเบญเบเบเบตเปเบเบฐเปเบญเบตเปเบ kernel เบเปเปเปเบ (เบขเปเบฒเบเบซเบเปเบญเบเบเบฒเบเปเบเบซเบเบถเปเบ thread. เปเบ thread เบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ, kernels เบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบเบฐเบซเบเบฒเบ). เปเบเบเบปเบงเบขเปเบฒเบเบเปเบฒเบเปเบเบดเบ, เบเปเบฒเบเปเบฒเบเปเบเบซเบฒเบซเบเบถเปเบ kernel เบเบฑเบ A/0 B/1 A/2 C/3
, เปเบฅเบฐเบญเบทเปเบเปเบเบตเปเบกเบต A/4
, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบตเปเบชเปเบฒเบเบฑเบ A
เบเบฐเปเบเปเบฎเบฑเบเบกเบนเบเบเปเบฒ 4
.
เบเบญเบเบเบตเปเปเบซเปเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบซเบเปเบฒเบเบตเปเบเบงเบ lookup()
ะธ delete()
เปเบเปเบเบปเบงเบเบตเปเปเบเบเบเบณเบกเบฐเบเบฒ เบซเบผเบทเบเบปเบงเบเบตเปเบเบฒเบเบเบฑเบเบเบงเบเปเบเบซเบฒ array เบเบญเบเบเบนเปเปเบเบเบฒเบเบฐเบฅเบฒเบ hash.
เบเบนเปเบชเบฑเบเบฅเบงเบกเบญเบฒเบเบเบฐเปเบฅเบทเบญเบเบเบตเปเบเบฐเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบฒเบเบญเปเบฒเบเปเบฅเบฐเบเบฒเบเบเบฝเบเปเบชเปเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบปเปเบงเปเบฅเบเบซเบผเบทเปเบเปเบเบเบฑเบ ... เบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบซเบผเบปเปเบฒเบเบตเปเบชเบฒเบกเบฒเบเบเบทเบเบเบดเบเบเบฒเบเปเบเปเบเบฒเบเปเบเบเปเบเปเบเปเบฒเบชเปเบฒเบเบฑเบ.
volatile
: ... เบเบฒเบเบญเปเบฒเบเบญเบดเบเปเบเปเบเบฑเบเบเบปเบงเปเบเบเบตเปเบเบทเบเบฅเบงเบเบฅเบงเบกเปเบเบปเปเบฒเปเบเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเปเบเปเบเบดเบเบเบตเปเบญเปเบฒเบเบซเบผเบทเบเบฝเบเบเปเบฒเปเบเบฐเบเปเบฒ.
เบเบฒเบเบเบดเบเบฒเบฅเบฐเบเบฒเบเบงเบฒเบกเบเบทเบเบเปเบญเบเบเปเปเบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ volatile
. เบเปเบฒเบเบฐเบเบนเปเบเบฐเบเบดเบเบฑเบเปเบเปเบเปเบฒเบเบฒเบเบเบฒเบเบเบงเบฒเบกเบเปเบฒเบเบฒเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบตเปเบญเปเบฒเบเบเปเบญเบเบซเบเปเบฒเบเบฑเปเบ, เบกเบฑเบเบเบฐเปเบเปเบเปเปเบกเบนเบเบฅเปเบฒเบชเบฐเปเบซเบกเปเบฅเบฑเบเบเปเบญเบ. เปเบเปเบขเปเบฒเบเปเบเบเปเปเบเบฒเบก, เบเบตเปเปเบกเปเบเบเปเปเบกเบนเบเบเบฒเบเบชเบฐเบเบฒเบเบฐเบเบตเปเบเบทเบเบเปเบญเบเบเบญเบเบเบฒเบเบฐเบฅเบฒเบ hash เปเบเบเปเบงเบเปเบงเบฅเบฒเบเบตเปเปเบเปเบเบญเบเบเบญเบเบเบฒเบเปเบเบซเบฒเปเบกเบฑเบ. เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบเปเบเปเปเบกเบนเบเบซเบผเปเบฒเบชเบธเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบเบฑเบเบชเบฐเบเบต volatile
, เปเบเปเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฐเบซเบผเบธเบเบฅเบปเบเปเบฅเบฑเบเบเปเบญเบ: เบญเบตเบเบเบฒเบกเบเบฒเบเบเบปเบเบชเบญเบเบเบญเบเบเปเบญเบ, เปเบกเบทเปเบญเบฅเบถเบ 32 เบฅเปเบฒเบเบญเบปเบเบเบฐเบเบญเบ, เบเบงเบฒเบกเปเบงเบซเบผเบธเบเบฅเบปเบเบเบฒเบ 500 เบฅเปเบฒเบเบเบฒเบเบฅเบถเบ / เบงเบดเบเบฒเบเบตเปเบเบฑเบ 450 เบฅเปเบฒเบเบฅเบถเบ / เบงเบดเบเบฒเบเบต.
เบเบฐเบฅเบดเบเบเบฐเบเบฑเบ
เปเบเบเบฒเบเบเบปเบเบชเบญเบเบเบฒเบเปเบชเป 64 เบฅเปเบฒเบเบญเบปเบเบเบฐเบเบญเบเปเบฅเบฐเบเบฒเบเบฅเบปเบ 32 เบฅเปเบฒเบเบเบญเบเบเบงเบเปเบเบปเบฒ, เบเบฒเบเปเบเปเบเบเบฑเบเบฅเบฐเบซเบงเปเบฒเบ std::unordered_map
เปเบฅเบฐเปเบเบทเบญเบเบเปเปเบกเบตเบเบฒเบเบฐเบฅเบฒเบ hash เบชเปเบฒเบฅเบฑเบ GPU:
std::unordered_map
เปเบเปเปเบงเบฅเบฒ 70 ms เปเบชเปเปเบฅเบฐเปเบญเบปเบฒเบญเบปเบเบเบฐเบเบญเบเบญเบญเบเปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบญเบเปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒ unordered_map
(เบเบฒเบเบเปเบฒเบเบฑเบเบซเบผเบฒเบเบฅเปเบฒเบเบญเบปเบเบเบฐเบเบญเบเปเบเปเปเบงเบฅเบฒเบซเบผเบฒเบ, เปเบเบฒเบฐเบงเปเบฒเบเบฒเบเปเบ unordered_map
เบเบฒเบเบเบฑเบเบชเบฑเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบซเบผเบฒเบเปเบกเปเบเปเบฎเบฑเบ). เปเบงเบปเปเบฒเบเปเบงเบเบเบงเบฒเบกเบเบทเปเบชเบฑเบ, std:unordered_map
เบเปเปเบเปเบฒเบเบฑเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบซเบกเบปเบ. เบกเบฑเบเปเบเบฑเบเบเบฐเบเบนเป CPU เบเบฝเบงเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ key-value เบเบญเบเบเบฐเบซเบเบฒเบเปเบเบเปเปเบเบฒเบก, เบเบฐเบเบดเบเบฑเบเปเบเปเบเบตเปเบเบญเบฑเบเบเบฒเบเบฒเบเบเปเบฒเปเบเปเบชเบนเบ, เปเบฅเบฐเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบตเปเบซเบกเบฑเปเบเบเบปเบเบซเบผเบฑเบเบเบฒเบเบเบฒเบเบฅเบถเบเบซเบผเบฒเบ.
เปเบฅเบเบฐเปเบงเบฅเบฒเบเบญเบเบเบฒเบเบฐเบฅเบฒเบ hash เบชเปเบฒเบฅเบฑเบ GPU เปเบฅเบฐเบเบฒเบเบชเบทเปเบชเบฒเบเบฅเบฐเบซเบงเปเบฒเบเปเบเบเบเบฒเบเปเบกเปเบ 984 ms. เบเบตเปเบเบฐเบเบญเบเบกเบตเปเบงเบฅเบฒเบเบตเปเปเบเปเปเบเบเบฒเบเบเบฑเบเบงเบฒเบเบเบฒเบเบฐเบฅเบฒเบเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเปเบฅเบฐเบเบฒเบเบฅเบถเบเบกเบฑเบ (เบเบฒเบเบเบฑเบเบชเบฑเบ 1 GB เบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบซเบเบถเปเบเบเบฑเปเบ, เปเบเบดเปเบเปเบเปเปเบงเบฅเบฒเบเบฒเบเปเบงเบฅเบฒเปเบ CUDA), เบเบฒเบเปเบชเปเปเบฅเบฐเบฅเบถเบเบญเบปเบเบเบฐเบเบญเบ, เปเบฅเบฐเปเบฎเบฑเบเบเปเปเบฒเบญเบตเบ. เบชเปเบฒโเปเบเบปเบฒโเบเบฑเบโเบซเบกเบปเบโเปเบโเปเบฅเบฐโเบเบฒเบโเบซเบเปเบงเบโเบเบงเบฒเบกโเบเปเบฒโเบเบฑเบโเบงเบดโเบเบตโเปเบญโเปเบเปโเบเบทเบโเปเบญเบปเบฒโเปเบเบปเปเบฒโเปเบโเปเบโเบเบฑเบโเบเบตโ.
เบเบฒเบเบฐเบฅเบฒเบ hash เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบเปเบเปเปเบงเบฅเบฒ 271 ms เปเบเบทเปเบญเปเบฎเบฑเบเปเบซเปเบชเปเบฒเปเบฅเบฑเบ. เบเบตเปเบเบฐเบเบญเบเบกเบตเปเบงเบฅเบฒเบเบตเปเปเบเปเปเบเบเบเบฒเบเปเบชเปเปเบฅเบฐเบฅเบถเบเบญเบปเบเบเบฐเบเบญเบเบเบญเบเบเบฑเบเบงเบตเบเบตเปเบญ, เปเบฅเบฐเบเปเปเปเบเปเบเปเบฒเบเบถเบเปเบเบดเบเปเบงเบฅเบฒเบเบตเปเปเบเปเปเบเบเบฒเบเบเบฑเบเบฅเบญเบเปเบเบปเปเบฒเปเบเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเปเบฅเบฐ iterating เปเบเปเบฅเบเบฐเบเบฒเบเบฐเบฅเบฒเบเบเบปเบเปเบเปเบฎเบฑเบ. เบเปเบฒเบเบฒเบเบฐเบฅเบฒเบ GPU เบกเบตเบเบตเบงเบดเบเบขเบนเปเปเบเบฑเบเปเบงเบฅเบฒเบเบปเบเบเบฒเบ, เบซเบผเบทเบเปเบฒเบเบฒเบเบฐเบฅเบฒเบ hash เปเบกเปเบเบเบฑเบเบเบธเบขเบนเปเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบญเบเบเบฑเบเบงเบตเบเบตเปเบญเบเบฑเบเบซเบกเบปเบ (เบเบปเบงเบขเปเบฒเบ, เปเบเบทเปเบญเบชเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบ hash เบเบตเปเบเบฐเปเบเปเปเบเบเบฅเบฐเบซเบฑเบ GPU เบญเบทเปเบเปเบฅเบฐเบเปเปเปเบกเปเบเปเบเปเบเบเปเบเบตเบเบฒเบ), เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ. เบเบปเบโเบเบฒเบโเบเบปเบโเบชเบญเบโเปเบกเปเบโเบเปเบฝเบงโเบเปเบญเบโ.
เบเบฒเบเบฐเบฅเบฒเบ hash เบชเปเบฒเบฅเบฑเบเบเบฑเบเบงเบตเบเบตเปเบญเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบเบฐเบชเบดเบเบเบดเบเบฒเบเบชเบนเบเปเบเบทเปเบญเบเบเบฒเบเบเบฒเบเบชเบปเปเบเบเปเบฒเบเบชเบนเบเปเบฅเบฐเบเบฒเบเบเบฐเบซเบเบฒเบเบเบฒเบเปเบเบทเปเบญเบเปเบซเบง.
เบเปเปเบเบปเบเบเปเบญเบ
เบชเบฐเบเบฒเบเบฑเบเบเบฐเบเบฐเบเปเบฒเบเบฒเบเบฐเบฅเบฒเบ hash เบกเบตเบเบฑเบเบซเบฒเบเปเบฒเบเบงเบเบซเบเบถเปเบเบเบตเปเบเปเบญเบเบฅเบฐเบงเบฑเบ:
- Linear probing เบเบทเบเบเบฑเบเบเบงเบฒเบเปเบเบเบเบฒเบเปเบเบฑเบเบเบธเปเบก, เปเบเบดเปเบเปเบฎเบฑเบเปเบซเปเบเบฐเปเบเปเบเบเบฒเบเบฐเบฅเบฒเบเบเบทเบเบงเบฒเบเปเบงเปเบซเบเปเบญเบเบเบงเปเบฒเบขเปเบฒเบเบชเบปเบกเบเบนเบ.
- เบเบฐเปเบเบเปเปเปเบเปเบเบทเบเบเบญเบเบญเบญเบเปเบเบเปเบเปเบเบฑเบเบเบฑเบ
delete
เปเบฅเบฐเปเบกเบทเปเบญเปเบงเบฅเบฒเบเปเบฒเบเปเบ, เบเบงเบเปเบเบปเบฒเบเปเปเปเบฎเบฑเบเปเบซเปเปเบเบฐ.
เบเบฑเปเบเบเบฑเปเบ, เบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบเบฒเบเบฐเบฅเบฒเบ hash เบชเบฒเบกเบฒเบเบเปเบญเบเปเบซเบผเบธเบเบฅเบปเบ, เปเบเบเบชเบฐเปเบเบฒเบฐเบเปเบฒเบกเบฑเบเบกเบตเบขเบนเปเปเบเปเบงเบฅเบฒเบเบปเบเบเบฒเบเปเบฅเบฐเบกเบตเบเบฒเบเปเบชเปเปเบฅเบฐเบฅเบปเบเบเปเบฒเบเบงเบเบซเบฅเบฒเบ. เบงเบดเบเบตเบซเบเบถเปเบเปเบเบทเปเบญเบซเบผเบธเบเบเปเบญเบเบเปเปเปเบชเบเปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเบเบฒเบ rehash เปเบเบปเปเบฒเปเบเปเบเบเบฒเบเบฐเบฅเบฒเบเปเบซเบกเปเบเบตเปเบกเบตเบญเบฑเบเบเบฒเบเบฒเบเบเปเบฒเปเบเปเบเปเปเบฒเบเปเบชเบปเบกเบเบงเบเปเบฅเบฐเบเบฒเบเบเบฑเปเบเบเบญเบเบญเบญเบเบเบตเบญเบญเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบ rehashing.
เปเบเบทเปเบญเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบเบฑเบเบซเบฒเบเบตเปเบญเบฐเบเบดเบเบฒเบ, เบเปเบญเบเบเบฐเปเบเปเบฅเบฐเบซเบฑเบเบเปเบฒเบเปเบเบดเบเปเบเบทเปเบญเบชเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบเบเบตเปเบกเบต 128 เบฅเปเบฒเบเบญเบปเบเบเบฐเบเบญเบเปเบฅเบฐ loop เบเปเบฒเบ 4 เบฅเปเบฒเบเบญเบปเบเบเบฐเบเบญเบเบเบปเบเบเปเบงเบฒเบเปเบญเบเปเบเปเบเบทเปเบกเบเปเปเบกเบนเบเปเบชเป 124 เบฅเปเบฒเบเบเปเบญเบ (เบญเบฑเบเบเบฒเบเบฒเบเบเปเบฒเปเบเปเบเบฐเบกเบฒเบ 0,96). เบเบตเปเปเบกเปเบเบเบฒเบเบฐเบฅเบฒเบเบเบปเบเปเบเปเบฎเบฑเบ, เปเบเปเบฅเบฐเปเบเบงเปเบกเปเบ CUDA kernel เปเบเบซเบฒเปเบเบทเปเบญเปเบเบ 4 เบฅเปเบฒเบเบญเบปเบเบเบฐเบเบญเบเปเบซเบกเปเปเบเบปเปเบฒเปเบเปเบเบเบฒเบเบฐเบฅเบฒเบ hash:
เบญเบฑเบเบเบฒเบเบฒเบเบเปเบฒเปเบเป
เปเบฅเบเบฐเปเบงเบฅเบฒเบเบฒเบเปเบเบ 4 เบญเบปเบเบเบฐเบเบญเบ
0,00
11,608448 ms (361,314798 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,03
11,751424 ms (356,918799 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,06
11,942592 ms (351,205515 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,09
12,081120 ms (347,178429 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,12
12,242560 ms (342,600233 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,16
12,396448 ms (338,347235 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,19
12,533024 ms (334,660176 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,22
12,703328 ms (330,173626 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,25
12,884512 ms (325,530693 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,28
13,033472 ms (321,810182 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,31
13,239296 ms (316,807174 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,34
13,392448 ms (313,184256 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,37
13,624000 ms (307,861434 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,41
13,875520 ms (302,280855 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,44
14,126528 ms (296,909756 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,47
14,399328 ms (291,284699 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,50
14,690304 ms (285,515123 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,53
15,039136 ms (278,892623 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,56
15,478656 ms (270,973402 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,59
15,985664 ms (262,379092 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,62
16,668673 ms (251,627968 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,66
17,587200 ms (238,486174 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,69
18,690048 ms (224,413765 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,72
20,278816 ms (206,831789 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,75
22,545408 ms (186,038058 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,78
26,053312 ms (160,989275 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,81
31,895008 ms (131,503463 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,84
42,103294 ms (99,619378 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,87
61,849056 ms (67,815164 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,90
105,695999 ms (39,682713 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
0,94
240,204636 ms (17,461378 เบฅเปเบฒเบเบเบฐเปเบ/เบงเบดเบเบฒเบเบต).
เปเบกเบทเปเบญเบเบฒเบเบเปเบฒเปเบเปเปเบเบตเปเบกเบเบถเปเบ, เบเบฒเบเบเบฐเบเบดเบเบฑเบเบซเบผเบธเบเบฅเบปเบ. เบเบตเปเบเปเปเปเบเบฑเบเบเบตเปเบเปเบญเบเบเบฒเบเปเบเบเปเบฅเบฐเบเบตเบซเบผเบฒเบเบเบตเปเบชเบธเบ. เบเปเบฒเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบชเปเบญเบปเบเบเบฐเบเบญเบเปเบเบปเปเบฒเปเบเปเบเบเบฒเบเบฐเบฅเบฒเบเปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบดเปเบกเบเบงเบเบกเบฑเบ (เบเบปเบงเบขเปเบฒเบ, เปเบกเบทเปเบญเบเบฑเบเบเปเบฒเปเบเบเบทเปเบก), เบเบตเปเบเปเปเปเบกเปเบเบเบฑเบเบซเบฒ. เปเบเปเบเปเบฒเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเปเบเบฒเบเบฐเบฅเบฒเบ hash เบเบตเปเปเบเปเปเบงเบฅเบฒเบเบปเบเบเบฒเบ (เบเบปเบงเบขเปเบฒเบเปเบเบฑเปเบเปเบเบเบฑเบเบเบฒเบเบดเบเบฒเบเบฎเบนเบเบเบฒเบเปเบเบทเปเบญเปเบเบฑเบเบชเปเบงเบเบเบตเปเบเปเปเบซเบงเปเบฒเบเปเบเบปเปเบฒเบเบญเบเบฎเบนเบเบเบฒเบเบเบตเปเบเบนเปเปเบเปเบกเบฑเบเบเบฐเปเบชเปเปเบฅเบฐเบฅเบถเบเบเปเปเบกเบนเบ), เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบถเบเบเบดเบเปเบฒเบเบตเปเบชเบฒเบกเบฒเบเบกเบตเบเบฑเบเบซเบฒ.
เปเบฅเบฐเบงเบฑเบเปเบเบเบเบงเบฒเบกเปเบฅเบดเบเบเบญเบเบเบฒเบเบฐเบฅเบฒเบ hash เบซเบผเบฑเบเบเบฒเบ 64 เบฅเปเบฒเบ inserts (เบเบฑเบเปเบเบเบฒเบเบเปเบฒเปเบเป 0,5). เบเบงเบฒเบกเปเบฅเบดเบเบชเบฐเปเบฅเปเบเปเบกเปเบ 0,4774, เบเบฑเปเบเบเบฑเปเบเบเบฐเปเบเบชเปเบงเบเปเบซเบเปเบขเบนเปเปเบเบเปเบญเบเบเบตเปเบเบตเบเบตเปเบชเบธเบเบเบตเปเปเบเบฑเบเปเบเปเบเปเบซเบผเบทเบซเบเบถเปเบเบเปเบญเบเบซเปเบฒเบเบเบฒเบเบเปเบฒเปเบซเบเปเบเบเบตเปเบเบตเบเบตเปเบชเบธเบ. เบเบงเบฒเบกเปเบฅเบดเบเบเบญเบเบชเบฝเบเบชเบนเบเบชเบธเบเปเบกเปเบ 60.
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบงเบฑเบเปเบเบเบเบงเบฒเบกเปเบฅเบดเบเบเบญเบ probing เปเบเบเบฒเบเบฐเบฅเบฒเบเบเบตเปเบกเบต 124 เบฅเปเบฒเบ inserts (เบเบฑเบเปเบเบเบฒเบเบเปเบฒเปเบเป 0,97). เบเบงเบฒเบกเปเบฅเบดเบเบชเบฐเปเบฅเปเบเปเบกเปเบเปเบฅเปเบง 10,1757, เปเบฅเบฐเบชเบนเบเบชเบธเบ - 6474 (!!). เบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบฒเบเบฎเบฑเบเบฎเบนเปเปเบชเบฑเปเบเบเบทเปเบซเบผเบธเบเบฅเบปเบเบขเปเบฒเบเบซเบผเบงเบเบซเบผเบฒเบเปเบเบญเบฑเบเบเบฒเบเบฒเบเบเปเบฒเปเบเปเบชเบนเบ.
เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบเบตเปเบเบตเบเบตเปเบชเบธเบเบเบตเปเบเบฐเบฎเบฑเบเบชเบฒเบญเบฑเบเบเบฒเบเบฒเบเบเปเบฒเปเบเปเบเบญเบเบเบฒเบเบฐเบฅเบฒเบ hash เบเบตเปเบเปเปเบฒ. เปเบเปเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเปเบเบตเปเบกเบเบฐเบงเบตเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเบเปเบฒเปเบเปเบเปเบฒเบเบเบญเบเบเบฒเบเบเปเบฅเบดเปเบเบเบเบงเบฒเบกเบเบปเบเบเปเบฒ. เปเบเบเบเบต, เปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบฐเปเบ 32-bit เปเบฅเบฐเบเปเบฒ, เบเบตเปเบชเบฒเบกเบฒเบเบชเบปเบกเปเบซเบเบชเบปเบกเบเบปเบ. เบเปเบฒเปเบเบเบปเบงเบขเปเบฒเบเบเปเบฒเบเปเบเบดเบ, เปเบเบเบฒเบเบฐเบฅเบฒเบเบเบตเปเบกเบต 128 เบฅเปเบฒเบเบญเบปเบเบเบฐเบเบญเบ, เบเบงเบเปเบฎเบปเบฒเบฎเบฑเบเบชเบฒเบเบฑเบเปเบเบเบฒเบเบเปเบฒเปเบเป 0,25, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบงเบฒเบเบเปเปเบกเบตเบซเบผเบฒเบเบเปเบงเบฒ 32 เบฅเปเบฒเบเบญเบปเบเบเบฐเบเบญเบเปเบเบเบฑเปเบ, เปเบฅเบฐเบชเปเบงเบเบเบตเปเปเบซเบผเบทเบญ 96 เบฅเปเบฒเบเบเปเบญเบเบเบฐเบชเบนเบเปเบชเบ - 8 bytes เบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเบนเป. , 768 MB เบเบญเบเบเบงเบฒเบกเบเบปเบเบเปเบฒเบเบตเปเบชเบนเบเปเบชเบเปเบ.
เบเบฐเบฅเบธเบเบฒเบฎเบฑเบเบเบฒเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบเบฒเบเบชเบนเบเปเบชเบเบเบงเบฒเบกเบเบปเบเบเปเบฒเบเบญเบเบเบฑเบเบงเบตเบเบตเปเบญ, เปเบเบดเปเบเปเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบตเปเบกเบตเบเบธเบเบเปเบฒเบซเบผเบฒเบเบเปเบงเบฒเบเบงเบฒเบกเบเบปเบเบเปเบฒเบเบญเบเบฅเบฐเบเบปเบ. เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบฑเบเบเบฒเบเบดเบ desktop เบเบตเปเบเบฑเบเบชเบฐเปเบซเบกเบเบตเปเบชเบธเบเบเบตเปเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ CUDA เบกเบตเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบขเปเบฒเบเบซเบเปเบญเบ 4 GB (เปเบเปเบงเบฅเบฒเบเบฝเบ, NVIDIA 2080 Ti เบกเบต 11 GB), เบกเบฑเบเบเบฐเบเปเปเปเบเบฑเบเบเบฒเบเบเบฑเบเบชเบดเบเปเบเบเบตเปเบชเบฐเบซเบฅเบฒเบเบเบตเปเบชเบธเบเบเบตเปเบเบฐเบชเบนเบเปเบชเบเบเปเบฒเบเบงเบเบเบฑเปเบเบเปเบฒเบง.
เบเปเปเบกเบฒเบเปเบญเบเบเบฐเบเบฝเบเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบเบฒเบเบชเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบ hash เบชเปเบฒเบฅเบฑเบเบเบฑเบเบงเบตเบเบตเปเบญเบเบตเปเบเปเปเบกเบตเบเบฑเบเบซเบฒเบเบฑเบเบเบงเบฒเบกเปเบฅเบดเบเบเบญเบ probing, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเบตเปเบเบฐเปเบเปเบเบทเบเปเบซเบกเปเบเบญเบเบเปเบญเบเบเบตเปเบเบทเบเบฅเบปเบ.
เบเบฒเบเบงเบฑเบเปเบเบเบเบงเบฒเบกเปเบฅเบดเบเบเบญเบเบชเบฝเบ
เปเบเบทเปเบญเบเปเบฒเบเบปเบเบเบงเบฒเบกเปเบฅเบดเบ probing เบเบญเบเบเบฐเปเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบชเบฐเบเบฑเบ hash เบเบญเบเบเบต (เบเบฑเบเบเบฐเบเบตเบเบฒเบเบฐเบฅเบฒเบเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเบเบญเบเบกเบฑเบ) เบเบฒเบเบเบฑเบเบเบฐเบเบตเบเบฒเบเบฐเบฅเบฒเบเบเบปเบงเบเบดเบเบเบญเบเบกเบฑเบ:
// get_key_index() -> index of key in hash table
uint32_t probelength = (get_key_index(key) - hash(key)) & (hashtablecapacity-1);
เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒ magic เบเบญเบเบเบปเบงเปเบฅเบเบชเบญเบเบเบญเบเบชเบญเบเบเบตเปเบชเบปเบกเบเบนเบเบเบญเบเบชเบญเบเปเบฅเบฐเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเบงเบฒเบกเบชเบฒเบกเบฒเบเบเบญเบเบเบฒเบเบฐเบฅเบฒเบ hash เปเบกเปเบเบชเบญเบเบเบฑเบเบเบฐเบฅเบฑเบเบเบฒเบเบเบญเบเบชเบญเบ, เบงเบดเบเบตเบเบฒเบเบเบตเปเบเบฐเปเบฎเบฑเบเบงเบฝเบเปเบเบดเบเปเบกเปเบเบงเปเบฒเปเบเปเบงเบฅเบฒเบเบตเปเบเบฑเบเบเบฐเบเบตเบเบตเปเบชเปเบฒเบเบฑเบเปเบเปเบเบทเบเบเปเบฒเบเปเบเบเบธเบเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบเบเบฒเบเบฐเบฅเบฒเบ. เปเบซเปเปเบญเบปเบฒเบฅเบฐเบซเบฑเบเบเบตเป hashed เปเบเบฑเบ 1, เปเบเปเบเบทเบเปเบชเปเปเบเบปเปเบฒเปเบเปเบเบเปเบญเบเบชเบฝเบ 3. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบฐเบฅเบฒเบเบเบตเปเบกเบตเบเบงเบฒเบกเบเบธ 4 เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบ. (3 โ 1) & 3
, เบเบถเปเบเปเบเบปเปเบฒเบเบฑเบ 2 .
เบชเบฐเบซเบฅเบธเบ
เบเปเบฒเบเปเบฒเบเบกเบตเบเปเบฒเบเบฒเบกเบซเบผเบทเบเปเบฒเปเบซเบฑเบ, เบเบฐเบฅเบธเบเบฒเบชเบปเปเบเบญเบตเปเบกเบงเบซเบฒเบเปเบญเบเบเบตเป
เบฅเบฐเบซเบฑเบเบเบตเปเบเบทเบเบเบฝเบเบเบฒเบเปเบเปเบเบฒเบเบเบปเบเปเบเบเบฒเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบตเปเบฅเบตเบ:
เบเบฒเบเบฐเบฅเบฒเบ Hash เบเบตเปเบเปเปเบกเบตเบเบฒเบเบฅเบฑเบญเบเบเบตเปเบเปเบฒเบเบเบฒเบเบเบตเปเบชเบธเบเปเบเปเบฅเบ เบเบฒเบเบฐเบฅเบฒเบ Hash เบเบตเปเบเปเปเบกเบตเบเบฒเบเบฅเบฑเบญเบ
เปเบเบญเบฐเบเบฒเบเบปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบชเบทเบเบเปเปเบเบฝเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบฐเบฅเบฒเบ hash เบชเปเบฒเบฅเบฑเบเบเบฑเบเบงเบตเบเบตเปเบญเปเบฅเบฐเบงเบดเปเบเบฒเบฐเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบเบงเบเปเบเบปเบฒ. เปเบเบเบเบฒเบเบเบญเบเบเปเบญเบเบเบฐเบเบญเบเบกเบตเบฅเบฐเบเบปเบเบเปเบญเบเปเบชเป, Robin Hood hashing, เปเบฅเบฐ cuckoo hashing เปเบเบเปเบเปเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฐเบฅเปเบฒเบกเบฐเบเบนเปเบเปเบเบเบชเปเบฒเบเบเปเปเบกเบนเบเบเบตเปเปเบเบฑเบเบกเบดเบเบเบฑเบ GPU.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com