yuchi's Development Home


이번에 CUDA충돌처리 모듈을 만들면서 깨닫게 된 몇 가지들.

예전 프로젝트(프로젝트 엡실론)에서 멀티스레드와 SSE어셈을 떡을 쳐서 서버기반에서도 사용가능한 충돌처리 코드를 만들었었다. 세 번의 유져 테스트에도 무사히 작동했고 꽤 잘 만들었다고 생각했다. 근데 그 코드에는 중대한 결함이 있었다.

1. 기본적으로 계산 코드가 너무나 비효율적이었다..불필요하게 복잡하고 느리다. 난 수학에 자신이 없었고 그래서 다른 사람에게 코드 작성을 맡겼고 나중에 C수학함수 코드를 받아서 어셈으로 최적화하고 충돌처리 자료구조를 만들어넣었다.

2. 충돌삼각형 검출에서는 BSP트리를 사용하지 말았어야했다. 3차원 그리드가 훨씬 빠르다. 탐색 자체도 문제지만 갱신이 너무 느렸다. 이건 전적으로 나의 판단미스.
 
결과적으로 4000명을 처리하는데 6코어 제온을 2개나 박았다. 조립머신이라도 CPU값만 300만원 정도 들었다.

이번 코드에서는 SSE어셈을 사용하지 않았다. 물론 여유가 된다면 CPU코드는 SSE로 바꿀 생각이지만...그리고 이전엔 타원체간 충돌처리를 하지 않았다. 이번엔 타원체간 충돌처리를 한다. 그런데도 이전에 비해서 100배는 빠르다. 그 원인은 다음과 같다.

1. 계산 코드가 간결하다. 수식과 코드 흐름 자체가 훨씬 간결하다.
2. BSP트리 대신 3차원 그리드를 사용한다.
결과적으로 i7 4core머신이면 플레이어간 충돌처리를 해도 4000명 유져를 처리하는데도 별 문제는 없다. 약간 간당간당한 감은 있지만. 

애초에 이번에 충돌처리 코드를 다시 만들게 된 계기가 그 당시에 퍼포먼스가 만족스럽지 않아서 CUDA의 힘을 빌리고자 함이었다.
물론 이번 코드에서는 CUDA를 적용했고 최악의 상황에서 CUDA는 10배 정도의 퍼포먼스 향상을 가져다 주었다.
그런데 불행인지 다행인지 내 마지막 프로젝트에서 사용한 정도의 충돌처리(에다가 동적인 타원체 충돌처리까지 더해도...) 라면 CUDA가 전혀 필요없이 CPU파워만으로도 충분하다는 사실을 이번에 알게된 것이다.
기쁘기보단 억울하고 허탈한 마음이 든달까. 괴로운 CUDA디버깅의 추억은 다 부질없었단 말인가.

일단 이번에 작성한 코드는 DLL로 포장해두고 지속적으로 업그레이드 해갈 생각이다. 이후에 어딘가 회사에 들어갔을때 저작권 분쟁에 휩쓸리지 않도록 GPL이나 LGPL로 소스는 먼저 공개하려고 한다.

여담인데 아마 프로젝트가 중단되지 않았더라면 충돌처리 코드를 다시 작성할 일이 없었을테고 과거의 삽질을 몰랐겠지. 기술적으로는 프로젝트가 날라가고 회사를 그만두고 백수가 된 것이 더 나았을까? 

그래도 프로젝트가 날라가지 않는 쪽이 더 좋았다고 생각한다.

쩝.



댓글 '4'

이정훈

2012.02.13 10:51:00
*.137.16.157

3차원 그리드에 대한 힌트를 주시면 않될까요 지금 맵 툴을 만드는데 한번 응용해 보고 싶습니다 

개념 정도만 알려주시면 정말 감사하겠습니다 감사합니다 

여치

2012.02.13 19:10:46
*.168.0.1

별거 아닙니다. 인접한 삼각형이나 동적인 오브젝트를 찾기 위해서 X,Y,Z 각 축에 대해서 얼마간의 크기로 잘라서 각 칸에다가 삼각형과 오브젝트의 링크 정보를 넣어두는 겁니다. 

2차원 그리드는 타일방식하고 사실 같고요. 3차원은 y축으로도 쌓아올렸다는 점이 다릅니다. 

충돌처리를 하려면 주변의 오브젝트와 삼각형을 긁어와야하는데 무작정 모든 삼각형과 오브젝트를 긁어올 순 없으니까요.

임의의 오브젝트에 속도벡터를 더하면 대충 캡슐형태가 나오는데 3차원그리드에서 이 캡슐에 걸쳐지는 cell들을 바로 계산해낼 수 있죠. 그 cell들에 미리 링크되어있는 삼각형과 오브젝트들을 긁어오는겁니다.

개념적으로 비슷한 자료구조는 쿼드트리, 옥트리가 있습니다.


그런데 맵툴에서 쓸 일이 있나요? 무슨 용도로 쓰시려는건가요?



이정훈

2012.02.14 09:51:52
*.137.16.157

제가 생각한 방법은 맵툴에서 일정 부분 나눈 cell 위에 올려진 오브젝트의 링크를 걸어서 관리하면 

컬링할때 좀 더 효과적이지 않을까 해서 그렇게 만들어 보고 있었습니다 cell 을 컬링하면 

그려줘야할 오브젝트들을 따로 컬링할 필요가 없을것 같아서 그랬습니다 

충돌에도 응용될수있을것 같긴 했는데 y축으로 확장하는 건 생각하지 못했습니다  


친절이 설명해 주셔서 정말 감사합니다


여치

2012.02.14 13:23:14
*.246.70.220

말씀하신 방법은 많이들 사용하는 방법입니다.

일반적으로 y축으로 높은 맵은 별로 없기 때문에 2차원그리드나 쿼드트리를 사용합니다.

제 경우도 렌더링할때 BSP트리를 기본적으로 사용하지만 필드나 실외지형에 대해서는 그리드를 사용합니다.

그런데 컬링 기능 자체는 맵툴에 넣을게 아니고 엔진에 넣으면 그 엔진을 사용하는 게임 클라이언트와 툴 모두 적용받게 됩니다.

딱히 맵툴에 넣을 기능은 아니고 엔진에 넣으면 됩니다.

그래서 맵툴 어디다 사용하실거냐고 여쭤본겁니다.



파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )
List of Articles
번호 제목 글쓴이 날짜 조회 수sort

Windows Phone 8 디바이스를 몇 일 사용해보고 알게 된 것들.

  • 여치
  • 2013-11-01
  • 조회 수 546

Windows Phone에 게임 포팅중.

  • 여치
  • 2013-11-17
  • 조회 수 597

윈폰8 포팅 중단. file

  • 여치
  • 2013-11-19
  • 조회 수 631

Windows Phone 8로 게임 포팅중 #2

  • 여치
  • 2013-11-18
  • 조회 수 637

현재까지 느낀 Windows Phone 8용 게임 개발에 있어서의 장애물. [2]

  • 여치
  • 2013-11-07
  • 조회 수 1029

Windows Phone 8과 PC간 네트워크 플레이

  • 여치
  • 2013-11-22
  • 조회 수 1089

win8 sdk에서 ddraw.lib 위치

  • 여치
  • 2013-09-11
  • 조회 수 1239

Surface RT에서 유선랜 사용하기

  • 여치
  • 2013-10-26
  • 조회 수 1276

제가 필요해서 만든 OneDrivePlayer가 윈스토어에 올라갔네요. [2]

  • 여치
  • 2014-08-23
  • 조회 수 1287

기적같은 디버깅. 컴파일러 버그? 역시나 그럴리가. [3]

  • 여치
  • 2014-05-14
  • 조회 수 1342

TFS에서 Get Latest Version해도 갱신할 파일 없다고 나올 때

  • 여치
  • 2013-08-31
  • 조회 수 1392

Windows Phone 8로 게임포팅 중 생긴 난관 - Windows Phone 8 에서 App당 사용 가능한 최대 메모리 file

  • 여치
  • 2013-11-21
  • 조회 수 2053

인디게임 FEZ 개발자 필 피쉬, 최근 일본 게임에 대한 평가 - 그리고 내 생각 [2]

  • 여치
  • 2013-07-31
  • 조회 수 2132

진행중인 프로젝트 Visual Studio 2010 -> Visual Studio 2013으로 이전 [2]

  • 여치
  • 2014-04-10
  • 조회 수 2277

Parallel NSight 로 CUDA디버깅시 PC가 멎을 경우

  • 여치
  • 2012-05-17
  • 조회 수 2374

초간단 SIMD(Single Instruction Multiple Data)최적화 성능 테스트 file

  • 여치
  • 2014-04-10
  • 조회 수 2661

요새 하는 작업 file

  • 여치
  • 2011-11-21
  • 조회 수 2673

이번에 CUDA충돌처리 모듈을 만들면서 깨닫게 된 몇 가지들. [4]

  • 여치
  • 2012-02-10
  • 조회 수 2782

nVIdia 케플러 GK104의 CUDA성능은? file [2]

  • 여치
  • 2012-03-17
  • 조회 수 2916

CUDA 충돌처리 응용

  • 여치
  • 2012-02-28
  • 조회 수 2972
天安門大屠殺 六四天安門事件 反右派鬥爭 大躍進政策 文化大革命 六四天安門事件 The Tiananmen Square protests of 1989 天安門大屠殺 The Tiananmen Square Massacre 反右派鬥爭 The Anti-Rightist Struggle 大躍進政策 The Great Leap Forward 文化大革命 The Great Proletarian Cultural Revolution 人權 Human Rights 民運 Democratization 自由 Freedom 獨立 Independence 多黨制 Multi-party system 民主 言論 思想 反共 反革命 抗議 運動 騷亂 暴亂 騷擾 擾亂 抗暴 平反 維權 示威游行 法輪功 Falun Dafa 李洪志 法輪大法 大法弟子 強制斷種 強制堕胎 民族淨化 人體實驗 胡耀邦 趙紫陽 魏京生 王丹 還政於民 和平演變 激流中國 北京之春 大紀元時報 九評論共産黨 獨裁 專制 壓制 統一 監視 鎮壓 迫害 侵略 掠奪 破壞 拷問 屠殺 肅清 活摘器官 障テ社會 誘拐 買賣人口 遊進 走私 毒品 賣淫 春畫 賭博 六合彩 台灣 臺灣 Taiwan Formosa 中華民國 Republic of China 西藏 土伯特 唐古特 Tibet 達償ワ喇嘛 Dalai Lama 新疆維吾爾自治區 The Xinjiang Uyghur Autonomous Region free tibet



XE Login

天安門大屠殺 六四天安門事件 反右派鬥爭 大躍進政策 文化大革命 六四天安門事件 The Tiananmen Square protests of 1989 天安門大屠殺 The Tiananmen Square Massacre 反右派鬥爭 The Anti-Rightist Struggle 大躍進政策 The Great Leap Forward 文化大革命 The Great Proletarian Cultural Revolution 人權 Human Rights 民運 Democratization 自由 Freedom 獨立 Independence 多黨制 Multi-party system 民主 言論 思想 反共 反革命 抗議 運動 騷亂 暴亂 騷擾 擾亂 抗暴 平反 維權 示威游行 法輪功 Falun Dafa 李洪志 法輪大法 大法弟子 強制斷種 強制堕胎 民族淨化 人體實驗 胡耀邦 趙紫陽 魏京生 王丹 還政於民 和平演變 激流中國 北京之春 大紀元時報 九評論共産黨 獨裁 專制 壓制 統一 監視 鎮壓 迫害 侵略 掠奪 破壞 拷問 屠殺 肅清 活摘器官 障テ社會 誘拐 買賣人口 遊進 走私 毒品 賣淫 春畫 賭博 六合彩 台灣 臺灣 Taiwan Formosa 中華民國 Republic of China 西藏 土伯特 唐古特 Tibet 達償ワ喇嘛 Dalai Lama 新疆維吾爾自治區 The Xinjiang Uyghur Autonomous Region free tibet