- VPU(Visual Processing Unit)๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ, ์ปดํจํฐ ์์คํ ์์ ๊ทธ๋ํฝ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ์ฌ ๊ฒฐ๊ณผ๊ฐ์ ๋ชจ๋ํฐ์ ์ถ๋ ฅํ๋ ์ฐ์ฐ ์ฅ์น
- ๊ทธ๋ํฝ ์นด๋๋ฅผ ๊ตฌ์ฑํ๋ ํต์ฌ ์์(GPU โ ๊ทธ๋ํฝ ์นด๋)
- GPU๋ ์๋ฒ ๋๋ ์์คํ , ํด๋ ์ ํ, ์ปดํจํฐ, ์ฝ์, ์ธ๊ณต์ง๋ฅ, ๋ฌด์ธ ์๋์ฐจ, ํด๋ผ์ฐ๋ ์ปดํจํ ๋ฑ์ ์ฌ์ฉ๋๋ค.
- ๋ฉํฐ ์ฝ์ด๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๋๋์ ์ฐ์ฐ์ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๋ค.
- ๊ทธ๋ํฝ๊ณผ ๊ด๋ จ๋ ์ฐ์ฐ์ ํ ๋, CPU์ ๋ถ๋ด์ ํฌ๊ฒ ์ค์ผ ์ ์๋ค.
- ์ด๊ธฐ CPU๋ ์ปดํจํฐ์ ์ ๋ ฅ์ด ๋ค์ด์ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๊ณ์ฐ, ์ฒ๋ฆฌํ๊ณ ํ๋ฉด์ ๊ทธ๋ ค์ฃผ๋ ์ผ๊น์ง ๋ชจ๋ ๋ด๋นํ๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ, ๋ณต์กํ ๊ณ์ฐ๊ณผ ๊ฒ์ ๊ฐ์ ๋ณต์กํ ํ๋ฉด์ ๊ทธ๋ ค์ผ ํ๋ ์ผ์ด ๋ฐ์ํ๋ค. ์ง๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ๋ CPU๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์์ด ๋ง์์ง๋ฉด์, ์ค์ํ ์์ ๊ณผ ํจ๊ป ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ํ๋ค์ด์ก๋ค.
- CPU์ ์์ ๋์ ๋ถ์ฐ์ํค๊ธฐ ์ํด GPU๊ฐ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ญํ ์ ๋ด๋นํ๊ณ CPU๋ ์ค์ํ ์์ ์ ์ง์คํ ์ ์๊ฒ ๋์๋ค.
- CPU๋ ์ง๋ ฌ ์ฒ๋ฆฌ์ ์ต์ ํ๋ ์์(1 ~ 128)์ ๊ณ ์ฑ๋ฅ ์ฝ์ด๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- GPU๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์ต์ ํ๋ ๋ค์(์๋ฐฑ ~ ์์ฒ)์ ์ ์ฑ๋ฅ ์ฝ์ด๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- CPU๋ GPU๋ณด๋ค ์ ์ ์ฝ์ด๋ฅผ ๊ฐ๊ณ ์์ง๋ง, ๊ฐ๊ฐ์ ์ฝ์ด๊ฐ GPU๋ณด๋ค ๊ฐ๋ ฅํ ์ปดํจํ ํ์๋ฅผ ๊ฐ๊ณ ์๋ค.
- ๊ทธ๋ํฝ ์ ์ด
- ๋ ๋๋ง(Rendering): ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ๋ก๋ถํฐ ์์ ์์ฑ
- ์ ฐ์ด๋ฉ(Shading): ๋น์ ๊ฑฐ๋ฆฌ์ ๊ฐ๋์ ๋ฐ๋ผ ๋ฌผ์ฒด ํ๋ฉด์ ์กฐ๋ ๋ณํ
- ๋ธ๋ ๋ฉ(Blending): 2๊ฐ์ ์ด๋ฏธ์ง ๊ฒฐํฉ ํํ, ํฌ๋ช ์ค๋ธ์ ํธ ์์ฑ/์ ์ด
- ์ฐ์ฐ ์ ์ด
- ํ์ดํ๋ผ์ธ(Pipeline): ๋ช ๋ น์ด ์ฒ๋ฆฌ ๊ณผ์ ์ ์ฌ๋ฌ ๋จ๊ณ๋ก ์ธ๋ถํํ์ฌ ๋ณ๋ ฌ ์ฒ๋ฆฌ
- ๋ถ๋์์์ ์ฐ์ฐ
์กฐ๊ฑด: FHD ํด์๋ ๋ชจ๋ํฐ(๊ฐ๋ก 1920, ์ธ๋ก 1080๊ฐ์ ํฝ์ ), ์ฃผ์ฌ์จ 60hz(์ด๋น 60๋ฒ์ ๋ชจ๋ํฐ ๊ฐฑ์ ์ด ๋ฐ์ํ๋ค.)
- ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ ์ํด์๋ ์ด๋น 1920 x 1080 x 60 ํ์ ์ฐ์ฐ์ด ํ์ํ๋ค. (์ด๋น 124,416,000 ํ์ ์ฐ์ฐ์ด ํ์ํ๋ค.)
- GPU๋ ์ด ๋จ์ํ์ง๋ง ์๋ง์ ์์ ๋ค์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ค.
์ (Vertex): ์ ์ (๊ผญ์ง์ ), ๋ชจ๋ธ์ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ์์ ๋จ์
์ (Edge): ์ ๊ณผ ์ ์ด ๋ง๋ ์ด๋ฃจ์ด์ง๋ ์
๋ค๊ฐํ(Polygon): ์ ๊ณผ ์ ์ด ๋ง๋ ์ด๋ฃจ์ด์ง ๋ค๊ฐํ, ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ์ค๋ธ์ ํธ๋ ์ผ๊ฐํ์ ์ด์ด ๋ถ์ฌ ๋ง๋ ๋ค.
- 3D ๊ฐ์ฒด๋ ์๋ง์ Polygon๋ค์ ํฉ์ณ์ ํํํ ๊ฒ์ด๋ค.
- ํ๋ฉด์ ํ์๋๋ 3D ๊ฐ์ฒด๋ ์๋ง์ Vertex๋ค๋ก Polygon์ ๊ทธ๋ฆฐ ๊ฒ์ด๋ค.
- 3D ๊ฐ์ฒด์ ๋ณํ์ Vertex์ ๋ฒกํฐ ๋๋ ๋งคํธ๋ฆฌ์ค๋ฅผ ํ๋ ฌ ์ฐ์ฐ์ ํตํด ๊ทธ๋ฆฌ๋๋ฐ, GPU๋ ์ด ๋จ์ํ์ง๋ง ์๋ง์ ์์ ๋ค์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ค.
- ์์
-
C++์์ ๋จ์ Polygon์ ๊ทธ๋ฆฌ๊ณ ๋ณํ์ํค๋ ์ฝ๋
void drawHead() { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glColor3f(0, 1.0, 0); glBegin(GL_QUADS); glVertex3i(0, 10, 0); // Vertex ์์ฑ glVertex3i(2, 10, 0); glVertex3i(2, 12, 0); glVertex3i(0, 12, 0); glEnd(); } void drawBody() { glPushMatrix(); glTranslatef(-2, -50, 0); // Vertex ์์น ๋ณํ glScalef(3.0, 5.0, 0); // Vertex ํฌ๊ธฐ ๋ณํ drawHead(); glPopMatrix(); }
-
Vertex๊ฐ ๋ณํ๋ ๋ ์ํ๋๋ ํ๋ ฌ ์ฐ์ฐ
-
- NVIDIA์ฌ์ ๊ฒฝ์ฐ, ์๋ฐฑ, ์์ฒ๋ง ๊ฐ์ ์ฐ์ฐ์ warp๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋จ์๋ก ์ชผ๊ฐ์ด GPU์ ๊ฐ ์ฝ์ด๋ก ์ ๋ฌํ๋ค.
- CPU๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ์ง์ฐ ์๊ฐ์ด ๊ธธ์ด์ง๋ฉด ์ฑ๋ฅ์ด ์ ํ๋๊ธฐ ๋๋ฌธ์ ์ฃผ๋ณ ์บ์ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค์ง๋ง, NVIDIA์ CUDA๋ฅผ ํ์ฉํ GPU๋ ์ง์ฐ ์๊ฐ์ด ๋ฐ์ํ๋ฉด ๋ฐ๋ก ๋ค์ warp์ ์ฐ์ฐ์ ์ํํ๋ค.
- ๋ฅ ๋ฌ๋
- ์ ๊ฒฝ์ธํฌ๋ฅผ ํ๋ด ๋ธ ์ ๊ฒฝ๋ง ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฅ ๋ฌ๋์ ๊ฒฝ์ฐ, ์๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ณฑ์ ๊ณผ ๋ง์ ์ฒ๋ผ ๋จ์ ์ฐ์ฐ๋ง ํ๊ธฐ ๋๋ฌธ์ GPU๋ฅผ ํ์ฉํ๋ฉด ํจ๊ณผ์ ์ด๋ค.
- ๊ฐ์ํํ ์ฑ๊ตด
- ๋นํธ์ฝ์ธ์ ๊ฒฝ์ฐ, ์ฑ๊ตดํ๊ธฐ ์ํด์๋ ์ ํด์ง ํด์ ๊ฐ์ด ๋์ฌ ๋๊น์ง ์์์ ์ซ์๋ฅผ ๊ณ์ํด์ ๋ง์ ํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ GPU๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ฐํ๋ค.(๊ทธ๋ํฝ ์นด๋๊ฐ ๋งค์ฐ ๋น์ธ์ง ์ด์ )
- ๋ ์จ ์๋ณด
- ๋ ์จ ์๋ณด์ ๊ฒฝ์ฐ, ํน์ ๊ตฌ์ญ์ ๊ฒฉ์ ํํ๋ก ์ชผ๊ฐ์ด ๊ทธ ๊ตฌ์ญ์ ์จ๋๋ ๊ธฐ์ ์ํ๋ฅผ ํ์ ํ๊ธฐ ๋๋ฌธ์ ์ชผ๊ฐ์ด์ง ์๋ง์ ๊ตฌ์ญ์ ๋ฐ์ดํฐ๋ฅผ GPU๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ๋ค.
- CPU์ GPU์ ์ฐจ์ด์ ์?