Mojo ๐ฅ GPU Puzzles, Edition 1
โ์ฐ๋ฆฌ๊ฐ ํ ์ ์๊ธฐ ์ ์ ๋ฐฐ์์ผ ํ๋ ๊ฒ๋ค์, ํ๋ฉด์ ๋ฐฐ์ด๋ค.โ ์๋ฆฌ์คํ ํ ๋ ์ค (๋์ฝ๋ง์ฝ์ค ์ค๋ฆฌํ)
Mojo ๐ฅ๋ฅผ ์ฌ์ฉํ GPU ํ๋ก๊ทธ๋๋ฐ ์ค์ต ๊ฐ์ด๋์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค. Mojo๋ ํ์ด์ฌ ๋ฌธ๋ฒ๊ณผ ์์คํ ์์ค์ ์ฑ๋ฅ์ ๊ฒฐํฉํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค.
์๋ ๊ฐ์ ์์์ ๋จผ์ ์์ฒญํ๊ฑฐ๋, ๊ณ์ ์ฝ์ด์ฃผ์ธ์.
์ GPU ํ๋ก๊ทธ๋๋ฐ์ธ๊ฐ?
GPU ํ๋ก๊ทธ๋๋ฐ์ ์ ๋ฌธ ๊ธฐ์ ์์ ํ๋ ์ปดํจํ ์ ํต์ฌ ์ธํ๋ผ๋ก ๋ฐ์ ํ์ต๋๋ค. ์์ญ์ต ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ๋ถํฐ ์ค์๊ฐ ์์ ์คํธ๋ฆผ์ ๋ถ์ํ๋ ์ปดํจํฐ ๋น์ ์์คํ ๊น์ง, GPU ๊ฐ์์ด ์ค๋๋ ์ ์ฐ์ฐ ํ์ ์ ์ด๋๊ณ ์์ต๋๋ค. ๊ธฐํ ๋ชจ๋ธ๋ง, ์ ์ฝ ๋ฐ๊ฒฌ, ์์ ์๋ฎฌ๋ ์ด์ ๋ฑ ๊ณผํ์ ๋ฐ์ ์ GPU๋ง์ด ์ ๊ณตํ๋ ๋๊ท๋ชจ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ์์กดํ๊ณ ์์ต๋๋ค. ๊ธ์ต ๊ธฐ๊ด์ ์ค์๊ฐ ๋ฆฌ์คํฌ ๋ถ์๊ณผ ์๊ณ ๋ฆฌ์ฆ ํธ๋ ์ด๋ฉ์ GPU ์ปดํจํ ์ ํ์ฉํ๋ฉฐ, ์์จ์ฃผํ ์ฐจ๋์ GPU ๊ฐ์ ์ ๊ฒฝ๋ง์ ํตํด ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ค์ํ ์์ฌ๊ฒฐ์ ์ ๋ด๋ฆฝ๋๋ค.
๊ฒฝ์ ์ ํ๊ธ๋ ฅ๋ ์๋นํฉ๋๋ค. GPU ์ปดํจํ ์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ์กฐ์ง์ ๊ฐ๋ฐ ์ฃผ๊ธฐ ๋จ์ถ, ์ฐ์ฐ ๋น์ฉ ์ ๊ฐ, ๊ทธ๋ฆฌ๊ณ ์ด์ ์๋ ํ๊ธฐ ์ด๋ ค์ ๋ ๊ณ์ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฅ๋ ฅ ๋ฑ ์๋นํ ๊ฒฝ์ ์ฐ์๋ฅผ ํ๋ณดํฉ๋๋ค. ๊ณ์ฐ ๋ฅ๋ ฅ์ด ๋น์ฆ๋์ค ๊ฐ์น์ ์ง๊ฒฐ๋๋ ์๋์, GPU ํ๋ก๊ทธ๋๋ฐ ์ญ๋์ ์์ง๋์ด, ์ฐ๊ตฌ์, ์กฐ์ง์๊ฒ ์ ๋ต์ ์ฐจ๋ณํ ์์์ ๋๋ค.
์ GPU ํ๋ก๊ทธ๋๋ฐ์ Mojo๐ฅ๋ฅผ ์ฌ์ฉํ๋๊ฐ?
์ปดํจํ ์ฐ์ ์ ์ค๋ํ ์ ํ์ ์ ๋๋ฌํ์ต๋๋ค. CPU ์ฑ๋ฅ์ ์ ๋ ฅ๊ณผ ๋ฐ์ด ์ ์ฝ์ผ๋ก ์ธํด ํด๋ญ ์๋ ํฅ์๋ง์ผ๋ก๋ ํ๊ณ์ ์ด๋ฅด๋ ์ต๋๋ค. ์ด์ ๋ฐ๋ผ ํ๋์จ์ด ์ ์กฐ์ฌ๋ค์ ๋ฌผ๋ฆฌ์ ์ฝ์ด ์๋ฅผ ๋๋ฆฌ๋ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๊ณ , ์ด๋ฌํ ๋ฉํฐ์ฝ์ด ์ ๊ทผ ๋ฐฉ์์ ์ ์ ์ด ๋ฐ๋ก ์์ฒ ๊ฐ์ ์ฝ์ด๊ฐ ๋ณ๋ ฌ๋ก ๋์ํ๋ ํ๋ GPU์ ๋๋ค. NVIDIA H100์ ์๋ก ๋ค๋ฉด, ๋จ์ผ ํด๋ญ ์ฌ์ดํด์ 16,896๊ฐ์ ์ค๋ ๋๋ฅผ ๋์์ ์คํํ๋ฉด์ 270,000๊ฐ ์ด์์ ์ค๋ ๋๋ฅผ ๋๊ธฐ์ํฌ ์ ์์ต๋๋ค.
Mojo๋ GPU ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ์ค์ฉ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ์ฌ, ์ด๋ฌํ ๋ณ๋ ฌ์ฑ์ ๋ ์ฝ๊ฒ ํ์ฉํ ์ ์๊ฒ ํฉ๋๋ค:
- ํ์ด์ฌ ์คํ์ผ ๋ฌธ๋ฒ์ผ๋ก ์์คํ ํ๋ก๊ทธ๋๋ฐ๊น์ง
- ์ถ์ํํด๋ ์ฑ๋ฅ ์์ค ์์ด ๋จธ์ ์ฝ๋๋ก ์ปดํ์ผ๋๋ ์ ๋ก ์ฝ์คํธ ์ถ์ํ
- ์ปดํ์ผ ํ์์ ์ค๋ฅ๋ฅผ ์ก๋ ๊ฐ๋ ฅํ ํ์ ์์คํ
- ํ๋์จ์ด ์ต์ ํ๋ฅผ ๊ณ ๋ คํ ํ ์ ๊ธฐ๋ณธ ์ง์
- CPUยทGPU ๋ด์ฅ ํจ์๋ฅผ ์ง์ ํธ์ถํ ์ ์๋ ํ๋์จ์ด ์ง์ ์ ์ด
- CPU์ GPU ๋ชจ๋์์ ๋์ํ๋ ํฌ๋ก์ค ํ๋์จ์ด ์ด์์ฑ
- C/C++ ๋๋น ํฅ์๋ ์์ ์ฑ
- ๋ฎ์ ์ง์ ์ฅ๋ฒฝ์ผ๋ก ๋ ๋ง์ ํ๋ก๊ทธ๋๋จธ๊ฐ GPU ์ฑ๋ฅ์ ํ์ฉ
Mojo๐ฅ๋ GPU ํ๋ก๊ทธ๋๋ฐ์ ๋๊ตฌ๋ ํ ์ ์๋๋ก ๋ง๋ค์ด ํ์ ์ ์ด๋๊ณ ์ ํฉ๋๋ค. >์ต์ํ ํ์ด์ฌ ๋ฌธ๋ฒ์ ๋ฐํ์ผ๋ก GPU์ ์ง์ ์ ๊ทผํ ์ ์์ด, ๊น์ ์ ๋ฌธ ์ง์ ์์ด๋ CPU์ GPU๋ฅผ ํจ๊ป ํ์ฉํ๋ ๊ณ ์ฑ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ ํผ์ฆ๋ก ๋ฐฐ์ฐ๋๊ฐ?
๋๋ถ๋ถ์ GPU ํ๋ก๊ทธ๋๋ฐ ์๋ฃ๋ ์ค์ต์ ์์ ๋ฐฉ๋ํ ์ด๋ก ์ ๋จผ์ ๋ค๋ฃน๋๋ค. ํ์ง๋ง ์ง์ ํด๋ด์ผ ์ดํด๋๋ ์ถ์์ ๊ฐ๋ ๋ค์ ์ ๋ฌธ์์๊ฒ ๋ถ๋ด์ด ๋ ์ ์์ต๋๋ค.
์ด ์ฑ ์ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ํํฉ๋๋ค. ์ค์ ๋ฌธ์ ์ ๋ฐ๋ก ๋ฐ์ด๋ค์ด, ๋จ๊ณ์ ์ผ๋ก ๊ฐ๋ ์ ๋ฐ๊ฒฌํด ๋๊ฐ๋๋ค.
ํผ์ฆ ๊ธฐ๋ฐ ํ์ต์ ์ฅ์ :
- ์ง์ ์ฒดํ: GPU์์ ๋ฐ๋ก ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค
- ์ ์ง์ ๋ณต์ก๋: ๊ฐ ํผ์ฆ์ด ์ด์ ์ ๋ฐฐ์ด ๊ฐ๋ ์์ ์์ฌ๊ฐ๋๋ค
- ์ค์ฉ์ ์ด์ : ์ค์ ๊ณ์ฐ ๋ฌธ์ ๋ฅผ ๋ฐ์ํ ํผ์ฆ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค
- ๋๋ฒ๊น ๋ฅ๋ ฅ: ์ฒด๊ณ์ ์ธ ๋๋ฒ๊น ์ฐ์ต์ ํตํด ๋ฌธ์ ํด๊ฒฐ ๊ฐ๊ฐ์ ํค์๋๋ค
- ์ง์ ์ ์ฐฉ: ์ง์ ํ์ด๋ณด๋ ๊ฒ์ด ์ฝ๊ธฐ๋ง ํ๋ ๊ฒ๋ณด๋ค ์ดํด๊ฐ ๋ ๊น์ด์ง๋๋ค
์๊ธฐ๊ฐ ์๋ ๋ฐ๊ฒฌ์ ์ค์ ์ ๋ก๋๋ค. ์ง์ ์คํํ๋ฉด์ ๊ฐ๋ ์ ์์ฐ์ค๋ฝ๊ฒ ์ตํ๊ณ , ๊น์ ์ดํด์ ์ค์ ์ญ๋์ ํจ๊ป ์์๊ฐ ์ ์์ต๋๋ค.
๊ฐ์ฌ์ ๋ง: ์ด ์ฑ ์ Part I๊ณผ III์ ์ธํฐ๋ํฐ๋ธ NVIDIA GPU ํ์ต ํ๋ก์ ํธ์ธ GPU Puzzles์์ ํฐ ์๊ฐ์ ๋ฐ์์ต๋๋ค. ์ด ์ฑ ์ ํด๋น ๊ฐ๋ ๋ค์ Mojo์ ์ถ์ํ์ ์ฑ๋ฅ์ ํ์ฉํ์ฌ ์ฌ๊ตฌํํ๊ณ , Mojo์ ํนํ๋ ์ต์ ํ๋ก ๊ณ ๊ธ ์ฃผ์ ๋ฅผ ๋ ๋๊ฒ ๋ค๋ฃน๋๋ค.
GPU ํ๋ก๊ทธ๋๋ฐ ์ฌ๊ณ ๋ฐฉ์
ํจ๊ณผ์ ์ธ GPU ํ๋ก๊ทธ๋๋ฐ์ ์ํด์๋ ๊ณ์ฐ์ ๋ฐ๋ผ๋ณด๋ ๋ฐฉ์ ์์ฒด๋ฅผ ๋ฐ๊ฟ์ผ ํฉ๋๋ค. ์์ผ๋ก์ ํ์ต์ ๊ธธ์ก์ด๊ฐ ๋ ํต์ฌ ์ฌ๊ณ ๋ชจ๋ธ์ ์๊ฐํฉ๋๋ค:
์์ฐจ์์ ๋ณ๋ ฌ๋ก: ๋ฐ๋ณต๋ฌธ์ ์ค๋ ๋๋ก ๋์ฒด
๊ธฐ์กด CPU ํ๋ก๊ทธ๋๋ฐ์์๋ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ์์๋๋ก ์ฒ๋ฆฌํฉ๋๋ค:
# CPU ๋ฐฉ์
for i in range(data_size):
result[i] = process(data[i])
GPU ํ๋ก๊ทธ๋๋ฐ์ ์ด ๋ฐฉ์์ ์์ ํ ๋ค์ง์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ์ํํ๋ ๋์ , ์์ฒ ๊ฐ์ ์ค๋ ๋๋ฅผ ํ ๋นํ์ฌ ๋ฐ์ดํฐ ์์๋ฅผ ๋์์ ์ฒ๋ฆฌํฉ๋๋ค:
# GPU ๋ฐฉ์ (๊ฐ๋
์ )
thread_id = get_global_id()
if thread_id < data_size:
result[thread_id] = process(data[thread_id])
๊ฐ ์ค๋ ๋๊ฐ ํ๋์ ๋ฐ์ดํฐ ์์๋ฅผ ๋งก์ ์ฒ๋ฆฌํ๋ฏ๋ก, ๋ช ์์ ์ธ ๋ฐ๋ณต๋ฌธ์ด ๋๊ท๋ชจ ๋ณ๋ ฌ ์คํ์ผ๋ก ๋ฐ๋๋๋ค. ์์ฐจ ์ฒ๋ฆฌ์์ ๋์ ์คํ์ผ๋ก์ ์ ํ์ด GPU ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋ ์ ๋๋ค.
๋ฐ์ดํฐ ์์ ์ฐ์ฐ ๊ทธ๋ฆฌ๋ ๋ง์ถ๊ธฐ
๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํ๋ ๊ทธ๋ฆฌ๋๋ก, GPU ์ค๋ ๋๊ฐ ์ด์ ๋์ํ๋ ์ฐ์ฐ ๊ทธ๋ฆฌ๋๋ฅผ ํ์ฑํ๋ค๊ณ ์๊ฐํด ๋ณด์ธ์. ํจ๊ณผ์ ์ธ GPU ํ๋ก๊ทธ๋๋ฐ์ ์ด ์ค๋ ๋ ๊ตฌ์ฑ์ ์ ์ค๊ณํ์ฌ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ์ต์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค:
- ์ค๋ ๋: ๊ฐ๊ฐ ํน์ ๋ฐ์ดํฐ ์์๋ฅผ ๋ด๋นํ๋ ๊ฐ๋ณ ์ฒ๋ฆฌ ๋จ์
- ๋ธ๋ก: ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ๊ณผ ๋๊ธฐํ ๊ธฐ๋ฅ์ ๊ฐ์ถ ์ค๋ ๋ ๊ทธ๋ฃน
- ๊ทธ๋ฆฌ๋: ์ ์ฒด ๊ณ์ฐ ๋ฌธ์ ๋ฅผ ์์ฐ๋ฅด๋ ์ค๋ ๋ ๊ณ์ธต ๊ตฌ์กฐ
GPU ํ๋ก๊ทธ๋๋ฐ์ ์ํ๋ ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํจํด๊ณผ ๋๊ธฐํ ์๊ตฌ์ฌํญ์ ๊ด๋ฆฌํ๋ฉด์ ๋ณ๋ ฌ ํจ์จ์ ์ต๋ํ ๋์ด์ฌ๋ฆฌ๋๋ก ์ด ์ค๋ ๋ ๊ตฌ์ฑ์ ๊ท ํ์ ์ก์์ผ ํฉ๋๋ค.
๋ฐ์ดํฐ ์ด๋ vs. ์ฐ์ฐ
GPU ํ๋ก๊ทธ๋๋ฐ์์๋ ์ฐ์ฐ ์์ฒด๋ณด๋ค ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธฐ๋ ๋น์ฉ์ด ๋ ํด ๋๊ฐ ๋ง์ต๋๋ค:
- CPU์ GPU ๊ฐ ๋ฐ์ดํฐ ์ด๋์ ๋๋ฆฝ๋๋ค
- ์ ์ญ ๋ฉ๋ชจ๋ฆฌ์์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ก์ ์ด๋์ ๊ทธ๋ณด๋ค ๋น ๋ฆ ๋๋ค
- ๋ ์ง์คํฐ๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ฏธ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ ๋งค์ฐ ๋น ๋ฆ ๋๋ค
์ด๋ ํ๋ก๊ทธ๋๋ฐ์์ ํํ ๊ฐ์ง๋ ๊ฐ์ ์ ๋ค์ง์ต๋๋ค. ๋ณ๋ชฉ์ ์ฐ์ฐ์ด ์๋๋ผ ๋ฐ์ดํฐ ์ด๋์ ๋๋ค.
์ด ์ฑ ์ ํผ์ฆ๋ค์ ํ์ด๊ฐ๋ฉด์ ์ด๋ฌํ ์์น์ ์ง๊ด์ ์ผ๋ก ์ฒด๋ํ๊ณ , ๊ณ์ฐ ๋ฌธ์ ์ ์ ๊ทผํ๋ ๋ฐฉ์์ ๋ฐ๊ฟ ๋๊ฐ ์ ์์ต๋๋ค.
ํ์ต ๋ด์ฉ
์ด ์ฑ ์ ๊ธฐ์ด ์๋ฆฌ๋ถํฐ ๊ณ ๊ธ GPU ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ๊น์ง ๋ค๋ฃน๋๋ค. GPU๋ฅผ ์ ์ ์๋ ๋ธ๋๋ฐ์ค๋ก ๋์ง ์๊ณ , ๊ฐ๋ณ ์ค๋ ๋์ ๋์๋ถํฐ ์์ํ์ฌ ์ ๊ตํ ๋ณ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๊น์ง ๋จ๊ณ๋ณ๋ก ์ดํด๋ฅผ ์์๊ฐ๋๋ค. ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ณ ์์ค ํ ์ ์ถ์ํ๋ฅผ ๋ชจ๋ ๋ฐฐ์์ผ๋ก์จ, ์ด๋ค GPU ํ๋ก๊ทธ๋๋ฐ ๊ณผ์ ์๋ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๊ฒ ๋ฉ๋๋ค.
ํ์ฌ ํ์ต ๊ณผ์
| ํต์ฌ ๊ธฐ์ | ์ํ | ํผ์ฆ |
|---|---|---|
| ์ค๋ ๋/๋ธ๋ก ๊ธฐ์ด | โ ์ ๊ณต ์ค | Part I (1-8) |
| GPU ํ๋ก๊ทธ๋จ ๋๋ฒ๊น | โ ์ ๊ณต ์ค | Part II (9-10) |
| ํต์ฌ ์๊ณ ๋ฆฌ์ฆ | โ ์ ๊ณต ์ค | Part III (11-16) |
| MAX ๊ทธ๋ํ ํตํฉ | โ ์ ๊ณต ์ค | Part IV (17-19) |
| PyTorch ํตํฉ | โ ์ ๊ณต ์ค | Part V (20-22) |
| ํจ์ํ ํจํด ๋ฐ ๋ฒค์น๋งํน | โ ์ ๊ณต ์ค | Part VI (23) |
| ์ํ ํ๋ก๊ทธ๋๋ฐ | โ ์ ๊ณต ์ค | Part VII (24-26) |
| ๋ธ๋ก ์์ค ํ๋ก๊ทธ๋๋ฐ | โ ์ ๊ณต ์ค | Part VIII (27) |
| ๊ณ ๊ธ ๋ฉ๋ชจ๋ฆฌ ์ฐ์ฐ | โ ์ ๊ณต ์ค | Part IX (28-29) |
| ์ฑ๋ฅ ๋ถ์ | โ ์ ๊ณต ์ค | Part X (30-32) |
| ์ต์ GPU ๊ธฐ๋ฅ | โ ์ ๊ณต ์ค | Part XI (33-34) |
์์ธ ํ์ต ๋ชฉํ
Part I: GPU ๊ธฐ์ด (ํผ์ฆ 1-8) โ
- ์ค๋ ๋ ์ธ๋ฑ์ฑ๊ณผ ๋ธ๋ก ๊ตฌ์ฑ ๋ฐฐ์ฐ๊ธฐ
- ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํจํด๊ณผ ๊ฐ๋ ์ดํดํ๊ธฐ
- ์์ ํฌ์ธํฐ์ LayoutTensor ์ถ์ํ ๋ชจ๋ ๋ค๋ค๋ณด๊ธฐ
- ์ค๋ ๋ ๊ฐ ํต์ ์ ์ํ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ์ด ์ตํ๊ธฐ
Part II: GPU ํ๋ก๊ทธ๋จ ๋๋ฒ๊น (ํผ์ฆ 9-10) โ
- GPU ๋๋ฒ๊ฑฐ์ ๋๋ฒ๊น ๊ธฐ๋ฒ ๋ฐฐ์ฐ๊ธฐ
- ์๋ํ์ด์ ๋ก ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ์ ๊ฒฝ์ ์ํ ์ฐพ๊ธฐ
- GPU ๋ฒ๊ทธ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์๋ณํ๊ณ ์์ ํ๊ธฐ
- ๋ณต์กํ GPU ํ๋ก๊ทธ๋๋ฐ ๊ณผ์ ์ ๋์ ํ ์์ ๊ฐ ์๊ธฐ
์ฐธ๊ณ : ๋๋ฒ๊น ํผ์ฆ์ ์คํํ๋ ค๋ฉด NVIDIA GPU ๋๋ฒ๊น ๋๊ตฌ ์ ๊ทผ์ ์ํ
pixi๊ฐ ํ์ํฉ๋๋ค. CUDA๋ฅผ ์ง์ํ๋ NVIDIA GPU์์๋ง ์๋ํฉ๋๋ค.
Part III: GPU ์๊ณ ๋ฆฌ์ฆ (ํผ์ฆ 11-16) โ
- ๋ณ๋ ฌ ๋ฆฌ๋์ ๊ณผ ํ๋ง ์ฐ์ฐ ๊ตฌํํ๊ธฐ
- ํจ์จ์ ์ธ ํฉ์ฑ๊ณฑ ์ปค๋ ๋ง๋ค๊ธฐ
- ๋์ ํฉ(์ค์บ) ์๊ณ ๋ฆฌ์ฆ ๋ฐฐ์ฐ๊ธฐ
- ํ์ผ๋ง ์ ๋ต์ผ๋ก ํ๋ ฌ ๊ณฑ์ ์ต์ ํํ๊ธฐ
Part IV: MAX ๊ทธ๋ํ ํตํฉ (ํผ์ฆ 17-19) โ
- ์ปค์คํ MAX ๊ทธ๋ํ ์ฐ์ฐ ๋ง๋ค๊ธฐ
- GPU ์ปค๋๊ณผ ํ์ด์ฌ ์ฝ๋ ์ฐ๊ฒฐํ๊ธฐ
- ์ํํธ๋งฅ์ค, ์ดํ ์ ๊ฐ์ ํ๋ก๋์ ์์ค์ ์ฐ์ฐ ๊ตฌํํ๊ธฐ
Part V: PyTorch ํตํฉ (ํผ์ฆ 20-22) โ
- Mojo GPU ์ปค๋๊ณผ PyTorch ํ ์ ์ฐ๊ฒฐํ๊ธฐ
- CustomOpLibrary๋ก ํ ์ ๋ง์ฌ๋ง์ ๋งค๋๋ฝ๊ฒ ์ฒ๋ฆฌํ๊ธฐ
- torch.compile๊ณผ ํตํฉํ์ฌ ์คํ ์ต์ ํํ๊ธฐ
- ์ปค๋ ํจ์ ๊ณผ ์ปค์คํ ์ญ๋ฐฉํฅ ํจ์ค ๋ฐฐ์ฐ๊ธฐ
Part VI: Mojo ํจ์ํ ํจํด ๋ฐ ๋ฒค์น๋งํน (ํผ์ฆ 23) โ
- ํจ์ํ ํจํด ๋ฐฐ์ฐ๊ธฐ: elementwise, tiled ์ฒ๋ฆฌ, vectorization
- ์ฒด๊ณ์ ์ธ ์ฑ๋ฅ ์ต์ ํ์ ํธ๋ ์ด๋์คํ ์ตํ๊ธฐ
- ์ ๋์ ๋ฒค์น๋งํน์ผ๋ก ์ฑ๋ฅ ๋ถ์ํ๊ธฐ
- GPU ์ค๋ ๋ฉ vs SIMD ์คํ ๊ณ์ธต ๊ตฌ์กฐ ์ดํดํ๊ธฐ
Part VII: ์ํ ์์ค ํ๋ก๊ทธ๋๋ฐ (ํผ์ฆ 24-26) โ
- ์ํ ๊ธฐ์ด์ SIMT ์คํ ๋ชจ๋ธ ๋ฐฐ์ฐ๊ธฐ
- ํต์ฌ ์ํ ์ฐ์ฐ ์ตํ๊ธฐ: sum, shuffle_down, broadcast
- shuffle_xor์ prefix_sum์ผ๋ก ๊ณ ๊ธ ํจํด ๊ตฌํํ๊ธฐ
- ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ํจ์ํ ํจํด์ ํจ๊ณผ์ ์ผ๋ก ๊ฒฐํฉํ๊ธฐ
Part VIII: ๋ธ๋ก ์์ค ํ๋ก๊ทธ๋๋ฐ (ํผ์ฆ 27) โ
block.sum()๊ณผblock.max()๋ก ๋ธ๋ก ๋จ์ ๋ฆฌ๋์ ๋ฐฐ์ฐ๊ธฐ- ๋ธ๋ก ์์ค ๋์ ํฉ ํจํด๊ณผ ํต์ ์ตํ๊ธฐ
block.broadcast()๋ก ๋ธ๋ก ๋ด ์กฐ์จ ํจ์จ์ ์ผ๋ก ๊ตฌํํ๊ธฐ
Part IX: ๊ณ ๊ธ ๋ฉ๋ชจ๋ฆฌ ์์คํ (ํผ์ฆ 28-29) โ
- ์ต์ ์ ๋ฉ๋ชจ๋ฆฌ ๋ณํฉ ํจํด ๊ตฌํํ๊ธฐ
- ๋น๋๊ธฐ ๋ฉ๋ชจ๋ฆฌ ์ฐ์ฐ์ผ๋ก ์ฐ์ฐ๊ณผ ์ ์ก์ ๊ฒน์ณ ์ง์ฐ ์๊ฐ ์จ๊ธฐ๊ธฐ
- ๋ฉ๋ชจ๋ฆฌ ํ์ค์ ๋๊ธฐํ ๊ธฐ๋ณธ ์์ ๋ฐฐ์ฐ๊ธฐ
- ํ๋ฆฌํ์นญ๊ณผ ์บ์ ์ต์ ํ ์ ๋ต ์ตํ๊ธฐ
Part X: ์ฑ๋ฅ ๋ถ์ ๋ฐ ์ต์ ํ (ํผ์ฆ 30-32) โ
- GPU ์ปค๋ ํ๋กํ์ผ๋ง์ผ๋ก ๋ณ๋ชฉ ์ง์ ์ฐพ๊ธฐ
- ์ ์ ์จ๊ณผ ๋ฆฌ์์ค ํ์ฉ๋ ์ต์ ํํ๊ธฐ
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฑ ํฌ ์ถฉ๋ ์ ๊ฑฐํ๊ธฐ
Part XI: ๊ณ ๊ธ GPU ๊ธฐ๋ฅ (ํผ์ฆ 33-34) โ
- AI ์ํฌ๋ก๋๋ฅผ ์ํ ํ ์ ์ฝ์ด ํ๋ก๊ทธ๋๋ฐ ๋ฐฐ์ฐ๊ธฐ
- ํ๋ GPU์ ํด๋ฌ์คํฐ ํ๋ก๊ทธ๋๋ฐ ๋ฐฐ์ฐ๊ธฐ
์ด ์ฑ ์ ๊ธฐ์กด ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ, ๋จผ์ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์กฐ์์ผ๋ก ์ดํด๋ฅผ ์์ ๋ค ์ ์ง์ ์ผ๋ก Mojo์ LayoutTensor ์ถ์ํ๋ก ์ ํํฉ๋๋ค. ์ด๋ฅผ ํตํด GPU ๋ฉ๋ชจ๋ฆฌ ํจํด์ ๋ํ ๊น์ ์ดํด์ ํ๋์ ํ ์ ๊ธฐ๋ฐ ์ ๊ทผ๋ฒ์ ์ค์ฉ์ ์ง์์ ๋ชจ๋ ์ป์ ์ ์์ต๋๋ค.
์์ํ ์ค๋น๊ฐ ๋์ จ๋์?
GPU ํ๋ก๊ทธ๋๋ฐ์ด ์ ์ค์ํ์ง, Mojo๊ฐ ์ ์ ํฉํ์ง, ๊ทธ๋ฆฌ๊ณ ํผ์ฆ๋ก ์ด๋ป๊ฒ ๋ฐฐ์ฐ๋์ง ์ดํด๋ณด์์ต๋๋ค. ์ด์ ์์ํด ๋ด ์๋ค.
๋ค์ ๋จ๊ณ: ํผ์ฆ ์ฌ์ฉ ๊ฐ์ด๋์์ ํ๊ฒฝ ์ค์ , ์์คํ ์๊ตฌ์ฌํญ, ์ฒซ ๋ฒ์งธ ํผ์ฆ ์คํ ๋ฐฉ๋ฒ์ ํ์ธํ์ธ์.