며칠 전에 글을 올리고 얼마 안 되어서 또 글을 적습니다.
사실 그 때 만들었던 것은 이번에 GPU를 사용하기 위한 샘플 프로그램을 만드는 과정에서 셰이더를 복습하다가 생각나서 만든 것입니다. ㅎㅎ
얼마 전에 고객사로부터 실내의 온/습도 센서를 이용한 PMV(Predicted Mean Vote)의 분포도를 Heat map으로 표현해 달라는 요청이 있었습니다. 그래서 쓸 만한 Heat map 라이브러리를 찾아보다가 이참에 직접 만들어보기로 하고, 가장 단순한 IDW(Inverse Distance Weighting) 공간보간법으로 Heat map을 생성하도록 WPF 기반 샘플 프로그램을 구현했습니다.
그런데 샘플 프로그램으로 공간보간을 실행해보니 계산을 완료할 때가지 시간이 꽤 걸렸습니다.
이걸 어떻게 개선을 해볼까 고민하다가 GPU를 이용해보기로 하고, ILGPU, ComputeSharp, SharpDX 등의 라이브러리를 적용해봤습니다.
역시나, 확실히 GPU가 기가 맥히게 빠릅니다!!!
다음은 샘플 프로그램을 CPU 및 GPU 기반으로 실행한 영상입니다.
영상을 보면, 좌측의 샘플 목록 중 선택된 샘플에 대하여 마우스 포인터로 위치를 이동할 수 있게 했습니다. CPU로 계산할 경우 다른 위치로 이동할 때마다 Progress bar가 나타나고, 얼마 후에 결과를 표시합니다. 우측 하단의 ‘Duration’을 보면 약 3초 넘게 걸리는 것을 알 수 있습니다.
그런데 ‘Use GPU’를 체크한 후 위치를 이동해보면 정말 순식간에 계산됩니다. 심지어 마우스로 자유롭게 드래그를 해도 될 정도로 빠릅니다.
작성한 모든 소스코드는 GitHub에 공유했습니다.
.NET 프로젝트에서 GPU를 사용할 필요가 있는 분들께 도움이 되었으면 좋겠습니다.