컴퓨터 그래픽을 렌더링하기 위해 CPU와 GPU가 어떻게 상호 작용합니까?

Aug 21, 2025
하드웨어

컴퓨터의 중앙 처리 장치 (CPU)와 그래픽 처리 장치 (GPU)는 컴퓨터를 사용할 때마다 상호 작용하여 선명하고 반응이 빠른 시각적 인터페이스를 제공합니다. 함께 작동하는 방법을 더 잘 이해하려면 계속 읽으십시오.

~의 사진 스 켄넬 .

오늘의 질문 및 답변 세션은 Q & A 웹 사이트의 커뮤니티 드라이브 그룹 인 Stack Exchange의 하위 부문 인 SuperUser가 제공 한 것입니다.

질문

수퍼 유저 독자 Sathya는 다음과 같은 질문을했습니다.

여기에서는 OpenGL API를 기반으로하는 회전 삼각형이있는 Triangle.exe라는 작은 C ++ 프로그램의 스크린 샷을 볼 수 있습니다.

물론 매우 기본적인 예이지만 다른 그래픽 카드 작업에도 적용 할 수 있다고 생각합니다.

저는 궁금해서 Windows XP에서 Triangle.exe를 두 번 클릭하여 모니터에서 삼각형이 회전하는 것을 볼 수있을 때까지 전체 프로세스를 알고 싶었습니다. CPU (.exe를 먼저 처리)와 GPU (마지막으로 화면에 삼각형을 출력 함)는 어떻게 상호 작용합니까?

이 회전 삼각형을 표시하는 데 관련된 것은 주로 다음과 같은 하드웨어 / 소프트웨어입니다.

하드웨어

  • HDD
  • 시스템 메모리 (RAM)
  • CPU
  • 비디오 메모리
  • GPU
  • LCD 디스플레이

소프트웨어

  • 운영 체제
  • DirectX / OpenGL API
  • Nvidia 드라이버

누군가가 프로세스를 설명 할 수 있습니까? 아마도 설명을 위해 일종의 순서도를 사용하여 설명 할 수 있습니까?

모든 단계를 포괄하는 복잡한 설명 (범위를 벗어나는 추측)이 아니라 중간 IT 담당자가 따를 수있는 설명이어야합니다.

나는 스스로를 IT 전문가라고 부르는 많은 사람들이이 프로세스를 올바르게 설명하지 못할 것이라고 확신합니다.

대답

여러 커뮤니티 회원이 질문에 답변했지만 Oliver Salzburg는 더 많은 노력을 기울여 상세한 답변뿐만 아니라 우수한 그래픽으로 답변했습니다.

이미지 JasonC, 여기에서 배경 화면으로 사용 가능 .

그는 다음과 같이 씁니다.

프로그래밍 측면과 구성 요소가 서로 대화하는 방식에 대해 약간 쓰기로 결정했습니다. 특정 영역을 밝힐 수도 있습니다.

프레젠테이션

질문에 게시 한 단일 이미지가 화면에 그려지려면 무엇이 필요합니까?

화면에 삼각형을 그리는 방법에는 여러 가지가 있습니다. 간단하게하기 위해 정점 버퍼가 사용되지 않았다고 가정하겠습니다. (ㅏ 정점 버퍼 좌표를 저장하는 메모리 영역입니다.) 프로그램이 단순히 모든 단일 정점 (정점은 공간의 좌표 일뿐)에 대해 그래픽 처리 파이프 라인에 전달했다고 가정 해 보겠습니다.

그러나 , 무언가를 그리기 전에 먼저 비계를 실행해야합니다. 우리는 볼 것이다 나중:

// 화면과 깊이 버퍼 지우기
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// 현재 Modelview 매트릭스 재설정
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();

// 삼각형을 사용하여 그리기
glBegin (GL_TRIANGLES);

  // 빨간색
  glColor3f (1.0f, 0.0f, 0.0f);
  // 삼각형의 꼭대기 (앞면)
  glVertex3f (0.0f, 1.0f, 0.0f);

  // 초록
  glColor3f (0.0f, 1.0f, 0.0f);
  // 삼각형의 왼쪽 (앞면)
  glVertex3f (-1.0f, -1.0f, 1.0f);

  // 푸른
  glColor3f (0.0f, 0.0f, 1.0f);
  // 삼각형의 오른쪽 (앞면)
  glVertex3f (1.0f, -1.0f, 1.0f);

// 그리기 완료
glEnd ();

그래서 그것은 무엇을 했습니까?

그래픽 카드를 사용하려는 프로그램을 작성할 때 일반적으로 드라이버에 대한 인터페이스를 선택합니다. 드라이버에 대해 잘 알려진 인터페이스는 다음과 같습니다.

  • OpenGL
  • Direct3D
  • 기적

이 예제에서는 OpenGL을 사용합니다. 자, 당신의 드라이버 인터페이스 프로그램을 만드는 데 필요한 모든 도구를 제공합니다. 이야기 그래픽 카드 (또는 드라이버)에 회담 카드에).

이 인터페이스는 당신에게 확실한 도구 . 이러한 도구는 프로그램에서 호출 할 수 있습니다.

이 API는 위의 예에서 사용되는 것으로 보입니다. 자세히 살펴 보겠습니다.

비계

실제로 실제 그림을 그리기 전에 먼저 설정 . 뷰포트 (실제로 렌더링 될 영역), 관점 ( 카메라 (삼각형 가장자리를 매끄럽게하기 위해) 사용할 앤티 앨리어싱은 무엇입니까?

하지만 우리는 그 어떤 것도 보지 않을 것입니다. 해야 할 일을 살펴 보겠습니다. 모든 프레임 . 처럼:

화면 지우기

그래픽 파이프 라인은 매 프레임마다 화면을 지우지는 않습니다. 당신은 그것을 말해야 할 것입니다. 왜? 이는 이유:

화면을 지우지 않으면 간단히 무승부 모든 프레임. 그래서 우리는 glClear 와 더불어 GL_COLOR_BUFFER_BIT 세트. 다른 비트 ( GL_DEPTH_BUFFER_BIT ) OpenGL에게 깊이 완충기. 이 버퍼는 어떤 픽셀이 다른 픽셀 앞에 (또는 뒤에) 있는지 확인하는 데 사용됩니다.

변환


이미지 소스

변환은 모든 입력 좌표 (삼각형의 꼭지점)를 가져와 ModelView 행렬을 적용하는 부분입니다. 이것은 매트릭스입니다 설명 어떻게 우리 모델 (정점) 회전, 크기 조정 및 변환 (이동)됩니다.

다음으로 투영 행렬을 적용합니다. 이렇게하면 모든 좌표가 카메라를 올바르게 향하도록 이동합니다.

이제 뷰포트 매트릭스를 사용하여 한 번 더 변형합니다. 우리는 모델 우리 모니터의 크기에. 이제 렌더링 할 준비가 된 정점 세트가 있습니다!

우리는 조금 후에 변형으로 돌아올 것입니다.

그림

삼각형을 그리기 위해 OpenGL에 새로운 삼각형 목록 전화로 glBegin 와 더불어 GL_TRIANGLES 일정한.
그릴 수있는 다른 형태도 있습니다. 같은 삼각형 스트립 또는 삼각형 팬 . 이들은 같은 양의 삼각형을 그리기 위해 CPU와 GPU 간의 통신이 덜 필요하기 때문에 주로 최적화입니다.

그런 다음 각 삼각형을 구성해야하는 3 개의 정점 세트 목록을 제공 할 수 있습니다. 모든 삼각형은 3 개의 좌표를 사용합니다 (3D 공간에서). 또한 색깔 각 정점에 대해 glColor3f 전에 부름 glVertex3f .

3 개의 꼭지점 (삼각형의 3 개 모서리) 사이의 음영은 OpenGL에 의해 계산됩니다. 자동으로 . 다각형의 전체면에 색상을 보간합니다.

상호 작용

이제 창을 클릭하면. 응용 프로그램은 창 메시지 클릭 신호입니다. 그런 다음 프로그램에서 원하는 작업을 실행할 수 있습니다.

이것은 제비 3D 장면과 상호 작용을 시작하려면 더 어렵습니다.

먼저 사용자가 창을 클릭 한 픽셀을 명확하게 알아야합니다. 그런 다음 원근법 이를 고려하여 마우스 클릭 지점에서 장면으로 광선의 방향을 계산할 수 있습니다. 그런 다음 장면에있는 오브젝트가 교차 그 광선으로 . 이제 사용자가 개체를 클릭했는지 알 수 있습니다.

그래서 어떻게 회전 시키나요?

변환

일반적으로 적용되는 두 가지 유형의 변환에 대해 알고 있습니다.

  • 매트릭스 기반 변환
  • 뼈 기반 변형

차이점은 싱글에 영향을 미치다 정점 . 행렬은 항상 같은 방식으로 그려진 모든 정점에 영향을줍니다. 예를 살펴 보겠습니다.

앞서 우리는 단위 행렬 삼각형을 그리기 전에 단위 행렬은 단순히 변형 없음 조금도. 그래서 내가 그리는 것은 내 관점에 의해서만 영향을받습니다. 따라서 삼각형은 전혀 회전하지 않습니다.

지금 회전하려면 CPU에서 직접 수학을 수행하고 간단히 호출 할 수 있습니다. glVertex3f 다른 (회전되는) 좌표. 또는 다음을 호출하여 GPU가 모든 작업을 수행하도록 할 수 있습니다. glRotatef 그리기 전에 :

// Y 축에서 삼각형 회전 glRotatef (amount, 0.0f, 1.0f, 0.0f);

물론 고정 된 값일뿐입니다. 당신이 원한다면 생기 있는 , 당신은 추적해야합니다 매 프레임마다 늘립니다.

자, 잠깐, 모든 매트릭스 이야기는 어떻게 되었습니까?

이 간단한 예에서는 행렬에 대해 신경 쓸 필요가 없습니다. 우리는 단순히 glRotatef 우리를 위해 모든 것을 처리합니다.

glRotate 회전 생성 각도 벡터 x y z 주위의 각도. 현재 행렬 ( glMatrixMode )에 회전 행렬을 곱하여 현재 행렬을 대체하는 것처럼 glMultMatrix 다음 행렬을 인수로 사용하여 호출되었습니다.

x 2 ⁡ 1 – c + cx y ⁡ 1 – c – z sx z ⁡ 1 – c + y s 0 y x ⁡ 1 – c + z sy 2 ⁡ 1 – c + cy z ⁡ 1 – c – x s 0 x z ⁡ 1 – c – y sy z ⁡ 1 – c + x sz 2 ⁡ 1 – c + c 0 0 0 0 1

음, 감사합니다!

결론

뻔한 건 얘기가 많아 ...에 OpenGL. 그러나 그것은 말하지 않습니다 우리 아무것도. 커뮤니케이션은 어디에 있습니까?

이 예제에서 OpenGL이 우리에게 말하는 유일한 것은 완료되면 . 모든 작업에는 일정 시간이 걸립니다. 일부 작업은 엄청나게 오래 걸리고 다른 작업은 엄청나게 빠릅니다.

정점 보내기 GPU에 대한 속도가 너무 빨라서 표현하는 방법조차 모를 것입니다. 단일 프레임마다 CPU에서 GPU로 수천 개의 정점을 보내는 것은 거의 문제가되지 않습니다.

화면 지우기 뷰포트의 크기에 따라 밀리 초 또는 그보다 더 나빠질 수 있습니다 (일반적으로 각 프레임을 그리는 데 약 16 밀리 초 밖에 걸리지 않음). 이를 지우려면 OpenGL은 지우려는 색상의 모든 단일 픽셀을 그려야합니다. 수백만 픽셀이 될 수 있습니다.

그 외에는 OpenGL에 그래픽 어댑터의 기능 (최대 해상도, 최대 앤티 앨리어싱, 최대 색상 깊이 등)에 대해서만 물어볼 수 있습니다.

그러나 각각 특정 색상을 가진 픽셀로 텍스처를 채울 수도 있습니다. 따라서 각 픽셀은 값을 보유하고 텍스처는 데이터로 채워진 거대한 "파일"입니다. 텍스처 버퍼를 생성하여 그래픽 카드에로드 한 다음 셰이더 , 셰이더에게 텍스처를 입력으로 사용하고 "파일"에 대해 매우 무거운 계산을 실행하도록 지시합니다.

그런 다음 계산 결과 (새로운 색상의 형태로)를 새 텍스처로 "렌더링"할 수 있습니다.

이것이 GPU가 다른 방식으로 작동하도록하는 방법입니다. 나는 CUDA가 그 측면과 유사하다고 생각하지만, 그것을 사용할 기회가 없었습니다.

우리는 전체 주제를 약간만 다루었습니다. 3D 그래픽 프로그래밍은 정말 대단합니다.


이미지 소스


설명에 추가 할 것이 있습니까? 댓글에서 소리를 내세요. 기술에 정통한 다른 Stack Exchange 사용자의 답변을 더 읽고 싶으신가요? 여기에서 전체 토론 스레드를 확인하십시오. .

How To RENDER With GPU, CPU Or BOTH In Blender

CPU VS GPU: How Do They Affect Video Games?

AutoCAD Rendering With CPU Or GPU

Maya: GPU And CPU Render Tests [Arnold]

V-Ray Rendering- GPU Vs. CPU

CPU Vs GPU In Blender Rendering

GPU Vs CPU Video Rendering And Video Editing

What Is A GPU And How Does It Work? - Gary Explains

CPU Vs GPU For Video Editing And Rendering

CPU VS GPU Rendering (Extensive)


하드웨어 - 가장 인기있는 기사

iPhone 또는 iPad를 Apple TV 리모컨으로 사용하는 방법

하드웨어 Aug 2, 2025

캐치되지 않은 콘텐츠 Apple TV 리모컨은 소파 쿠션 사이에서 쉽게 길을 잃을 수 있지만 Apple TV Remote 앱 iPhone 및 iPad의 경우 항�..


Xbox One에서 공간을 확보하는 방법

하드웨어 Jul 14, 2025

캐치되지 않은 콘텐츠 Microsoft의 Xbox One에는 500GB 하드 드라이브가 포함되어 있지만 게임은 점점 더 커지고 있습니다. Halo : Master Chief 컬�..


날씨 정보를 얻기 위해 Ecobee의 위치를 ​​설정하는 방법

하드웨어 Sep 2, 2025

Ecobee 온도 조절기 제품군에는 지역 날씨 정보를 사용하여 집을 난방하거나 냉방하는 가장 좋은 방법을 결정할 수있는 깔끔한 기능이 있�..


Apple Watch에서 손목 올리기의 마지막 활동을 재개하는 방법

하드웨어 Dec 4, 2024

캐치되지 않은 콘텐츠 기본적으로 손목을 들어 올리면 Apple Watch 화면이 켜집니다. 또한 기본적으로 손목을 들어서 화면이 켜지면 화면�..


HDTV에서 DVD를 더보기 좋게 만드는 방법은 무엇입니까?

하드웨어 Oct 23, 2025

캐치되지 않은 콘텐츠 HD 비디오 시대에 살고 있다고해서 우리 모두가 오래된 DVD를 HD 콘텐츠로 업그레이드 한 것은 아닙니다. 고화질 TV..


VirtualBox의 USB 드라이브에서 부팅하는 방법

하드웨어 Jul 4, 2025

VirtualBox는 USB 플래시 드라이브에서 가상 머신을 부팅 할 수 없으므로 다음을 수행 할 수 있습니다. 라이브 Linux 시스템 부팅 �..


노트북 및 가상 라우터로 나만의 Wi-Fi 핫스팟 만들기

하드웨어 Oct 17, 2025

캐치되지 않은 콘텐츠 무선 인터넷 연결은 예전보다 훨씬 더 널리 사용되지만 유선 연결을 사용하는 데 어려움을 겪고 무선으로 사용�..


전화 접속 모뎀이 왜 그렇게 시끄 럽습니까?

하드웨어 Oct 16, 2025

캐치되지 않은 콘텐츠 1990 년대 내내 대부분의 인터넷 사용자는 전화 접속 모뎀의 시끄러운 악수로 세션을 시작했지만, 그 모든 전자 수다�..


카테고리