yuchi's Development Home


개인적으로 [CUDA를 이용한 충돌처리 엔진 프로젝트]를 시작한지 어언 두달 가까이 되었다.

현재까지 진행 상황을 간단히 적어본다.


[목표]

1.MMORPG 게임 서버에서 사용할 수 있는 충돌처리 엔진을 구현한다.

2.대규모 처리를 위해서 CUDA를 사용한다.

3.캐릭터와 로켓런쳐 탄환 따위의 동적인 오브젝트는 타원체(가로세로 1:1이면 구)로, 게임맵은 삼각형집합으로 구현한다.

4. 타원테 VS 타원체 , 타원체 VS 삼각형의 충돌을 감지하고 탄성계수를 적용한 반사, 또는 미끄러짐을 구현한다.



History

1. 1차 버젼 

   CPU 코드 - 싱글 스레드 ,공간분할 자료구조 없음  

   GPU 코드 - 공간분할 구조 없음 

   퍼포먼스 비교 : CPU(100%) < GPU(1000%) 

   비고 :  작동은 하지만 수천개 이상의 삼각형 데이타를 넣으면 거의 무한루프에 빠지는 정도로 느림. 

            실제로 타임아웃으로 커널함수 크래시

            공간분할 필수라는 것을 새삼 뼈저리게 느낌.

            일단 10배 빨랐으므로 CUDA충돌처리의 가능성을 보았다 하겠다.


2. 2차 버젼

   CPU 코드 - 멀티 스레드(HT포함 모든 논리적 코어 사용), BSP트리

   GPU 코드 - 계산코드는 1차버젼과 동일. 

                    CPU코드로 BSP 트리를 탐색하여 인접한 삼각형과 타원체를 CUDA 커널에 전달하는 방식

   퍼포먼스 비교 :  CPU(100%) < GPU(120%)

   비고 : 충돌처리 소요시간 =  인접한 타원체와 삼각형 검색 시간(50%) + 실제 충돌처리 계산 시간(50%)

            인데 타원체와 삼각형 검색을 cpu에 의존하므로 GPU에서의 퍼포먼스 향상 여지가 너무 적음.

            코드 상으론 가장 깔끔하고 유지보수 용이.

            10000개 이상의 삼각형 4000개의 타원체에 대한 충돌처리를 무사히 할 수 있음.

            일단 실제 게임에 적용할 수 있는 최소한의 조건은 갖췄다는 정도의 의의.


3. 3차버젼

  CPU 코드 - 2차버젼과 동일

  GPU 코드 - CUDA 디바이스 메모리에서 돌아가는 3차원 그리드 구조. 

  퍼포먼스 비교 - CPU(100%) < GPU(800%)

  비고 : 과도한 메모리 사용으로 전체 타원체 개수가 증가하면 PCI 버스의 부담으로 이어짐. 그에 따라 퍼포먼스 감소.

           기본 사용 메모리를 줄이자니 한번에 충돌처리 가능한 타원체 개수를 줄여야 하는 상황.

           다른 자료 구조를 고려함.


4. 4차버젼 

  CPU 코드 - 2차버젼과 동일

  GPU 코드 - CUDA 디바이스 메모리에서 돌아가는 BSP트리

  퍼포먼스 비교 : CPU (100%) > GPU(30%)

  비고 :  현재까지 버젼중 가장 복잡한 자료구조를 가짐. 

            트리구조를 CUDA디바이스에서 갱신하기 위해 3패스 커널함수 호출.

            트리 탐색에서 심각하게 퍼포먼스 저하.

            GPU 메모리로의 전송량을 줄일 수 있는 아이디어는 얻음.


5. 현재버젼

  CPU 코드 - 2차버젼과 동일

  GPU 코드 - 3차버젼을 베이스로 해서 자료구조 재설계. 

                   3차원 그리드 구조이나 동적인 타원체의 링크 정보를 갱신하기 위한 별도의 포인터 테이블 사용.

                   타원체와 삼각형 탐색시 약간의 추가적인 조건 추가.

                   GPU메모리로의 데이타 전송량 최소.

  퍼포먼스 비교 : CPU (100%) < GPU (8000% ~ )

  비고 : 현재까지 버젼중 가장 빠름. 교훈-CUDA스레드가 하는 작업은 최대한 단순한 코드로 구현해야한다.

           안정성을 위한 장치를 추가하고 메모리 억세스 방식에서 퍼포먼스 향상을 연구해야함.



마지막 버젼의 퍼포먼스 테스트 결과는 다음과 같다.

화면 렌더링의 부하로 정확한 결과를 측정하기 어렵기 때문에 수치 데이타는 화면 렌더링을 off했을때의 기준으로 작성하였다.



[테스트 장비]

CPU : intel i7 2600K (O.C :1 Core ->4.2Ghz, 4 Core -> 3.7GHz)

GPU : nVidia GTX460 1GB (48 SP * 7 = 336 SP)

         nVidia GTS450 512MB (48 SP * 4 = 192 SP)


[테스트 모델 ]

맵 삼각형 : 11085개

상호 충돌하는 움직이는 타원체 : 약 2000개


[측정결과]

소요시간(ms) 소요 클럭(x1000 Clocks) CPU 점유율 GPU 점유율 성능비교
CPU (8스레드) 78 273000 80% X 100%
GTS450 0 2900 17% 약70% 9400%
GTX460 0 1600 16% 약50% 17000%




[스크린 샷]

 

CPU

coltest_cpu_mt_render_on.jpgcoltest_cpu_mt_render_off.jpg

 

GTS450

coltest_cuda_gts450_render_on.jpgcoltest_cuda_gts450_render_off.jpg


 

GTX460

coltest_cuda_gtx460_render_on.jpgcoltest_cuda_gtx460_render_off.jpg

파일 첨부

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

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

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

멀티플 클라이언트 제작 file [2]

  • 여치
  • 2008-04-01
  • 조회 수 4129

왕창 갈아엎은 라이트맵 file [2]

  • 여치
  • 2006-12-30
  • 조회 수 4110

라이트맵 블러링 추가 file [1]

  • 여치
  • 2007-01-06
  • 조회 수 4104

개선되는 SS3D 2.0 엔진 에서의 공간분할 file [2]

  • 여치
  • 2005-02-11
  • 조회 수 4099

BSP/PORTAL을 이용한 공간분할 file [3]

  • 여치
  • 2006-10-01
  • 조회 수 4094

KD트리와 RAY충돌처리 코드 다시 만드는중 file

  • 여치
  • 2012-06-02
  • 조회 수 4091

The database principal owns a schema in the database, and cannot be dropped

  • 여치
  • 2013-05-23
  • 조회 수 4087

히토미 모델 테스트 #2 file [4]

  • 여치
  • 2004-09-01
  • 조회 수 4086

라이트맵 계산시에 Ambient Occlusion적용하기 #2 file

  • 여치
  • 2011-08-28
  • 조회 수 4081

4DyuchiGX #1 그 시작.. [2]

  • 여치
  • 2002-07-06
  • 조회 수 4075

그림자 개선중#3 - Cascade Shadow Maps file [2]

  • 여치
  • 2011-08-20
  • 조회 수 4071

새로운 툴 & bsp & pvs file [3]

  • 여치
  • 2005-02-01
  • 조회 수 4031

맵툴에 새로 추가한 기능 file [1]

  • 여치
  • 2003-11-04
  • 조회 수 4028

dx11프로젝트 - 테셀레이션 file

  • 여치
  • 2011-03-14
  • 조회 수 4022

피직 트랜스폼(캐릭터 스키닝) 64비트 SSE버젼 코드 file [2]

  • 여치
  • 2008-09-21
  • 조회 수 4010

드뎌 히토미에 애니메이션 적용 file

  • 여치
  • 2004-10-05
  • 조회 수 4008

xcode 4.5로 업데이트 후 빌드한 바이너리 오작동

  • 여치
  • 2012-09-21
  • 조회 수 3994

그림자 개선중#2 file

  • 여치
  • 2011-08-09
  • 조회 수 3980

와이드 스샷 file

  • 여치
  • 2009-10-17
  • 조회 수 3955

라이트맵 텍스쳐 좌표 생성 코드 개선 file [1]

  • 여치
  • 2006-12-31
  • 조회 수 3940
天安門大屠殺 六四天安門事件 反右派鬥爭 大躍進政策 文化大革命 六四天安門事件 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