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

코딩 및 테스트 계획

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

dx11 라이트맵 처리 file

  • 여치
  • 2011-01-28
  • 조회 수 3450

추석 연휴 작업 내용 file [5]

  • 여치
  • 2008-09-15
  • 조회 수 3442

fxc

  • 여치
  • 2005-09-07
  • 조회 수 3434

엔진 64비트 포팅 프로젝트 진척상황

  • 여치
  • 2007-05-01
  • 조회 수 3434

LiPSM을 사용한 그림자 개선(진행중) file [2]

  • 여치
  • 2009-03-14
  • 조회 수 3426

64비트로 gogo file

  • 여치
  • 2007-03-27
  • 조회 수 3422

Windows Store App에서 D3DCompile계열함수 사용

  • 여치
  • 2012-12-23
  • 조회 수 3392

프레임 자랑질. file [2]

  • 여치
  • 2010-04-03
  • 조회 수 3391

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

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

CUDA 첫 프로그램. 시작은 미약하지만.. file [2]

  • 여치
  • 2010-04-12
  • 조회 수 3384

주말동안 작업 내용-라이트맵 관련 file [3]

  • 여치
  • 2008-02-04
  • 조회 수 3364

Depth of Field 구현중 file

  • 여치
  • 2010-11-24
  • 조회 수 3364

계속 개선중인 라이트맵 file

  • 여치
  • 2007-07-24
  • 조회 수 3350

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

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

64비트 릴리즈 모드 테스트

  • 여치
  • 2007-07-19
  • 조회 수 3296

6core Xeon*2 + GTS250 CDUA 라이트맵 렌더링 file

  • 여치
  • 2010-06-15
  • 조회 수 3287

주말동안 작업내용 [1]

  • 여치
  • 2008-01-28
  • 조회 수 3280

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

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

요새 관심사는... [2]

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