SIMD (Single Instruction, Multiple Data) ํ๋์จ์ด๋,
ํ๋์ ๋ช ๋ น์ด๋ก ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ํ๋์จ์ด ๊ตฌ์กฐ๋ฅผ ๋งํ๋ค.
์ฆ, ๊ฐ์ ์ฐ์ฐ์ ์ฌ๋ฌ ๋ฐ์ดํฐ์ ํ๊บผ๋ฒ์ ์ ์ฉํ ์ ์๋๋ก ์ค๊ณ๋ ์ฒ๋ฆฌ ์ฅ์น.
ํ๋์ CPU ๋ช ๋ น์ด๊ฐ "๋ฒกํฐ ์ ์ฒด"๋ "๋ฐฐ์ด ์ ์ฒด"์ ๋์์ ์ฐ์ฐ์ ์ ์ฉํ๋ ๊ตฌ์กฐ
| ๊ตฌ์กฐ | ์๋ฏธ |
|---|---|
| Single Instruction | ํ๋์ ์ฐ์ฐ ๋ช ๋ น |
| Multiple Data | ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ ์์์ ๋์์ ์ ์ฉ |
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๊ฐ๋ฅผ ํ ๋ช
๋ น์ด๋ก ์ฒ๋ฆฌ!
์:
// 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์ ํ์ฌ๋์ด ๋ฐ์ดํฐ ๋ณ๋ ฌ์ฑ์ ๊ทน๋ํํ๋ ๊ธฐ์ ์ด๋ค.