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

lightmap_gpu_after lightmap_gpu_before

평일 잠을 줄이고 주말을 최대한 투자한 끝에 엔진의 라이트맵 빌드를 CUDA로 처리할 수 있는 기능을 추가했다.

얼마나 삽질을 했는지…휴

아무튼 결과는 다음과 같다.

크게 만족스러운 것은 아니다. 10배쯤은 빨라질걸로 기대했으니까.

그래픽 카드가 좋으면 좀 더 좋은 결과를 얻었을지도 모르겠지만…

혹은 내 CUDA코드가 메모리 뱅크 충돌이라든가 기타 등등의 퍼포먼스 이슈를 제대로 처리하지 못했기 때문일수도 있다.
테스트 환경

CPU : Q6600 2.4GHz Quad Core

GPU : nVidia 9800GTX+ (128 cuda core)

OS : Windows 7 x64

RAM : 8GB
테스트 방법

1.개발맵중 라이트가 수 백개 박혀서 제일 느린 맵을 로드.

2.순수 라이트맵 계산 시간만을 구하기 위해 그림자 끈 상태로 미리 한번 빌드.

3.그림자를 켜고 라이트맵 빌드.이걸로 시간 측정
테스트 결과

Only CPU (4 Multi Threads)         -> 339568 ticks (339초)

Only GPU                                   -> 414572 ticks (414초)

GPU + CPU (4 Multi Threads)       -> 179245 ticks (179초)
고찰

9800GTX+와 요새 많이 쓰는 GTS250이 같은 GPU인데, 4개 코어를 풀로 활용하는 경우에는 Q6600과 같은 구세대 4코어 CPU보다 성능이 떨어진다.

병렬컴퓨팅 성능으로 보면 GTS250기준으로 GPU 한 개가 대략 2.4GHz 코어 3개정도의 성능이라고 볼 수 있다.

GTX480과 같은 엄청난 GPU를 사용하면 또 모르겠지만, 일반적인 GTS250정도로는 요새 많이 쓰는 I7 쿼드코어 정도의 CPU보다는 확실히 효율이 떨어질 것이다.

4core CPU기준으로는 GPU와 병행해서 사용하는 쪽이 약 2배가까이 빠르다.

2.8GHz 12코어(24스레드) 제온으로 테스트 했을때는 GPU를 병행해서 사용해도 고작 12%정도의 효율 향상이 있었다.

계산해보면 대략 2.8GHz 제온 코어 2개에 해당한다.

CPU값만 350만원씩 발라서 12코어 제온 정도 맞추면 GPU컴퓨팅이고 뭐고 생각할 이유도 없는 것이다.-_-; 뭐 그것도 용도 나름이겠지만.

매트릭스 연산이나 이미지 프로세싱과 같이 병렬화 하기 더 좋은 작업에서는 최대 100배 정도의 효율도 얻을 수는 있다고 생각한다. 다만 용도가 제한적이라는 점과 코드 작성,디버깅의 어려움을 감안한다면 기대보다는 효용성이 떨어진다.
결론

150만원 이하의 장비를 사용해야 한다면 CUDA를 병행 사용하는 것은 메리트가 있다.

쿼드코어 정도의 CPU를 사용하고 GTS250이상의 GPU를 사용한다면 CUDA를 사용하는 쪽이 효율 향상이 있다.

조립기준 500만원 혹은 메이커제품 1000만원 이상의 장비를 사용할 수 있다면 굳이 CUDA로 개발해야할 필요는 없을 것 같다.

후기

몇 일 밤을 샜는데.이런 샹. 효율이 이거 밖에 안돼?

아 울고 싶네.T_T


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중