์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
AVX์—์„œ ๋„˜์–ด์˜ด
Advanced Vector eXtensions.
1. ๊ฐœ์š”2. ํŠน์ง•
2.1. AVX2.2. AVX22.3. AVX-512
2.3.1. ํ”„๋กœํŒŒ์ผ
2.3.1.1. F, CD, ER, PF2.3.1.2. VL, DQ, BW2.3.1.3. IFMA52, 4FMAPS, VBMI, VBMI22.3.1.4. VPOPCNTDQ2.3.1.5. VNNI, 4VNNIW2.3.1.6. BF162.3.1.7. BITALG2.3.1.8. VP2INTERSECT
3. ์ง€์› ํ”„๋กœ์„ธ์„œ
3.1. AVX3.2. AVX23.3. AVX-512
4. ๊ด€๋ จ ํ•ญ๋ชฉ

1. ๊ฐœ์š”[ํŽธ์ง‘]



2008๋…„ 4์›” ์ธํ…” ๊ฐœ๋ฐœ์ž ํฌ๋Ÿผ์—์„œ ๋ฐœํ‘œ๋œ x86 SIMD ๋ช…๋ น์–ด ์„ธํŠธ๋กœ SSE ๋ช…๋ น์–ด ์„ธํŠธ ์‹œ๋ฆฌ์ฆˆ์˜ ํ›„์†์ž‘์ด๋‹ค.
2011๋…„์— ์ถœ์‹œํ•œ ์ธํ…” ์ƒŒ๋””๋ธŒ๋ฆฟ์ง€ ๋งˆ์ดํฌ๋กœ์•„ํ‚คํ…์ฒ˜์—์„œ ์ตœ์ดˆ๋กœ ์ง€์›ํ•œ๋‹ค.

2. ํŠน์ง•[ํŽธ์ง‘]


MMX์—์„œ SSE๋กœ ๋„˜์–ด๊ฐ€๋˜ ์‹œ๊ธฐ์—์„œ ์ตœ๋Œ€ 4๋ฐฐ์— ์ด๋ฅด๋Š” ์„ฑ๋Šฅ ํ–ฅ์ƒํญ์„ ๊ธฐ๋กํ–ˆ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ, AVX์˜ ์ง€์›์€ ์ตœ๋Œ€ 2.5๋ฐฐ, AVX-512์—์„œ๋Š” 7๋ฐฐ๊ฐ€ ๋„˜๋Š” ํฐ ์„ฑ๋Šฅ ํ–ฅ์ƒํญ์„ ๊ธฐ๋กํ•œ๋‹ค.
์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋Œ€ํ•œ ์ƒ์„ธ ์„ค๋ช…

์ƒŒ๋””๋ธŒ๋ฆฟ์ง€๊ฐ€ ์—„์ฒญ๋‚œ ์ธ๊ธฐ๋ฅผ ๋Œ ์ˆ˜ ์žˆ์—ˆ๋˜ ๋น„๊ฒฐ ์ค‘์˜ ํ•˜๋‚˜์ด๊ธฐ๋„ ํ•˜๋‹ค.
๋ฐ˜๋ฉด์— ํŽœํ‹ฐ์—„, ์…€๋Ÿฌ๋ก  ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” ๋ณดํ†ต ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ƒŒ๋””๋ธŒ๋ฆฟ์ง€ ์„ธ๋Œ€์— ๋“ค์–ด์„œ์•ผ SSE4.x๋ฅผ ์ง€์›ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์ „ํ†ต์ ์œผ๋กœ ์ธํ…”์ด AMD๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ ์šฉ์ค‘์ด๋‹ค.

์ด ๋ช…๋ น์–ด๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด[1] ์—„์ฒญ๋‚œ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ ค ์–ด๋งˆ์–ด๋งˆํ•œ ๋ฐœ์—ด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌดํ„ฑ๋Œ€๊ณ  ๊บผ๋ฒ„๋ฆฌ๋ฉด, ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ์ง€์›ํ•˜๋Š” SW[2]์—์„œ ์„ฑ๋Šฅ์ด ๋ช‡% ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ ์ˆ˜๋ฐฐ๋‚˜ ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์„ฑ๋Šฅ์„ ์œ„ํ•ด ์˜ค๋ฒ„ํด๋Ÿญํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ํ•จ๋ถ€๋กœ ๋ชป ๋ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ด ์•„๋‹ˆ๋ผ ๋‹จ์ˆœํžˆ ๋†’์€ ํด๋Ÿญ๋งŒ์„ ์œ„ํ•˜๋Š” ๋ณ€ํƒœ ์˜ค๋ฒ„ํด๋Ÿญ์ปค๋“ค์€ ๋ฐ˜๋“œ์‹œ ๋„๋Š” ๋ช…๋ น์…‹ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.[3]

์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ์ปค ํŽ˜๋„๋ผ(์šด์˜ ์ฒด์ œ) 32 ๋ถ€ํ„ฐ๋Š” ํ•„์ˆ˜ ์˜ต์…˜์ด๋ผ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ์„ฑ๋Šฅ์„ ๋– ๋‚˜์„œ ํ•จ๋ถ€๋กœ ๋„๋ฉด ์•ˆ๋œ๋‹ค. ๋ถ€ํŒ…์ด ์•ˆ๋  ์ˆ˜ ๋„ ์žˆ๋‹ค.

2.1. AVX[ํŽธ์ง‘]

SIMD ๋ ˆ์ง€์Šคํ„ฐ ํญ์ด 128๋น„ํŠธ์—์„œ 256๋น„ํŠธ๋กœ ์ฆ๊ฐ€๋˜์—ˆ๊ณ , 2 ํ”ผ์—ฐ์‚ฐ์ž ๊ตฌ์กฐ์—์„œ 3 ํ”ผ์—ฐ์‚ฐ์ž ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝ[4]๋˜์—ˆ๋‹ค. ๋‹ค๋งŒ 3 ํ”ผ์—ฐ์‚ฐ์ž ์—ฐ์‚ฐ์€ SIMD ๋ช…๋ น์–ด์— ํ•œ์ •๋˜๊ณ , EAX์™€ ๊ฐ™์€ ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋˜ SIMD ๋ฉ”๋ชจ๋ฆฌ ํ”ผ์—ฐ์‚ฐ์ž์˜ ์ •๋ ฌ ์š”๊ตฌ๋„ ์™„ํ™”๋˜์—ˆ์œผ๋ฉฐ ์ƒˆ๋กญ๊ฒŒ VEX ์ฝ”๋”ฉ ๋ฐฉ์‹์ด ๋„์ž…๋˜์–ด ๋ ˆ๊ฑฐ์‹œ SSE์™€ AVX์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ๋„ ์†๋„ ์ €ํ•˜๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด VEX ์ฝ”๋“œ๊ฐ€ ์ ์šฉ๋œ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์€ ์•ž์— v๋ฅผ ๋ถ™์ด๊ฒŒ ๋˜๊ณ  Mutationํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ์— ๋”ฐ๋ผ AVX-128, AVX-256 ๋“ฑ์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ ์˜ˆ๋ฅผ ๋“ค์–ด XMM๋งŒ์„ ์ง€์›ํ•˜๋Š” movdqa๋Š” vmovdqa๊ฐ€ ๋˜๊ณ  VEX ๋ฒ„์ „์˜ ๊ฒฝ์šฐ XMM๊ณผ YMM์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์†๋„ ์ €ํ•˜๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— SSE ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์ปดํŒŒ์ผ๋งŒ ๋‹ค์‹œ ํ•˜๋ฉด ์†๋„ ์ €ํ•˜ ํŽ˜๋„ํ‹ฐ๊ฐ€ ์—†๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

์ฐธ๊ณ ๋กœ AVX๋Š” GCC 4.6, ์ธํ…” ์ปดํŒŒ์ผ๋Ÿฌ 11.1, Open64 ์ปดํŒŒ์ผ๋Ÿฌ 4.5.1, Free Pascal ์ปดํŒŒ์ผ๋Ÿฌ 2.7.1๋ถ€ํ„ฐ ์ง€์›ํ•˜๋ฉฐ, ์šด์˜์ฒด์ œ๋Š” Windows 7 SP1, ๋ฆฌ๋ˆ…์Šค ์ปค๋„ 2.6.30 ์ด์ƒ๋ถ€ํ„ฐ ์ง€์›ํ•œ๋‹ค.

2.2. AVX2[ํŽธ์ง‘]

์ธํ…” ํ•˜์Šค์›ฐ ๋งˆ์ดํฌ๋กœ์•„ํ‚คํ…์ฒ˜์—์„œ ์ตœ์ดˆ๋กœ ์ง€์›ํ•œ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๋ฒกํ„ฐ ์ •์ˆ˜ SSE์™€ 256๋น„ํŠธ AVX ๋ช…๋ น์–ด๊ฐ€ ํ™•์žฅ๋˜์—ˆ๊ณ , AVX์—์„œ ์ง€์›ํ•˜์ง€ ์•Š์•˜๋˜ ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ์—์„œ์˜ 3 ํ”ผ์—ฐ์‚ฐ์ž ๋ง์…ˆ/๊ณฑ์…ˆ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋ฉฐ, FMA3๊ณผ๋„ ํ˜ธํ™˜๋œ๋‹ค. ๋˜ํ•œ ๋ฒกํ„ฐ ์ฃผ์†Œ ๋ฐฉ์‹์„ ์ง€์›ํ•˜๊ณ , ๋ฒกํ„ฐ ์š”์†Œ์˜ ๋น„ ์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์˜ ๋กœ๋“œ๋ฅผ ์ง€์›ํ•˜๋ฉฐ ๋ฒกํ„ฐ ์‹œํ”„ํŠธ๋„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

2.3. AVX-512[ํŽธ์ง‘]

2016๋…„ ์ œ์˜จ ํŒŒ์ด x200 ์‹œ๋ฆฌ์ฆˆ(Knights Landing)์—์„œ ๋จผ์ € ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ, ์„œ๋ฒ„์šฉ CPU๋Š” 2017๋…„ ์ œ์˜จ ์Šค์ผ€์ผ๋Ÿฌ๋ธ” ์‹œ๋ฆฌ์ฆˆ์— ์‚ฌ์šฉ๋œ ์Šค์นด์ด๋ ˆ์ดํฌ-SP, ๋ฐ์Šคํฌํƒ‘ CPU ์ค‘์—์„  2017๋…„ ์ธํ…” ์ฝ”์–ด X ์‹œ๋ฆฌ์ฆˆ์— ์‚ฌ์šฉ๋œ ์Šค์นด์ด๋ ˆ์ดํฌ-X์—์„œ ์ตœ์ดˆ๋กœ ์ง€์›ํ•œ๋‹ค. ์š”์•ฝํ•˜์ž๋ฉด 256-bit ๋‹จ์œ„์ด๋˜ AVX2๊ฐ€ 512-bit๋กœ ํ™•์žฅ๋œ ๋ช…๋ น์–ด ์„ธํŠธ์ด๋‹ค. ๊ธฐ์กด AVX์™€ ๋‹ฌ๋ฆฌ ํ”„๋กœ์„ธ์„œ๋ณ„๋กœ ์ง€์› ๋ช…๋ น์–ด๊ฐ€ ํŒŒํŽธํ™”๋˜์–ด ์žˆ๋‹ค(...) ์–ด๋А ์ชฝ์ด๋“  AVX-512F์™€ AVX-512CD๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜๋‚˜ ๊ทธ ์ด์ƒ๋ถ€ํ„ด HEDT/์ œ์˜จ ๊ธฐ๋ฐ˜ CPU์ธ๊ฐ€ ์ œ์˜จ Phi ๊ธฐ๋ฐ˜ CPU์ธ๊ฐ€์— ๋”ฐ๋ผ์„œ ํ™•์—ฐํ•˜๊ฒŒ ๊ฐˆ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

Prime95 ๊ฐœ๋ฐœ์ง„์ธ GIMPS ์ธก์— ๋”ฐ๋ฅด๋ฉด AVX-512 ์ง€์›์˜ ๊ฒฝ์šฐ ์ด๋ฅผ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด DDR4 ๊ทœ๊ฒฉ ๊ธฐ์ค€์œผ๋กœ ์ฟผ๋“œ ์ฑ„๋„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. ๊ตฌ์กฐ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ 4๊ฐœ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ํ˜„ ์„ธ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ๋“ค์ด 512-bit๋‚˜ ๋˜๋Š” ๊ฑฐ๋Œ€ํ•œ ๋ ˆ์ง€์Šคํ„ฐ ํญ์„ ๊ฐ€์ง„ ์—ฐ์‚ฐ์„ ๋’ท๋ฐ›์นจํ•˜๋ ค๋ฉด ์ฟผ๋“œ ์ฑ„๋„ ์ƒ๋‹น์˜ ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ ์ •๋„๋Š” ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ.[5] ์ด๋Ÿฌ๋‹ค๋ณด๋‹ˆ AVX-512๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด๋“์„ ์ œ๋Œ€๋กœ ๋ฝ‘์•„ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ์ƒ์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๊ฑฐ์˜ ์—†๋‹ค๊ณ  ๋ด๋„ ๋œ๋‹ค. ์ดˆ๊ธฐ์—๋Š” Trial factoring์— ํ•œํ•ด์„œ๋งŒ ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ, 2019๋…„ 4์›” 23์ผ์— ๋ฐœํ‘œ๋œ 29.8 ๋ฒ„์ „๋ถ€ํ„ฐ ์ •์‹์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค. ๋ฆฐํŒฉ๋„ AVX-512 ์ž์ฒด๋Š” ๋ช‡ ๋…„ ์ „๋ถ€ํ„ฐ ์ง€์›ํ•ด์™”์ง€๋งŒ ์ œ๋Œ€๋กœ ์ง€์›ํ•˜๋Š” ๊ฑด ๊ทนํžˆ ์ตœ๊ทผ์˜ ์ผ์ด๊ธฐ ๋•Œ๋ฌธ.

256-bit ํญ์„ ์ง€๋‹Œ ๊ธฐ์กด์˜ AVX๋„ ์ฒ˜์Œ ๋“ฑ์žฅํ•  ๋‹น์‹œ์—๋Š” ๊ตฌ์„ธ๋Œ€ SSE ๊ณ„์—ด์ด๋‚˜ MMX์— ๋น„ํ•ด ์—„์ฒญ๋‚œ ๋ฐœ์—ด๊ณผ ๋ถ€ํ•˜๋กœ ์ธํ•ด ๋งŽ์€ ์˜ค๋ฒ„ํด๋Ÿฌ์ปค๋“ค์„ ์ขŒ์ ˆ์‹œ์ผฐ์ง€๋งŒ, AVX-512๋Š” ๊ทธ๋ณด๋‹ค ๋”๋”์šฑ ์‹ฌ๊ฐํ•œ ์ˆ˜์ค€์ด๋ผ FM ์ˆ˜์ค€์˜ ์˜ค๋ฒ„ํด๋Ÿญ ์•ˆ์ •ํ™”๋ฅผ ๊ณ ์ˆ˜ํ•˜๋˜ ๋งค๋‹ˆ์•„ ์œ ์ €๋“ค๋งˆ์ €๋„ ํšŒ์˜์ ์œผ๋กœ ๋งŒ๋“ค ์ •๋„๋กœ ์‹ฌ๊ฐํ•œ ๋ถ€ํ•˜๋ฅผ ์ž๋ž‘ํ•œ๋‹ค. Windows์˜ ์ž‘์—… ๊ด€๋ฆฌ์ž๋‚˜ ๋ชจ๋‹ˆํ„ฐ๋ง ํ”„๋กœ๊ทธ๋žจ์—์„œ CPU ์ด์šฉ๋ฅ ์ด 100%๋กœ ๊ฐ™๋”๋ผ๋„ ์‹ค์ œ ์†Œ๋น„์ „๋ ฅ๊ณผ ์˜จ๋„ ๋ฐ ๋ฐœ์—ด๋Ÿ‰์—์„œ ์ฐจ์ด๊ฐ€ ๋‚˜ํƒ€๋‚ ๋งŒํผ ํ˜„์กด ์ตœ๊ณ ์˜ ๋ถ€ํ•˜ ๊ฐ•๋„๋ฅผ ์ง€๋‹ˆ๋Š” ๋ช…๋ น์–ด ์…‹์ด๋ผ๊ณ  ๋ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ˆ๋‹ค! ๋ฌผ๋ก  ๊ทธ์— ๋น„๋ก€ํ•ด์„œ ์„ฑ๋Šฅ๋„ ํฌ๊ฒŒ ์˜ค๋ฅด์ง€๋งŒ, ์–ด๋””๊นŒ์ง€๋‚˜ ์ œ๋Œ€๋กœ ์ง€์›์ด ๋œ๋‹ค๋Š” ์ „์ œ ํ•˜์—์„œ๋‚˜ ๊ทธ๋Ÿฐ ๊ฒƒ์ด๋‹ˆ.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์–ด์…ˆ๋ธ”๋ฆฌ๋‚˜ ์ธํŠธ๋ฆฐ์‹์œผ๋กœ AVX512 ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ˆ˜๋™์œผ๋กœ ์˜ต์…˜์„ ์ฃผ์ง€ ์•Š๋Š” ์ด์ƒ Auto Vectoriziation์— AVX-512์˜ ZMM์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  AVX์˜ YMM ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ œํ•œ์„ ๊ฑธ์–ด๋’€๋‹ค.

ํŒŒํŽธํ™” ๋ฌธ์ œ๋กœ ๋ฆฌ๋ˆ„์Šค ํ† ๋ฐœ์ฆˆ์—๊ฒŒ ์š•์„ ์–ป์–ด๋จน์—ˆ๋‹ค.# ์ฐจ๋ผ๋ฆฌ AVX์— ํ• ๋‹นํ•  ํŠธ๋žœ์ง€์Šคํ„ฐ๋ฅผ ๋ชจ์•„์„œ AMD์ฒ˜๋Ÿผ ์ฝ”์–ด ์ˆ˜๋‚˜ ๋Š˜๋ฆฌ๋ผ๊ณ  ํ–ˆ๋‹ค.
SSE ์ตœ์ ํ™”๋ฅผ ์ œ๋Œ€๋กœ ํ•ด ๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์•Œ๊ฒ ์ง€๋งŒ, SSE ๋„ SSE, SSE2, SSE3, Supplement SSE3, SSE4.1, SSE4.2 ์ด๋ ‡๊ฒŒ ์กฐ๊ธˆ์”ฉ ์กฐ๊ธˆ์”ฉ ๋ช…๋ น์–ด๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์— ๋™์ž‘ํ•˜๋Š” SSE ์ตœ์ ํ™” ๊ตฌํ˜„์„ ๋งŒ๋“ค๋ ค๋ฉด ์˜ˆ๋ฅผ ๋“ค์–ด up-to-SSE2 ๊ตฌํ˜„, up-to-Supp.SSE3 ๊ตฌํ˜„, up-to-SSE4.2 ๊ตฌํ˜„ ์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๊ตฌํ˜„์„ ๋งŒ๋“ค์–ด๋‘๊ณ , CPU ๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ช…๋ น์–ด์…‹์„ ์ธ์‹ํ•ด์„œ ๊ทธ์— ๋งž๋Š” ๊ตฌํ˜„์„ ํ˜ธ์ถœํ•˜๋„๋ก ํ•ด์•ผํ–ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ์ตœ์‹  ๋ช…๋ น์–ด์…‹์ด ์ฃผ๋Š” ์ด์ ์„ ํฌ๊ธฐํ•˜๋Š” ๋Œ€์‹  ๊ฐ€์žฅ ๋„๋ฆฌ ์ง€์›๋˜๋Š” ์ชฝ์— ์ดˆ์ ์„ ๋งž์ถ”์–ด up-to-SSE2 ํ˜น์€ up-to-Supp.SSE3 ๊ตฌํ˜„ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค๋˜๊ฐ€. ๋ฌผ๋ก  ์‹œ๊ฐ„์ด ํ•œ์ฐธ ํ๋ฅธ ์š”์ฆ˜์—์•ผ ์ €์ „๋ ฅ Intel N ์‹œ๋ฆฌ์ฆˆ CPU ๋„ SSE4.2 ๊นŒ์ง€ ๋‹ค ์ง€์›ํ•˜๋‹ˆ๊นŒ ๋ฒˆ๊ฑฐ๋กœ์›€์ด ๋งŽ์ด ์‚ฌ๋ผ์กŒ์ง€๋งŒ, ARM NEON ์ด ๊ทธ๋ƒฅ ARM NEON ๋ช…๋ น์–ด ์…‹ ํ•˜๋‚˜๋กœ ๋๋‚˜๋Š” ๊ฒƒ์— ๋น„ํ•˜๋ฉด Intel SSE ์ตœ์ ํ™”๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๋ฒˆ๊ฑฐ๋กœ์›Œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์›์„ฑ์„ ์‚ด ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค.[6][7] ๋”ฐ๋ผ์„œ SSE ๋‹ค์Œ์œผ๋กœ ๋„์ž…ํ•œ AVX ์—์„œ๋„ ๋ช…๋ น์–ด์…‹์„ AVX, AVX2 ๋กœ ์ชผ๊ฐœ๋†“์€ ๊ฒƒ์„ ๋‘๊ณ  ์•„์ง Intel ์€ ์ •์‹  ๋ชป์ฐจ๋ ธ๋‹ค๊ณ  ์š•๋จน์„ ๋งŒ ํ•œ๋ฐ, ํ•œ ์ˆ  ๋” ๋–  AVX512 ์—์„œ๋Š” ๋ช…๋ น์–ด์…‹์„ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ์ชผ๊ฐœ๋†“์€ ๊ฒƒ๋„ ๋ชจ์ž๋ผ ์ตœ์‹  CPU ๊ฐ€ ๋” ๋งŽ์€ ๋ช…๋ น์–ด์…‹์„ ํฌ๊ด„์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ  ๋ผ์ธ์—… ๋ณ„๋กœ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์…‹์„ ์ง€์›ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋†จ์œผ๋‹ˆ ์—„์ฒญ๋‚œ ์š•์„ ์ฒ˜๋จน๋Š” ์ˆ˜ ๋ฐ–์—.
์•„๋ž˜์˜ AVX-512 ํ”„๋กœํŒŒ์ผ ๋ฌธ๋‹จ์—์„œ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด, AVX์—์„œ ๊ฐ€๋Šฅํ•œ ๋ฒกํ„ฐ ์—ฐ์‚ฐ๋“ค์€ AVX-512์—์„œ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ๋“ค๋„ ์žˆ๊ธด ํ•˜์ง€๋งŒ F, CD, ER, PF๋กœ ์ฃ„๋‹ค ์ชผ๊ฐœ๋’€๋‹ค.
๋ง‰๋ง๋กœ GPU ๋บจ์น  ์ •๋„์˜ ๋ฏธ์นœ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ์žˆ๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ๊ฐˆ์•„๋„ฃ์–ด์„œ๋ผ๋„ AVX512 ์ตœ์ ํ™” ๊ตฌํ˜„์„ ํ•˜๊ฑฐ๋‚˜ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ณ ๋„ํ™”ํ•ด์„œ ์ž๋™์œผ๋กœ AVX512 ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ฒ ์ง€๋งŒ, AVX ๋Œ€๋น„ ๋ฒกํ„ฐ ๊ธธ์ด๊ฐ€ ๊ณ ์ž‘ 2 ๋ฐฐ ๋Š˜์–ด๋‚œ ๊ฒƒ์— ๋ถˆ๊ณผํ•˜์ง€ ์•Š๋Š”๊ฐ€? ๋”ฐ๋ผ์„œ ์•„๋ฌด๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„, ๋‹จ์ง€ Intel ์˜ ๋งˆ์ผ€ํŒ… ์šฉ ๊ธฐ์ˆ ๋กœ ์ „๋ฝํ•œ AVX512 ์— ํˆฌ์žํ•  ํŠธ๋žœ์ง€์Šคํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๋‹ค๋ฅธ๋ฐ ํˆฌ์žํ•˜๋ผ๋Š” ์ผ์นจ์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์ด๋‹ค.[8]

2.3.1. ํ”„๋กœํŒŒ์ผ[ํŽธ์ง‘]

2.3.1.1. F, CD, ER, PF[ํŽธ์ง‘]
SSE, AVX์˜ 512๋น„ํŠธ ๋ฒ„์ „์ด์ž ์ œ์˜จ ํŒŒ์ด ๋‚˜์ด์ธ  ๋žœ๋”ฉ๊ณผ Skylake-EP์—์„œ ์ง€์›ํ•œ๋‹ค.
๊ฐ๊ฐ Foundation, Conflict Detection, Exponential-Reciprocal & Prefetch ์˜ ์•ฝ์–ด๋กœ AVX-512๊ฐ€ ์ฒ˜์Œ ๋“ฑ์žฅํ•˜๊ณ  ๊ฐ€์žฅ ๋จผ์ € ๋„์ž…๋œ ํ”„๋กœํŒŒ์ผ์ด๋‹ค.
2.3.1.2. VL, DQ, BW[ํŽธ์ง‘]
๊ฐ๊ฐ Vector Length, Doubleword-Quadword & Byte-Word ์˜ ์•ฝ์–ด๋กœ ์ •์ˆ˜ ๊ด€๋ จ ์—ฐ์‚ฐ๋“ค๊ณผ 8๋น„ํŠธ ๋ถ€ํ„ฐ 64๋น„ํŠธ ๋‹จ์œ„์˜ ์ •์ˆ˜ ๊ด€๋ จ ์—ฐ์‚ฐ๋“ค์ด ์ถ”๊ฐ€๋˜์–ด MMX, SSE2, AVX2์˜ ์—ฐ์‚ฐ์„ ๋ชจ๋‘ ์ปค๋ฒ„ํ•œ๋‹ค.
Skylake-X์™€ Cannon Lake ์ดํ›„๋ถ€ํ„ฐ ์ง€์›ํ•œ๋‹ค.
2.3.1.3. IFMA52, 4FMAPS, VBMI, VBMI2[ํŽธ์ง‘]
Integer Fused Multiply Add์™€ Vector Byte Manipulation Instruction ์˜ ์•ฝ์ž๋กœ ๊ธฐ์กด FMA์˜ 512๋น„ํŠธ ๋ฒ„์ „์ด๋‹ค.
๋‹ค๋งŒ IFMA52์˜ ๊ฒฝ์šฐ 52๋น„ํŠธ์˜ 3ํ•ญ ์—ฐ์‚ฐ์ด ์ง€์›๋˜๊ณ , 4FMAPS์˜ ๊ฒฝ์šฐ 4ํ•ญ ์—ฐ์‚ฐ์„ ์ง€์›ํ•œ๋‹ค.
2.3.1.4. VPOPCNTDQ[ํŽธ์ง‘]
๋น„ํŠธ์˜ ์ˆ˜๋ฅผ ์„ธ๋Š” POPCNT ๋ช…๋ น์–ด์™€ ๋™์ผํ•˜๋‚˜ 512๋น„ํŠธ์—์„œ 32๋น„ํŠธ ๋˜๋Š” 64๋น„ํŠธ ๋‹จ์œ„๋กœ ๋งˆ์Šคํฌ ์ž…ํ˜€์„œ ํ•œ ๋ช…๋ น์–ด๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
2.3.1.5. VNNI, 4VNNIW[ํŽธ์ง‘]
Vector Neural Network Instruction์˜ ์•ฝ์ž.
8๋น„ํŠธ ๋˜๋Š” 16๋น„ํŠธ ๋‹จ์œ„์˜ ํŽ˜์–ด๋ฅผ ์—ฐ์‚ฐํ•˜๊ณ  4VNNIW์˜ ๊ฒฝ์šฐ 4๊ฐœ์˜ ๋ธ”๋Ÿญ์„ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋จธ์‹ ๋Ÿฌ๋‹์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ธ๊ณต ์‹ ๊ฒฝ๋ง ๊ฐ€์†์„ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด๊ณ  AVX2์˜ epi8๋‹จ์œ„ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค VNNI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šค๋ฃจํ’‹์ด ํ›จ์”ฌ ์ฆ๊ฐ€ํ•˜๊ธด ํ•˜์ง€๋งŒ VNNI๋ฅผ ์ง€์›ํ•˜๋Š” ์ตœ๊ณ  ์„ฑ๋Šฅ์˜ CPU๋ฅผ 2์†Œ์ผ“์œผ๋กœ ๊ตฌํ˜„ํ•ด๋„ ํ•œ๊ฐœ์˜ GPGPU์ฒ˜๋ฆฌ๋ณด๋‹ค ๋А๋ฆฌ๋‹ค๋Š”๊ฒƒ์ด ํ•จ์ •.
2.3.1.6. BF16[ํŽธ์ง‘]
Bfloat16, ๋˜๋Š” Brain Float Point 16 ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ช…๋ น์–ด ์„ธํŠธ.
์Šค์นผ๋ผ๊ณฑ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๊ณ  VNNI์™€ ํ•จ๊ป˜ ์“ฐ์ด๋ฉฐ bfloat16 ์—ฐ์‚ฐ์„ ์œ„ํ•ด 32๋น„ํŠธ ๋ถ€๋™์†Œ์ˆซ์ ์„ 16๋น„ํŠธ ๋ถ€๋™์†Œ์ˆ˜์ ์œผ๋กœ ๋ผ์šด๋”ฉ ํ•˜๋Š” ๋ณด์กฐ์ ์ธ ๊ธฐ๋Šฅ๋„ ์žˆ๋‹ค.
2.3.1.7. BITALG[ํŽธ์ง‘]
Bit Algorithm ์˜ ์•ฝ์ž.
8๋น„ํŠธ ๋˜๋Š” 16๋น„ํŠธ์˜ ์„ธํŠธ์˜ POPCNT ๊ณ„์‚ฐ์ด๋‚˜ ๋น„ํŠธ ๋‹จ์œ„์˜ ์…”ํ”Œ๋ง์„ ์ง€์›ํ•œ๋‹ค.
2.3.1.8. VP2INTERSECT[ํŽธ์ง‘]
Vector Pair Intersection์˜ ์•ฝ์ž

๋‘ ๋ฒกํ„ฐ๊ฐ„ ๊ต์ง‘ํ•ฉ์„ ์—ฐ์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๋งŒ์•ฝ ๋‘ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ„ ์ค‘๋ณต๋˜๋Š” ์›์†Œ๋“ค์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น๋˜๋Š” ๋น„ํŠธ๋งˆ์Šคํฌ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
๋‹ค๋งŒ ์›์†Œ๋Š” 32๋น„ํŠธ ๋˜๋Š” 64๋น„ํŠธ ์ •์ˆ˜๋กœ ์ œํ•œ๋œ๋‹ค.

3. ์ง€์› ํ”„๋กœ์„ธ์„œ[ํŽธ์ง‘]

3.1. AVX[ํŽธ์ง‘]

3.2. AVX2[ํŽธ์ง‘]

3.3. AVX-512[ํŽธ์ง‘]

์ธํ…”

4. ๊ด€๋ จ ํ•ญ๋ชฉ[ํŽธ์ง‘]

[2] ๊ฒŒ์ž„, ์ธ์ฝ”๋”ฉ, ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋“ฑ CPU์— ๋ถ€ํ•˜๊ฐ€ ํฐ SW๋“ค
[3] ์ด๋“ค์€ ์„ฑ๋Šฅ์ด ์•„๋‹ˆ๋ผ ๊ณ ํด๋Ÿญ๋งŒ ์š”๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— CPU์— ์ˆ˜์œจ ์ข‹์€ ์ฝ”์–ด 1๊ฐœ๋งŒ ์‚ด๋ฆฌ๊ณ  ๋ชจ์กฐ๋ฆฌ ๊บผ๋ฒ„๋ฆฌ๊ณ  ์ฟจ๋ง์„ ์œ„ํ•ด ์•ก์ฒด ํ—ฌ๋ฅจ์„ ๋ถ“๋Š” ์ด๋“ค์ด๋ผ AVX ๊ฐ™์€๊ฑด ์žฅ์• ๋ฌผ๋กœ ์—ฌ๊ธด๋‹ค.
[4] ๊ธฐ์กด์˜ SSE์—์„œ๋Š” ์ตœ๋Œ€ 'A=A+B' ์—ฐ์‚ฐ๋ฐ–์— ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, AVX์—์„œ๋Š” 'A=B+C'๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ณ„ ๊ฒƒ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์•„๋ณด์ด๊ฒ ์ง€๋งŒ, A = 10 + 5๋ผ๋Š” ์—ฐ์‚ฐ์„ SSE์—์„œ๋Š” A = 10์„ ๋จผ์ € ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ทธ ๋‹ค์Œ์— A = A+ 5๋กœ ์ด 2ํšŒ์˜ ์—ฐ์‚ฐ์ด ๋“ค์–ด๊ฐ€๋ฉฐ, AVX์—์„œ๋Š” A = 10 + 5๋กœ ํ•œ๋ฒˆ์— ์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ƒ๋‹นํžˆ ํฐ ์˜ํ–ฅ์ด ์žˆ์„ ์ˆ˜๋ฐ–์— ์—†๋‹ค.
[5] ๊ฐ€๋ น ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ’์„ ์ฝ์–ด์˜ค๋Š”๋ฐ 1 ์‚ฌ์ดํด์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ 2021๋…„ ๊ฐœ์ธ์šฉ ์ปดํ“จํ„ฐ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” 128๋น„ํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ์œผ๋กœ๋Š” ํ•œ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋ชจ๋‘ ์ฑ„์šฐ๋Š”๋ฐ๋งŒ 4์‚ฌ์ดํด์ด ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค. ๋ฌผ๋ก  ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ๋‹ฌ๋ž‘ ํ•œ ๋ ˆ์ง€์Šคํ„ฐ๋งŒ ์ฝ์–ด์˜ค๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐ’๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ์–ด์˜ค๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ์ด ์‹คํ–‰ ์†๋„์— ์ƒ๋‹นํžˆ ํฐ ์˜ํ–ฅ์„ ์ฃผ๊ฒŒ ๋œ๋‹ค.
[6] ๋‹จ ์ด๊ฑด ๊ทธ๋ƒฅ ARM ์ด ํ›จ์”ฌ ์งง์€ ์—ญ์‚ฌ๋ฅผ ๊ฐ€์กŒ๊ณ  ์ €์ „๋ ฅ์„ ์ถ”๊ตฌํ•˜๋Š” ํ”„๋กœ์„ธ์„œ์˜€๊ธฐ ๋•Œ๋ฌธ์—(์ง€๊ธˆ์€ ์•„๋‹ˆ๋‹ค) ๊ทธ๋Ÿฐ๊ฑฐ์ง€ ARM ์ด ํŠน๋ณ„ํžˆ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ž˜ ํ•œ๊ฑด ์•„๋‹ˆ๋‹ค. ARM ๋„ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๊ฒฐ๊ตญ ํŒŒํŽธํ™”๊ฐ€ ๋˜๋˜์ง€ ํ•˜์œ„ ํ˜ธํ™˜์„ ํฌ๊ธฐํ•˜๋˜์ง€ ์•„์˜ˆ ๊ณ ์„ฑ๋Šฅ ๋ฒกํ„ฐ ๋ช…๋ น์–ด์…‹์„ ๋” ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋˜์ง€ ๊ทธ๋Ÿฐ ๋ฐฉ๋ฒ•๋ฐ–์— ์—†๋‹ค. ๋ฌผ๋ก  ๋’ค์—๋„ ์จ์žˆ์ง€๋งŒ ์• ์ดˆ์— AVX-512 ๊ฐ€ ๊นŒ์ด๋Š” ๊ฑด ๋‹จ์ง€ ํŒŒํŽธํ™”๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋‹ค.
[7] ARM ๋„ VFP ๋ผ๊ณ  ํ˜„์žฌ ์‚ฌ์‹ค์ƒ ์‚ฌ์žฅ๋œ ๋ฒกํ„ฐ ๋ช…๋ น์–ด์…‹์ด ์žˆ๋‹ค. VFP ๋Š” ๋ช…๋ น์–ด ํ•˜๋‚˜๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ floating point register ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋ฒกํ„ฐ์ฒ˜๋Ÿผ ๋ฌถ์–ด์„œ ๋™์‹œ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ. ํ•˜์ง€๋งŒ 32b floating point register ์ˆซ์ž ์ž์ฒด์— ๋นก๋นกํ•œ ํ•œ๊ณ„๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๊ธฐ๋„ ํž˜๋“ค๋„ ์„ฑ๋Šฅ ํ–ฅ์ƒ๋„ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. ์ฆ‰ ARM ๋„ ๋ป˜์ง“ํ•˜๋‹ค๊ฐ€ ๋ป˜์ง“์„ ๊นจ๋‹ซ๊ณ  VFP ๋ฅผ ์‚ฌ์žฅ์‹œํ‚ค๊ณ  ๋‹จ์ผํ™”๋œ 128b NEON ์„ ๋‚ด๋†“์•˜๊ณ  ์ง€๊ธˆ ๊ตณ์ด ์–ต์ง€๋กœ ์ธํ…”์„ ์ซ“์•„๊ฐ€๊ฒ ๋‹ค๊ณ  SSE1/2 ๋‚˜ AVX1/2 ์—์„œ ํ–ˆ๋˜ ์‹์œผ๋กœ ์ •์ˆ˜ ๋ฒกํ„ฐ ์—ฐ์‚ฐ๊ณผ ์‹ค์ˆ˜ ๋ฒกํ„ฐ ์—ฐ์‚ฐ์„ ๋ถ„๋ฆฌํ•ด์„œ 256b ๋ฒกํ„ฐ ๋ช…๋ น์–ด์…‹์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ์ง€๋„ ์•Š๊ณ  ์žˆ๋‹ค. ๊ทธ์— ๋น„ํ•˜๋ฉด ์ธํ…”์€ SSE ์—์„œ ์ง€์†์ ์ธ ๋ป˜์ง“์„ ํ•ด๋†“๊ณ ๋„ ์ด๋ฅผ AVX ์—์„œ๋„ ์ด์–ด๊ฐ”์œผ๋ฉฐ AVX512 ์—์„œ๋Š” ์˜คํžˆ๋ ค ๋ป˜์ง“์„ ๊ทน๋Œ€ํ™”์‹œ์ผฐ๋‹ค๋Š”๊ฒŒ ๋ฌธ์ œ๋‹ค. ์ด๊ฒƒ์€ ๋‹จ์ˆœํžˆ ARM ๋ณด๋‹ค ์—ญ์‚ฌ๊ฐ€ ๊ธธ์–ด์„œ ์–ด์ฉ” ์ˆ˜ ์—†๋‹ค๋˜๊ฐ€ ํ˜น์€ ํŒŒํŽธํ™”๋Š” ๊ฒฐ๊ตญ ๋ถˆ๊ฐ€ํ”ผํ•˜๋‹ค๋Š” ๋…ผ๋ฆฌ๋กœ ์‰ด๋“œ์ณ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด ์•„๋‹ˆ๋‹ค. ๋ฆฌ๋ˆ„์Šค ํ† ๋ฐœ์ฆˆ๊ฐ€ AVX512 ๋ฅผ ๊น๊ฒŒ AVX512 ๋•Œ๋ฌธ์— ๋ฐœ์—ด ๋งŽ์•„์ ธ์„œ ์˜ค๋ฒ„ํด๋Ÿญ ์•ˆ๋˜๋Š” ๊ฒƒ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™์€๊ฐ€?
[8] ๋‹ค๋งŒ ์ตœ๊ทผ 11์„ธ๋Œ€ ์ฝ”๋ธŒ ์‹œ๋ฆฌ์ฆˆ์˜ ์œ ์ถœ ๋‚ด์šฉ์— ๋”ฐ๋ฅด๋ฉด AVX512์™€ ๊ธฐ์กด 10์„ธ๋Œ€ ํ”„๋กœ์„ธ์„œ๊ฐ„ ์„ฑ๋Šฅ ๊ฒฉ์ฐจ๋Š” 22ํผ์„ผํŠธ ์ •๋„์ด๋‚˜ ์ด ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ๊ฒฐ์ฝ” ๋งŽ์€๊ฒŒ ์•„๋‹ˆ๋‹ค. C/C++ ์ฝ”๋“œ์— SSE ๋งŒ ์ ์šฉํ•ด๋„ ์ตœ์†Œ 2~3 ๋ฐฐ, 8 bit ์ฒ˜๋ฆฌ์ผ ๊ฒฝ์šฐ 10 ๋ฐฐ ์ด์ƒ ๋นจ๋ผ์ง€๋Š”๊ฒŒ ๋ณดํ†ต์ด๊ณ , ๋ณธ๊ฒฉ์ ์œผ๋กœ GPU ๋ฅผ ์“ฐ๋ฉด ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ๋ชปํ•ด๋„ ์ˆ˜์‹ญ๋ฐฐ์—์„œ ์ˆ˜๋ฐฑ๋ฐฐ๊นŒ์ง€ ๋‚˜๋Š”๊ฒŒ ๋ณดํ†ต์ด๋‹ค. ๊ดœํžˆ ์š”์ฆ˜ ์—„์ฒญ๋‚œ ์—ฐ์‚ฐ๋Ÿ‰์„ ์š”ํ•˜๋Š” ๋”ฅ๋Ÿฌ๋‹ ํŠธ๋ ˆ์ด๋‹์ด GPU ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์“ฐ๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค. (๊ทธ๊ฒƒ๋„ ํ…Œ์Šฌ๋ผ๊ธ‰ ์ด์ƒ GPU ๋ฅผ PC ํ•˜๋‚˜์— 4 ๊ฐœ ์ด์ƒ์”ฉ ๊ฝ‚์•„์„œ ์“ด๋‹ค.) 22 ํผ์„ผํŠธ ์ •๋„๋Š” memory access pattern (cache fit) ์กฐ์ • ๋“ฑ C/C++ ์ฝ”๋“œ ์ž์ฒด์˜ ์ตœ์ ํ™”๋งŒ ์ž˜ํ•ด๋„ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€ ์ •๋„์— ๋ถˆ๊ณผํ•˜๊ณ , ๋”ฐ๋ผ์„œ ๊ณ ์ž‘ 22 ํผ์„ผํŠธ ๋•Œ๋ฌธ์— ํŒŒํŽธํ™”๋œ AVX512 ์— ๋ชฉ๋งฌ ์‚ฌ๋žŒ์€ ์•„๋ฌด๋„ ์—†๋‹ค.