Puzzle 16: ํ๋ ฌ ๊ณฑ์ (MatMul)
๊ฐ์
ํ๋ ฌ ๊ณฑ์ ์ ๊ณผํ ๊ณ์ฐ, ๋จธ์ ๋ฌ๋, ๊ทธ๋ํฝ์ค์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ์ฐ์ฐ์ ๋๋ค. ๋ ํ๋ ฌ \(A\)์ \(B\)๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ค์ ๊ณฑ \(C = A \times B\) ๋ฅผ ๊ตฌํ๊ณ ์ ํฉ๋๋ค.
ํ๋ ฌ \(A_{m\times k}\)์ \(B_{k\times n}\)์ ๋ํด, ๊ฒฐ๊ณผ \(C_{m\times n}\)์ ๊ฐ ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐ๋ฉ๋๋ค:
\[\Large C_{ij} = \sum_{l=0}^{k-1} A_{il} \cdot B_{lj} \]
์ด ํผ์ฆ์์๋ GPU์์ ํ๋ ฌ ๊ณฑ์ ์ ๊ตฌํํ๋ ์ฌ๋ฌ ์ ๊ทผ๋ฒ์ ์ดํด๋ด ๋๋ค. ๊ฐ ๋ฒ์ ์ ์๋ก ๋ค๋ฅธ ์ฑ๋ฅ ํน์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค:
-
์ ์ญ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ธฐ๋ณธ ๋ฒ์ ๊ฐ ์ค๋ ๋๊ฐ ์ถ๋ ฅ ํ๋ ฌ์ ์์ ํ๋๋ฅผ ๊ณ์ฐํ๋ ์ง๊ด์ ์ธ ๊ตฌํ์ ๋๋ค. ์ดํดํ๊ธฐ ์ฝ์ง๋ง, ์ค๋ณต๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด ๋ง๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
-
๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฒ์ ์ ๋ ฅ ํ๋ ฌ์ ๋ธ๋ก์ ๋น ๋ฅธ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค ์ ์ญ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์ค์ ๋๋ค. ๊ฐ ์ค๋ ๋๊ฐ ์ถ๋ ฅ ์์ ํ๋๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ ๊ฐ์ง๋ง, ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ต๋๋ค.
-
ํ์ผ๋ง ๋ฒ์ ์ฐ์ฐ์ ํ์ผ ๋จ์๋ก ๋๋์ด ์ค๋ ๋๋ค์ด ์ถ๋ ฅ ํ๋ ฌ์ ๋ธ๋ก์ ํจ๊ป ๋ก๋ํ๊ณ ๊ณ์ฐํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต ๊ตฌ์กฐ์ ์ค๋ ๋ ํ๋ ฅ์ ํ์ธต ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐฉ์์ ๋๋ค.
๊ฐ ๋ฒ์ ์ ์ด์ ๋ฒ์ ์์ ์์ ์ฌ๋ฆฌ๋ฉด์ GPU ํ๋ก๊ทธ๋๋ฐ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์๋ก์ด ์ต์ ํ ๊ธฐ๋ฒ์ ์๊ฐํฉ๋๋ค. ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํจํด๊ณผ ์ค๋ ๋ ํ๋ ฅ ์ ๋ต์ด ์ฑ๋ฅ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ๋ฐฐ์ธ ์ ์์ต๋๋ค.
์ด ๋จ๊ณ์ ์งํ ๊ณผ์ ์ GPU ์ต์ ํ์ ๋ํ์ ์ธ ํจํด์ ๋ณด์ฌ์ค๋๋ค:
- ์ ํํ์ง๋ง ๋จ์ํ ๊ธฐ๋ณธ ๊ตฌํ์์ ์ถ๋ฐ
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ ์ญ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ค์ด๊ธฐ
- ํ์ผ๋ง์ผ๋ก ๋ฐ์ดํฐ ์ง์ญ์ฑ๊ณผ ์ค๋ ๋ ํ๋ ฅ ๊ฐ์
- ๊ณ ์์ค ์ถ์ํ๋ฅผ ํ์ฉํ๋ฉด์๋ ์ฑ๋ฅ ์ ์ง
์ํ๋ ๋ฒ์ ์ ๊ณจ๋ผ ํ๋ ฌ ๊ณฑ์ ์ฌ์ ์ ์์ํด ๋ณด์ธ์!