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
ํ
์ด๋ธ์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ด์ฐฎ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋๋ ์ฌ์ ํ ๋ง์ ์์ ํ๋ณด์์ ๋ํ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฌ๋ ๋ ๋์ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
meow_hash๋ ์ ์ ์ผ๋ก ํ๋์จ์ด ๊ฐ์ AES ๋ช ๋ น์ ์กด์ฌ ์ฌ๋ถ์ ๋ฌ๋ ค ์์ต๋๋ค.
์ฝ๋๊ฐ ๋งค์ฐ ์งง๊ณ ์ํํธ์จ์ด ๋ฐฑ์ ์ฝ๋ ๊ฒฝ๋ก๊ฐ ํ์๋์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์ง์นจ์ด ์์ผ๋ฉด ์ปดํ์ผ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ฒ๋ค๊ฐ ๋ด๊ฐ ์ฝ์ ์ ์๋ ๋ชจ๋ AES ๋ช ๋ น์ ์ง์ ์ ์ธ Intel ๋ด์ฅ์ ์ฌ์ฉํ๋ฏ๋ก ํ๋์จ์ด ๊ธฐ๋ฅ์ ๊ด๊ณ์์ด ์ํคํ ์ฒ ๊ฐ์ ์ด์ํ ์ ์์ต๋๋ค.
๊ทธ๊ฒ์ด ๋ฐ๋์ "๋์" ๊ฒ์ ์๋๋๋ค. ๊ฒฐ๊ตญ, ๊ธด ์ ๋ ฅ์ ๋ํ ๋๊ฐ๋ก ์์ฒญ๋ ์๋๋ฅผ ์ป์ต๋๋ค.
๊ทธ๋ฌ๋ ์์ ์ ์ด๋ฌํ ํน์ ํ๋์จ์ด ๋ช ๋ น ์งํฉ์ ์์กดํ๊ธฐ ๋๋ฌธ์ ์ด์์ฑ์ด ๊ธฐ๋ฅ ๋ชฉ๋ก์์ ์ ์ธ๋๋ค๋ ๊ฒ์ ๋๋ค.
๋ถ์์ฉ์ผ๋ก xxHash ๋ฒค์น๋งํฌ์ ์ฌ์ฉ๋๋ ํ๋ซํผ์์๋ ์คํ๋์ง ์์ต๋๋ค.
์๋ง๋ ์ด๊ฒ์ ๋ฌธ์ํํ๋ ๋ฐ ์๊ฐ์ ํ ์ ํด์ผ ํ ๊ฒ์ ๋๋ค.