Multithread For Game Engine
다음 작업 목표는 엔진의 멀티 코어 기반 시스템 적용입니닷...

지금 학습하고 있는 주제 입니다.

멀티쓰레드 프로그래밍를 많이 해보지도 않았고, 노하우도 많지 않은데, 도전을 하니까... 엄청 힘들군요...
참고 자료가 죄다 영어라, 매일 매일 2시간씩 번역에 시달리는 느낌입니다.. ㅡㅡ;;
기반 지식이 약해, 한번에 많은 양의 정보를 흡수하니 머리도 복잡하고 말입니다..

멀티쓰레드로 작업 하는 것도 어렵지만, "게임 엔진의 처리 내용을 병렬로 처리한다" 라는 것을 같이 고민하려니까, 더 복잡한 것 같군요...

단순하게 Task/Scheduler를 이용하면, 어떻게 되겠지라고 생각했건만.. ㅡㅡ;;

현재 Reference로는
  1. Nebula3의 멀티 쓰레드 렌더링 구조
  2. http://www.gamasutra.com/view/feature/3941/sponsored_feature_designing_the_.php
    (구현:http://software.intel.com/en-us/articles/smoke-game-technology-demo/)
  3. GPG7의 Multi-thread job and Dependency System

를 중심으로 자료라는 자료는 전부 뒤지고 다니고 있습니다.
(감이 잘 잡히지 않아서 겠지요.. ㅡㅡ;;)

개강하기 전에 어떻게든 실마리를 풀어보려구 했는데, 아무래도, 3월도 1달 내내 고민을 계속 해야 할 것 같습니다.
생각도 많이 해보고, 정리도 해보고, 이래 저래 복잡합니다.

혹시 작업 사례가 있으면 저 좀 알려주세요.. ㅜㅜ

by cagetu | 2009/02/27 16:29 | 개발 노트 | 트랙백(2) | 덧글(6)
트랙백 주소 : http://cagetu.egloos.com/tb/4862750
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from CrazyXIII at 2009/03/05 13:33

제목 : Mutithread...
Multithread For Game Engine참고자료: GameDev.net-Parallel Game Engine Architecture (Intel Smoke)나 처럼 고민 많은 사람이 있구만... 어려버.. Nebula3를 점점 따라하고 싶은 욕구가.... 킁.. ㅡㅡ아직 더 공부해야 겠슴돠......more

Tracked from CrazyXIII at 2009/08/06 16:00

제목 : Sponsored Feature: OMG, Mult..
내가 본 Multi-Thread 개요 중에서 가장 쉽고, 편하다. 기초지면, 잘 기억해 둘 것~!!Sponsored Feature: OMG, Multi-Threading is Easier Than Networking[이전 글]Multithread For Game Engine...more

Commented by Rhea君 at 2009/03/05 17:38
DX SDK 2008 Nov 버전에서 DX11에 해당 예제가 있습니다만... DX9기반에서 하실려는 것이겠죠?
Commented by cagetu at 2009/03/06 16:24
DX11에 대해서 관심이 높습니다만, 아직 작업 기반이 없어서, 시도는 해보지 않고 있습니다.
GPU Context Switching이 되는 덧...

그 건에 엔진 기반을 멀티 쓰레드를 활용할 수 있도록 만들고 싶은게 목표입니다. 그렇게 된다면, Rendering을 DX11에서는 더 잘게 쪼개서 일을 시킬 수 있게 되겠지요...

라고 생각 하고 있습니다.. ㅎㅎ
Commented by jazzcake at 2009/10/30 18:07
해당 이슈에 대해서 어떤 결과 내셨나요? 저도 쭉 읽어보기만 하고 코딩은 하지 않았는데, 일반 게임 클라이언트에 접목하기에는 뭔가 살짝 부족하단 느낌이네요. (Nebula3는 못 봐서 모르겠네요.)
Commented by cagetu at 2009/11/02 13:02
일단 Nebula3를 가지고 해보고 있는데, Nebula3는 Task 형식으로 쪼개는 것이 아니라서, 추후에 시간을 가지고 좀 더 집중적으로 고민해 봐야 할 것 같습니다. noerror님이 많이 테스트를 해보셨다고 했는데, 결론적으로 아직까지는 만족스러운 방법을 차지 못하고 있습니다. 이 부분은 여러가지로 많은 토론을 해봤으면 좋겠는데 말이죠... ㅎㅎ
Commented by jazzcake at 2009/11/02 21:01
Intel TBB를 쓰면 전에 적으신데로 task+scheduler 조합으로 갈 수 있을 듯 한데요. 제 고민은 TBB의 task로만 꾸미는게 적절한가 하는 것입니다. 예를 들어서 기존의 Game Update와 Render Update는 event 사용으로 그대로 가고 그 각각의 update 내에서 task를 이용해서 분산하는게 어떨까 합니다. 게임 흐름별 state에 따라 큰 thread 형태도 변경될 필요도 있으니까요. (물론 TBB내 task+schedule도 되겠죠. 매 프레임 초기마다 세팅해주는 식이면 될까요?)

두번째 고민은 한 frame 내에서 꼭 완수할 task들은 분산처리 후 join해서 다시 돌아가면 되니, 문제가 없는데 꼭 비동기처리를 해야할 때가 좀 문제인 듯 합니다. 예를 들어, a. priority가 낮은 파일처리 등이 있을 수 있고, b. n frame을 돌려야하는데 그래도 적절한 유효 frame내에 종료되어야 하는 task는 어찌해야 될까 잘 감이 안잡히네요. Xbox360 처럼 core마다 특정 thread를 지정할 수 있다면 a와 b 모두 좋은 해결책이 되겠죠. 근데 pc는 그렇지 못하니, 현재로서는 b의 해결책은 별로 없어보입니다. 그렇게 디자인하지 말아야 된다 정도만 생각나더군요.

좋은 해결책 떠오르시면 공유했으면 합니다. 제 이글루에 암 포스트에나 답 달아주세요 ^^;
Commented by cagetu at 2009/11/02 23:59
먼저 언리얼에서 TBB를 이용해서 멀티쓰레드 처리를 한다는 것을 들은 적이 있습니다. Intel의 예제들도 사실 TBB를 밀고 있는 것이 많기도 하구요. 아이디어는 사실 저도 딱히 떠오르는 것이 없습니다만, 유효 프레임에 끝나야 하는 것은 어쩔 수 없이 끝나기를 기다리거나, 그 시간까지 처리된 정보까지만 얻어와야 하는 것 같습니다.

일단 저는 조금 더 많은 래퍼런스를 기다리면서, 여러가지 생각을 해볼 생각입니다. ^^;;
(해결책이 없어서, 블로그에 답변을 안 달았어요.. ㅡㅡ;;)

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >