Xxhash: ๋ฒค์น˜๋งˆํฌ์— Meow ํ•ด์‹œ ์ถ”๊ฐ€

์— ๋งŒ๋“  2018๋…„ 10์›” 21์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Cyan4973/xxHash

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

meow_hash๋Š” ์ „์ ์œผ๋กœ ํ•˜๋“œ์›จ์–ด ๊ฐ€์† AES ๋ช…๋ น์˜ ์กด์žฌ ์—ฌ๋ถ€์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ๊ฐ€ ๋งค์šฐ ์งง๊ณ  ์†Œํ”„ํŠธ์›จ์–ด ๋ฐฑ์—… ์ฝ”๋“œ ๊ฒฝ๋กœ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์ง€์นจ์ด ์—†์œผ๋ฉด ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๋‚ด๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  AES ๋ช…๋ น์€ ์ง์ ‘์ ์ธ Intel ๋‚ด์žฅ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํ•˜๋“œ์›จ์–ด ๊ธฐ๋Šฅ์— ๊ด€๊ณ„์—†์ด ์•„ํ‚คํ…์ฒ˜ ๊ฐ„์— ์ด์‹ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋ฐ˜๋“œ์‹œ "๋‚˜์œ" ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ๊ธด ์ž…๋ ฅ์— ๋Œ€ํ•œ ๋Œ€๊ฐ€๋กœ ์—„์ฒญ๋‚œ ์†๋„๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์š”์ ์€ ์ด๋Ÿฌํ•œ ํŠน์ˆ˜ ํ•˜๋“œ์›จ์–ด ๋ช…๋ น ์ง‘ํ•ฉ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์‹์„ฑ์ด ๊ธฐ๋Šฅ ๋ชฉ๋ก์—์„œ ์ œ์™ธ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ถ€์ž‘์šฉ์œผ๋กœ xxHash ๋ฒค์น˜๋งˆํฌ์— ์‚ฌ์šฉ๋˜๋Š” ํ”Œ๋žซํผ์—์„œ๋„ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์ด๊ฒƒ์„ ๋ฌธ์„œํ™”ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  8 ๋Œ“๊ธ€

meow_hash๋Š” ์ „์ ์œผ๋กœ ํ•˜๋“œ์›จ์–ด ๊ฐ€์† AES ๋ช…๋ น์˜ ์กด์žฌ ์—ฌ๋ถ€์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ๊ฐ€ ๋งค์šฐ ์งง๊ณ  ์†Œํ”„ํŠธ์›จ์–ด ๋ฐฑ์—… ์ฝ”๋“œ ๊ฒฝ๋กœ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์ง€์นจ์ด ์—†์œผ๋ฉด ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๋‚ด๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  AES ๋ช…๋ น์€ ์ง์ ‘์ ์ธ Intel ๋‚ด์žฅ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํ•˜๋“œ์›จ์–ด ๊ธฐ๋Šฅ์— ๊ด€๊ณ„์—†์ด ์•„ํ‚คํ…์ฒ˜ ๊ฐ„์— ์ด์‹ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋ฐ˜๋“œ์‹œ "๋‚˜์œ" ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ๊ธด ์ž…๋ ฅ์— ๋Œ€ํ•œ ๋Œ€๊ฐ€๋กœ ์—„์ฒญ๋‚œ ์†๋„๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์š”์ ์€ ์ด๋Ÿฌํ•œ ํŠน์ˆ˜ ํ•˜๋“œ์›จ์–ด ๋ช…๋ น ์ง‘ํ•ฉ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์‹์„ฑ์ด ๊ธฐ๋Šฅ ๋ชฉ๋ก์—์„œ ์ œ์™ธ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ถ€์ž‘์šฉ์œผ๋กœ xxHash ๋ฒค์น˜๋งˆํฌ์— ์‚ฌ์šฉ๋˜๋Š” ํ”Œ๋žซํผ์—์„œ๋„ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์ด๊ฒƒ์„ ๋ฌธ์„œํ™”ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋” ์ด์ƒ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๊ณต์ง€์‚ฌํ•ญ์„ ์ฝ๊ณ  ๋ช‡ ๋ฒˆ์˜ ์ˆ˜์ •์œผ๋กœ ์•ผ์˜น์ด ๋งŽ์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ARM๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๋ฐœํ‘œํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋Œ€์ถฉ ๋ดค๋Š”๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ๋ฐฑ์—… ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๊ฑฐ๊ธฐ์— ์žˆ๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋†“์ณค์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ๋‹ค๋ฅธ AES ํ•˜๋“œ์›จ์–ด ๋ชจ๋“ˆ์ด ์ •ํ™•ํžˆ ๋™์ผํ•œ ํ•ด์‹œ ๊ฐ’์„ ์ƒ์„ฑํ•˜๋„๋ก ๋ณด์žฅ๋˜๋Š”์ง€ ๋˜๋Š” ๋” ๋งŽ์€ ๊ฒƒ์ด ์žˆ๋Š”์ง€(์˜ˆ: ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์ „ ์„ค์ •๋  ์ˆ˜ ์žˆ๊ณ  ๊ธฐ๊ณ„๋ณ„ ๋ช…๋ น์ด ๊ท ์ผํ•ด์•ผ ํ•˜๋Š” ์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ™์ด) ๋” ์žˆ๋Š”์ง€ ์•„์ง ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ํ•ด์‹œ๋ฅผ ๋กœ์ปฌ์—์„œ ๊ณ„์‚ฐํ•˜๊ณ  ์†Œ๋น„ํ•˜๋Š” ๊ฒƒ์€ ํ•œ ๊ฐ€์ง€์ด๋ฉฐ ์ด ๊ฒฝ์šฐ ์ •ํ™•ํ•œ ํ‘œํ˜„์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ’์„ ์“ฐ๊ณ /์ง๋ ฌํ™”ํ•˜๊ณ  ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ ์ •ํ™•ํžˆ ์ฝ๊ณ /์žฌ์ƒํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ƒํ˜ธ ์šด์šฉ์„ฑ์˜ ๊ทธ ๋ถ€๋ถ„์€ ์กฐ๊ธˆ ๋” ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์‹œ ํ•œ ๋ฒˆ, ์•„๋งˆ๋„ ๊ฑฐ๊ธฐ์— ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์กฐ์‚ฌํ•  ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ œ ์ตœ์‹ ๋ฒ„์ „์ธ 2.0GHz Core i7 Gen 2(Sandy Bridge) ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.

ํด๋ž‘ 7.0.1
ํ”Œ๋ž˜๊ทธ: -O3 -march=native

./xxhsum 0.6.5 (64-bits little endian), by Yann Collet
Sample of 100 KB...
XXH32               :     102400 ->    54765 it/s ( 5348.2 MB/s)
XXH32 unaligned     :     102400 ->    53782 it/s ( 5252.1 MB/s)
XXH64               :     102400 ->   104882 it/s (10242.4 MB/s)
XXH64 unaligned     :     102400 ->   105935 it/s (10345.2 MB/s)
XXH32a              :     102400 ->    78027 it/s ( 7619.8 MB/s)
XXH32a unaligned    :     102400 ->    75624 it/s ( 7385.2 MB/s)
XXH64a              :     102400 ->    77204 it/s ( 7539.5 MB/s)
XXH64a unaligned    :     102400 ->    76209 it/s ( 7442.3 MB/s)
XXH auto            :     102400 ->   105179 it/s (10271.4 MB/s)
XXH auto unaligned  :     102400 ->   101546 it/s ( 9916.6 MB/s)
XXH32 auto          :     102400 ->   107646 it/s (10512.3 MB/s)
XXH32 auto unaligne :     102400 ->   104364 it/s (10191.8 MB/s)
XXH64 auto          :     102400 ->   107443 it/s (10492.4 MB/s)
XXH64 auto unaligne :     102400 ->   105843 it/s (10336.3 MB/s)
meow auto           :     102400 ->   214435 it/s (20940.9 MB/s)
meow auto unaligned :     102400 ->   213289 it/s (20829.0 MB/s)

-march=penryn -mno-sse4.2 -mno-avx ๋ฐ C ๊ตฌํ˜„:

./xxhsum 0.6.5 (64-bits little endian), by Yann Collet
Sample of 100 KB...
XXH32               :     102400 ->    54106 it/s ( 5283.8 MB/s)
XXH32 unaligned     :     102400 ->    53303 it/s ( 5205.4 MB/s)
XXH64               :     102400 ->   107245 it/s (10473.1 MB/s)
XXH64 unaligned     :     102400 ->   107774 it/s (10524.8 MB/s)
XXH32a              :     102400 ->    78394 it/s ( 7655.6 MB/s)
XXH32a unaligned    :     102400 ->    79666 it/s ( 7779.9 MB/s)
XXH64a              :     102400 ->    78907 it/s ( 7705.7 MB/s)
XXH64a unaligned    :     102400 ->    78179 it/s ( 7634.6 MB/s)
XXH auto            :     102400 ->   108878 it/s (10632.6 MB/s)
XXH auto unaligned  :     102400 ->   105124 it/s (10266.0 MB/s)
XXH32 auto          :     102400 ->   105819 it/s (10333.9 MB/s)
XXH32 auto unaligne :     102400 ->   103970 it/s (10153.3 MB/s)
XXH64 auto          :     102400 ->   110021 it/s (10744.2 MB/s)
XXH64 auto unaligne :     102400 ->   107109 it/s (10459.9 MB/s)
meow auto           :     102400 ->    15962 it/s ( 1558.8 MB/s)
meow auto unaligned :     102400 ->    16022 it/s ( 1564.6 MB/s)

์ด๊ฒƒ์€ ๋” ์ด์ƒ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

...aa๊ทธ๋ฆฌ๊ณ  Meow 0.5์—์„œ๋Š” ๋‹ค์‹œ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์—์„œ๋Š” ๋‹ค์‹œ x64 AES ์ฝ”๋“œ ๊ฒฝ๋กœ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. :)

์˜ˆ, Meow Hash๋Š” x86_64 ๋ฐ Nehalem+์— ๊ณ ์œ ํ•˜๊ฑฐ๋‚˜ ๋Š๋ฆฐ af ๋Œ€์ฒด ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•œํŽธ XXH3์—๋Š” ๋ชจ๋“  x86_64(Core 2 ๋ฐ ์นœ๊ตฌ ํฌํ•จ), Pentium 4+(Windows 7+์— ํ•„์š”), ARMv7-A w/NEON(๋Œ€๋ถ€๋ถ„์˜ Android ๋ฐ ์›๋ž˜ iPhone์„ ์ œ์™ธํ•œ ๋ชจ๋“  iOS ์žฅ์น˜์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)์— ๋Œ€ํ•œ ๋ฒกํ„ฐํ™”๋œ ์ฝ”๋“œ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ), ARM64(์ตœ๊ทผ์˜ ๋ชจ๋“  iPhone ๋ฐ Android), VSX POWER9(๋งŽ์€ ์„œ๋ฒ„ ๋ฐ ์Šˆํผ์ปดํ“จํ„ฐ์— ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ ํ‹ˆ์ƒˆ ์‹œ์žฅ์ž„), ๊ทธ๋ฆฌ๊ณ  ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์Šค์นผ๋ผ ๋ฒ„์ „์ด๋ผ๋„ 32๋น„ํŠธ์—์„œ๋„ ์—ฌ์ „ํžˆ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ์Šน์ˆ˜๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋Œ€์ƒ.

๋ช‡ ๋…„ ๋™์•ˆ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์š”์ฒญ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฒค์น˜๋งˆํฌ ๊ฒฐ๊ณผ๋ฅผ ๋” ์ˆ˜์ง‘ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ฐ˜๋ณต์ ์ธ ์š”์ฒญ์ด์—ˆ๋˜ ์ด๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

meowHash ๋Š” ์‹ค์ œ๋กœ ๋งค์šฐ ๋น ๋ฅด๋ฉฐ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ(~100KB)์˜ ๊ฒฝ์šฐ XXH3 ์™€ ๊ฑฐ์˜ ๋™์ผํ•œ ์†๋„๋ฅผ ๊ธฐ๋กํ•˜๋ฏ€๋กœ XXH128 ๋ณด๋‹ค ์•ฝ๊ฐ„ ๋น ๋ฆ…๋‹ˆ๋‹ค.
https://github.com/Cyan4973/xxHash/wiki/Performance-comparison

์ฆ‰, meowHash ๋Š” ์‹ค์ œ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. _์ž‘์€_ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ํฐ ๊ณ ์ • ๋น„์šฉ์ด ํ•„์š”ํ•˜๊ณ  ์ž‘์€ ๋ฐ์ดํ„ฐ์—์„œ๋Š” ์ž˜ ์ƒ๊ฐ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ๋น„๊ตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์šฐ๋ ค์Šค๋Ÿฌ์šด ๋ฐœ์ „์€ "๊ฒฐ๊ณผ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ํ•ด์„ํ•˜๋Š” ๋ฐฉ๋ฒ•"์— ๋ถˆ์ผ์น˜๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ์ •๋ ฌ๋œ ํ…Œ์ด๋ธ”๋กœ ์ถฉ๋ถ„ํ•˜๋ฏ€๋กœ ์ˆœ์œ„๋ฅผ ์ฆ‰์‹œ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ๋” ๋ณต์žกํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.
์ง€๊ธˆ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๊ธธ์ด์™€ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ผ ์†๋„ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. _more_ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์„ํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋…์ž๊ฐ€ ๋ˆˆ์— ๋„๋Š” ์ƒ๋‹จ ํ…Œ์ด๋ธ”์—์„œ ์ฒซ ๋ฒˆ์งธ ์„ฑ๋Šฅ ์ˆ˜์น˜๋ฅผ ์ฐพ์€ ํ›„ ์•„๋ž˜์—์„œ ์ถ”๊ฐ€ ๊ทธ๋ž˜ํ”„๋ฅผ ์ฐพ๋Š” ๊ฒƒ์„ ๊ท€์ฐฎ๊ฒŒ ์—ฌ๊ธฐ๊ณ  ์„ ํƒ์„ ์•ˆ๋‚ดํ•˜๋ฉด์„œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๋†“์น  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ๋ถˆ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๊ทธ๋ž˜ํ”„ ์ž์ฒด์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ •๋ ฌ๋œ ํ…Œ์ด๋ธ”์€ ๋น„๊ต์  ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํ•œ๊ณ„๊ฐ€ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฒฝ์Ÿ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•œ ์ค„๋งŒ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ž˜ํ”„์—์„œ ๊ฐ ๊ฒฝ์Ÿ์ž๋Š” ์„ ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์„ ์ด ๊ฒน์น˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ‰์ƒ์ด ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ๋น ๋ฅด๊ฒŒ, ๋Œ€ํ‘œ๋˜๋Š” ๊ฒฝ์Ÿ์ž์˜ nb๊ฐ€ ํฌ๋ฉด ํฐ ํ˜ผ๋ž€์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์ž‘์€ ๋ฐ์ดํ„ฐ ์„ฑ๋Šฅ์— ๊ทธ๋ž˜ํ”„๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์Ÿ์ž์˜ nb๋ฅผ ์‹ฌ๊ฐํ•˜๊ฒŒ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

"์›์‹œ" ๋ฒค์น˜๋งˆํฌ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๋‹จ๋ฝ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์นญ์ฐฌํ•  ๋งŒํ•˜์ง€๋งŒ ๋ถ€์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์†Œ๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ "์š”์•ฝ"ํ•˜๊ณ  ์ˆœ์œ„ํ‘œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” "์„ฑ๋Šฅ ๋ฒˆํ˜ธ"๋ฅผ ๋งŒ๋“ค์–ด ์†Œ๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ ์žˆ๋Š” ๋…์ž๋Š” ์—ฌ์ „ํžˆ ๋” ์ •ํ™•ํ•œ ์ •๋ณด(๊ทธ๋ž˜ํ”„)๋ฅผ ์‚ดํŽด๋ด์•ผ ํ•˜์ง€๋งŒ, ์ตœ์†Œํ•œ ์ผ๋ถ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ์— ๋” ์ ํ•ฉํ•˜๋‹ค๋Š” ๊ฐœ๋…์€ ๋น„๊ต์  ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„๊ฐ€ ์ œํ•œ๋œ ์ˆ˜์˜ ๊ฒฝ์Ÿ์ž๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์žˆ์œผ๋ฉฐ, ๋…์ž๊ฐ€ ๊ด€์ฐฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์€ ์„ ํƒํ•œ ๋ชฉ๋ก์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(์›์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„).

๊ทธ๋ž˜ํ”„๋ฅผ ๋” ์ž˜ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ค€๋น„๋œ ์Šคํฌ๋ฆฐ์ƒท๋ณด๋‹ค ๋” ์—ญ๋™์ ์ด์–ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๊ฒฝ์Ÿ์ž๋ฅผ ํ‘œ์‹œํ• ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

meow ํ•ด์‹œ๊ฐ€ ๋น„๊ต์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/Cyan4973/xxHash/wiki/Performance-comparison

ํ…Œ์ด๋ธ”์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋งŽ์€ ์ˆ˜์˜ ํ›„๋ณด์ž์— ๋Œ€ํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰