nVidia Parallel NSight 소개

Parallel NSight는 nVidia에서 제공하는 CUDA,쉐이더코드의 디버깅툴입니다. 물론 nVidia의 GPU에서만 작동합니다. 실제 GPU에서 코드 작동중에 브레이크 포인트 찍어가며 디버깅을 할 수 있습니다. Visual Studio 플러그인 형태로 설치되므로 사용하기도 편리합니다.물론 설치를 잘 했다는 전제 하에… 그 동안 계속 관심을 가지고 있던 nVidia의 Parallel NSight가 드뎌 VS2010을 지원하여 큰 맘먹고 설치했습니다. 사실 현재 릴리즈된 정식버젼은 1.0버젼이고 VS2008까지만 지원합니다. … More nVidia Parallel NSight 소개

별거 아니지만…노말방향 스케일 아웃라인의 활용

예전에 외곽선 추출할때 잠깐 만들어서 써보고 ‘이거 못쓰겠군’ 해서 2시간만에 갖다버린 기법. 노말방향으로 조금씩 스케일링 해서 뒤집어서 한번 찍어주고 원래 모델을 한번 더 찍는 방법이다. 영 이쁘지 않고 거칠다. 특히 캐릭터의 얼굴과 같은 섬세한 아웃라인 처리에는 아주 쉣이다. 재패니메이션과 같은 그래픽을 표방하는 우리 게임에선 전혀 어울리지 않는다. 그래서 완전 잊고 있었는데 팀 내부 요구사항 들어온것 … More 별거 아니지만…노말방향 스케일 아웃라인의 활용

x64어셈코드에서 크래시한 경우 콜스택 확인

현재 엔진 코드에 ml64용 64비트 어셈블리 코드가 적지않게 존재한다. 일단 콜스택 정보가 나오지 않는 것은 rsp레지스터의 값을 함수 안에서 변경하기 때문이다. 함수에 최초 진입했을 당시 rsp레지스터가 가리키고 있는 메모리에 리턴 어드레스가 들어있는데 디버거는 이를근거로 근거로 콜스택을 추적한다. c++코드를 디스어셈블 해보면 rsp레지스터의 리턴어드레스를 유지하기 위한 별도의 코드는 보이지 않는다. 따라서 pdb에 rsp사용에 대한 내용까지 기록되어있다고 판단한다. … More x64어셈코드에서 크래시한 경우 콜스택 확인

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

서버의 멀티스레드 충돌처리 테스트 및 패킷 과부하 테스트를 위해 조립품으로 옆자리에 들여놓은 제온 머신이다. 겸사겸사 멀티스레딩 라이트맵 계산과 CUDA테스트도 할 겸 가격대 성능비 좋은 GTS250 1GB버젼을 하나 꽂았다. 이 조합의 경우는 CUDA를 사용할 경우 15%정도의 성능 향상이 있다. 과연 12코어 24스레드의 힘! 약간의 최적화를 해서 집의 쿼드머신에선 CUDA사용시 120%정도의 성능 향상을 얻었다. 오늘 엔진과 툴을 … More 6core Xeon*2 + GTS250 CDUA 라이트맵 렌더링

Project ε(프로젝트 엡실론) 2차 알파 후기

2차 테스트를 무사히 마쳤습니다. 30시간 동안 서버다운,점검 전혀 없이 깔끔하게 완료했습니다. 클라이언트 덤프가 꽤 쌓여있어서 분석하고 디버깅할걸 생각하면 좀 암담하긴 합니다만. 서버에서 힙 크래시 하는 버그가 있었는데 테스트 3일전에 발견해서 그 다음날 잡은게 꽤 드라마틱한 사건이었구요.(주님 감사합니다.진실로…) 금요일 오후에 139번 빌드를 최종적으로 릴리즈 하고 클라이언트에서 몇 가지 버그를 발견하여 주말 내내 노트북과 집 데스크탑을 이용한 … More Project ε(프로젝트 엡실론) 2차 알파 후기

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로 확인했다.