Puzzle 4: 2D Map

๊ฐœ์š”

2D ์ •์‚ฌ๊ฐ ํ–‰๋ ฌ a์˜ ๊ฐ ์œ„์น˜์— 10์„ ๋”ํ•ด 2D ์ •์‚ฌ๊ฐ ํ–‰๋ ฌ output์— ์ €์žฅํ•˜๋Š” ์ปค๋„์„ ๊ตฌํ˜„ํ•ด ๋ณด์„ธ์š”.

์ฐธ๊ณ : ์Šค๋ ˆ๋“œ ์ˆ˜๊ฐ€ ํ–‰๋ ฌ์˜ ์œ„์น˜ ์ˆ˜๋ณด๋‹ค ๋งŽ์Šต๋‹ˆ๋‹ค.

2D ํ–‰๋ ฌ ๋งคํ•‘ 2D ํ–‰๋ ฌ ๋งคํ•‘

ํ•ต์‹ฌ ๊ฐœ๋…

  • 2D ์Šค๋ ˆ๋“œ ์ธ๋ฑ์‹ฑ
  • GPU์—์„œ์˜ ํ–‰๋ ฌ ์—ฐ์‚ฐ
  • ์ดˆ๊ณผ ์Šค๋ ˆ๋“œ ์ฒ˜๋ฆฌ
  • ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ ํŒจํ„ด

๊ฐ ์œ„์น˜ \((i,j)\)์— ๋Œ€ํ•ด: \[\Large output[i,j] = a[i,j] + 10\]

์Šค๋ ˆ๋“œ ์ธ๋ฑ์‹ฑ ๊ทœ์น™

GPU ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ 2D ํ–‰๋ ฌ์„ ๋‹ค๋ฃฐ ๋•Œ๋Š” ์Šค๋ ˆ๋“œ ์ธ๋ฑ์Šค์™€ ํ–‰๋ ฌ ์ขŒํ‘œ ์‚ฌ์ด์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋งคํ•‘์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

  • thread_idx.y๋Š” ํ–‰(row) ์ธ๋ฑ์Šค
  • thread_idx.x๋Š” ์—ด(column) ์ธ๋ฑ์Šค
2D ์Šค๋ ˆ๋“œ ์ธ๋ฑ์‹ฑ 2D ์Šค๋ ˆ๋“œ ์ธ๋ฑ์‹ฑ

์ด ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ์ž˜ ๋งž์Šต๋‹ˆ๋‹ค:

  1. ํ–‰๋ ฌ ์œ„์น˜๋ฅผ (row, column)์œผ๋กœ ์“ฐ๋Š” ํ‘œ์ค€ ์ˆ˜ํ•™ ํ‘œ๊ธฐ๋ฒ•
  2. ํ–‰์€ ์œ„์—์„œ ์•„๋ž˜๋กœ(y์ถ•), ์—ด์€ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ(x์ถ•) ๊ฐ€๋Š” ํ–‰๋ ฌ์˜ ์‹œ๊ฐ์  ๊ตฌ์กฐ
  3. ์Šค๋ ˆ๋“œ ๋ธ”๋ก์„ ํ–‰๋ ฌ ๊ตฌ์กฐ์— ๋งž์ถฐ 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๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.