๐ŸŒ CS:APP | SIMD

์ด์ˆœ๊ฐ„ยท2025๋…„ 3์›” 27์ผ

CS:APP

๋ชฉ๋ก ๋ณด๊ธฐ
10/23

๐ŸงŠ CS:APP | SIMD ํ•˜๋“œ์›จ์–ด๋ž€?

โœ… ์ •์˜

SIMD (Single Instruction, Multiple Data) ํ•˜๋“œ์›จ์–ด๋ž€,
ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด๋กœ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜๋“œ์›จ์–ด ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.
์ฆ‰, ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ์— ํ•œ๊บผ๋ฒˆ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ์ฒ˜๋ฆฌ ์žฅ์น˜.


๐Ÿ’ก ๋‹ค์‹œ ๋งํ•ด ๋ณด๋ฉด

ํ•˜๋‚˜์˜ CPU ๋ช…๋ น์–ด๊ฐ€ "๋ฒกํ„ฐ ์ „์ฒด"๋‚˜ "๋ฐฐ์—ด ์ „์ฒด"์— ๋™์‹œ์— ์—ฐ์‚ฐ์„ ์ ์šฉํ•˜๋Š” ๊ตฌ์กฐ

๊ตฌ์กฐ์˜๋ฏธ
Single Instructionํ•˜๋‚˜์˜ ์—ฐ์‚ฐ ๋ช…๋ น
Multiple Data์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์š”์†Œ์— ๋™์‹œ์— ์ ์šฉ

โš™๏ธ SIMD ํ•˜๋“œ์›จ์–ด์˜ ์˜ˆ์‹œ

โœ… 1. CPU์˜ ๋ฒกํ„ฐ ์—ฐ์‚ฐ ์œ ๋‹›

  • ์ธํ…” CPU์˜ SSE, AVX, ARM์˜ NEON ๊ฐ™์€ ๋ฒกํ„ฐ ๋ช…๋ น์–ด ์„ธํŠธ
  • ์˜ˆ: addps โ†’ 4๊ฐœ์˜ float์„ ๋™์‹œ์— ๋”ํ•จ (AVX๋Š” 8๊ฐœ, 16๊ฐœ๋„ ๊ฐ€๋Šฅ)
[1.0  +  2.0]  โ†’ 3.0  
[3.0  +  4.0]  โ†’ 7.0  
[5.0  +  6.0]  โ†’ 11.0  
[7.0  +  8.0]  โ†’ 15.0   โ† 4๊ฐœ๋ฅผ ํ•œ ๋ช…๋ น์–ด๋กœ ์ฒ˜๋ฆฌ!

โœ… 2. GPU (๊ทธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ์žฅ์น˜)

  • GPU๋Š” ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ(ํ”ฝ์…€, ๋ฒกํ„ฐ ๋“ฑ)๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋จ
  • ์ˆ˜์ฒœ ๊ฐœ์˜ SIMD ์œ ๋‹›์ด ์กด์žฌํ•ด์„œ ๋จธ์‹ ๋Ÿฌ๋‹, ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ์— ํŠนํ™”๋จ

๐ŸŽฎ ์–ด๋””์— ์“ฐ์ผ๊นŒ?

  • ์ด๋ฏธ์ง€ ํ•„ํ„ฐ๋ง (ํ”ฝ์…€ ์ˆ˜์ฒœ ๊ฐœ ๋™์‹œ์— ๊ณ„์‚ฐ)
  • ํ–‰๋ ฌ ์—ฐ์‚ฐ (๋ฒกํ„ฐ ๊ณฑ, ์ ๊ณฑ)
  • ๋”ฅ๋Ÿฌ๋‹ ์—ฐ์‚ฐ (ํ…์„œ ๊ณ„์‚ฐ)
  • ๊ณผํ•™ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ (๋ฌผ๋ฆฌ/๊ธฐ์ƒ/๋ถ„์ž ๊ตฌ์กฐ ๋“ฑ)

๐Ÿง  ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ž…์žฅ์—์„œ?

  • SIMD ํ•˜๋“œ์›จ์–ด๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ๋ช…๋ น์–ด ์„ธํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ ,
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ๋ฒกํ„ฐ ๋ช…๋ น์–ด ๋˜๋Š” SIMD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

์˜ˆ:

// C์—์„œ SSE ์‚ฌ์šฉ
__m128 a = _mm_set_ps(1.0, 2.0, 3.0, 4.0);
__m128 b = _mm_set_ps(5.0, 6.0, 7.0, 8.0);
__m128 result = _mm_add_ps(a, b);

โœ… ํ•œ ์ค„ ์ •๋ฆฌ

SIMD ํ•˜๋“œ์›จ์–ด๋ž€, ๋™์ผํ•œ ์—ฐ์‚ฐ์„ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ์— ๋™์‹œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์žฅ์น˜์ด๋ฉฐ, CPU์™€ GPU์— ํƒ‘์žฌ๋˜์–ด ๋ฐ์ดํ„ฐ ๋ณ‘๋ ฌ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

profile
์„œํˆด์ง€์–ธ์ • ๋Š˜ ํ–‰๋™์ด ๋จผ์ €์ด๊ธฐ๋ฅผ

0๊ฐœ์˜ ๋Œ“๊ธ€