Puzzle 14: ๋ˆ„์  ํ•ฉ

๊ฐœ์š”

๋ˆ„์  ํ•ฉ(prefix sum, scan ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค)์€ ์‹œํ€€์Šค์˜ ๊ฐ’์„ ์ฐจ๋ก€๋กœ ๋”ํ•ด ๋‚˜๊ฐ€๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ณ‘๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ถ€ํ„ฐ ๊ณผํ•™ ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊นŒ์ง€ ์ˆ˜๋งŽ์€ ๋ณ‘๋ ฌ ์‘์šฉ์˜ ํ•ต์‹ฌ์— ์ž๋ฆฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ˆซ์ž ์‹œํ€€์Šค๋ฅผ ๋ˆ„์  ํ•ฉ๊ณ„๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ˆœ์ฐจ์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ๋Š” ๊ฐ„๋‹จํ•˜์ง€๋งŒ, GPU์—์„œ ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค๋ ค๋ฉด ๊ธฐ๋ฐœํ•œ ๋ณ‘๋ ฌ์  ์‚ฌ๊ณ ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!

1D LayoutTensor a์— ๋Œ€ํ•ด ๋ˆ„์  ํ•ฉ์„ ๊ณ„์‚ฐํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ 1D LayoutTensor output์— ์ €์žฅํ•˜๋Š” ์ปค๋„์„ ๊ตฌํ˜„ํ•˜์„ธ์š”.

์ฐธ๊ณ : a์˜ ํฌ๊ธฐ๊ฐ€ ๋ธ”๋ก ํฌ๊ธฐ๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ, ๊ฐ ๋ธ”๋ก์˜ ํ•ฉ๊ณ„๋งŒ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„์  ํ•ฉ ์‹œ๊ฐํ™” ๋ˆ„์  ํ•ฉ ์‹œ๊ฐํ™”

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

์ด ํผ์ฆ์—์„œ ๋ฐฐ์šธ ๋‚ด์šฉ:

  • ๋กœ๊ทธ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„ ๋ณ‘๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํ˜‘๋ ฅ ํŒจํ„ด
  • ๋‹ค๋‹จ๊ณ„ ์—ฐ์‚ฐ ์ „๋žต

ํ•ต์‹ฌ ํ†ต์ฐฐ์€ ์ˆœ์ฐจ ์—ฐ์‚ฐ์„ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ ํšจ์œจ์ ์ธ ๋ณ‘๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ž…๋ ฅ ์‹œํ€€์Šค \([3, 1, 4, 1, 5, 9]\) ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, ๋ˆ„์  ํ•ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค:

  • \([3]\) (์ฒซ ๋ฒˆ์งธ ์›์†Œ ๊ทธ๋Œ€๋กœ)
  • \([3, 4]\) (3 + 1)
  • \([3, 4, 8]\) (์ด์ „ ํ•ฉ + 4)
  • \([3, 4, 8, 9]\) (์ด์ „ ํ•ฉ + 1)
  • \([3, 4, 8, 9, 14]\) (์ด์ „ ํ•ฉ + 5)
  • \([3, 4, 8, 9, 14, 23]\) (์ด์ „ ํ•ฉ + 9)

์ˆ˜ํ•™์ ์œผ๋กœ, ์‹œํ€€์Šค \([x_0, x_1, โ€ฆ, x_n]\) ์˜ ๋ˆ„์  ํ•ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: \[ [x_0, x_0+x_1, x_0+x_1+x_2, โ€ฆ, \sum_{i=0}^n x_i] \]

์ˆœ์ฐจ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๋ฉด \(O(n)\) ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๊ฒ ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” ์˜๋ฆฌํ•œ 2๋‹จ๊ณ„ ๋ณ‘๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ \(O(\log n)\) ๋‹จ๊ณ„๋งŒ์— ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค! ์œ„์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์—์„œ ์ด ๊ณผ์ •์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํผ์ฆ์€ ๊ฐœ๋…์„ ๋‹จ๊ณ„์ ์œผ๋กœ ์ตํž ์ˆ˜ ์žˆ๋„๋ก ๋‘ ํŒŒํŠธ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค:

  • ๐Ÿ”ฐ ๊ธฐ๋ณธ ๋ฒ„์ „ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์— ๋“ค์–ด๊ฐ€๋Š” ๋‹จ์ผ ๋ธ”๋ก ๊ตฌํ˜„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ ๋ณ‘๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์›๋ฆฌ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์ข‹์Šต๋‹ˆ๋‹ค.

  • โญ ์™„์„ฑ ๋ฒ„์ „ ์ด์–ด์„œ ์—ฌ๋Ÿฌ ๋ธ”๋ก์— ๊ฑธ์น˜๋Š” ํฐ ๋ฐฐ์—ด์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋” ๊นŒ๋‹ค๋กœ์šด ๊ฒฝ์šฐ์— ๋„์ „ํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋ก ๊ฐ„ ์กฐ์œจ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๋ฒ„์ „์€ ์ด์ „ ๋ฒ„์ „ ์œ„์— ์Œ“์•„ ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ์‹์œผ๋กœ, ๋ณ‘๋ ฌ ๋ˆ„์  ํ•ฉ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๊นŠ์ด ์žˆ๊ฒŒ ๋ฐœ์ „์‹œ์ผœ ์ค๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฒ„์ „์—์„œ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‹ค์ง€๊ณ , ์™„์„ฑ ๋ฒ„์ „์—์„œ๋Š” ๋” ํฐ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค โ€” ์‹ค์ œ GPU ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž์ฃผ ๋งˆ์ฃผ์น˜๋Š” ๊ณผ์ œ์ž…๋‹ˆ๋‹ค.