CUDA로 구현한 라이트맵 테스트 및 결론

평일 잠을 줄이고 주말을 최대한 투자한 끝에 엔진의 라이트맵 빌드를 CUDA로 처리할 수 있는 기능을 추가했다. 얼마나 삽질을 했는지…휴 아무튼 결과는 다음과 같다. 크게 만족스러운 것은 아니다. 10배쯤은 빨라질걸로 기대했으니까. 그래픽 카드가 좋으면 좀 더 좋은 결과를 얻었을지도 모르겠지만… 혹은 내 CUDA코드가 메모리 뱅크 충돌이라든가 기타 등등의 퍼포먼스 이슈를 제대로 처리하지 못했기 때문일수도 있다. 테스트 … More CUDA로 구현한 라이트맵 테스트 및 결론

CUDA로 계산하는 라이트맵

토요일 + 일요일 + 월요일 새벽을 투자하여  CUDA로 라이트맵을 계산할 수 있도록 엔진을 뜯어고쳤다. 엄청난 시행착오 끝에 그림자까지 제대로 계산하도록 만들었다. 결과는…. CPU로 계산하는 쪽이 두 배 빨랐다. 이런 샹. Q6600의 코어4개를 풀로 사용하는 것이 9800GTX+의 128스트림프로세서를 사용하는것보다 빨랐다. CPU코드를 짜면서 코드 논리에서 최적화한 부분이 GPU코드에 반영되지 않은게 큰 이유이기도 하고, 메모리 전송이 지나치게 많은 까닭도 … More CUDA로 계산하는 라이트맵

이미지 프로세싱 속도 비교 – CUDA vs CPU(single thread)

앞선 글에서 겁나 빠르다고..말했으나 사실 측정을 하지 않았기 때문에 겁나 빠른지 의외로 안빠른지 정확히 알 수 없었다. 해서 동일한 코드를 CPU용 코드로도 돌려보고 소요된 시간을 비교해보기로 했다. 빌드환경 : x64, release모드 대상 이미지 : 697*992 32bit 필터적용 : 5×5 가우시안 필터 30회 CPU : 인텔 Q6600 2.4GHz GPU : nVidia GeForce9800GTX+ 왼쪽 스샷이 CUDA코드. 대략 … More 이미지 프로세싱 속도 비교 – CUDA vs CPU(single thread)

cuda 필터 만들기. 3*3커널을 이용한 필터링

더디지만 cuda프로그래밍을 계속 학습하고 있다. 지난번 B/W필터에 이어 3*3 커널을 이용한 필터를 만들어보았다. 3*3 가우시안 마스크를 이용해서 블러를, 3*3 라플라시안 마스크를 이용해서 엣지필터를 만들었다. 아직 많이 미숙하여 퍼포먼스 고려할 처지가 아니기 때문에 퍼포먼스는 신경쓰지 않았다. 메모리 접근을 32바이트 단위로 끊으면 더 빨라질텐데…뭐 지금도 겁나 빠른거 같다.

cuda로 필터 만들기 첫번째 B/W필터

물론 기술적으로는 별거 아니지만. CUDA로 만들었다는데 의를 둔다. 3×3이나 5×5, 9×9 커널을 이용한 필터는 주말에 시도해 볼 예정. 아직 세부적인 메모리 모델이나 cuda api는 잘 모르지만 대충 어떻게 코드를 작성해야하는지, 블럭과 그리드 개념에 대해서는 이해가 되고 있다. 화면 출력코드는 만들지 않았으므로 이미지 파일을 읽어서 cuda코드로 B/W필터를 먹이고 다시 세이브해서 ACDSEE로 확인했다.

프레임 자랑질.

– BSP기반 공간분할-실시간 PORTAL컬링 – SW Occlusion Culling – HW Occlusion Culling – SSE Assembly Code – 비동기 멀티스레딩 충돌처리 라이브러리 – Font Cache 이 모든것들을 동원하여 죽도록 최적화한 결과. UI코드까지 싸그리 내 손으로 다 최적화했다면 조금쯤 더 빨라질 수 있었을텐데 약간 아쉬움이… nVidia Geforce9800GTX+ (GTS250과동일) INTEL Q6600 2.4GHz RAM 8GB 중 (x86버젼으로 319MB, x64버젼으로 … More 프레임 자랑질.

간단한 눈 처리

PvP 전용 던젼을 만들고 보스전을 개선해야하지만 전략적으로 어떻게 만들어야할지 설계가 도저히 떠오르지 않고, 의욕도 전혀 생기지 않는다. 안되는거 붙잡고 있어봐야 시간만 낭비고 짜증만 더 할 뿐이라 기분전환을 좀 하기로 했다. 과거로 돌아가서 대략 1년2개월쯤 전. 우리팀 막내 프로그래머 P씨가 입사할때 제출한 포폴을 보면 눈이 펄펄 내리고 있는데 상당히 그럴싸해보였다. 그 당시 구현방법을 물었고 우리 프로젝트에도 … More 간단한 눈 처리

가칭 프로젝트 E(엡실론) 알파 테스트 간단 후기

테스트 무사히 잘 마쳤습니다. 예정된 테스트 시간 34시간 중에 버그 수정으로 인한 점검 4시간 빼고 총 30시간 테스트를 진행했습니다. 아주 사소한 코딩 실수로 서버 1회 다운됐습니다. 테스트 이틀 전 수정한 넉줄의 코드가 플레이어로 하여금 바닥을 뚫고 추락하게 만들었습니다. 역시 막판 코드 수정은 위험합니다. 그 덕에 점검 30분 하려던게 4시간이 되었습니다. 피 말라 죽는 줄 알았습니다. … More 가칭 프로젝트 E(엡실론) 알파 테스트 간단 후기

x64 calling convention – register usage

RAX Volatile Return value register. RCX Volatile First integer argument. RDX Volatile Second integer argument. R8 Volatile Third integer argument. R9 Volatile Fourth integer argument. R10:R11 Volatile Must be preserved as required by caller; used in syscall/sysret instructions. R12:R15 Nonvolatile Must be preserved by called function. RDI Nonvolatile Must be preserved by called function. RSI … More x64 calling convention – register usage