"다이렉트컴퓨팅"이란 무엇인가?


"다이렉트컴퓨팅"이란 무엇인가?  공통/비교 / CPU 
2009/10/06 11:48
    출처 : 브레인박스,  작성일자 : 2009.09.29,   링크주소 : http://www.brainbox.co.kr/review/view.asp?cmid=1&csid=1&searchcolumn=&searchstring=&page=&id=2876&detail_id=26446&from

다이렉트컴퓨팅 이란 무엇인가?
무수히 많은 하드웨어가 빠른 속도로 진화 혹은 출시하고 있는 가운데, 느린 속도로 하지만 큰 반향을 일으키는 것은 어찌 보면 소프트웨어가 많았다. 이런 큰 변화의 중심에는 모든 사람들이 빌게이츠, 이하 마이크로소프트가 있었다. 이번 윈도7이 출시되면서 가장 중요시 되고 있는 바로 다이렉트 컴퓨팅이란 무엇인가를 알아보는 자리를 마련했다.


마이크로소프트의 DirectCompute?

마이크로소프트의 다이렉트 컴퓨트는 현재 탑재되어 사용되고 있는 그래픽 프로세싱 유닛 (이하 GPU)의 병렬 처리의 장점을 활용하여 윈도 비스타 혹은 윈도 7에서 사용 가능한 어플리케이션 프로그래밍 인터페이스 (흔히 불리우는 API) 이다. 다이렉트 컴퓨트는 또한 마이크로소프트의 다이렉트 X와도 많은 연관성을 갖고 있는데 그 이유는 DirectX의 API 들을 대부분 포괄하고 있기 때문이다. (대표적으로 Direct3D, Direct2D, DirectWrite, DirectDraw, DirectMusic, DirectPlay, DirectSound 등을 포함하고 있다.) 이 다이렉트 컴퓨트는 윈도7에 기본적으로 탑재될 다이렉트X 11 API를 시작으로 다이렉트X 10과 다이렉트 11를 지원하는 GPU에서 구현 가능하다.

현재 GPU는 병렬 컴퓨팅에 최적화가 되어 있는데 1개의 칩셋에 약 100 개 정도의 프로세싱 코어가 내장 되어 있다. 예를 들어 어떤 특정 단어를 찾기 위해 책의 전체를 찾아야 하는 경우 예를 들어 프로세서로 해당 작업을 할 경우 책의 처음 부터 마지막 페이지까지 검색을 해야 한다. 하지만 GPU를 사용한 병렬 컴퓨팅의 경우 책을 1/n 으로 나누어서 즉 100페이지의 책을 10개의 스트림 프로세서가 나누어서 처리하기 때문에 물리적으로 100페이지를 1개의 프로세서가 검색을 해야 하는 경우 보다 단순 수치상으로만 약 10배 정도 빠른 성능을 보여주게 된다.

GPGPU?
GPGPU는 (General Purpose Computing on Graphics Processing Unit)의 약자로, 그래픽 관련 작업들만 일관적으로 처리해 왔던 GPU에서 벗어나 전통적으로 CPU가 사용했던 어플리케이션을 GPU가 처리함으로서 성능 향상을 꾀하는 것이다. 이를 가능하게 한 것은 바로 소수점 실수 연산 부분에서 빠른 성능을 보이며 이를 이용한 렌더링 파이프 라인을 통해 빠른 결과값을 얻을 수 있다.

OpenCL?
OpenCL은 Apple이 처음으로 개발한 표준으로써 발표 초기 AMD,Intel, 엔비디아 등 대부분의 하드웨어 개발업체가 기술지원을 약속으로 시작되었다. OpenCL (Open Computing Language)는 프로세서와 GPU 사이를 유기적으로 연결하는 소프트웨어 프레임워크를 의미한다. 또한 OpenCL은 C언어로 만들어졌으며 커넬과 이를 구성하는 API가 포함된 플랫폼이다. OpenCL은 총 2개의 병렬컴퓨팅을 지원하는데 첫번째로 테스크 기반의 병렬처리와 데이터 처리 기반의 병렬처리로 나눈다.
OpenCL은 앞서 OpenGL, ApenAL 등과 같이 3D 그래픽과 컴퓨터 오디오 등을 오픈된 형태의 표준을 지향한다. 또한 OpeCL은 앞서 봤던 GPGPU의 대부분 내용을 포괄하고 있으므로 그 보다 큰 의미를 갖는다.

CUDA ?
CUDA는 Compute Unified Device Architechure의 약자로 엔비디아가 개발한 병렬 컴퓨팅 구조를 의미한다. 즉 엔비디아의 GPU 혹은 범용적인 GPU에서 구동이 되는 표준 프로그래밍 언어이다. CUDA는 C언어와 엔비디아의 명령어 만을 지원하는 C 언어를 포함하여 구성이 되어 있으며 현재는 OpenCL과 다이렉트 컴퓨트 까지 포함하는 형태로 발전이 되어가고 있다.
지금까지 간단하게 GPGPU, OpenCL 그리고 CUDA 등이 무엇인지 알아봤다. 이 모두 불리우는 이름이 다르지만 중요한 핵심은 GPU를 사용하여 보다 빠른 컴퓨팅 환경을 구축하려는데 목적을 둔 표준이라고 볼 수 있다. 하지만 알다시피 해당 언어를 공식적으로 지원하는 업체들이 다르다는 것이 가장 큰 차이점이다.


개인들이 느낄 수 있는 장점 및 단점은?
해당 열쇠는 윈도7에 포함된 DirectX11의 Shader Model 5.0

다이렉트컴퓨트의 가장 핵심은 바로 다이렉트X 11 이며, 이 다이렉트X11의 가장 중요한 부분은 바로 쉐이더 모델 5.0이다. 지금까지 다이렉트X 10 에서는 쉐이더 모델 4.0이 들어 있었다. 그리고 다이렉트 MSAA 처리가 가능한 쉐이더 모델 4.1은 다이렉트X 10.1에 포함이 되어 있다. 그리고 다이렉트컴퓨트의 핵심인 Compute Shader가 포함되어 있다. 이 컴퓨트 쉐이더가 바로 GPGPU를 목적으로 만들어졌다. 컴퓨트 쉐이더의 역할은 바로 링커이다. 즉 계산되어진 혹은 계산될 데이터들을 프로세서와 GPU를 직접적으로 연결해주는 것이다. 그래서 게임 개발자들은 물론이고 일반적인 어플리케이션 프로그래머 역시 GPU를 직접적으로 제어할 수 있는 방법이 생긴 것이다.
컴퓨트 쉐이더의 중요한 특징은 각 스레드 에서 발생한 데이터들은 서로의 스레드로 유기적으로 전달해주거나 받을 수 있는 데이터 통신을 지원하기 때문에 가능해진 것이다.


그렇다면 이와 같은 GPU 기반의 언어 혹은 어플리케이션의 단점은 무엇일까?
게임을 일부 포함한, 일반적인 어플리케이션을 GPU 활용 어플리케이션을 만들었을 때 다음과 같은 단점이 들어난다.
  • 텍스쳐 렌더링을 지원하지 않는다.
  • 프로세서와 GPU 간에 좁은 대역폭과 레이턴시 때문에 병목 현상이 발생한다.
  • GPU는 통상 최소 32개의 스레딩으로 코딩이 이루어져야 최적의 성능을 발휘하는데 최대 천개까지 스레드까지 동시에 진행을 하게 되면 성능 향상이 있다. 하지만 이와 반대로 32개 보다 낮은 숫자의 스레딩으로 코딩을 할 경우 무척 떨어지는 성능을 보인다.
  • 현재 각 제조사들 만의 그래픽카드, 혹은 GPU에서 사용이 가능하다.
프로세서와 GPU 간에 병목현상이 발생한다. 이 문제는 P55 칩셋과 PCI-E 컨트롤러가 프로세서에 내장된 프로세서가 출시가 되면서 어느 정도 극복이 될 것으로 보인다. 하지만 이 역시도 2개의 GPU를 사용할 경우 넉넉한 대역폭 확보가 힘들기 때문에 금방 해결될 문제는 아닌 것으로 보인다.
또한 한가지 재미있는 사실은 32개 이하의 스레딩을 처리하게 되면 성능이 떨어진다는 것인데, 이는 파이프라인 자체가 갖고 있는 고질적인 문제이기도 하다. 즉 파이프라인을 다 채워서 돌리지 않으면 빈 파이프라인 자체가 큰 낭비가 되어 클럭당 실행할 수 있는 명령어의 숫자가 줄어들기 때문이다.
그리고 마지막 가장 큰 문제는 바로 각 그래픽카드 GPU에서만 사용 가능한 프로그램 들이 많아지고 있다는 것이다. 범용적인 소프트웨어가 없고 각 제조사 마다 자사의 GPU 하에서만 프로그램이 성능 향상이 있다는 것이다. 이 부분은 무리한 경쟁으로 말미암아 발생한 문제이긴 하지만 이 부분은 윈도7이 출시가 되면서 어느 정도 해결이 될 것으로 예상이 되는데 각 제조사의 프로그래밍 언어들이 다이렉트 컴퓨팅에 포함되기 때문이다.


CPU가 먼저냐, GPU가 먼저냐?

윈도7이 출시되면서 본격적으로 다이렉트 컴퓨트에 대한 관심이 높아질 것으로 보인다. 이는 프로세서 만으로 처리해야할 것들이 보다 많아졌으며, 컴퓨팅 환경 자체가 더욱 더 비주얼하게 변해가고 있다는 것에서 그 이유를 찾을 수 있다. 또한 게임 역시 발전에 발전을 거듭하여 엔비디아의 3D Vision 그리고 ATI의 Eye Finity 기술등이 다양하게 달라지고 있는 게임환경에서 그래픽 카드의 중요성을 다시 부각시키고 있다.


똑같이 게임을 즐기는 색다른 방식이지만, 한 쪽은 3D를 한 쪽은 다중 모니터를 택했다.

마이크로소프트가 윈도7 를 빠르게 출시한 이유는 사실 윈도 비스타의 실패를 통해 큰 교훈을 얻었기 때문인데 그것은 바로 너무 프로세서 업체에 의존하지 말아야 한다는 것이다.
윈도 비스타에서 가장 크게 광고를 하면서 부각시켰던 부분은 윈도 XP 와 달리 비주얼적인 부분 즉, 에어로 등을 이용한 효과를 통해 시각적으로 많은 부분 발전했다는 것을 알리고 싶었다는 점이다. 이를 제대로 지원하기 위해서는 하드웨어적으로 다이렉트 X 10를 지원해야 그래픽 카드가 필수 였다. 하지만 마이크로소프트의 가장 큰 파트너인 인텔이 문제였다.

인텔은 지금까지도 60% 가 넘는 그래픽 카드 시장(내장과 외장을 포함한)을 가지고 있는 "보이지 않는 그래픽 칩셋 왕" 이다. 이런 높은 점유률이 비스타의 발목을 잡게 된 것인데, 인텔의 내장 그래픽 칩셋을 사용하는 데스크톱, 노트북, 넷북 에서는 비스타의 화려한 비쥬얼을 전혀 볼 수 없었는데 이는 다이렉트X11 하드웨어 가속을 하지 못했기 때문이었다. 이로 인해 많은 인텔 그래픽 칩셋 사용자들과 OEM 벤더들은 비스타는 느린 운영체제라는 오명까지도 붙여가며 사용을 거부해왔다.

뭐 이유가 어떻게 다음 달 우리들에게 공식적으로 소개될 윈도7은 CPU와 GPU를 아우르는 첫번째 운영체제라는 점에서 크게 각광을 받게 될 것이다. 물론 첫 술에 배가 부르진 않을 것이다. 하지만 성장이 점점 정체되고 있는 프로세서 기반의 소프트웨어보다는 높은 병렬성을 갖고 있는 GPU를 사용한 소프트웨어가 보다 발전할 것이라는 것은 어찌 보면 자명한 사실일 지도 모른다.

이번 기사를 다시 한번 정리하자면 다음과 같다.
"윈도7에서 지원하는 다이렉트X11은 컴퓨터 쉐이더를 통해 GPU와 프로세서 간의 데이터를 직접적으로 주고 받을 수 있도록 해주어서, 그래픽카드에 탑재된 GPU의 성능에 따라 그리고 해당 어플리케이션의 GPU 활용도에 따라 어플리케이션의 성능이 향상된다." 이것이 바로 다이렉트컴퓨트의 핵심이라고 하겠다. 그리고 GPU와 프로세서를 이어주기 위한 컴퓨팅 언어로 CUDA, OpenCL 그리고 GPGPU 등이 사용이 되어 이 언어로 소프트웨어가 개발이 된다.

ATI에서 HD58XX 시리즈가 출시 되면서 첫번째 다이렉트X11를 공식 지원하는 그래픽 카드로 그 이름을 올렸다. 앞으로 출시될 차세대 그래픽 카드들의 대부분 다이렉트X11를 지원하겠지만 이보다 중요한 사실은 바로 이 다이렉트X11를 공식 지원하는 다양한 게임과 어플리케이션을 누구 먼저 그리고 파워풀한 제품을 출시하느냐가 사실 관건이다. GPGPU를 앞세운 ATI인가? 아니면 CUDA와 OpenCL를 지원하고 있는 엔비디아인가? 이 문제에 대한 정확한 해답은 아마 보다 많은 소프트웨어 개발업체에게 지원을 해주는 업체가 결국에는 성공하지 않을까 생각한다.


Game Developer Leegoon copyright all right reserved since 2010.

Comments