เดœเดฟเดชเดฟเดฏเตเดตเดฟเดจเตเดณเตเดณ เดฒเดณเดฟเดคเดฎเดพเดฏ เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ

เดœเดฟเดชเดฟเดฏเตเดตเดฟเดจเตเดณเตเดณ เดฒเดณเดฟเดคเดฎเดพเดฏ เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ
เดžเดพเตป เด…เดคเต Github-เตฝ เดชเต‹เดธเตเดฑเตเดฑเต เดšเต†เดฏเตเดคเต เดชเตเดคเดฟเดฏ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดœเดฟเดชเดฟเดฏเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ.

เดธเต†เด•เตเด•เดจเตเดฑเดฟเตฝ เดฆเดถเดฒเด•เตเดทเด•เตเด•เดฃเด•เตเด•เดฟเดจเต เด‡เตปเดธเต†เตผเดŸเตเดŸเตเด•เตพ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดตเตเดณเตเดณ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดœเดฟเดชเดฟเดฏเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดพเดฃเดฟเดคเต. เดŽเดจเตเดฑเต† NVIDIA GTX 1060 เดฒเดพเดชเตโ€ŒเดŸเต‹เดชเตเดชเดฟเตฝ, เด•เต‹เดกเต เด•เตเดฐเดฎเดฐเดนเดฟเดคเดฎเดพเดฏเดฟ เดœเดจเดฑเต‡เดฑเตเดฑเตเดšเต†เดฏเตโ€Œเดค 64 เดฆเดถเดฒเด•เตเดทเด‚ เด•เต€-เดฎเต‚เดฒเตเดฏเด‚ เดœเต‹เดกเดฟเด•เดณเต† เดเด•เดฆเต‡เดถเด‚ 210 ms-เตฝ เดคเดฟเดฐเตเด•เตเด•เดฏเตเด‚ เดเด•เดฆเต‡เดถเด‚ 32 ms-เตฝ 64 เดฆเดถเดฒเด•เตเดทเด‚ เดœเต‹เดกเดฟเด•เตพ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เด…เดคเดพเดฏเดคเต, เด’เดฐเต เดฒเดพเดชเตโ€ŒเดŸเต‹เดชเตเดชเดฟเดฒเต† เดตเต‡เด—เดค เดเด•เดฆเต‡เดถเด‚ 300 เดฆเดถเดฒเด•เตเดทเด‚ เด‡เตปเดธเต†เตผเดŸเตเดŸเตเด•เตพ/เดธเต†เด•เตเด•เดจเตเดฑเตเด‚ 500 เดฆเดถเดฒเด•เตเดทเด‚ เดกเดฟเดฒเต€เดฑเตเดฑเตเด•เตพ/เดธเต†เด•เตเด•เดจเตเดฑเตเดฎเดพเดฃเต.

เดŽเดšเตเดšเตเดŽเตฝเดŽเดธเตเดŽเตฝ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดœเดฟเดŽเตฝเดŽเดธเตเดŽเตฝ เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เด‡เดคเต‡ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดค เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เดพเดฎเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเดŸเตเดŸเดฟเด• CUDA-เดฏเดฟเดฒเดพเดฃเต เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต. เด’เดฐเต เดตเต€เดกเดฟเดฏเต‹ เด•เดพเตผเดกเดฟเตฝ เด‰เดฏเตผเดจเตเดจ เดชเตเดฐเด•เดŸเดจเด‚ เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเดฐเดตเดงเดฟ เดชเดฐเดฟเดฎเดฟเดคเดฟเด•เดณเตเดฃเตเดŸเต:

  • 32-เดฌเดฟเดฑเตเดฑเต เด•เต€เด•เดณเตเด‚ เด…เดคเต‡ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเด‚ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต.
  • เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเดจเต เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดตเดฒเตเดชเตเดชเดฎเตเดฃเตเดŸเต.
  • เดˆ เดตเดฒเตเดชเตเดชเด‚ เดชเดตเดฑเดฟเดจเต เดฐเดฃเตเดŸเดฟเดจเต เดคเตเดฒเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚.

เด•เต€เด•เตพเด•เตเด•เตเด‚ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพเด•เตเด•เตเดฎเดพเดฏเดฟ, เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดกเดฟเดฒเดฟเดฎเดฟเดฑเตเดฑเตผ เดฎเดพเตผเด•เตเด•เตผ เดฑเดฟเดธเตผเดตเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต (เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เด•เต‹เดกเดฟเตฝ เด‡เดคเต 0xffffffff เด†เดฃเต).

เดชเต‚เดŸเตเดŸเตเด•เดณเดฟเดฒเตเดฒเดพเดคเตเดค เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ

เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เดคเตเดฑเดจเตเดจ เดตเดฟเดฒเดพเดธเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดฒเต€เดจเดฟเดฏเตผ เดชเตเดฐเต‹เดฌเดฟเด‚เด—เต, เด…เดคเดพเดฏเดคเต, เด‡เดคเต เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเดฟเตฝ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดฎเดฟเด•เดšเตเดš เด•เดพเดทเต† เดชเตเดฐเด•เดŸเดจเดฎเตเดณเตเดณเดคเตเดฎเดพเดฏ เด•เต€-เดตเดพเดฒเตเดฏเต‚ เดœเต‹เดกเดฟเด•เดณเตเดŸเต† เด’เดฐเต เดจเดฟเดฐเดฏเดพเดฃเต. เดฒเดฟเด™เตเด•เต เดšเต†เดฏเตโ€Œเดค เดฒเดฟเดธเตเดฑเตเดฑเดฟเตฝ เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเดฑเดฟเดจเดพเดฏเดฟ เดคเดฟเดฐเดฏเตเดจเตเดจเดคเต เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจ เดšเต†เดฏเดฟเดจเดฟเด‚เด—เดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด‚ เด‡เดคเตเดคเดจเตเดจเต† เดชเดฑเดฏเดพเดจเดพเดตเดฟเดฒเตเดฒ. เด’เดฐเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เดŽเดจเตเดจเดคเต เด˜เดŸเด•เด™เตเด™เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เด…เดฑเต‡เดฏเดพเดฃเต KeyValue:

struct KeyValue
{
    uint32_t key;
    uint32_t value;
};

เดŸเต‡เดฌเดฟเดณเดฟเดจเตเดฑเต† เดตเดฒเตเดชเตเดชเด‚ เดฐเดฃเตเดŸเดฟเดจเตเดฑเต† เดถเด•เตเดคเดฟเดฏเดพเดฃเต, เด’เดฐเต เดชเตเดฐเตˆเด‚ เดจเดฎเตเดชเดฑเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ pow2/AND เดฎเดพเดธเตเด•เต เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด’เดฐเต เดตเต‡เด—เดคเตเดคเดฟเดฒเตเดณเตเดณ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด‚ เดฎเดคเดฟเดฏเดพเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ เดฎเต‹เดกเตเดฒเดธเต เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เดตเดณเดฐเต† เดฎเดจเตเดฆเด—เดคเดฟเดฏเดฟเดฒเดพเดฃเต. เดฒเต€เดจเดฟเดฏเตผ เดŸเต‡เดฌเดฟเตพ เดฒเตเด•เตเด•เดชเตเดชเดฟเตฝ เด“เดฐเต‹ เดธเตเดฒเต‹เดŸเตเดŸเดฟเดฒเตเด‚ เดธเตเดฒเต‹เดŸเตเดŸเต เดธเต‚เดšเดฟเด• เดชเตŠเดคเดฟเดžเตเดžเดฟเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดจเดพเตฝ, เดฒเต€เดจเดฟเดฏเตผ เดชเตเดฐเต‹เดฌเดฟเด‚เด—เดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด‡เดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เด“เดฐเต‹ เดธเตเดฒเต‹เดŸเตเดŸเดฟเดฒเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเดšเตเดšเต†เดฒเดตเต เดฎเตŠเดกเตเดฏเต‚เดณเต‹ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต.

เดชเดŸเตเดŸเดฟเด• เด“เดฐเต‹ เดฎเต‚เดฒเด•เดคเตเดคเดฟเดจเตเด‚ เด•เต€เดฏเตเด‚ เดฎเต‚เดฒเตเดฏเดตเตเด‚ เดฎเดพเดคเตเดฐเดฎเต‡ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเตเดณเตเดณเต‚, เด•เต€เดฏเตเดŸเต† เด’เดฐเต เดนเดพเดทเต เด…เดฒเตเดฒ. เดชเดŸเตเดŸเดฟเด• 32-เดฌเดฟเดฑเตเดฑเต เด•เต€เด•เตพ เดฎเดพเดคเตเดฐเดฎเต‡ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเตเดณเตเดณเต‚ เดŽเดจเตเดจเดคเดฟเดจเดพเตฝ, เดนเดพเดทเต เดตเดณเดฐเต† เดตเต‡เด—เดคเตเดคเดฟเตฝ เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเต. เดฎเตเด•เดณเดฟเดฒเต† เด•เต‹เดกเต Murmur3 เดนเดพเดทเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เด•เตเดฑเดšเตเดšเต เดทเดฟเดซเตเดฑเตเดฑเตเด•เดณเตเด‚ XOR-เด•เดณเตเด‚ เด—เตเดฃเดจเด™เตเด™เดณเตเด‚ เดฎเดพเดคเตเดฐเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดฎเต†เดฎเตเดฎเดฑเดฟ เด•เตเดฐเดฎเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเตเดตเดคเดจเตเดคเตเดฐเดฎเดพเดฏ เดฒเต‹เด•เตเด•เดฟเด‚เด—เต เดชเตเดฐเตŠเดŸเตเดŸเด•เตเดทเตป เดŸเต†เด•เตเดจเดฟเด•เตเด•เตเด•เตพ เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เดšเดฟเดฒ เดŽเดดเตเดคเตเดคเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เด…เดคเตเดคเดฐเด‚ เดฎเดฑเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดŸเต† เด•เตเดฐเดฎเด‚ เดคเดŸเดธเตเดธเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดพเดฒเตเด‚, เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เดถเดฐเดฟเดฏเดพเดฏ เดจเดฟเดฒ เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเตเด‚. เดžเด™เตเด™เตพ เด‡เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดšเตเดตเดŸเต† เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚. เด’เดฐเต‡เดธเดฎเดฏเด‚ เด†เดฏเดฟเดฐเด•เตเด•เดฃเด•เตเด•เดฟเดจเต เดคเตเดฐเต†เดกเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจ เดตเต€เดกเดฟเดฏเต‹ เด•เดพเตผเดกเตเด•เดณเดฟเตฝ เดˆ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เดฎเดฟเด•เดšเตเดš เดฐเต€เดคเดฟเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต.

เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเดฒเต† เด•เต€เด•เดณเตเด‚ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเด‚ เดถเต‚เดจเตเดฏเดฎเดพเด•เตเด•เดพเตป เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต.

64-เดฌเดฟเดฑเตเดฑเต เด•เต€เด•เดณเตเด‚ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเด‚ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเตป เด•เต‹เดกเต เดชเดฐเดฟเดทเตเด•เดฐเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚. เด•เต€เด•เตพเด•เตเด•เต เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต เดฑเต€เดกเต, เดฑเตˆเดฑเตเดฑเต, เดคเดพเดฐเดคเดฎเตเดฏเด‚ เด†เตปเดกเต เดธเตเดตเดพเดชเตเดชเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดฎเต‚เดฒเตเดฏเด™เตเด™เตพเด•เตเด•เต เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต เดฑเต€เดกเต เด†เตปเดกเต เดฑเตˆเดฑเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดญเดพเด—เตเดฏเดตเดถเดพเตฝ, CUDA-เดฏเดฟเตฝ, 32-, 64-เดฌเดฟเดฑเตเดฑเต เดฎเต‚เดฒเตเดฏเด™เตเด™เตพเด•เตเด•เตเดณเตเดณ เดฑเต€เดกเต-เดฑเตˆเดฑเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เด…เดต เดธเตเดตเดพเดญเดพเดตเดฟเด•เดฎเดพเดฏเดฟ เดตเดฟเดจเตเดฏเดธเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดฟเดŸเดคเตเดคเต‹เดณเด‚ เด•เดพเดฒเด‚ เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต เด†เดฃเต (เดšเตเดตเดŸเต† เด•เดพเดฃเตเด•). เด‡เดตเดฟเดŸเต†), เด•เต‚เดŸเดพเดคเต† เด†เดงเตเดจเดฟเด• เดตเต€เดกเดฟเดฏเต‹ เด•เดพเตผเดกเตเด•เตพ 64-เดฌเดฟเดฑเตเดฑเต เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต เดคเดพเดฐเดคเดฎเตเดฏเด‚ เด†เตปเดกเต เดŽเด•เตเดธเตเดšเต‡เดžเตเดšเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, 64 เดฌเดฟเดฑเตเดฑเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด™เตเด™เตเดฎเตเดชเต‹เตพ, เดชเตเดฐเด•เดŸเดจเด‚ เดšเต†เดฑเตเดคเดพเดฏเดฟ เด•เตเดฑเดฏเตเด‚.

เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เด…เดตเดธเตเดฅ

เด’เดฐเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเดฒเต† เด“เดฐเต‹ เด•เต€-เดตเดพเดฒเตเดฏเต‚ เดœเต‹เดกเดฟเด•เตเด•เตเด‚ เดจเดพเดฒเต เดธเด‚เดธเตเดฅเดพเดจเด™เตเด™เดณเดฟเตฝ เด’เดจเตเดจเต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚:

  • เดคเดพเด•เตเด•เต‹เดฒเตเด‚ เดฎเต‚เดฒเตเดฏเดตเตเด‚ เดถเต‚เดจเตเดฏเดฎเดพเดฃเต. เดˆ เด…เดตเดธเตเดฅเดฏเดฟเตฝ, เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต.
  • เด•เต€ เดŽเดดเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เดชเด•เตเดทเต‡ เดฎเต‚เดฒเตเดฏเด‚ เด‡เดคเตเดตเดฐเต† เดŽเดดเตเดคเดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ. เดฎเดฑเตเดฑเตŠเดฐเต เดคเตเดฐเต†เดกเต เดจเดฟเดฒเดตเดฟเตฝ เดกเดพเดฑเตเดฑ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เดถเต‚เดจเตเดฏเดฎเดพเดฏเดฟ เดฎเดŸเด™เตเด™เตเดจเตเดจเต. เด‡เดคเต เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฃเต, เดจเดฟเตผเดตเตเดตเดนเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดฎเดฑเตเดฑเตŠเดฐเต เดคเตเดฐเต†เดกเต เด•เตเดฑเดšเตเดšเต เดฎเตเดฎเตเดชเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเดฟเดฐเตเดจเตเดจเต†เด™เตเด•เดฟเตฝ เด‡เดคเตเดคเดจเตเดจเต† เดธเด‚เดญเดตเดฟเด•เตเด•เตเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดžเด™เตเด™เตพ เด’เดฐเต เดธเดฎเดพเดจเตเดคเดฐ เดกเดพเดฑเตเดฑเดพ เด˜เดŸเดจเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเดพเดฃเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต.
  • เด•เต€เดฏเตเด‚ เดฎเต‚เดฒเตเดฏเดตเตเด‚ เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต.
  • เดจเดฟเตผเดตเตเดตเดนเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดฎเดฑเตเดฑเต เดคเตเดฐเต†เดกเตเด•เตพเด•เตเด•เต เดฎเต‚เดฒเตเดฏเด‚ เดฒเดญเตเดฏเดฎเดพเดฃเต, เดชเด•เตเดทเต‡ เด•เต€ เด‡เดคเตเดตเดฐเต† เด‡เดฒเตเดฒ. CUDA เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดฎเต‹เดกเดฒเดฟเดจเต เด…เดฏเดžเตเดž เดฎเต†เดฎเตเดฎเดฑเดฟ เดฎเต‹เดกเตฝ เด‰เดณเตเดณเดคเดฟเดจเดพเตฝ เด‡เดคเต เดธเด‚เดญเดตเดฟเด•เตเด•เดพเด‚. เด‡เดคเต เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฃเต; เดเดคเต เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด‚, เดฎเต‚เดฒเตเดฏเด‚ เด…เด™เตเด™เดจเต†เดฏเดฒเตเดฒเต†เด™เตเด•เดฟเตฝเดชเตเดชเต‹เดฒเตเด‚, เด•เต€ เด‡เดชเตเดชเต‹เดดเตเด‚ เดถเต‚เดจเตเดฏเดฎเดพเดฃเต.

เด’เดฐเต เดชเตเดฐเดงเดพเดจ เดจเตเดฏเต‚เดจเตปเดธเต, เด•เต€ เดธเตเดฒเต‹เดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เดŽเดดเตเดคเดฟเด•เตเด•เดดเดฟเดžเตเดžเดพเตฝ, เด…เดคเต เด‡เดจเดฟ เดจเต€เด™เตเด™เดฟเดฒเตเดฒ - เด•เต€ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟเดฏเดพเดฒเตเด‚, เดžเด™เตเด™เตพ เด‡เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดšเตเดตเดŸเต† เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.

เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เด•เต‹เดกเต เด…เดฏเดžเตเดž เด“เตผเดกเตผ เดฎเต†เดฎเตเดฎเดฑเดฟ เดฎเต‹เดกเดฒเตเด•เดณเดฟเตฝ เดชเต‹เดฒเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเตฝ เดฎเต†เดฎเตเดฎเดฑเดฟ เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดŽเดดเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เด•เตเดฐเดฎเด‚ เด…เดœเตเดžเดพเดคเดฎเดพเดฃเต. เด’เดฐเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเดฒเต† เด‡เตปเดธเต‡เตผเดทเตป, เดฒเตเด•เตเด•เตเด…เดชเตเดชเต, เดกเดฟเดฒเต€เดฑเตเดฑเต เดŽเดจเตเดจเดฟเดต เดจเต‹เด•เตเด•เตเดฎเตเดชเต‹เตพ, เด“เดฐเต‹ เด•เต€-เดตเดพเดฒเตเดฏเต‚ เดœเต‹เดกเดฟเดฏเตเด‚ เดฎเตเด•เดณเดฟเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดš เดจเดพเดฒเต เดธเตเดฑเตเดฑเต‡เดฑเตเดฑเตเด•เดณเดฟเตฝ เด’เดจเตเดจเดฟเดฒเดพเดฃเต†เดจเตเดจเต เด“เตผเดฎเตเดฎเดฟเด•เตเด•เตเด•.

เด’เดฐเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต

เด’เดฐเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเดฒเต‡เด•เตเด•เต เด•เต€-เดตเดพเดฒเตเดฏเต‚ เดœเต‹เดกเดฟเด•เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจ CUDA เดซเด‚เด—เตโ€Œเดทเตป เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

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

เด’เดฐเต เด•เต€ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดšเต‡เตผเดคเตเดค เด•เต€เดฏเตเดŸเต† เดนเดพเดทเดฟเตฝ เดคเตเดŸเด™เตเด™เตเดจเตเดจ เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เด…เดฑเต‡เดฏเดฟเดฒเต‚เดŸเต† เด•เต‹เดกเต เด†เดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. เด…เดฑเต‡เดฏเดฟเดฒเต† เด“เดฐเต‹ เดธเตเดฒเต‹เดŸเตเดŸเตเด‚ เด† เดธเตเดฒเต‹เดŸเตเดŸเดฟเดฒเต† เด•เต€เดฏเต† เดถเต‚เดจเตเดฏเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต เดคเดพเดฐเดคเดฎเตเดฏเด‚ เด†เตปเดกเต เดธเตเดตเดพเดชเตเดชเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดจเดŸเดคเตเดคเตเดจเตเดจเต. เดชเตŠเดฐเตเดคเตเดคเด•เตเด•เต‡เดŸเต เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดพเตฝ, เดšเต‡เตผเดคเตเดค เด•เต€ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเตเดฒเต‹เดŸเตเดŸเดฟเดฒเต† เด•เต€ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด‚, เดคเตเดŸเตผเดจเตเดจเต เดฏเดฅเดพเตผเดคเตเดฅ เดธเตเดฒเต‹เดŸเตเดŸเต เด•เต€ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด‚. เดˆ เด’เดฑเดฟเดœเดฟเดจเตฝ เด•เต€ เดถเต‚เดจเตเดฏเดฎเดพเดฃเต†เด™เตเด•เดฟเตฝ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดšเต‡เตผเดคเตเดค เด•เต€เดฏเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ, เด•เต‹เดกเต เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เด’เดฐเต เดธเตเดฒเต‹เดŸเตเดŸเต เด•เดฃเตเดŸเต†เดคเตเดคเตเด•เดฏเตเด‚ เดธเตเดฒเต‹เดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เดคเดฟเดฐเตเด•เดฟเดฏ เดฎเต‚เดฒเตเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เด’เดฐเต เด•เต‡เตผเดฃเตฝ เด•เต‹เดณเดฟเดฒเดพเดฃเต†เด™เตเด•เดฟเตฝ gpu_hashtable_insert() เด’เดฐเต‡ เด•เต€ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เด˜เดŸเด•เด™เตเด™เตพ เด‰เดฃเตเดŸเต, เดคเตเดŸเตผเดจเตเดจเต เด…เดตเดฏเตเดŸเต† เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด•เต€ เดธเตเดฒเต‹เดŸเตเดŸเดฟเตฝ เดŽเดดเตเดคเดพเด‚. เด‡เดคเต เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฏเดฟ เด•เดฃเด•เตเด•เดพเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต: เด•เต‹เดณเดฟเดจเดฟเดŸเดฏเดฟเตฝ เด’เดฐเต เด•เต€-เดฎเต‚เดฒเตเดฏเด‚ เดŽเดดเตเดคเตเดจเตเดจเดคเต เดตเดฟเดœเดฏเดฟเด•เตเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ เด‡เดตเดฏเต†เดฒเตเดฒเดพเด‚ เดธเดฎเดพเดจเตเดคเดฐเดฎเดพเดฏเดฟ เดจเดŸเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดเดคเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฑเตˆเดฑเตเดฑเดพเดฃเต เด…เดตเดธเดพเดจเดคเตเดคเต‡เดคเต เดŽเดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดชเตเดฐเดตเดšเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ.

เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เดฒเตเด•เตเด•เตเด…เดชเตเดชเต

เด•เต€เด•เตพ เดคเดฟเดฐเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด•เต‹เดกเต:

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

เด’เดฐเต เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด•เต€เดฏเตเดŸเต† เดฎเต‚เดฒเตเดฏเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป, เดžเด™เตเด™เตพ เดคเดฟเดฐเดฏเตเดจเตเดจ เด•เต€เดฏเตเดŸเต† เดนเดพเดทเดฟเตฝ เดจเดฟเดจเตเดจเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจ เด…เดฑเต‡เดฏเดฟเดฒเต‚เดŸเต† เด†เดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. เด“เดฐเต‹ เดธเตเดฒเต‹เดŸเตเดŸเดฟเดฒเตเด‚, เดžเด™เตเด™เตพ เดคเดฟเดฐเดฏเตเดจเตเดจเดคเต เด•เต€เดฏเดพเดฃเต‹ เดŽเดจเตเดจเต เดžเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต, เด…เด™เตเด™เดจเต†เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เด…เดคเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเด‚ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด‚. เด•เต€ เดถเต‚เดจเตเดฏเดฎเดพเดฃเต‹ เดŽเดจเตเดจเตเด‚ เดžเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต, เด…เด™เตเด™เดจเต†เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เดคเดฟเดฐเดฏเตฝ เดจเดฟเตผเดคเตเดคเตเดจเตเดจเต.

เดจเดฎเตเด•เตเด•เต เด•เต€ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด•เต‹เดกเต เด’เดฐเต เดถเต‚เดจเตเดฏเดฎเดพเดฏ เดฎเต‚เดฒเตเดฏเด‚ เดจเตฝเด•เตเดจเตเดจเต.

เดˆ เดธเต†เตผเดšเตเดšเต เด“เดชเตเดชเดฑเต‡เดทเดจเตเด•เดณเต†เดฒเตเดฒเดพเด‚ เด‡เตปเดธเต†เตผเดทเดจเตเด•เดณเดฟเดฒเต‚เดŸเต†เดฏเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฒเดฟเดฒเต‚เดŸเต†เดฏเตเด‚ เด’เดฐเต‡เดธเดฎเดฏเด‚ เดจเดŸเดคเตเดคเดพเด‚. เดชเดŸเตเดŸเดฟเด•เดฏเดฟเดฒเต† เด“เดฐเต‹ เดœเต‹เดกเดฟเด•เตเด•เตเด‚ เด’เดดเตเด•เตเด•เดฟเดจเดพเดฏเดฟ เดฎเตเด•เดณเดฟเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดš เดจเดพเดฒเต เด…เดตเดธเตเดฅเด•เดณเดฟเตฝ เด’เดจเตเดจเต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚.

เด’เดฐเต เดนเดพเดทเต เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเดจเตเดจเต

เด•เต€เด•เตพ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด•เต‹เดกเต:

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(), เด’เดฐเต เด•เต€เดฏเดฟเตฝ เด’เดฐเต เดชเตŠเดฐเตเดคเตเดคเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเดฎเตเดชเต‹เตพ, เด…เดคเต เด…เดคเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเด‚ เดถเต‚เดจเตเดฏเดฎเดพเด•เตเด•เตเดจเตเดจเต.

เดฎเตเด•เดณเดฟเตฝ เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต†, เด’เดฐเต เด•เต€ เด’เดฐเต เดธเตเดฒเต‹เดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เดŽเดดเตเดคเดฟเด•เตเด•เดดเดฟเดžเตเดžเดพเตฝ, เด…เดคเต เด‡เดจเดฟ เดจเต€เด•เตเด•เดฟเดฒเตเดฒ. เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต เด˜เดŸเด•เด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟเดฏเดพเดฒเตเด‚, เด•เต€ เด…เดคเต‡เดชเดŸเดฟ เดจเดฟเดฒเดจเดฟเตฝเด•เตเด•เตเด‚, เด…เดคเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเด‚ เดถเต‚เดจเตเดฏเดฎเดพเด•เตเด‚. เดธเตเดฒเต‹เดŸเตเดŸเต เดฎเต‚เดฒเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ เด’เดฐเต เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต เดฑเตˆเดฑเตเดฑเต เด“เดชเตเดชเดฑเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ เดŽเดจเตเดจเดพเดฃเต เด‡เดคเดฟเดจเตผเดคเตเดฅเด‚, เด•เดพเดฐเดฃเด‚ เดจเดฟเดฒเดตเดฟเดฒเต† เดฎเต‚เดฒเตเดฏเด‚ เดถเต‚เดจเตเดฏเดฎเดพเดฃเต‹ เด…เดฒเตเดฒเดฏเต‹ เดŽเดจเตเดจเดคเต เดชเตเดฐเดถเตเดจเดฎเดฒเตเดฒ - เด…เดคเต เด‡เดชเตเดชเต‹เดดเตเด‚ เดถเต‚เดจเตเดฏเดฎเดพเด•เตเด‚.

เด’เดฐเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เดตเดฒเตเดชเตเดชเด‚ เดฎเดพเดฑเตเดฑเตเดจเตเดจเต

เด’เดฐเต เดตเดฒเดฟเดฏ เดŸเต‡เดฌเดฟเตพ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต เดชเดดเดฏ เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดถเต‚เดจเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดค เด˜เดŸเด•เด™เตเด™เตพ เด…เดคเดฟเตฝ เดšเต‡เตผเดคเตเดคเตเด•เตŠเดฃเตเดŸเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเดจเตเดฑเต† เดตเดฒเตเดชเตเดชเด‚ เดฎเดพเดฑเตเดฑเดพเด‚. เดธเดพเดฎเตเดชเดฟเตพ เด•เต‹เดกเต เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเดšเตเดšเดคเดฟเดจเดพเตฝ เดžเดพเตป เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเดฟเดฒเตเดฒ. เด•เต‚เดŸเดพเดคเต†, CUDA เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเดฟเตฝ, เดฎเต†เดฎเตเดฎเดฑเดฟ เด…เดฒเต‹เด•เตเด•เต‡เดทเตป CUDA เด•เต‡เตผเดฃเดฒเดฟเดจเต‡เด•เตเด•เดพเตพ เดนเต‹เดธเตเดฑเตเดฑเต เด•เต‹เดกเดฟเดฒเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต.

เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เด’เดฐเต เดฒเต‹เด•เตเด•เต-เดซเตเดฐเต€ เดตเต†เดฏเตเดฑเตเดฑเต-เดซเตเดฐเต€ เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เดฒเต‹เด•เตเด•เต-เดชเตเดฐเตŠเดŸเตเดŸเด•เตเดฑเตเดฑเดกเต เดกเดพเดฑเตเดฑ เด˜เดŸเดจ เดŽเด™เตเด™เดจเต† เดชเดฐเดฟเดทเตเด•เดฐเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเต เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดฎเดคเตเดธเดฐเดถเต‡เดทเดฟ

เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เดซเด‚เด—เตโ€Œเดทเตป เด•เต‹เดกเต เดธเตโ€Œเดจเดฟเดชเตเดชเต†เดฑเตเดฑเตเด•เดณเดฟเตฝ gpu_hashtable_insert(), _lookup() ะธ _delete() เด’เดฐเต เดธเดฎเดฏเด‚ เด’เดฐเต เด•เต€-เดฎเต‚เดฒเตเดฏเด‚ เดœเต‹เดŸเดฟ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเด•. เด’เดชเตเดชเด‚ เดคเดพเดดเต†เดฏเตเด‚ gpu_hashtable_insert(), _lookup() ะธ _delete() เดœเต‹เดกเดฟเด•เดณเตเดŸเต† เด’เดฐเต เดจเดฟเดฐ เดธเดฎเดพเดจเตเดคเดฐเดฎเดพเดฏเดฟ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเด•, เด“เดฐเต‹ เดœเต‹เดกเดฟเดฏเตเด‚ เดชเตเดฐเดคเตเดฏเต‡เด• เดœเดฟเดชเดฟเดฏเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดทเตป เดคเตเดฐเต†เดกเดฟเตฝ:

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

เดฒเต‹เด•เตเด•เต-เดฑเต†เดธเดฟเดธเตเดฑเตเดฑเดจเตเดฑเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เด•เตบเด•เดฑเดจเตเดฑเต เด‡เตปเดธเต†เตผเดŸเตเดŸเตเด•เตพ, เดฒเตเด•เตเด•เดชเตเดชเตเด•เตพ, เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฒเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. เด•เต€-เดฎเต‚เดฒเตเดฏเด‚ เดœเต‹เดกเดฟเด•เตพ เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เดจเดพเดฒเต เด…เดตเดธเตเดฅเด•เดณเดฟเตฝ เด’เดจเตเดจเดฟเดฒเดพเดฏเดคเดฟเดจเดพเตฝ เด•เต€เด•เตพ เดšเดฒเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ, เดตเตเดฏเดคเตเดฏเดธเตเดค เดคเดฐเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เด’เดฐเต‡เดธเดฎเดฏเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เดดเตเด‚ เดชเดŸเตเดŸเดฟเด• เดถเดฐเดฟเดฏเดพเดฃเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเต เดจเตฝเด•เตเดจเตเดจเต.

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดžเด™เตเด™เตพ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฒเตเด•เดณเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฒเตเด‚ เดธเดฎเดพเดจเตเดคเดฐเดฎเดพเดฏเดฟ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ, เด•เต‚เดŸเดพเดคเต† เดœเต‹เดกเดฟเด•เดณเตเดŸเต† เด‡เตปเดชเตเดŸเตเดŸเต เด…เดฑเต‡เดฏเดฟเตฝ เดคเดจเดฟเดชเตเดชเด•เตผเดชเตเดชเต เด•เต€เด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดเดคเต เดœเต‹เดกเดฟเด•เดณเดพเดฃเต "เดœเดฏเดฟเด•เตเด•เตเด•" เดŽเดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดชเตเดฐเดตเดšเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ-เด…เดตเดธเดพเดจเด‚ เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดŽเดดเตเดคเดชเตเดชเต†เดŸเตเด‚. เดœเต‹เดกเดฟเด•เดณเตเดŸเต† เด’เดฐเต เด‡เตปเดชเตเดŸเตเดŸเต เด…เดฑเต‡ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เด‡เตปเดธเต‡เตผเดทเตป เด•เต‹เดกเดฟเดจเต† เดตเดฟเดณเดฟเดšเตเดšเตเดตเต†เดจเตเดจเต เดชเดฑเดฏเดพเด‚ A/0 B/1 A/2 C/3 A/4. เด•เต‹เดกเต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเดฎเตเดชเต‹เตพ, เดœเต‹เดกเดฟเด•เตพ B/1 ะธ C/3 เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เด‰เดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเตเดจเตฝเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เด…เดคเต‡ เดธเดฎเดฏเด‚ เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดœเต‹เดกเดฟเด•เตพ เด…เดคเดฟเตฝ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเด‚ A/0, A/2 เด…เดฅเดตเดพ A/4. เด‡เดคเต เด’เดฐเต เดชเตเดฐเดถเตเดจเดฎเดพเด•เดพเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดฒเตเดฒเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚ - เด‡เดคเต†เดฒเตเดฒเดพเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เตปเดชเตเดŸเตเดŸเต เด…เดฑเต‡เดฏเดฟเตฝ เดคเดจเดฟเดชเตเดชเด•เตผเดชเตเดชเต เด•เต€เด•เดณเตŠเดจเตเดจเตเดฎเดฟเดฒเตเดฒเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเตเตปเด•เต‚เดŸเตเดŸเดฟ เด…เดฑเดฟเดฏเดพเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดตเดธเดพเดจเด‚ เดŽเดดเตเดคเดฟเดฏ เดฎเต‚เดฒเตเดฏเด‚ เดจเดฟเด™เตเด™เตพ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเดฟเดฒเตเดฒ.

เด‡เดคเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดชเตเดฐเดถเตเดจเดฎเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดกเตเดฏเต‚เดชเตเดฒเดฟเด•เตเด•เต‡เดฑเตเดฑเต เดœเต‹เดกเดฟเด•เดณเต† เดตเตเดฏเดคเตเดฏเดธเตเดค CUDA เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เดณเตเด•เดณเดพเดฏเดฟ เดตเต‡เตผเดคเดฟเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. CUDA-เดฏเดฟเตฝ, เด•เต‡เตผเดฃเดฒเดฟเดจเต† เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจ เดเดคเตŠเดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดตเตเด‚ เด…เดŸเตเดคเตเดค เด•เต‡เตผเดฃเตฝ เด•เต‹เดณเดฟเดจเต เดฎเตเดฎเตเดชเดพเดฏเดฟ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด‚ (เด•เตเดฑเดžเตเดžเดคเต เด’เดฐเต เดคเตเดฐเต†เดกเดฟเดจเตเดณเตเดณเดฟเดฒเต†เด™เตเด•เดฟเดฒเตเด‚. เดตเตเดฏเดคเตเดฏเดธเตเดค เดคเตเดฐเต†เดกเตเด•เดณเดฟเตฝ, เด•เต‡เตผเดฃเดฒเตเด•เตพ เดธเดฎเดพเดจเตเดคเดฐเดฎเดพเดฏเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต). เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ, เดจเดฟเด™เตเด™เตพ เด’เดฐเต เด•เต‡เตผเดฃเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดตเดฟเดณเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ A/0 B/1 A/2 C/3, เดฎเดฑเตเดฑเตŠเดจเตเดจเต เด•เต‚เดŸเต† A/4, เดชเดฟเดจเตเดจเต† เดคเดพเด•เตเด•เต‹เตฝ A เดฎเต‚เดฒเตเดฏเด‚ เดฒเดญเดฟเด•เตเด•เตเด‚ 4.

เด‡เดจเดฟ เดซเด‚เด—เตโ€Œเดทเดจเตเด•เตพ เดตเต‡เดฃเต‹ เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เดพเด‚ lookup() ะธ delete() เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเดฒเต† เดœเต‹เดกเดฟเด•เดณเตเดŸเต† เด’เดฐเต เดจเดฟเดฐเดฏเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฒเต†เดฏเดฟเตป เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดธเตเดฅเดฟเดฐเดฎเดพเดฏ เดชเต‹เดฏเดฟเดจเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•. CUDA เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป เดชเตเดฐเดธเตเดคเดพเดตเดฟเด•เตเด•เตเดจเตเดจเต:

เด—เตเดฒเต‹เดฌเตฝ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดชเด™เตเด•เดฟเดŸเตเดŸ เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดตเดพเดฏเดจเดฏเตเด‚ เดŽเดดเตเดคเตเดคเตเด‚ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต เดšเต†เดฏเตเดฏเดพเตป เด•เด‚เดชเตˆเดฒเตผ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต‡เด•เตเด•เดพเด‚... เด•เต€เดตเต‡เดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดˆ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเดจเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเด•เตเด•เดพเด‚ volatile: ... เดˆ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดเดคเต เดฑเดซเดฑเตปเดธเตเด‚ เด’เดฐเต เดฏเดฅเดพเตผเดคเตเดฅ เดฎเต†เดฎเตเดฎเดฑเดฟ เดฑเต€เดกเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฑเตˆเดฑเตเดฑเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดธเดฎเดพเดนเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดถเดฐเดฟเดฏเดพเดฏ เดชเดฐเดฟเด—เดฃเดจเด•เตพเด•เตเด•เต เด…เดชเต‡เด•เตเดท เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ volatile. เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดทเตป เดคเตเดฐเต†เดกเต เดฎเตเดฎเตเดชเดคเตเดคเต† เดฑเต€เดกเต เด“เดชเตเดชเดฑเต‡เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เดพเดทเต† เดšเต†เดฏเตโ€Œเดค เดฎเต‚เดฒเตเดฏเดฎเดพเดฃเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เด•เตเดฑเดšเตเดšเต เด•เดพเดฒเดนเดฐเดฃเดชเตเดชเต†เดŸเตเดŸ เดตเดฟเดตเดฐเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด‡เดคเต เด•เต‡เตผเดฃเตฝ เด•เต‹เดณเดฟเดจเตเดฑเต† เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดจเดฟเดฎเดฟเดทเดคเตเดคเดฟเตฝ เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเดจเตเดฑเต† เดถเดฐเดฟเดฏเดพเดฏ เด…เดตเดธเตเดฅเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดตเดฟเดตเดฐเดฎเดพเดฃเต. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดเดฑเตเดฑเดตเตเด‚ เดชเตเดคเดฟเดฏ เดตเดฟเดตเดฐเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเดฎเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเต‚เดšเดฟเด• เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ volatile, เดŽเดจเตเดจเดพเตฝ เดชเตเดฐเด•เดŸเดจเด‚ เดšเต†เดฑเตเดคเดพเดฏเดฟ เด•เตเดฑเดฏเตเด‚: เดŽเดจเตเดฑเต† เดชเดฐเดฟเดถเต‹เดงเดจเด•เตพ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต, 32 เดฆเดถเดฒเด•เตเดทเด‚ เด˜เดŸเด•เด™เตเด™เตพ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดตเต‡เด—เดค 500 เดฆเดถเดฒเด•เตเดทเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฒเตเด•เตพ/เดธเต†เด•เตเด•เตปเดกเดฟเตฝ เดจเดฟเดจเตเดจเต 450 เดฆเดถเดฒเด•เตเดทเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฒเตเด•เตพ/เดธเต†เด•เตเด•เตปเดกเต เด†เดฏเดฟ เด•เตเดฑเดžเตเดžเต.

เด‰เดคเตเดชเดพเดฆเดจเด•เตเดทเดฎเดค

64 เดฆเดถเดฒเด•เตเดทเด‚ เดฎเต‚เดฒเด•เด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด…เดตเดฏเดฟเตฝ 32 เดฆเดถเดฒเด•เตเดทเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดชเดฐเดฟเดถเต‹เดงเดจเดฏเดฟเตฝ, เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดฎเดคเตเดธเดฐเด‚ std::unordered_map เดœเดฟเดชเดฟเดฏเตเดตเดฟเดจเต เดซเดฒเดคเตเดคเดฟเตฝ เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เด‡เดฒเตเดฒ:

เดœเดฟเดชเดฟเดฏเตเดตเดฟเดจเตเดณเตเดณ เดฒเดณเดฟเดคเดฎเดพเดฏ เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ
std::unordered_map 70 ms เดšเต†เดฒเดตเดดเดฟเดšเตเดšเต เดฎเต‚เดฒเด•เด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดคเตเดŸเตผเดจเตเดจเต เด…เดตเดฏเต† เดธเตเดตเดคเดจเตเดคเตเดฐเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต unordered_map (เดฆเดถเดฒเด•เตเดทเด•เตเด•เดฃเด•เตเด•เดฟเดจเต เดฎเต‚เดฒเด•เด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดฐเด•เตเดทเดชเตเดชเต†เดŸเดพเตป เดตเดณเดฐเต†เดฏเดงเดฟเด•เด‚ เดธเดฎเดฏเดฎเต†เดŸเตเด•เตเด•เตเด‚, เด•เดพเดฐเดฃเด‚ เด‰เดณเตเดณเดฟเตฝ unordered_map เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เดฎเต†เดฎเตเดฎเดฑเดฟ เด…เดฒเต‹เด•เตเด•เต‡เดทเดจเตเด•เตพ เดจเดŸเดคเตเดคเตเดจเตเดจเต). เดธเดคเตเดฏเดธเดจเตเดงเดฎเดพเดฏเดฟ เดชเดฑเดžเตเดžเดพเตฝ, std:unordered_map เดคเดฟเด•เดšเตเดšเตเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เตพ. เด‡เดคเต เดจเดฟเตผเดตเตเดตเดนเดฃเดคเตเดคเดฟเดจเตเดฑเต† เด’เดฐเต เดธเดฟเดชเดฟเดฏเต เดคเตเดฐเต†เดกเต เด†เดฃเต, เดเดคเต เดตเดฒเตเดชเตเดชเดคเตเดคเดฟเดฒเตเดฎเตเดณเตเดณ เด•เต€-เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต, เด‰เดฏเตผเดจเตเดจ เด‰เดชเดฏเต‹เด— เดจเดฟเดฐเด•เตเด•เดฟเตฝ เดฎเดฟเด•เดšเตเดš เดชเตเดฐเด•เดŸเดจเด‚ เดจเดŸเดคเตเดคเตเดจเตเดจเต, เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฒเตเด•เตพเด•เตเด•เต เดถเต‡เดทเด‚ เดธเตเดฅเดฟเดฐเดคเดฏเตเดณเตเดณ เดชเตเดฐเด•เดŸเดจเด‚ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต.

GPU-เดจเตเด‚ เด‡เดจเตเดฑเตผ-เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเดคเตเดคเดฟเดจเตเดฎเตเดณเตเดณ เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเดจเตเดฑเต† เดฆเตˆเตผเด˜เตเดฏเด‚ 984 ms เด†เดฏเดฟเดฐเตเดจเตเดจเต. เดŸเต‡เดฌเดฟเตพ เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเดฟเตฝ เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด…เดคเต เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ (เด’เดฐเต เดคเดตเดฃ 1 GB เดฎเต†เดฎเตเดฎเดฑเดฟ เด…เดจเตเดตเดฆเดฟเด•เตเด•เตฝ, CUDA-เดฏเดฟเตฝ เด•เตเดฑเดšเตเดšเต เดธเดฎเดฏเดฎเต†เดŸเตเด•เตเด•เตเด‚), เด˜เดŸเด•เด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเด•เดฏเตเด‚, เด…เดตเดฏเตเด•เตเด•เต เดฎเตเด•เดณเดฟเตฝ เด†เดตเตผเดคเตเดคเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดธเดฎเดฏเด‚ เด‡เดคเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต. เดตเต€เดกเดฟเดฏเต‹ เด•เดพเตผเดกเต เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดชเด•เตผเดชเตเดชเตเด•เดณเตเด‚ เด•เดฃเด•เตเด•เดฟเดฒเต†เดŸเตเด•เตเด•เตเดจเตเดจเต.

เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เดคเดจเตเดจเต† เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดพเตป 271 ms เดŽเดŸเตเดคเตเดคเต. เดตเต€เดกเดฟเดฏเต‹ เด•เดพเตผเดกเต เด˜เดŸเด•เด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดธเดฎเดฏเด‚ เด‡เดคเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดชเด•เตผเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเด‚ เดซเดฒเดฎเดพเดฏเตเดฃเตเดŸเดพเด•เตเดจเตเดจ เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เด†เดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดšเต†เดฒเดตเดดเดฟเดšเตเดš เดธเดฎเดฏเด‚ เด•เดฃเด•เตเด•เดฟเดฒเต†เดŸเตเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เดœเดฟเดชเดฟเดฏเต เดŸเต‡เดฌเดฟเตพ เดฆเต€เตผเด˜เด•เดพเดฒเด‚ เดจเดฟเดฒเดจเดฟเตฝเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต€เดกเดฟเดฏเต‹ เด•เดพเตผเดกเดฟเดจเตเดฑเต† เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเดฟเตฝ เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เดฎเตเดดเตเดตเดจเดพเดฏเตเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฎเดฑเตเดฑเต เดœเดฟเดชเดฟเดฏเต เด•เต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป, เดธเต†เตปเดŸเตเดฐเตฝ เดชเตเดฐเต‹เดธเดธเตผ เด…เดฒเตเดฒ), เดคเตเดŸเตผเดจเตเดจเต เดชเดฐเดฟเดถเต‹เดงเดจ เดซเดฒเด‚ เดชเตเดฐเดธเด•เตเดคเดฎเดพเดฃเต.

เด‰เดฏเตผเดจเตเดจ เดคเตเดฐเต‚เดชเตเดŸเตเดŸเตเด‚ เดธเดœเต€เดตเดฎเดพเดฏ เดธเดฎเดพเดจเตเดคเดฐเดตเตฝเด•เตเด•เดฐเดฃเดตเตเด‚ เด•เดพเดฐเดฃเด‚ เด’เดฐเต เดตเต€เดกเดฟเดฏเต‹ เด•เดพเตผเดกเดฟเดจเตเดณเตเดณ เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เด‰เดฏเตผเดจเตเดจ เดชเตเดฐเด•เดŸเดจเด‚ เดชเตเดฐเด•เดŸเดฎเดพเด•เตเด•เตเดจเตเดจเต.

เด…เดธเต—เด•เดฐเตเดฏเด™เตเด™เตพ

เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเดจเต เด…เดฑเดฟเดžเตเดžเดฟเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸ เดšเดฟเดฒ เดชเตเดฐเดถเตเดจเด™เตเด™เดณเตเดฃเตเดŸเต:

  • เดฒเต€เดจเดฟเดฏเตผ เดชเตเดฐเต‹เดฌเดฟเด‚เด—เต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเด‚เด—เต เดคเดŸเดธเตเดธเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต, เด‡เดคเต เดŸเต‡เดฌเดฟเดณเดฟเดฒเต† เด•เต€เด•เตพ เดชเต‚เตผเดฃเตเดฃเดคเดฏเดฟเตฝ เด•เตเดฑเดตเดพเดฏเดฟ เดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเตป เด•เดพเดฐเดฃเดฎเดพเด•เตเดจเตเดจเต.
  • เดซเด‚เด—เตเดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เต€เด•เตพ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเดฟเดฒเตเดฒ delete เด•เดพเดฒเด•เตเดฐเดฎเต‡เดฃ เด…เดตเตผ เดฎเต‡เดถ เด…เดฒเด™เตเด•เต‹เดฒเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต.

เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เด’เดฐเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเดจเตเดฑเต† เดชเตเดฐเด•เดŸเดจเด‚ เด•เตเดฐเดฎเต‡เดฃ เด•เตเดฑเดฏเตเดจเตเดจเต, เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚ เด…เดคเต เดตเดณเดฐเต†เด•เตเด•เดพเดฒเด‚ เดจเดฟเดฒเดจเดฟเตฝเด•เตเด•เตเด•เดฏเตเด‚ เดจเดฟเดฐเดตเดงเดฟ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฒเตเด•เดณเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฒเตเด•เดณเตเด‚ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ. เดˆ เดชเต‹เดฐเดพเดฏเตเดฎเด•เตพ เดฒเด˜เต‚เด•เดฐเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด’เดฐเต เดฎเดพเตผเด—เตเด—เด‚, เดตเดณเดฐเต† เด•เตเดฑเดžเตเดž เด‰เดชเดฏเต‹เด— เดจเดฟเดฐเด•เตเด•เตเดณเตเดณ เด’เดฐเต เดชเตเดคเดฟเดฏ เดŸเต‡เดฌเดฟเดณเดฟเดฒเต‡เด•เตเด•เต เดฑเต€เดนเดพเดทเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดฑเต€เดนเดพเดทเดฟเด‚เด—เต เดธเดฎเดฏเดคเตเดคเต เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดค เด•เต€เด•เตพ เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด• เดŽเดจเตเดจเดคเดพเดฃเต.

เดตเดฟเดตเดฐเดฟเดšเตเดš เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเดพเตป 128 เดฆเดถเดฒเด•เตเดทเด‚ เดธเตเดฒเต‹เดŸเตเดŸเตเด•เตพ (เดเด•เดฆเต‡เดถเด‚ 4 เด‰เดชเดฏเต‹เด— เดจเดฟเดฐเด•เตเด•เต) เดชเต‚เดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเดฐเต† 124 เดฆเดถเดฒเด•เตเดทเด‚ เดฎเต‚เดฒเด•เด™เตเด™เดณเตเดณเตเดณ เด’เดฐเต เดŸเต‡เดฌเดฟเตพ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เดพเดจเตเด‚ 0,96 เดฆเดถเดฒเด•เตเดทเด‚ เดฎเต‚เดฒเด•เด™เตเด™เดณเดฟเดฒเต‚เดŸเต† เดฒเต‚เดชเตเดชเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดžเดพเตป เดฎเตเด•เดณเดฟเดฒเต† เด•เต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚. เดซเดฒ เดชเดŸเตเดŸเดฟเด• เด‡เดคเดพ, เด“เดฐเต‹ เดตเดฐเดฟเดฏเตเด‚ เด’เดฐเต เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ 4 เดฆเดถเดฒเด•เตเดทเด‚ เดชเตเดคเดฟเดฏ เด˜เดŸเด•เด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ CUDA เด•เต‡เตผเดฃเตฝ เด•เต‹เดณเดพเดฃเต:

เด‰เดชเดฏเต‹เด— เดจเดฟเดฐเด•เตเด•เต
เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตฝ เดฆเตˆเตผเด˜เตเดฏเด‚ 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 เดฆเดถเดฒเด•เตเดทเด‚ เด•เต€เด•เตพ/เดธเต†เด•เตเด•เตปเดกเต.)

เด‰เดชเดฏเต‹เด—เด‚ เด•เต‚เดŸเตเดจเตเดจเดคเดฟเดจเดจเตเดธเดฐเดฟเดšเตเดšเต เดชเตเดฐเด•เดŸเดจเด‚ เด•เตเดฑเดฏเตเดจเตเดจเต. เดฎเดฟเด•เตเด• เด•เต‡เดธเตเด•เดณเดฟเดฒเตเด‚ เด‡เดคเต เด…เดญเดฟเด•เดพเดฎเตเดฏเดฎเดฒเตเดฒ. เด’เดฐเต เดชเตเดฐเดฏเต‹เด—เด‚ เด’เดฐเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เด˜เดŸเด•เด™เตเด™เตพ เดคเดฟเดฐเตเด•เตเด•เดฏเตเด‚ เดชเดฟเดจเตเดจเต€เดŸเต เด…เดต เด‰เดชเต‡เด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดฐเต เดชเตเดธเตเดคเด•เดคเตเดคเดฟเดฒเต† เดตเดพเด•เตเด•เตเด•เตพ เดŽเดฃเตเดฃเตเดฎเตเดชเต‹เตพ), เด‡เดคเต เด’เดฐเต เดชเตเดฐเดถเตเดจเดฎเดฒเตเดฒ. เดŽเดจเตเดจเดพเตฝ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฆเต€เตผเด˜เด•เดพเดฒ เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดšเดฟเดคเตเดฐเด™เตเด™เดณเตเดŸเต† เดถเต‚เดจเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดค เดญเดพเด—เด™เตเด™เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด’เดฐเต เด—เตเดฐเดพเดซเดฟเด•เตเดธเต เดŽเดกเดฟเดฑเตเดฑเดฑเดฟเตฝ, เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดชเดคเดฟเดตเดพเดฏเดฟ เดตเดฟเดตเดฐเด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต), เดˆ เดธเตเดตเดญเดพเดตเด‚ เดชเตเดฐเดถเตโ€ŒเดจเดฎเตเดฃเตเดŸเดพเด•เตเด•เดพเด‚.

64 เดฆเดถเดฒเด•เตเดทเด‚ เด‡เตปเดธเต†เตผเดŸเตเดŸเตเด•เตพเด•เตเด•เต เดถเต‡เดทเด‚ เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เดชเตเดฐเต‹เดฌเดฟเด‚เด—เต เดกเต†เดชเตเดคเต เด…เดณเดจเตเดจเต (เด‰เดชเดฏเต‹เด— เด˜เดŸเด•เด‚ 0,5). เดถเดฐเดพเดถเดฐเดฟ เด†เดดเด‚ 0,4774 เด†เดฏเดฟเดฐเตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดฎเดฟเด•เตเด• เด•เต€เด•เดณเตเด‚ เด’เดจเตเดจเตเด•เดฟเตฝ เดธเดพเดงเตเดฏเดฎเดพเดฏ เดเดฑเตเดฑเดตเตเด‚ เดฎเดฟเด•เดšเตเดš เดธเตเดฒเต‹เดŸเตเดŸเดฟเตฝ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฟเด•เดšเตเดš เดธเตเดฅเดพเดจเดคเตเดคเต เดจเดฟเดจเตเดจเต เด’เดฐเต เดธเตเดฒเต‹เดŸเตเดŸเต เด…เด•เดฒเต†เดฏเดพเดฏเดฟเดฐเตเดจเตเดจเต. เดถเดฌเตเดฆเดคเตเดคเดฟเดจเตเดฑเต† เดชเดฐเดฎเดพเดตเดงเดฟ เด†เดดเด‚ 60 เด†เดฏเดฟเดฐเตเดจเตเดจเต.

124 เดฆเดถเดฒเด•เตเดทเด‚ เด‡เตปเดธเต‡เตผเดŸเตเดŸเตเด•เดณเตเดณเตเดณ เด’เดฐเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดžเดพเตป เดชเตเดฐเต‹เดฌเดฟเด‚เด—เต เดกเต†เดชเตเดคเต เด…เดณเดจเตเดจเต (เด‰เดชเดฏเต‹เด— เด˜เดŸเด•เด‚ 0,97). เดถเดฐเดพเดถเดฐเดฟ เด†เดดเด‚ เด‡เดคเดฟเดจเด•เด‚ 10,1757 เด†เดฏเดฟเดฐเตเดจเตเดจเต, เดชเดฐเดฎเดพเดตเดงเดฟ - 6474 (!!). เด‰เดฏเตผเดจเตเดจ เด‰เดชเดฏเต‹เด— เดจเดฟเดฐเด•เตเด•เดฟเตฝ เดฒเต€เดจเดฟเดฏเตผ เดธเต†เตปเดธเดฟเด‚เด—เต เดชเตเดฐเด•เดŸเดจเด‚ เด—เดฃเตเดฏเดฎเดพเดฏเดฟ เด•เตเดฑเดฏเตเดจเตเดจเต.

เดˆ เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเดจเตเดฑเต† เด‰เดชเดฏเต‹เด— เดจเดฟเดฐเด•เตเด•เต เด•เตเดฑเดตเดพเดฏเดฟ เดธเต‚เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต. เดŽเดจเตเดจเดพเตฝ เดฎเต†เดฎเตเดฎเดฑเดฟ เด‰เดชเดญเต‹เด—เดคเตเดคเดฟเดจเตเดฑเต† เดšเต†เดฒเดตเดฟเตฝ เดžเด™เตเด™เตพ เดชเตเดฐเด•เดŸเดจเด‚ เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต. เดญเดพเด—เตเดฏเดตเดถเดพเตฝ, 32-เดฌเดฟเดฑเตเดฑเต เด•เต€เด•เดณเตเดŸเต†เดฏเตเด‚ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด‡เดคเต เดจเตเดฏเดพเดฏเต€เด•เดฐเดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต. เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ, 128 เดฆเดถเดฒเด•เตเดทเด‚ เดฎเต‚เดฒเด•เด™เตเด™เดณเตเดณเตเดณ เด’เดฐเต เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ, เดžเด™เตเด™เตพ 0,25 เดจเตเดฑเต† เด‰เดชเดฏเต‹เด— เด˜เดŸเด•เด‚ เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดจเดฎเตเด•เตเด•เต เด…เดคเดฟเตฝ 32 เดฆเดถเดฒเด•เตเดทเดคเตเดคเดฟเดฒเดงเดฟเด•เด‚ เด˜เดŸเด•เด™เตเด™เตพ เดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ, เดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจ 96 เดฆเดถเดฒเด•เตเดทเด‚ เดธเตเดฒเต‹เดŸเตเดŸเตเด•เตพ เดจเดทเตเดŸเดชเตเดชเต†เดŸเตเด‚ - เด“เดฐเต‹ เดœเต‹เดกเดฟเด•เตเด•เตเด‚ 8 เดฌเตˆเดฑเตเดฑเตเด•เตพ , 768 MB เดฎเต†เดฎเตเดฎเดฑเดฟ เดจเดทเตเดŸเดชเตเดชเต†เดŸเตเดŸเต.

เดธเดฟเดธเตเดฑเตเดฑเด‚ เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเต‡เด•เตเด•เดพเตพ เดตเดฟเดฒเดฏเต‡เดฑเดฟเดฏ เด‰เดฑเดตเดฟเดŸเดฎเดพเดฏ เดตเต€เดกเดฟเดฏเต‹ เด•เดพเตผเดกเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดจเดทเตเดŸเดชเตเดชเต†เดŸเตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเดพเดฃเต เดจเดฎเตเดฎเตพ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต. CUDA-เดฏเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตโ€Œเด•เตเด•เตเดจเตเดจ เดฎเดฟเด•เตเด• เด†เดงเตเดจเดฟเด• เดกเต†เดธเตโ€Œเด•เตโ€ŒเดŸเต‹เดชเตเดชเต เด—เตเดฐเดพเดซเดฟเด•เตโ€Œเดธเต เด•เดพเตผเดกเตเด•เตพเด•เตเด•เตเด‚ เด•เตเดฑเดžเตเดžเดคเต 4 GB เดฎเต†เดฎเตเดฎเดฑเดฟ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚ (เดŽเดดเตเดคเตเดฎเตเดชเต‹เตพ, NVIDIA 2080 Ti-เด•เตเด•เต 11 GB เด‰เดฃเตเดŸเต), เด…เดคเตเดคเดฐเด‚ เดคเตเด•เด•เตพ เดจเดทเตโ€ŒเดŸเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเต เด‡เดชเตเดชเต‹เดดเตเด‚ เดฌเตเดฆเตเดงเดฟเดชเดฐเดฎเดพเดฏ เดคเต€เดฐเตเดฎเดพเดจเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฟเดฒเตเดฒ.

เดกเต†เดชเตเดคเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เดณเดฟเดฒเตเดฒเดพเดคเตเดค เดตเต€เดกเดฟเดฏเต‹ เด•เดพเตผเดกเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟเดฏ เดธเตเดฒเต‹เดŸเตเดŸเตเด•เตพ เดตเต€เดฃเตเดŸเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดตเดดเดฟเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เดชเดฟเดจเตเดจเต€เดŸเต เดžเดพเตป เด•เต‚เดŸเตเดคเตฝ เดŽเดดเตเดคเดพเด‚.

เดถเดฌเตเดฆเดคเตเดคเดฟเดจเตเดฑเต† เด†เดดเด‚ เด…เดณเด•เตเด•เตฝ

เด’เดฐเต เด•เต€เดฏเตเดŸเต† เดชเตเดฐเต‹เดฌเดฟเด‚เด—เต เดกเต†เดชเตเดคเต เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เดพเตป, เดจเดฎเตเด•เตเด•เต เด…เดคเดฟเดจเตเดฑเต† เดฏเดฅเดพเตผเดคเตเดฅ เดชเดŸเตเดŸเดฟเด• เดธเต‚เดšเดฟเด•เดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เต€เดฏเตเดŸเต† เดนเดพเดทเต (เด…เดคเดฟเดจเตเดฑเต† เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดชเดŸเตเดŸเดฟเด• เดธเต‚เดšเดฟเด•) เดตเต‡เตผเดคเดฟเดฐเดฟเดšเตเดšเต†เดŸเตเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

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

เดฐเดฃเตเดŸเดฟเดจเตเดฑเต† เดฐเดฃเตเดŸเดฟเดจเตเดฑเต† เดชเต‚เดฐเด• เดฌเตˆเดจเดฑเดฟ เดจเดฎเตเดชเดฑเตเด•เดณเตเดŸเต† เดฎเดพเดจเตเดคเตเดฐเดฟเด•เดคเดฏเตเด‚ เดนเดพเดทเต เดŸเต‡เดฌเดฟเดณเดฟเดจเตเดฑเต† เดถเต‡เดทเดฟ เดฐเดฃเตเดŸเดฟเดจเตเดฑเต† เดถเด•เตเดคเดฟเดฏเดฟเตฝ เดฐเดฃเตเดŸเดพเดฃเต†เดจเตเดจ เดตเดธเตเดคเตเดคเดฏเตเด‚ เด•เดพเดฐเดฃเด‚, เด•เต€ เดธเต‚เดšเดฟเด• เดชเดŸเตเดŸเดฟเด•เดฏเตเดŸเต† เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเตเดฎเตเดชเต‹เดดเตเด‚ เดˆ เดธเดฎเต€เดชเดจเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด‚. เดจเดฎเตเด•เตเด•เต 1 เดฒเต‡เด•เตเด•เต เดนเดพเดทเต เดšเต†เดฏเตเดค เด’เดฐเต เด•เต€ เดŽเดŸเตเด•เตเด•เดพเด‚, เดŽเดจเตเดจเดพเตฝ เดธเตเดฒเต‹เดŸเตเดŸเต 3 เดฒเต‡เด•เตเด•เต เดšเต‡เตผเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดคเตเดŸเตผเดจเตเดจเต เดถเต‡เดทเดฟ 4 เด‰เดณเตเดณ เด’เดฐเต เดŸเต‡เดฌเดฟเดณเดฟเดจเดพเดฏเดฟ เดจเดฎเตเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเด‚ (3 โ€” 1) & 3, เด‡เดคเต 2 เดจเต เดคเตเดฒเตเดฏเดฎเดพเดฃเต.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดšเต‹เดฆเตเดฏเด™เตเด™เดณเต‹ เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเต‹ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดฆเดฏเดตเดพเดฏเดฟ เดŽเดจเดฟเด•เตเด•เต เด‡เดฎเต†เดฏเดฟเตฝ เดšเต†เดฏเตเดฏเตเด• เดŸเตเดตเดฟเดฑเตเดฑเตผ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เดชเตเดคเดฟเดฏ เดตเดฟเดทเดฏเด‚ เดคเตเดฑเด•เตเด•เตเด• เดถเต‡เด–เดฐเด™เตเด™เตพ.

เดฎเดฟเด•เดšเตเดš เดฒเต‡เด–เดจเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฐเดšเต‹เดฆเดจเด‚ เด‰เตพเด•เตเด•เตŠเดฃเตเดŸเดพเดฃเต เดˆ เด•เต‹เดกเต เดŽเดดเตเดคเดฟเดฏเดคเต:

เดญเดพเดตเดฟเดฏเดฟเตฝ, เดตเต€เดกเดฟเดฏเต‹ เด•เดพเตผเดกเตเด•เตพเด•เตเด•เดพเดฏเตเดณเตเดณ เดนเดพเดทเต เดŸเต‡เดฌเดฟเตพ เดจเดฟเตผเดตเตเดตเดนเดฃเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเดพเตป เดŽเดดเตเดคเตเดจเตเดจเดคเต เดคเตเดŸเดฐเตเด•เดฏเตเด‚ เด…เดตเดฏเตเดŸเต† เดชเตเดฐเด•เดŸเดจเด‚ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚. เดŽเดจเตเดฑเต† เดชเตเดฒเดพเดจเตเด•เดณเดฟเตฝ GPU เดซเตเดฐเดฃเตเดŸเตโ€Œเดฒเดฟ เด†เดฏ เดกเดพเดฑเตเดฑ เดธเตเดŸเตเดฐเด•เตเดšเตเดšเดฑเตเด•เดณเดฟเดฒเต† เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต เด“เดชเตเดชเดฑเต‡เดทเดจเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดšเต†เดฏเดฟเดจเดฟเด‚เด—เต, เดฑเต‹เดฌเดฟเตป เดนเตเดกเต เดนเดพเดทเดฟเด‚เด—เต, เด•เตเด•เตเด•เต‚ เดนเดพเดทเดฟเด‚เด—เต เดŽเดจเตเดจเดฟเดต เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•