Puzzle 4: 2D Map
๊ฐ์
2D ์ ์ฌ๊ฐ ํ๋ ฌ a์ ๊ฐ ์์น์ 10์ ๋ํด 2D ์ ์ฌ๊ฐ ํ๋ ฌ output์ ์ ์ฅํ๋ ์ปค๋์ ๊ตฌํํด ๋ณด์ธ์.
์ฐธ๊ณ : ์ค๋ ๋ ์๊ฐ ํ๋ ฌ์ ์์น ์๋ณด๋ค ๋ง์ต๋๋ค.
ํต์ฌ ๊ฐ๋
- 2D ์ค๋ ๋ ์ธ๋ฑ์ฑ
- GPU์์์ ํ๋ ฌ ์ฐ์ฐ
- ์ด๊ณผ ์ค๋ ๋ ์ฒ๋ฆฌ
- ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์ ํจํด
๊ฐ ์์น \((i,j)\)์ ๋ํด: \[\Large output[i,j] = a[i,j] + 10\]
์ค๋ ๋ ์ธ๋ฑ์ฑ ๊ท์น
GPU ํ๋ก๊ทธ๋๋ฐ์์ 2D ํ๋ ฌ์ ๋ค๋ฃฐ ๋๋ ์ค๋ ๋ ์ธ๋ฑ์ค์ ํ๋ ฌ ์ขํ ์ฌ์ด์ ์์ฐ์ค๋ฌ์ด ๋งคํ์ ๋ฐ๋ฆ ๋๋ค:
thread_idx.y๋ ํ(row) ์ธ๋ฑ์คthread_idx.x๋ ์ด(column) ์ธ๋ฑ์ค![]()
![]()
์ด ๊ท์น์ ๋ค์๊ณผ ์ ๋ง์ต๋๋ค:
- ํ๋ ฌ ์์น๋ฅผ (row, column)์ผ๋ก ์ฐ๋ ํ์ค ์ํ ํ๊ธฐ๋ฒ
- ํ์ ์์์ ์๋๋ก(y์ถ), ์ด์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก(x์ถ) ๊ฐ๋ ํ๋ ฌ์ ์๊ฐ์ ๊ตฌ์กฐ
- ์ค๋ ๋ ๋ธ๋ก์ ํ๋ ฌ ๊ตฌ์กฐ์ ๋ง์ถฐ 2D ๊ทธ๋ฆฌ๋๋ก ๊ตฌ์ฑํ๋ ์ผ๋ฐ์ ์ธ GPU ํ๋ก๊ทธ๋๋ฐ ํจํด
์ญ์ฌ์ ๋ฐฐ๊ฒฝ
๊ทธ๋ํฝ์ด๋ ์ด๋ฏธ์ง ์ฒ๋ฆฌ์์๋ ๋ณดํต \((x,y)\) ์ขํ๋ฅผ ์ฐ์ง๋ง, ํ๋ ฌ ์ฐ์ฐ์์๋ ์ ํต์ ์ผ๋ก (row, column) ์ธ๋ฑ์ฑ์ ์จ์์ต๋๋ค. ์ด๊ธฐ ์ปดํจํฐ๊ฐ 2D ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์์ ๋น๋กฏ๋ ๊ฒ์ ๋๋ค: ์์์ ์๋๋ก ํ ์ค์ฉ, ๊ฐ ์ค์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฝ์์ฃ . ์ด๋ฐ ํ ์ฐ์ (row-major) ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ๋ ๋ฐฉ์๊ณผ ๋ง์์ CPU์ GPU ๋ชจ๋์์ ํจ์จ์ ์์ด ์ ์ฆ๋์์ต๋๋ค. GPU ํ๋ก๊ทธ๋๋ฐ์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ฉ ์ค๋ ๋ ๋ธ๋ก์ด ๋์ ๋์ ๋,
thread_idx.y๋ฅผ ํ์,thread_idx.x๋ฅผ ์ด์ ๋งคํํ ๊ฑด ๊ธฐ์กด์ ํ๋ฆฝ๋ ํ๋ ฌ ์ธ๋ฑ์ฑ ๊ท์น๊ณผ ์ผ๊ด์ฑ์ ์ ์งํ๋ ค๋ ์์ฐ์ค๋ฌ์ด ์ ํ์ด์์ต๋๋ค.
๊ตฌํ ๋ฐฉ์
๐ฐ ์์ ๋ฉ๋ชจ๋ฆฌ ๋ฐฉ์
์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ฉด์ 2D ์ธ๋ฑ์ฑ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์์๋ด ๋๋ค.
๐ LayoutTensor ์์๋ณด๊ธฐ
GPU์์ ๋ค์ฐจ์ ๋ฐฐ์ด ์ฐ์ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ฐํธํ๊ฒ ํด์ฃผ๋ ๊ฐ๋ ฅํ ์ถ์ํ๋ฅผ ์๊ฐํฉ๋๋ค.
๐ ํ๋์ 2D ์ฐ์ฐ
์์ฐ์ค๋ฌ์ด 2D ์ธ๋ฑ์ฑ๊ณผ ์๋ ๊ฒฝ๊ณ ๊ฒ์ฌ๋ฅผ ๊ฐ์ถ LayoutTensor๋ฅผ ์ง์ ์จ๋ด ๋๋ค.
๐ก ์ฐธ๊ณ : ์ด ํผ์ฆ๋ถํฐ๋ ๋ ๊น๋ํ๊ณ ์์ ํ GPU ์ฝ๋๋ฅผ ์ํด LayoutTensor๋ฅผ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.