본문 바로가기

it관련

컴퓨터 그래픽카드에 대한 오해와 답변

반응형



오해 1) 그래픽 칩의 성능이 좋으면 (소위 말하는 최신 그래픽 칩, 혹은 같은 회사/같은 세대의 칩중에서도 모델명의 숫자가 높은 칩) 동영상 등 2D 관련 그래픽 성능도 좋아진다?

  -> 대답은 "아니오" 다.

      왜 아니오 인지는 아래에서 자세히 설명할 예정이니 이유를 알고 싶은 분들은 아래를 읽어보세요.


오해 2) CPU 내장 그래픽은 동영상, 포토샵 등 일반적인 2D 작업시에도 외장 그래픽에 비해 성능이 많이 떨어진다?

   -> 대답은 역시 "아니오" 다.

     마찬가지로, 왜 아니오 인지는 아래에서 자세히 설명할테니 이유가 궁금하신 분들은 아래를 읽어보세요.


오해 3) 그래픽(비디오) 전용 메모리는 단순히 속도가 더 빠른 메모리가 사용이되기때문에 더 좋은 것이다?

  -> 대답은 역시 "아니오".

     왜 아니오 인지는 아래에서 자세히 설명할테니 이유가 궁금하신 분들은 아래를 읽어보세요.


이상 위 3가지가 그래픽 칩이나 그래픽 카드에 관에 가장 많이들 잘 못 알고 있는 사실들인 것 같다.

그렇다면 이제 필자가 위에서 왜 아니라고 답을 했는지를 설명하기위해 본격적인 본론으로 들어가보자.

 

1. 그래픽 칩의 역활

  그래픽 칩을 흔히들 GPU(Graphic Processor Unit)라고 부르기도 한다.

  CPU(Central Processor Unit)와 구분짓기위해 붙인 이름인데 이는 아주 오래전 컴퓨터 그래픽 칩 제조회사 중 한곳에서 만들어 붙이기 시작한 이름일 뿐이지 절대 그래픽칩이 CPU를 대신 할 수는 없다.

 엄밀히 말하면 그래픽칩은 그저 CPU의 보조역활을 하는 칩에 불과하다. 

  그럼, 도대체 컴퓨터에서 그래픽 칩이 하는 정확한 역활이 무엇일까?

  CPU라는 중앙처리장치인 성능 좋은 메인 프로세서가 엄연히 존재하고 있는데 왜 굳이 그래픽 칩이라는 별도의 프로세서가 있어야만 하는 것일까.

위에서 언급했던 세가지 오해들의 대부분은 이 질문에서부터 잘 못 된 오해로 인해 발생한 영향이 크다고 보여진다.


컴퓨터에서 그래픽 칩은 크게 3가지의 기능을 한다.

- CPU로부터 받은 그래픽관련 데이타들을 처리하거나 비디오 메모리에 담아놓는 중간 컨트롤러 역활

- 모니터에 화면을 나타내기위한 그래픽 정보들을 뿌려주는 역활

- 복잡한 3D 명령(Instruction)과 데이터들을 연산하고 처리하는 전용 하드웨어 가속기 역활

이외에도 여러 기능들이 들어가있지만 위의 세가지 기능이 그래픽 칩의 대표적인 역활이다.


하나하나 좀 더 자세히 들여다보면,

첫번째, CPU로부터 받은 그래픽관련 데이터들을 처리하거나 비디오 메모리에 담아놓는 중간 컨트롤러 역활로써의 그래픽 칩은 컴퓨터의 핵심장치이자 모든 데이터를 최초로 건드리고 다루는 CPU가 일차적으로 처리한 데이터들 중 모니터 화면에 표시되어야만 하는 정보들에 대한 화상데이터를 GPU에게 넘겨준다.

그러면 GPU는 이 데이터들을 받아서 좀 더 가공이 필요한 화상데이터들은 추가적으로 처리를 해주고 모두 처리된 후 최종적으로 모니터 화면에 표시되어야하는 정보값들만 비디오 메모리 중 일부인 프레임버퍼라고 하는 영역에 일시적으로 저장해둔다. (* 프레임버퍼에 대한 설명은 2번 그래픽 메모리 파트에서) 

두번째, 모니터에 화면을 나타내기위한 그래픽 정보들을 뿌려주는 역활로써,

GPU는 위에서 저장해두었던 프레임버퍼에 있는 화상데이터값들을 모니터에 나타내기 위해 읽어들여와 출력단쪽으로 뿌려주면 그 정보들은 적절한 출력단을 통해 그대로 모니터 화면에 표시가 되고 이것들이 우리가 실제로 눈으로 보게되는 화면이다. 

세번째, 복잡한 3D 명령(Instruction)과 데이터들을 연산하고 처리하는 전용 가속기 역활은 아래 3번 파트에서 좀 더 자세히 설명하겠다.


이 외에도 그래픽 칩 내부에는 2D 엔진도 있고, 화상데이터를 압축하거나 풀어주는 하드웨어 코덱 기능도 있고 몇몇 기능들이 더 있다.

하지만, 이 기능들은 그다지 큰 비중을 차지하는 부분은 아니고 일일이 설명하자면 복잡하고 길어지니 넘어가도록 하겠다.


2. 그래픽 메모리(비디오 메모리)란?

 그래픽 칩을 설명하자면 반드시 함께 설명해야하는 중요한 부품이 있는데 바로 그래픽 메모리이다.

흔히들 이 메모리를 가리켜 그래픽 메모리 혹은 비디오 메모리라고 부른다. 

그러면, 컴퓨터에는 RAM이라고 하는 메인 메모리가 엄연히 있는데 왜 굳이 그래픽 메모리라는 별도의 용어가 필요한 것일까.

그래픽 메모리가 필요한 이유는 여러가지가 있지만 가장 중요한 이유는 위에서 잠깐 언급했던 프레임버퍼라는 역활때문이다.


기술적으로 컴퓨터는 전자적인 계산을 위한 기능이 첫번째이지만 치명적인 단점이 있는데 컴퓨터는 아직까지는 사람처럼 자유자재로 말을 하거나 알아들 수는 없는 기계라는 것이다.

그런 기계에게 명령을 내리고 명령의 결과물을 알기위해서는 소리가 불가능하니 시각을 이용하여 그 기계와 대화하는 수밖에 없다.

그래서 아직까지의 컴퓨에서는 반드시 필요한 장치가 모니터이다.

모니터가 없으면 내 명령이 제대로 전달되었는지 확인할 길도 없고, 명령에 대한 결과물이 어떻게 나왔는지 확인할 길도 없다.

이처럼 반드시 없어서는 안될 모니터인데, 쉽게 설명하자면 이 모니터에 표시되는 한순간의 화면을 가리켜 프레임이라고 부른다.

그리고, 그 한순간의 화면에 표시되어져야할 화상 데이터들을 임시적으로 저장해두고 있는 공간이 바로 프레임버퍼이다.


여기서 화상 데이터들이란,

우리가 보는 모니터는 눈에는 잘 안보이지 않지만 수많은 점(픽셀,화소)들로 구성이 되어져 있는 디스플레이 장치이다.

예를 들어 최대해상도 1920 x 1080 의 LCD 모니터라면 가로에 1920개의 점, 세로에 1080개의 작은 점들이 빼곡히 박혀 있다.

이 수많은 작은 점들은 평상시에는 아무런 색을 띄고있지 않지만 컴퓨터가 켜지고 동작을 시작하면 그래픽 칩에 의해 특정한 색들로 하나하나 모두 채워지게 된다.

바로 이 특정한 위치의 특정한 색상에 대한 데이터값이 화상 데이터이다.


얼핏 계산해보면 알겠지만 1920 x 1080 해상도의 모니터가 모두 색으로 채워지기 위해서는 약 2백만개가 넘는 각각의 점들에대한 색상값이 그 좌표위치값과 함께 저장이 되어져있어야 한다.

더구나, 일반적인 LCD 모니터들은 1초에 60번정도가 깜빡이고 깜빡이는 순간순간마다 데이타값들은 계속해서 업데이트되게 된다.

그러니 지속적으로 화면을 표시하기위해 필요한 화상 데이터량이 얼마나 많을지는 대충 상상이 갈 것이다.

이런 엄청난 데이터량을 감당하기위해 컴퓨터는 프레임버퍼라고 하는 별도의 화면표시용 데이터 저장 전용 공간을 따로 갖고 있는것인데, 이름만 특별히 더 붙여놓았다뿐이지 잘아는 메모리라는 장치를 프레임버퍼로 사용하고 이 용도의 메모리를 가리켜 특별히 그래픽 메모리라고 부르는 것이다.

물론, 오늘날의 그래픽 메모리 전체가 프레임버퍼로만 사용되는 것은 아니다.

컴퓨터의 그래픽 기술이 발전을 하고 3D 그래픽이 복잡해지면서 3D 처리에 필요한 특정 데이터값들 역시 그래픽메모리의 일부분 영역을 할당받아 사용되어진다.

하지만 여전히 그래픽 메모리의 절반이 넘는 영역은 늘 프레임버퍼의 용도이다.

*주) 한 화면에 윈도우 창을 여러개 띄워 세개 내개의 화면을 겹쳐놓고 동시에 작업한다고 해서 프레임버퍼가 더 많이 필요한 것은 아니다. 이것은 대부분 메인메모리에서 이뤄지는 작업이기때문에 메인메모리를 점유하게되고 프레임 버퍼는 단순히 지금 당장 내눈에 보이는 2차원적인 모니터 상의 화면 그 자체와만 더 관련이 있다. 뒤에 가려진 윈도우창이 몇개있고 거기에 어떤 화면이 있는지는 프레임 버퍼 입장에서는 2차적인 문제이다.


이렇듯 화면 표시를 위해 컴퓨터가 해야하는 일이 결코 작은 작업량이 아니다보니 앞서 설명했듯이 이 프레임버퍼에 데이터를 쓰고 읽는 역활을 전담할 부품이 필요한 것이고 그 역활을 그래픽 칩이 하고 있는것이다.

오늘날에는 컴퓨터에서 3D 게임 등 3D 관련 부분이 중요해지다보니 얼핏 그래픽칩하면 3D 기능만을 떠올리는데 정작 그래픽칩의 가장 우선적이고 기본적인 임무는 지금껏 설명한 기능이지 3D 기능은 아니다.


그렇다면 좀 더 나아가서, 별도의 그래픽 메모리를 갖고 있는 경우와 메인 메모리인 RAM의 일부를 할당받아 그래픽 메모리로 사용하는 공유메모리의 차이점은 무었일까?

일반적으로 별도의 그래픽 전용 메모리를 갖고 있는 경우는 외장(별도) 그래픽 칩이 사용되는 경우이고, 공유메모리가 사용되는 경우는 CPU 내장 그래픽인 경우가 그렇다.

메모리 자체만 놓고 본다면 기본적으로 그래픽 전용 메모리는 메인 메모리인 RAM에서 사용되는 메모리와 같은 DDR 방식의 DRAM이 사용된다.(현재 기준)  

RAM의 SDRAM과 구분하기 위해 GDRAM이라는 별도의 용어를 사용하기도 하지만 기본적인 동작 방식은 동일한 메모리이다.

하지만 중요한 차이점은 그래픽 전용 메모리는 늘 RAM의 세대보다 한두단계 앞서 나가거나 훨씬 빠른 메모리가 사용이 되어진다.

현재 RAM은 DDR3 가 주로 사용이 되지만 그래픽 전용 메모리에는 훨씬 빠른 DDR5 가 사용이 되어지고 있는것이 한 예이다.


그러나, 이 차이점때문만에 그래픽 전용 메모리가 사용되는 경우가 공유메모리 방식보다 훨씬 좋은 성능을 보인다고만 볼 수는 없다.

이 차이점도 어느 정도 작용은 하지만 이보다 더 중요한 차이점이 있기 때문이다.

앞서 설명했듯이 그래픽 메모리로써의 중요한 기능은 프레임버퍼로써의 역활이지만 이외에도 3D 관련 데이터들의 버퍼로도 사용이 되고 이부분에 데이타를 읽고 쓰고 하는 것 또한 그래픽칩이 전담한다.

그래픽 전용 메모리의 경우는 앞서 이미 충분히 설명을 했으니 넘어가고 공유메모리의 경우만 간략하게 설명을 하면, 공유메모리를 사용하는 오늘날의 그래픽칩은 cpu 안에 내장이 되어져 있다.

그리고, 공유 메모리의 본체인 RAM은 cpu에 직접적으로 연결이 되어져 있는 구조이다.

그러니 얼핏 보기에는 그래픽칩이 RAM 중의 일부인 공유 메모리에 직접 억세스할 수 있을 것 같지만 실상은 그렇지 못하다.

cpu안에 들어가 있는 메모리 컨트롤러는 하나밖에 없기 때문이다.

즉, 그래픽 칩은 cpu가 사용하는 메모리 컨트롤러와 공유해서 자기가 할당받은 비디오 메모리 영역에 억세스를 해야하고 여기서부터 병목이 생길 수 있는 소지가 있다.

이후 cpu와 동시에 메모리를 억세스하면서 발생되는 메모리 대역폭에서의 병목까지 더해지면 앞서 언급했던 각각의 다른 종류의 메모리 자체 속도 차이에서 오는 성능차이보다 훨씬 큰 성능저하를 만들어내는 결과를 초래할 수도 있다.

처음 부분의 오해 3) 번에서 아니오 라고 대답한 이유 중 하나가 바로 이 점 때문이다.

그럼 이어서, 왜 오해 2) 번에서는 일반적인 2D 그래픽 작업에서는 내장그래픽이나 외장그래픽이나 성능 차이가 없다고 대답했나.

내장그래픽 칩이 공유메모리의 프레임버퍼에 읽고 쓰고를 하면서 병목현상이 발생할 소지가 없지는 않지만 일반적인 2D 작업처럼 단순 프레임버퍼 용도로만 사용이 되는 경우라면 비디오 메모리때문에 병목이 발생할 확률은 그다지 높지 않기때문이고, 2D 그래픽을 위한 칩의 성능만 놓고봤을때는 성능차이가 없는 것이 맞기때문이다. 이에 대해서는 아래에서 좀 더 설명이 될 예정이다.

  

3. 컴퓨터에서의 3D, 그리고 3D 가속기

 위에서 설명했듯이 그래픽 칩의 가장 중요한 역활은 3D가 아니다.

 더구나 개인용 컴퓨터 초장기 시절 3D가 그다지 보편화가 안되었을때는 더더욱 그러했다. 

하지만 기술이 발전하고 보다 현실감이 중요해지면서 사람들은 단순한 2차원 화면이 아니라 입체감이 추가된 보다 현실과 가까운 3차원의 시각적 화면을 점점 더 원하게 되었다.

물론, 단순히 2차원인 모니터에 표현하는 3차원의 시각화일 뿐이지만, 이 3차원의 시각화라는게 그리 단순한 문제가 아닌것이 2D와는 달리 3D의 입체감을 표현하기위해서는 그냥 화상 데이터를 단순히 화면에 뿌리는 것만으로는 어림없는 엄청 복잡한 연산과정과 이를 구현하기위한 세세한 기술이 필요한 고도의 작업량을 필요로 하는 분야이다.

지금처럼 3D 그래픽 칩이 많이 발전을 하기 전인 컴퓨터 초창기에는 이런 복잡한 3D표현을 위한 연산과정의 대부분을 CPU가 소프트웨어적으로 처리를 해왔었다.

안그래도 가뜩이나 바쁜 CPU에게 3D처리까지 맡기니 컴퓨터의 성능이 제대로 나올리가 없었고, 이런 문제점을 보안하기위해 CPU 대신 그래픽칩쪽에서 3D를 처리할 수 있는 전담 하드웨어를 구성하게 된 것이다.

이것이 바로 오늘날 3D 그래픽 칩의 핵심 기능인 3D 가속기이다.

그런데 여기서, 왜 가속기능이라고 부르느냐가 중요하다.

맨 앞에서도 말했지만 모든 데이터의 1차적인 처리는 여전히 늘 CPU가 한다.

기본적인 데이터 처리가 끝나고 3차원 데이터를 생성하기 위한 단계가 되면 CPU는 이를 그래픽칩의 3차원 데이터 처리 전담 유닛에게 넘기고 이 데이터를 받은 그래픽칩은 자신의 내부에 있는 3차원 처리 전담 엔진에 집어넣어서 3D 처리를 위한 전용 명령어들과 함께 빠르게 3D 연산을 수행하는 방식인 것이다.

즉, 조금더 시간을 들이고 힘을 쏟아 부으면 CPU가 마저 처리할 수도 있지만 굳이 그런 고생을 하기 싫어서 좀 더 빠르게 처리하기위한 전담 하드웨어이다 보니 가속기라는 이름이 붙은 것이고 이 용도는 오로지 3D 명령/데이터 처리에만 사용이 되어지다보니 3D 가속기 라는 이름이 붙은 것이다. (물론, 요즘은 이 엔진의 기능이 단순 3D 데이터 처리가 아닌 그래픽 외 다른 용도로 활용되는 기술들이 구현되고 있기도 하다.)

다만, 이 3D 가속기라는 엔진이 CPU안에 있는게 아니고 그래픽 칩 내부에 있다는 것 뿐이다.


앞서 말햇듯이 오늘날에는 그래픽칩하면 거의 3D 기능만을 쳐다본다.

컴퓨터를 사용하는 소비자들뿐만이 아니라 그래픽칩을 제조하는 그래픽칩 회사에서 조차도 새로운 그래픽 칩을 내놓을때면 늘 3D 기능에대한 향상만이 이루어진다.

동작속도인 클럭이 몇 MHz 니, 내부에 들어간 ALU 나 스트림 프로세서가 몇개니 하는 등등 이 모든 것들은 오로지 3D 엔진에만 연관이 있지 2D 그래픽 기능과는 전혀 상관이 없다.

그럴만도 한 것이 이미 한참전에 2D 그래픽 관련해서는 더 이상 발전시킬 기술도 없고 발전의 필요성도 없을만큼 충분히 빠르고 최고단계까지 다 이룬것이기때문이기도 하다.

몇몇 사람들 중에는 3D 가속 그래픽 칩이니 당연히 2D 그래픽 관련 기능들도 더불어 가속이 될 것이라고 오해를 하는 것 같은데, 2D 그래픽 관련한 데이터들 중에는 가속을 필요로하는 데이터나 명령도 없을 뿐더러 2D 기능의 동작 속도를 더 빠르게 올린다한들 동영상을 더 빠르게 재생되게하는 정도의 결과가 나올뿐일텐데 누가 동영상을 더 빠르게 재생되기를 바라겠는가.

동영상은 일정속도로 재생이 되어야지 빠르게 재생이 된다고 좋은게 아니지않는가.

(* 엄밀히 말하면 그래픽칩의 2D 엔진 중에도 가속기능은 있다. 하드웨어 코덱이 그것인데 이것은 이미 성능에 무관할 정도로 낮은 기술이 되어버렸기때문에 설명은 생략.)

이것이 오해 1) 번에서 최신 그래픽 칩이나 보다 높은 등급의 그래픽 칩이라도 2D 그래픽 성능에는 차이가 없다고 말한 이유이다.

아울러, 앞서  잠깐 설명한 것에 더해, 오해 2) 번에서 2D 성능에는 내장그래픽이나 외장그래픽이나 성능차이가 없다고 말한 이유이기도 하다.


컴퓨터의 3D 그래픽에 관해 설명하자면 한도 끝도 없이 길어지고 복잡해진다.

3D 그래픽 컴퓨팅 기술이 그만큼 복잡하고 어려운 기술이기 때문이다.

혹시 나중에 시간이 된다면 3D 관련하여 한번 더 글을 써볼지도 모르겠지만 일단은 여기까지만 설명을 하는게 좋을 것 같다.

반응형