แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ GPU-แƒกแƒ—แƒ•แƒ˜แƒก

แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ GPU-แƒกแƒ—แƒ•แƒ˜แƒก
แƒ’แƒแƒ›แƒแƒ•แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ” Github-แƒ–แƒ” แƒแƒฎแƒแƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ GPU แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜.

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ GPU แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒฌแƒแƒ›แƒจแƒ˜ แƒแƒกแƒแƒ‘แƒ˜แƒ— แƒ›แƒ˜แƒšแƒ˜แƒแƒœแƒ˜ แƒฉแƒแƒœแƒแƒ แƒ—แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ. แƒฉแƒ”แƒ›แƒก NVIDIA GTX 1060 แƒšแƒ”แƒžแƒขแƒแƒžแƒ–แƒ” แƒ™แƒแƒ“แƒ˜ แƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒก 64 แƒ›แƒ˜แƒšแƒ˜แƒแƒœ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ— แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜-แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒฌแƒงแƒ•แƒ˜แƒšแƒก แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 210 ms-แƒจแƒ˜ แƒ“แƒ แƒจแƒšแƒ˜แƒก 32 แƒ›แƒ˜แƒšแƒ˜แƒแƒœ แƒฌแƒงแƒ•แƒ˜แƒšแƒก แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 64 ms-แƒจแƒ˜.

แƒแƒœแƒฃ แƒšแƒ”แƒžแƒขแƒแƒžแƒ–แƒ” แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ” แƒแƒ แƒ˜แƒก แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 300 แƒ›แƒ˜แƒšแƒ˜แƒแƒœแƒ˜ แƒฉแƒแƒกแƒ›แƒ/แƒฌแƒ› แƒ“แƒ 500 แƒ›แƒ˜แƒšแƒ˜แƒแƒœแƒ˜ แƒฌแƒแƒจแƒšแƒ/แƒฌแƒ›.

แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ CUDA-แƒจแƒ˜, แƒ—แƒฃแƒ›แƒชแƒ แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก HLSL แƒแƒœ GLSL-แƒ–แƒ”. แƒ˜แƒ›แƒžแƒšแƒ”แƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒก แƒแƒฅแƒ•แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ แƒ•แƒ˜แƒ“แƒ”แƒ แƒ‘แƒแƒ แƒแƒ—แƒ–แƒ” แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒกแƒแƒงแƒแƒคแƒแƒ“:

  • แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ 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() แƒ“แƒแƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ— แƒฌแƒงแƒ•แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒ˜แƒ•แƒ˜ แƒžแƒแƒ แƒแƒšแƒ”แƒšแƒฃแƒ แƒแƒ“, แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒฌแƒงแƒ•แƒ˜แƒšแƒ˜ แƒชแƒแƒšแƒ™แƒ” 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);
    }
}

แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ˜แƒกแƒแƒ“แƒ›แƒ˜ แƒ›แƒ“แƒ’แƒ แƒแƒ“แƒ˜ แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒฉแƒแƒœแƒแƒ แƒ—แƒ”แƒ‘แƒก, แƒซแƒ˜แƒ”แƒ‘แƒแƒก แƒ“แƒ แƒฌแƒแƒจแƒšแƒแƒก. แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒ แƒแƒ› แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜-แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒฌแƒงแƒ•แƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒแƒ—แƒฎแƒ˜แƒ“แƒแƒœ แƒ”แƒ แƒ—-แƒ”แƒ แƒ— แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒจแƒ˜แƒ แƒ“แƒ แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒ”แƒ‘แƒ˜ แƒแƒ  แƒ›แƒแƒซแƒ แƒแƒแƒ‘แƒ”แƒœ, แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒ’แƒแƒ แƒแƒœแƒขแƒ˜แƒแƒก แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒกแƒ˜แƒกแƒฌแƒแƒ แƒ˜แƒก, แƒ›แƒแƒจแƒ˜แƒœแƒแƒช แƒ™แƒ˜, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒขแƒ˜แƒžแƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“.

แƒ—แƒฃแƒ›แƒชแƒ, แƒ—แƒฃ แƒžแƒแƒ แƒแƒšแƒ”แƒšแƒฃแƒ แƒแƒ“ แƒ“แƒแƒ•แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ— แƒฉแƒแƒกแƒ›แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒฌแƒแƒจแƒšแƒ˜แƒก แƒฏแƒ’แƒฃแƒคแƒก แƒ“แƒ แƒ—แƒฃ แƒฌแƒงแƒ•แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก แƒ›แƒแƒกแƒ˜แƒ•แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ“แƒฃแƒ‘แƒšแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒก, แƒ›แƒแƒจแƒ˜แƒœ แƒ•แƒ”แƒ  แƒ•แƒ˜แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ แƒ›แƒ”แƒขแƒงแƒ•แƒ”แƒšแƒ”แƒ‘แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜ แƒฌแƒงแƒ•แƒ˜แƒšแƒ˜ "แƒ’แƒแƒ˜แƒ›แƒแƒ แƒฏแƒ•แƒ”แƒ‘แƒก" - แƒ‘แƒแƒšแƒ แƒฉแƒแƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜. แƒ•แƒ—แƒฅแƒ•แƒแƒ—, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒซแƒแƒฎแƒ”แƒ— แƒฉแƒแƒกแƒ›แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ แƒฌแƒงแƒ•แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒ— 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 แƒ“แƒ แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒฃแƒšแƒแƒ“ แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ GPU-แƒกแƒ—แƒ•แƒ˜แƒก:

แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ GPU-แƒกแƒ—แƒ•แƒ˜แƒก
std::unordered_map แƒ“แƒแƒฎแƒแƒ แƒฏแƒ 70 ms แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒกแƒ›แƒ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒแƒ—แƒ˜ แƒ’แƒแƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒ”แƒ‘แƒ unordered_map (แƒ›แƒ˜แƒšแƒ˜แƒแƒœแƒแƒ‘แƒ˜แƒ— แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒกแƒ’แƒแƒœ แƒ—แƒแƒ•แƒ˜แƒก แƒ“แƒแƒฆแƒฌแƒ”แƒ•แƒแƒก แƒ“แƒ˜แƒ“แƒ˜ แƒ“แƒ แƒ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— unordered_map แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒฏแƒ”แƒ แƒแƒ“แƒ˜ แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ). แƒ’แƒฃแƒšแƒฌแƒ แƒคแƒ”แƒšแƒแƒ“ แƒ แƒแƒ› แƒ•แƒ—แƒฅแƒ•แƒแƒ—, std:unordered_map แƒกแƒ แƒฃแƒšแƒ˜แƒแƒ“ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ”แƒ‘แƒ˜. แƒ”แƒก แƒแƒ แƒ˜แƒก CPU-แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—แƒ˜ แƒซแƒแƒคแƒ˜, แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ–แƒแƒ›แƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒก, แƒ™แƒแƒ แƒ’แƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ˜แƒ— แƒ“แƒ แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ  แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒฏแƒ”แƒ แƒแƒ“แƒ˜ แƒฌแƒแƒจแƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’.

แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒ GPU-แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒ™แƒแƒ›แƒฃแƒœแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ˜แƒงแƒ 984 ms. แƒ”แƒก แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒฌแƒแƒจแƒšแƒ˜แƒก แƒ“แƒ แƒแƒก แƒ“แƒแƒฎแƒแƒ แƒฏแƒฃแƒš แƒ“แƒ แƒแƒก (1 GB แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—แƒฏแƒ”แƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ, แƒ แƒแƒกแƒแƒช แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ“แƒ แƒ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ CUDA-แƒจแƒ˜), แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒกแƒ›แƒ แƒ“แƒ แƒฌแƒแƒจแƒšแƒ แƒ“แƒ แƒ›แƒแƒ—แƒ–แƒ” แƒ’แƒแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ. แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒฎแƒ”แƒ“แƒ•แƒ”แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒ แƒแƒกแƒšแƒ˜ แƒ•แƒ˜แƒ“แƒ”แƒ แƒ‘แƒแƒ แƒแƒ—แƒ˜แƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜.

แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ 271 ms. แƒ”แƒก แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒ•แƒ˜แƒ“แƒ”แƒ แƒ‘แƒแƒ แƒแƒ—แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒกแƒ›แƒ˜แƒกแƒ แƒ“แƒ แƒฌแƒแƒจแƒšแƒ˜แƒก แƒ“แƒ แƒแƒก แƒ“แƒแƒฎแƒแƒ แƒฏแƒฃแƒš แƒ“แƒ แƒแƒก แƒ“แƒ แƒแƒ  แƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก แƒ“แƒแƒฎแƒแƒ แƒฏแƒฃแƒš แƒ“แƒ แƒแƒก. แƒ—แƒฃ GPU แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒ“แƒ˜แƒ“แƒฎแƒแƒœแƒก แƒชแƒฎแƒแƒ•แƒ แƒแƒ‘แƒก, แƒแƒœ แƒ—แƒฃ แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ•แƒ˜แƒ“แƒ”แƒ แƒ‘แƒแƒ แƒแƒ—แƒ˜แƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒก (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒกแƒฎแƒ•แƒ GPU แƒ™แƒแƒ“แƒ˜ แƒ“แƒ แƒแƒ แƒ แƒชแƒ”แƒœแƒขแƒ แƒแƒšแƒฃแƒ แƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒแƒ แƒ˜), แƒ›แƒแƒจแƒ˜แƒœ แƒขแƒ”แƒกแƒขแƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜แƒ.

แƒ•แƒ˜แƒ“แƒ”แƒ แƒ‘แƒแƒ แƒแƒ—แƒ˜แƒก แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒ›แƒแƒฆแƒแƒš แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ’แƒแƒ›แƒขแƒแƒ แƒฃแƒœแƒแƒ แƒ˜แƒแƒœแƒแƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒžแƒแƒ แƒแƒšแƒ”แƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒ.

แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ”แƒ‘แƒ˜

แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒแƒก แƒแƒฅแƒ•แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒ˜แƒชแƒแƒ“แƒ”แƒ—:

  • แƒฎแƒแƒ–แƒแƒ•แƒแƒœแƒ˜ แƒ–แƒแƒœแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ แƒแƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒก แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒแƒก, แƒ แƒแƒช แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒ›แƒแƒ’แƒ˜แƒ“แƒแƒ–แƒ” แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒงแƒแƒคแƒ˜แƒšแƒแƒ“ แƒ›แƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒก.
  • แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒ”แƒ‘แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— delete แƒ“แƒ แƒ“แƒ แƒแƒ—แƒ แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒคแƒฃแƒญแƒ”แƒ‘แƒ”แƒœ แƒ›แƒแƒ’แƒ˜แƒ“แƒแƒก.

แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ—แƒแƒœแƒ“แƒแƒ—แƒแƒœ แƒ“แƒแƒฅแƒ•แƒ”แƒ˜แƒ—แƒ“แƒ”แƒก, แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ—แƒฃ แƒ˜แƒก แƒ“แƒ˜แƒ“แƒ˜ แƒฎแƒœแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ“แƒ แƒแƒฅแƒ•แƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒฉแƒแƒœแƒแƒ แƒ—แƒ˜ แƒ“แƒ แƒฌแƒแƒจแƒšแƒ. แƒแƒ› แƒ›แƒ˜แƒœแƒฃแƒกแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ แƒ‘แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒ’แƒ–แƒแƒ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒแƒฎแƒแƒš แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒฃแƒขแƒ˜แƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ˜แƒ— แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒคแƒ˜แƒšแƒขแƒ•แƒ แƒ แƒฎแƒ”แƒšแƒแƒฎแƒแƒšแƒ˜ แƒ’แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก.

แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ˜แƒšแƒฃแƒกแƒขแƒ แƒแƒชแƒ˜แƒแƒ“, แƒ›แƒ” แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ แƒ–แƒ”แƒ›แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ™แƒแƒ“แƒก, แƒ แƒแƒ—แƒ แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ 128 แƒ›แƒ˜แƒšแƒ˜แƒแƒœแƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒ— แƒ“แƒ แƒ’แƒแƒ•แƒแƒขแƒแƒ แƒ 4 แƒ›แƒ˜แƒšแƒ˜แƒแƒœแƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜, แƒกแƒแƒœแƒแƒ› แƒแƒ  แƒจแƒ”แƒ•แƒแƒ•แƒกแƒ”แƒ‘ 124 แƒ›แƒ˜แƒšแƒ˜แƒแƒœ แƒกแƒšแƒแƒขแƒก (แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 0,96). แƒแƒฅ แƒแƒ แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜, แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜ แƒแƒ แƒ˜แƒก CUDA แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ 4 แƒ›แƒ˜แƒšแƒ˜แƒแƒœแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒฉแƒแƒกแƒแƒ แƒ—แƒแƒ•แƒแƒ“ แƒ”แƒ แƒ— แƒฐแƒ”แƒจ แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜:

แƒฃแƒขแƒ˜แƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒฅแƒขแƒแƒ แƒ˜
แƒฉแƒแƒกแƒ›แƒ˜แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒ 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-แƒก.

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒฅแƒ•แƒ— แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒ‘แƒ˜ แƒแƒœ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒ˜, แƒ’แƒ—แƒฎแƒแƒ•แƒ— แƒ›แƒแƒ›แƒฌแƒ”แƒ แƒแƒ— แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ–แƒ” Twitter แƒแƒœ แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ˜แƒ— แƒแƒฎแƒแƒšแƒ˜ แƒ—แƒ”แƒ›แƒ แƒกแƒแƒชแƒแƒ•แƒ”แƒ‘แƒ˜.

แƒ”แƒก แƒ™แƒแƒ“แƒ˜ แƒ“แƒแƒ˜แƒฌแƒ”แƒ แƒ แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ—แƒแƒ’แƒแƒœแƒ”แƒ‘แƒ˜แƒ—:

แƒกแƒแƒ›แƒแƒ›แƒแƒ•แƒšแƒแƒ“ แƒ’แƒแƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘ แƒ•แƒ˜แƒ“แƒ”แƒแƒ™แƒแƒ แƒขแƒ”แƒ‘แƒ˜แƒก แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒฌแƒ”แƒ แƒแƒก แƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒก. แƒฉแƒ”แƒ›แƒ˜ แƒ’แƒ”แƒ’แƒ›แƒ”แƒ‘แƒ˜ แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒฏแƒแƒญแƒ•แƒแƒ‘แƒแƒก, แƒ แƒแƒ‘แƒ˜แƒœ แƒฐแƒฃแƒ“แƒ˜แƒก แƒฐแƒ”แƒจแƒ˜แƒœแƒ’แƒก แƒ“แƒ แƒ’แƒฃแƒ’แƒฃแƒšแƒ˜แƒก แƒฐแƒ”แƒจแƒ˜แƒœแƒ’แƒก แƒแƒขแƒแƒ›แƒฃแƒ แƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒจแƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ GPU.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ