yuchi's Development Home


CUDA 충돌처리 현재까지 진행상황

조회 수 3391 추천 수 0 2012.02.04 05:54:28

개인적으로 [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

List of Articles
번호 제목 글쓴이 날짜 조회 수sort

dx11 포팅 프로젝트 - uv애니, 빌보드 오브젝트, 알파처리 file

  • 여치
  • 2011-02-08
  • 조회 수 4391

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

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

후닥닥 만든 카툰렌더러 file [3]

  • 여치
  • 2005-06-01
  • 조회 수 4407

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

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

SS3D엔진 렌더러에 추가한 외부 이펙트 쉐이더 file [1]

  • 여치
  • 2003-11-06
  • 조회 수 4443

Parallel NSight를 이용한 CUDA코드 디버깅 file

  • 여치
  • 2010-09-26
  • 조회 수 4471

모델링 가능한 맵툴만들기 #1 - boolean 연산 file

  • 여치
  • 2006-01-11
  • 조회 수 4487

dx11 - 폰트와 스프라이트 처리 file

  • 여치
  • 2011-02-13
  • 조회 수 4504

통합 툴 MT컨트롤 file

  • 여치
  • 2008-06-25
  • 조회 수 4546

SS3D엔진, 자체평가 [6]

  • 여치
  • 2003-08-26
  • 조회 수 4682

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

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

4DyuchiGX #2 화면에 뭐가 보여야 뭘 하지... [5]

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

매터리얼에 리플렉트맵 추가.. file [4]

  • 여치
  • 2003-11-15
  • 조회 수 4740

SS3D엔진,최근의 스샷 file [2]

  • 여치
  • 2004-02-05
  • 조회 수 4768

몬스터가 나를 때린다.

  • 여치
  • 2008-03-08
  • 조회 수 4772

x64 어셈블리 쓰기 file [2]

  • 여치
  • 2007-04-15
  • 조회 수 4821

오클루젼 컬링 관련

  • 여치
  • 2008-02-09
  • 조회 수 4831

4DyuchiGX #9 맥스 플러그인 4.0에서 5.0으로... [5]

  • 여치
  • 2002-12-06
  • 조회 수 4861

CUDA로 구현하는 Radiosity - KD-Tree를 이용한 Ray충돌처리 [2]

  • 여치
  • 2012-06-09
  • 조회 수 4913

crt힙 메시지 출력에서 xxx.cpp대신 #File error#가 뜰때

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