원문 캡처 · news.ycombinator.com
원문 캡처 · news.ycombinator.com

행렬 곱셈 튜토리얼과 ulmBLAS는 캐시 계층과 SIMD 레지스터 명령어를 활용해 행렬 곱셈을 빠르게 구현하는 방법을 다룬다. CUDA 튜토리얼은 아직 글이 많지 않지만, 단순한 구현에서 성능을 높이는 단계별 접근을 제시한다.

2014년에 작성한 튜토리얼은 세 개의 반복문을 쓰는 단순한 구현에서 시작해 행렬 블록을 버퍼에 복사하고 블록 단위로 계산하는 과정을 설명한다. 블록 복사에는 O(N^2), 계산에는 O(N^3)의 비용이 들지만, 복사해 둔 블록으로 계산을 훨씬 빠르게 수행할 수 있다면 이 방식이 이득이 될 수 있다는 설명이다. 튜토리얼은 스트라센 알고리즘의 변형이 아니라 캐시 친화적 알고리즘과 SIMD 명령어를 통해 높은 성능을 얻는 방법을 다룬다.

대학 웹 서버가 여러 차례 바뀌면서 튜토리얼을 GitHub로 옮겼다: gemm-tutorial. 이 튜토리얼에서 출발해 전체 BLAS 구현인 ulmBLAS도 만들었다. 최근 시작한 CUDA 행렬 곱셈 튜토리얼은 ulmBLAS 저장소의 cuda 하위 디렉터리에 있다: ulmBLAS. CUDA 구현은 NVIDIA의 cuBLAS와 대등한 성능을 목표로 했으며, 현재 글은 단계별 접근의 개요를 제시하는 수준이다.