컴퓨터/Etc

Matrix Tiling

xeskin 2019. 11. 19. 21:55
반응형

  이번 포스팅에서는 GPU에서 매우 큰 matrix를 효율적으로 연산하게 해주는 최적화 기법인 matrix tiling에 대해서 알아보겠습니다. 이는 matrix-matrix multiplication의 효율을 높여주기 위해 사용됩니다.

 

 

  우선 matrix tiling을 해주기 위해서는 input matrix 2개와 result matrix를 tiling해주어야 합니다. 그리고 난 뒤에는 이들을 tile단위로 multiplication을 해주어 result matrix에 저장해줍니다. 이걸 열과 행단위로 matrix 전체를 계산해주면 됩니다. 이에 대한 pseudo-code는 다음과 같습니다. 

 

Pseudo-code of tiled matrix multiplication

 

  이렇게 tiled matrix multiplication을 해주면 전체 matrix가 GPU memory에 fit하지 않은 녀석을 multiplication 해줄 수 있게 되는데요. 이를 실행시킬 때는 다음과 같은 점을 지켜줘야 합니다.

 

  1. Pinned memory를 사용해서 타일의 내용들을 비동기적으로 디바이스에 사용할 수 있게끔합니다.

  2. 이전에 계산된 결과들을 재사용해주기 위해서 cublasDGEMM의 beta값을 1로 만들어줘야 합니다.

 

 

  그렇게 되면 계산은 다음과 같이 할 수 있습니다.

  1. 먼저 global matrix들을 pinned buffer로 tiling된 걸 읽어옵니다.

  2. 그리고 이걸 GPU memory로 보내줍니다.

  3. 그리고 이걸 cublasDGEMM을 이용하여 계산해줍니다.

  4. 계산한 결과를 pinned buffer로 불러옵니다.

  5. 그리고 Pinned host buffer에 있는 tile을 host memory에 있는 global result matrix에 저장해줍니다.

 

  

  이에 대한 그림은 다음과 같습니다.

 

 

  1. 먼저 global matrix들을 pinned buffer로 tiling된 걸 읽어옵니다.

 

 

 

  2. 그리고 이걸 GPU memory로 보내줍니다.

 

 

 

  3. 그리고 이걸 cublasDGEMM을 이용하여 계산해줍니다.

 

 

 

  4. 계산한 결과를 pinned buffer로 불러옵니다.

 

 

 

  5. 그리고 Pinned host buffer에 있는 tile을 host memory에 있는 global result matrix에 저장해줍니다.

 

  Reference : https://www.fz-juelich.de/SharedDocs/Downloads/IAS/JSC/EN/slides/cuda/10-cuda-dgemm-tiled.pdf?__blob=publicationFile

반응형

'컴퓨터 > Etc' 카테고리의 다른 글

Ahmdal's law  (0) 2020.04.05
Hardware Speculation  (0) 2020.04.05
Design/Verification Complexity  (0) 2020.03.20
리눅스 터미널에서 바로 코드 돌리는 방법  (0) 2020.01.15
numpy, tensorflow vs pytorch  (0) 2020.01.07