우리가 예전에 생각했던 PC는 어떤 모습 이였을까요?
앞서 언급했듯이, 아주 오래 전의 PC들은 하나의 CPU를 통해서 연산을 수행하고
결과를 저장하는 구조를 가지고 있었습니다.
또한 오늘 날의 그래픽 처리를 위한 GPU라는 개념도 초창기에는 상상하기 힘든 개념 이였습니다.
하지만, 오늘 날의 PC는 CPU는 여러 개이며, GPU의 성능 또한 아주 막강합니다.
거기다 멀티 GPU인 상황이기도 합니다.
이런 변화들은 Windows 운영체제 차원에서 많은 변화를 요구하게 되었습니다.
사실 현재의 개발 환경은 굉장히 과도기적인 상태라고 할 수 있습니다.
이제 막 이러한 패러다임의 변화들에 대해서 많은 소프트웨어적인 기술들이 공개되고,
개발자들의 선택을 기다리고 있는 상황입니다.
( 대표적으로는, TBB나 CUDA 같은 기술들이 있을 것입니다.^^ )
XP 시대까지는 많은 부분들이 전통적인 아키텍쳐 구조들을 기반으로 해서 구현되었고,
꾸준히 개선되어 왔습니다.
즉, XP 시대까지는 싱글코어 기반으로 대부분의 아키텍쳐들이 설계되었습니다.
그래서 Windows XP가 안정적이고 훌륭한 운영체제로 평가 받는 것입니다.
하지만, Windows 7 운영체제를 시작으로 앞으로는 많은 수의 CPU를 활용한 구조와
GPU를 활용하는 구조로 변경되고 있으며, 빠르게 XP세대를 대체해 나갈 것입니다.
( 정확하게는 Windows Vista 운영체제부터 시작되었습니다.^^ )
앞서 DirectX의 탄생의 과정에 대해서 짧게 살펴보았습니다.
DirectX의 가장 큰 장점은 그래픽 하드웨어의 지원을 받아서
빠른 성능으로 고품질의 결과를 처리할 수 있다는 것이다.
마이크로소프트는 DirectX를 이용해서 고속으로 드라이버에 접근할 수 있는 구조를 만들었습니다.
이를 HAL 이라고 합니다.
결론을 얘기하자면,
DirectX 이용한 렌더링( rendering ) 작업이 GDI를 이용한 작업보다 훨씬 더 빠르고 뛰어납니다.
품질은 비교해 보면, 아래와 같습니다.
현 세대의 PC들은 막강한 성능의 GPU를 탑재하고 있으며,
이들은 대부분 게임과 같은 멀티미디어 관련 애플리케이션을 실행하지 않는 이상은
거의 사용되지 못하고 있었습니다.
그래서 Windows 7 운영체제는 이를 활용하기 위해서 화면에 그리는 작업 패러다임을
완전히 변경해 버렸습니다.( 물론 비스타도 포함됩니다.^^ )
아래의 그림이 이제는 윈도우즈 운영체제 환경의 기본 추상화 계층입니다.
위의 그림에서 보이는 것처럼, 이제 화면에 무엇인가를 그리는 모든 작업은
DirectX를 이용해서 수행하게 되었습니다.( DXGI가 바로 DirectX 입니다. )
이 말은 즉, 기본적으로 GPU를 활용한 한다는 의미입니다.
그렇다고 현재 GDI 가 당장 사라져 버린 것은 아닙니다.
아직까지는 호환성 유지를 위해서 상당기간 공존할 것입니다.
하지만 DirectX 를 활용하는 이 방법은 빠르게 GDI를 대체해 나갈 것이다.
CPU는 범용 목적으로 설계되었기 때문에,
렌더링 목적으로 설계된 GPU 보다는 렌더링에 대한 작업만큼은 느릴 수 밖에 없습니다.
왜냐하면 GPU는 복잡하고, 많은 수치 연산에 특화된 구조이기 때문입니다.
이 DirectX를 강력함을 사용하기 때문에 XP 세대의 운영체제보다 Windows 7이 좋습니다.
( 왠지 홍보하는 것처럼 들리겠지만, 부인할 수 없는 사실이랍니다. ^^ )
앞으로 윈도우 프로그래밍에서도 이 DirectX를 이용하는 것이 보편화 될 것입니다.
이제 윈도우 프로그래밍 세계도 큰 변화가 예고되고 있습니다.
왜 GPU인가?
오늘 날, 프로세싱 유닛의 관점에서 컴퓨터를 바라보면 아래와 같습니다.
위의 그림에서 CPU는 4개입니다. 이 말은 연산 처리가 가능한 유닛이 4개라는 얘기입니다.
오른쪽 그림은 그래픽 카드를 표현한 것인데,
그래픽 카드는 SIMD 형태로 데이터를 병렬적으로 처리할 수 있는 유닛이 매우 많이 존재합니다.
직관적으로 평가해도 좌측의 CPU 4개 보다는 훨씬 많아 보입니다.
컴퓨터에 CPU 3GHz 가 4개 구동되고 있다면, 초당 연산을 하는 횟수가 48~96GFlops 라고 합니다. ( GFlops 는 109 Flops입니다. )
반면 1GHz GPU 1개가 처리할 수 있는 연산 횟수는 1TeraFlops 입니다. ( TeraFlops는 1012 Flops 입니다. )
GPU는 실수(float) 처리와 병렬처리에 이미 최적화 된 유닛이기 때문에 이것이 가능합니다.
반면 CPU는 범용 목적으로 설계된 유닛입니다.
그래서, If 문과 같은 조건 분기 명령어들은 GPU보다 CPU가 훨씬 빠르게 처리할 수 있습니다.
지금까지는 GPU는 그래픽 처리만을 위해서 존재했었습니다.
특히나 게임과 같은 대용량의 그래픽 처리를 필요로 하는 경우에는 이들의 역할이 절대적 이였습니다.
하지만, 그 이외의 경우는 사용되고 있었을까요?
대답은 '아니다' 입니다.
게임과 같은 경우 DirectX를 통해서 이들을 활용할 수 있었지만,
일반 애플리케이션의 경우에는 이 GPU를 활용할 방법이 없었습니다.
즉, 일반 애플리케이션에서 GPU는 거의 아무 일도 하지 않고 방치되어 있는 것입니다.
CPU의 일을 GPU에게 분담해서 CPU의 부담을 줄이고,
GPU의 활용 능력을 극대화 하면 자연스럽게 최적화가 가능합니다.
그래서 GPU를 활용하는 것이 현재 Windows 7 운영체제에서는
하나의 중요한 이슈로서 자리 잡고 있습니다.
'DirectX 11' 카테고리의 다른 글
| [StartD2D-3] Direct2D 프로그래밍 시작하기!!! (20) | 2011/04/15 |
|---|---|
| [JumpToDX11-21] DirectX11의 테셀레이션 ( Domain Shader 의 역할편 ) (1) | 2011/04/11 |
| [StartD2D-2] 왜 GPU 인가? (13) | 2011/03/25 |
| [StartD2D-1] Good-bye~~ GDI… (2) | 2011/03/17 |
| [JumpToDX11-20] DirectX11의 테셀레이션 ( 테셀레이터의 역할편 ) (7) | 2011/03/08 |
| [JumpToDX11-19] DirectX11의 테셀레이션 ( Hull Shader 역할편 ) (0) | 2011/01/25 |
Sample_Windows7_Multitouch.zip
Stroke.cpp











댓글을 달아 주세요
비밀댓글입니다
아주 정확히 지적해 주셨습니다..^^
감사드립니다.
관련 내용은 수정을 했으며,
조만간 더 정확한 의미 전달을 할 수 있는
이미지로 교체하겠습니다..^^
글 잘 읽었습니다.
그런데 글 중간에 문맥상
"반면 CPU는 범용 목적으로 설계된 유닛입니다. 그래서, If 문과 같은 조건 분기 명령어들은 CPU보다 GPU가 훨씬 빠르게 처리할 수 있습니다."
이 부분이 "조건 분기 명령어들은 CPU가 GPU 보다 빠르다"는 결론으로 바뀌어야 할 것 같은데 확인 부탁드립니다.
지적해 주신 내용이 맞습니다..^^
수정했습니다..^^
"그래서 Windows XP가 역사상 가장 안정적인 운영체제로 평가 받는 것입니다."
위 대목은 넓게 보면 많은 테클거리가 생기겠습니다.
앞뒤 없이 XP가 역사상이라니... 유닉스, 리눅스, 그리고 윈도우즈 2000... 역사상에 이러한 운영체제의 안정성은 어떻게 되는걸까요?
지적하신대로 논란을 없애기 위해서,
수정했습니다..^^
비밀댓글입니다
수정했습니다..^^
다음에는 좀 더 심층적인 내용도 부탁드려요^^
잘 보고 갑니다.
네..기대에 부응하도록 노력하겠습니다..^^
DirectX나 OpenGL의 경우 3D기반 렌더링을 기반으로 하다보니 선처리나, 텍스쳐 처리에서 제약사항이 발생하는 경우도 많더군요.
또한 시스템 그래픽 리소스 부분에서 관리 난이도도 조금 올라가는 부분도 없지 않아 있는것 같습니다.
결국 프로그래머 입장에서는 난이도가 약간이나마 올라가는 부작용도 있는 것 같습니다. GDI가 내부적으로 GPU를 통해서 빠르게 동작할 수 있으면 좋겠지만, 성향의 차이로 인해 쉽지는 않겠지요...
MS에서도 내부적으로 편리한 방법을 위해서 많은 노력을 기울일 것이라 생각됩니다..^^
갑자기 궁금해 져서 질문 하나 드립니다. ^^
쿼드코어 CPU와 448 코어를 가지고 있다는 NVIDIA 의 Tesla에 대하여 아래와 같이 말해도 문제가 없는건지요?
쿼드코어 CPU는 4개의 ALU를 가지고 있고 Tesla는 448개의 ALU를 가지고 있다...
이렇게 말하면 문제가 있는지요?