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 조회 수

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

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

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

  • 여치
  • 2011-08-27
  • 조회 수 3581

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

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

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

  • 여치
  • 2011-08-31
  • 조회 수 3537

새로 출발하는 개인 프로젝트 file

  • 여치
  • 2011-10-06
  • 조회 수 3933

TFS Backup Plan 삭제 방법

  • 여치
  • 2011-11-07
  • 조회 수 3234

코딩 및 테스트 계획

  • 여치
  • 2011-11-08
  • 조회 수 3466

요새 하는 작업 file

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

라이트맵 엣지 블랜딩 관련 file

  • 여치
  • 2011-11-28
  • 조회 수 3345

CUDA 로컬 디버깅 설정 file

  • 여치
  • 2011-11-30
  • 조회 수 3551

라이트맵 블러링 file

  • 여치
  • 2011-12-08
  • 조회 수 3639

삼각형 충돌처리 코드 작성중 file [2]

  • 여치
  • 2011-12-23
  • 조회 수 3974

3D MMOG Platform만들기 file [2]

  • 여치
  • 2012-01-01
  • 조회 수 2786

CUDA로 구현한 충돌처리 [5]

  • 여치
  • 2012-01-16
  • 조회 수 3271

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

  • 여치
  • 2012-02-04
  • 조회 수 3391

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

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

nVidia Visual Profiler 4.1로 돌린 결과 file

  • 여치
  • 2012-02-21
  • 조회 수 3241

CUDA충돌처리 현재까지의 결과 CPU vs GPU file [4]

  • 여치
  • 2012-02-22
  • 조회 수 3569

CUDA 충돌처리 응용

  • 여치
  • 2012-02-28
  • 조회 수 2776

CUDA충돌처리 응용#2

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