행렬 연산 GPU 커널 구현 + 메모리 전송 비용 경험 + Shared Memory 활용 + 동기화 주의사항
그래픽스 수업에서 CUDA를 처음 사용해서 행렬 연산을 GPU에서 병렬로 처리하는 과제를 했습니다. 처음엔 단순히 CPU 코드를 GPU 커널로 옮기면 된다고 생각했는데, 메모리 전송 비용이 연산 이득을 상쇄하는 경우를 직접 경험했습니다. Global Memory 접근 패턴이 성능에 결정적인 영향을 주는 걸 배웠는데, 연속적이지 않은 메모리 접근은 coalescing 실패로 큰 지연이 생겼습니다. Shared Memory를 활용해서 반복 접근하는 데이터를 빠른 온칩 메모리에 올리는 방식으로 속도를 개선하는 경험을 했습니다. 동기화 측면에서는 커널 내 __syncthreads() 위치가 잘못되면 race condition이 생길 수 있다는 걸 배웠습니다.
GPU 병렬 처리는 알고리즘을 병렬화 가능한 형태로 재설계해야 진짜 성능이 나온다는 걸 그때 배웠습니다.