태그 : multi-core
멀티 코어란 무엇인가?
멀티 코어(multi-core)는 멀티 코어 CPU를 이야기하는 것인데 이것은 두 개 이상의 독립 코어를 단일 집적회로로 이루어진 하나의 패키지로 통합한 것으로 듀얼 코어(dual-core) 프로세서는 두 개의 코어를 포함하고 있으며, 쿼드 코어(quad-core)는 네 개의 코어를 포함하고 있다.
현재 칩 제조사에서 출시하는 신형 CPU들은 이렇게 두 개 이상의 CPU를 내장한 멀티 코어 CPU가 주종을 이루고 있다. 이는 단일 코어에서 더 이상 코어 클럭을 이용해서 성능을 올리는 방법으로는 한계에 도달했기 때문이다. 그런데 이러한 하드웨어 환경에서 게임의 성능을 최대한 끌어 올리도록 만들기 위해서는 하드웨어에서 제공하는 여러 개의 코어들을 이용해서 병렬 처리(parallel processing)가 가능한 구조로 게임을 구성을 해야 한다. 왜냐하면 단일 쓰레드를 사용하도록 제작된 프로그램은 여러 개의 코어를 가진 프로그램 내에서 실행이 되더라도 속도가 빨라지지 않기 때문이다. 멀티 코어가 주는 성능을 최대한 이용하기 위해서는 응용 프로그램이 멀티 코어를 지원하도록 작성해야 하는데 문제는 이것이 쉽지 않다는 것이다.
왜 멀티 코어 프로그래밍이 어려운가?
우선 언어적 특성에 기인한 원인이 있다. 일반적으로 게임에 사용하는 C와 C++은 본질적으로 순차적 언어이기 때문에 병렬 처리가 당연한 문제의 경우에도 구현이 쉽지 않는 경우가 많다.
그리고 세 번째로는 게임의 실시간성에 따른 프레임에 관한 문제이다. 게임은 실시간으로 작동되어야 하기 때문에 게임은 매 프레임을 순차적으로 처리해서 렌더링 하게 되는데 현재의 프레임은 이전 프레임에 의존적이기 때문에 프레임들을 병렬 처리할 수가 없다. 이것도 게임을 병렬 처리 하기 어려운 이유 중의 하나이다.
그러면 멀티 코어 프로그래밍은 어떻게 접근해야 할까?
멀티 코어 시스템은 여러 개의 프로세서를 처리하므로 프로세서 간 통신을 위한 효율적이고 유연한 소프트웨어 아키텍쳐를 필요로 한다. 이 소프트웨어 아키텍쳐란 각 서브 시스템 간의 교환되는 데이터의 동기화가 용이한 모델에 초점을 맞춘 것을 말하는 것으로 데이터의 동기화 뿐만 아니라 코어의 개수가 서로 다른 환경에서도 안정적으로 작동될 수 있어야 한다. 이러한 병렬 처리 데이터 동기화의 모델 중에서 게임에 적합한 모델로는 비동기화 함수 병렬 모델(Asynchronous parallel model)이라는 것이 있다. 게임에서는 보통 게임 로직, 물리 연산, 렌더링의 순서로 작업이 행해 것이 보통인데 비동기화 함수 병렬 모델에서는 이 세 가지를 각각의 코어로 실행하고 이들 코어간의 동기화는 최신 결과를 기다리지 않고 이전 결과를 가지고 작업을 수행하는 것이다. 예를 들어 렌더링에서는 이번 프레임에서의 물리 연산의 결과를 기다려서 렌더링 작업을 수행하는 것이 아니라 이전 물리 연산 결과를 이용하여 렌더링하게 된다. 이것은 게임이라는 응용 프로그램이 적당한 응답성만을 보장하면 되는 특성에 기인한 것으로 이 방법을 사용하면 각 서브 시스템간의 분리 뿐만 아니라 병렬 처리도 용이해 진다는 장점이 있다.
멀티 코어가 대세가 되는 시대에는 더 이상 하드웨어의 업그레이드 만으로는 프로그램의 빠른 실행을 기대할 수가 없게 되었다. 이제는 기술 진보의 의미가 클러 수의 증가로 하드웨어가 빨라 지는 것을 의미하는 것이 아니라 병렬 처리가 가능한 코어의 증가로 동시 처리의 증가를 의미하는 시대가 도래 되었다. 이것은 주어진 문제를 여러 개로 분리해서 가장 효율적으로 처리할 , 수 있는 방법이 중요한 이슈로 부상했다는 것을 의미한다.
참조
[1] 위키피디아 - 멀티코어, http://ko.wikipedia.org/
[2] Multithreaded Game Engine Architectures, Gamasutra,
http://www.gamasutra.com/view/feature/1830/multithreaded_game_engine_.php?print=1
# by | 2008/05/29 19:40 | MultiCore | 트랙백 | 덧글(3)
◀ 이전 페이지다음 페이지 ▶