Skip to content

Latest commit

ย 

History

History
119 lines (85 loc) ยท 5.25 KB

File metadata and controls

119 lines (85 loc) ยท 5.25 KB

GPU

GPU(Graphics Processing Unit)๋ž€?

  • VPU(Visual Processing Unit)๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ ๊ทธ๋ž˜ํ”ฝ ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ชจ๋‹ˆํ„ฐ์— ์ถœ๋ ฅํ•˜๋Š” ์—ฐ์‚ฐ ์žฅ์น˜

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-06-18 17 09 58


GPU์˜ ๊ฐœ๋…

  • ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ(GPU โ‰  ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ)
  • GPU๋Š” ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ, ํœด๋Œ€ ์ „ํ™”, ์ปดํ“จํ„ฐ, ์ฝ˜์†”, ์ธ๊ณต์ง€๋Šฅ, ๋ฌด์ธ ์ž๋™์ฐจ, ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ๋“ฑ์— ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋ฉ€ํ‹ฐ ์ฝ”์–ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๋Œ€๋Ÿ‰์˜ ์—ฐ์‚ฐ์„ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๊ทธ๋ž˜ํ”ฝ๊ณผ ๊ด€๋ จ๋œ ์—ฐ์‚ฐ์„ ํ•  ๋•Œ, CPU์˜ ๋ถ€๋‹ด์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

GPU์˜ ํ•„์š”์„ฑ

  • ์ดˆ๊ธฐ CPU๋Š” ์ปดํ“จํ„ฐ์— ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์‚ฐ, ์ฒ˜๋ฆฌํ•˜๊ณ  ํ™”๋ฉด์— ๊ทธ๋ ค์ฃผ๋Š” ์ผ๊นŒ์ง€ ๋ชจ๋‘ ๋‹ด๋‹นํ–ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ, ๋ณต์žกํ•œ ๊ณ„์‚ฐ๊ณผ ๊ฒŒ์ž„ ๊ฐ™์€ ๋ณต์žกํ•œ ํ™”๋ฉด์„ ๊ทธ๋ ค์•ผ ํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. ์ง๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” CPU๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์–‘์ด ๋งŽ์•„์ง€๋ฉด์„œ, ์ค‘์š”ํ•œ ์ž‘์—…๊ณผ ํ•จ๊ป˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์–ด์กŒ๋‹ค.
  • CPU์˜ ์ž‘์—…๋Ÿ‰์„ ๋ถ„์‚ฐ์‹œํ‚ค๊ธฐ ์œ„ํ•ด GPU๊ฐ€ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๊ณ  CPU๋Š” ์ค‘์š”ํ•œ ์ž‘์—…์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

CPU์™€ GPU์˜ ์ฐจ์ด

  • CPU๋Š” ์ง๋ ฌ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋œ ์†Œ์ˆ˜(1 ~ 128)์˜ ๊ณ ์„ฑ๋Šฅ ์ฝ”์–ด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • GPU๋Š” ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋œ ๋‹ค์ˆ˜(์ˆ˜๋ฐฑ ~ ์ˆ˜์ฒœ)์˜ ์ €์„ฑ๋Šฅ ์ฝ”์–ด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • CPU๋Š” GPU๋ณด๋‹ค ์ ์€ ์ฝ”์–ด๋ฅผ ๊ฐ–๊ณ  ์žˆ์ง€๋งŒ, ๊ฐ๊ฐ์˜ ์ฝ”์–ด๊ฐ€ GPU๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ ์ปดํ“จํŒ… ํŒŒ์›Œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

GPU์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ 

  • ๊ทธ๋ž˜ํ”ฝ ์ œ์–ด
    • ๋ Œ๋”๋ง(Rendering): ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ๋กœ๋ถ€ํ„ฐ ์˜์ƒ ์ƒ์„ฑ
    • ์…ฐ์ด๋”ฉ(Shading): ๋น›์˜ ๊ฑฐ๋ฆฌ์™€ ๊ฐ๋„์— ๋”ฐ๋ผ ๋ฌผ์ฒด ํ‘œ๋ฉด์˜ ์กฐ๋„ ๋ณ€ํ™”
    • ๋ธ”๋ Œ๋”ฉ(Blending): 2๊ฐœ์˜ ์ด๋ฏธ์ง€ ๊ฒฐํ•ฉ ํ‘œํ˜„, ํˆฌ๋ช… ์˜ค๋ธŒ์ ํŠธ ์ƒ์„ฑ/์ œ์–ด
  • ์—ฐ์‚ฐ ์ œ์–ด
    • ํŒŒ์ดํ”„๋ผ์ธ(Pipeline): ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ
    • ๋ถ€๋™์†Œ์ˆ˜์  ์—ฐ์‚ฐ

๊ทธ๋ž˜ํ”ฝ ์—ฐ์‚ฐ

ํ™”๋ฉด ์ฒ˜๋ฆฌ

์กฐ๊ฑด: FHD ํ•ด์ƒ๋„ ๋ชจ๋‹ˆํ„ฐ(๊ฐ€๋กœ 1920, ์„ธ๋กœ 1080๊ฐœ์˜ ํ”ฝ์…€), ์ฃผ์‚ฌ์œจ 60hz(์ดˆ๋‹น 60๋ฒˆ์˜ ๋ชจ๋‹ˆํ„ฐ ๊ฐฑ์‹ ์ด ๋ฐœ์ƒํ•œ๋‹ค.)

  • ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ดˆ๋‹น 1920 x 1080 x 60 ํšŒ์˜ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค. (์ดˆ๋‹น 124,416,000 ํšŒ์˜ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค.)
  • GPU๋Š” ์ด ๋‹จ์ˆœํ•˜์ง€๋งŒ ์ˆ˜๋งŽ์€ ์ž‘์—…๋“ค์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

3D ๊ฐ์ฒด ํ‘œํ˜„

์ (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๊ฐ€ ๋ณ€ํ™˜๋  ๋•Œ ์ˆ˜ํ–‰๋˜๋Š” ํ–‰๋ ฌ ์—ฐ์‚ฐ

      affine

NVIDIA CUDA

  • NVIDIA์‚ฌ์˜ ๊ฒฝ์šฐ, ์ˆ˜๋ฐฑ, ์ˆ˜์ฒœ๋งŒ ๊ฐœ์˜ ์—ฐ์‚ฐ์„ warp๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์–ด GPU์˜ ๊ฐ ์ฝ”์–ด๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  • CPU๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋ฉด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋ณ€ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค์ง€๋งŒ, NVIDIA์˜ CUDA๋ฅผ ํ™œ์šฉํ•œ GPU๋Š” ์ง€์—ฐ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ฐ”๋กœ ๋‹ค์Œ warp์˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ตœ๊ทผ GPU์˜ ํ™œ์šฉ

  • ๋”ฅ ๋Ÿฌ๋‹
    • ์‹ ๊ฒฝ์„ธํฌ๋ฅผ ํ‰๋‚ด ๋‚ธ ์‹ ๊ฒฝ๋ง ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋”ฅ ๋Ÿฌ๋‹์˜ ๊ฒฝ์šฐ, ์ˆ˜๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณฑ์…ˆ๊ณผ ๋ง์…ˆ์ฒ˜๋Ÿผ ๋‹จ์ˆœ ์—ฐ์‚ฐ๋งŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— GPU๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํšจ๊ณผ์ ์ด๋‹ค.
  • ๊ฐ€์ƒํ™”ํ ์ฑ„๊ตด
    • ๋น„ํŠธ์ฝ”์ธ์˜ ๊ฒฝ์šฐ, ์ฑ„๊ตดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ •ํ•ด์ง„ ํ•ด์‹œ ๊ฐ’์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ž„์˜์˜ ์ˆซ์ž๋ฅผ ๊ณ„์†ํ•ด์„œ ๋ง์…ˆํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— GPU๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐํ•œ๋‹ค.(๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๊ฐ€ ๋งค์šฐ ๋น„์‹ธ์ง„ ์ด์œ )
  • ๋‚ ์”จ ์˜ˆ๋ณด
    • ๋‚ ์”จ ์˜ˆ๋ณด์˜ ๊ฒฝ์šฐ, ํŠน์ • ๊ตฌ์—ญ์„ ๊ฒฉ์ž ํ˜•ํƒœ๋กœ ์ชผ๊ฐœ์–ด ๊ทธ ๊ตฌ์—ญ์˜ ์˜จ๋„๋‚˜ ๊ธฐ์ƒ ์ƒํƒœ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ชผ๊ฐœ์–ด์ง„ ์ˆ˜๋งŽ์€ ๊ตฌ์—ญ์˜ ๋ฐ์ดํ„ฐ๋ฅผ GPU๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋ฉด์ ‘ ๋Œ€๋น„

  • CPU์™€ GPU์˜ ์ฐจ์ด์ ์€?