From ebcc0decc8e2ce3e16a3b38648879ee59bb121b6 Mon Sep 17 00:00:00 2001
From: Jongmin Park <9290341+GzuPark@users.noreply.github.com>
Date: Thu, 23 Apr 2026 14:46:01 +0900
Subject: [PATCH 1/6] docs(i18n): Sync Korean puzzle 09/23/29 with main
- puzzle_09/essentials.md: translate LLDB pending-breakpoint
explanation added in #229
- puzzle_23/gpu-thread-vs-simd.md: adopt `Index(idx)`
load/store signatures from #226
- puzzle_29/memory_barrier.md: apply explicit `Float32`
cast from #237
- update i18n-source-commit markers to the matching
upstream commits so outdated-translation warnings clear
---
book/i18n/ko/src/puzzle_09/essentials.md | 15 +++++++++++++--
book/i18n/ko/src/puzzle_23/gpu-thread-vs-simd.md | 8 ++++----
book/i18n/ko/src/puzzle_29/memory_barrier.md | 4 ++--
3 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/book/i18n/ko/src/puzzle_09/essentials.md b/book/i18n/ko/src/puzzle_09/essentials.md
index ec36c5e4..85b3cb57 100644
--- a/book/i18n/ko/src/puzzle_09/essentials.md
+++ b/book/i18n/ko/src/puzzle_09/essentials.md
@@ -1,4 +1,4 @@
-
+
# ๐ Mojo GPU ๋๋ฒ๊น
์ ํต์ฌ
@@ -345,7 +345,18 @@ Puzzle 01์ด ์คํ๋ ๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ์ถ์ ํด ๋ด
์๋ค. **
Breakpoint 1: where = mojo`main, address = 0x00000000027d7530
```
-๋๋ฒ๊ฑฐ๊ฐ main ํจ์๋ฅผ ์ฐพ์๊ณ ๊ฑฐ๊ธฐ์ ์คํ์ ์ผ์ ์ ์งํฉ๋๋ค.
+๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ์๋ ์์ต๋๋ค:
+
+```
+Breakpoint 1: no locations (pending).
+WARNING: Unable to resolve breakpoint to any actual locations.
+```
+
+๋ธ๋ ์ดํฌํฌ์ธํธ๊ฐ ๋ณด๋ฅ(pending) ์ํ๋ก ํ์๋ผ๋ ์์๋ ๋์์
๋๋ค. Mojo ํ๋ก๊ทธ๋จ์ JIT์ผ๋ก ์ปดํ์ผ๋๋ฏ๋ก ํ๋ก๊ทธ๋จ ์คํ์ด ์์๋๊ธฐ ์ ๊น์ง ๋๋ฒ๊ฑฐ๊ฐ ์ฌ๋ณผ์ ํด์ํ์ง ๋ชปํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ธ๋ ์ดํฌํฌ์ธํธ๋ ๋ฑ๋ก๋์ด ์์ง๋ง LLDB๊ฐ ์์ง ๊ตฌ์ฒด์ ์ธ ๋ช
๋ น์ด ์ฃผ์์ ๋ฐ์ธ๋ฉํ์ง ๋ชปํ ์ํ์
๋๋ค.
+
+์คํ์ด ์์๋๊ณ ๋ชจ๋์ด ์ปดํ์ผ๋๋ฉด LLDB๊ฐ ๋ธ๋ ์ดํฌํฌ์ธํธ๋ฅผ ์๋์ผ๋ก ํด์ํฉ๋๋ค.
+
+์ด๋ ์ชฝ์ด๋ ๋ธ๋ ์ดํฌํฌ์ธํธ๋ ์ ์์ ์ผ๋ก ์ค์ ๋ ์ํ์ด๋ฉฐ, ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด ๊ทธ ์ง์ ์์ ์คํ์ด ์ผ์ ์ ์ง๋ฉ๋๋ค.
**Step 2: ํ๋ก๊ทธ๋จ ์์**
diff --git a/book/i18n/ko/src/puzzle_23/gpu-thread-vs-simd.md b/book/i18n/ko/src/puzzle_23/gpu-thread-vs-simd.md
index 27ea880b..baa48e3e 100644
--- a/book/i18n/ko/src/puzzle_23/gpu-thread-vs-simd.md
+++ b/book/i18n/ko/src/puzzle_23/gpu-thread-vs-simd.md
@@ -1,4 +1,4 @@
-
+
# ๐ง GPU ์ค๋ ๋ฉ vs SIMD - ์คํ ๊ณ์ธต ๊ตฌ์กฐ ์ดํดํ๊ธฐ
@@ -41,10 +41,10 @@ GPU Device
```mojo
# ํ๋์ GPU ์ค๋ ๋ ๋ด๋ถ:
-a_simd = a.load[simd_width](idx, 0) # float 4๊ฐ๋ฅผ ๋์์ ๋ก๋
-b_simd = b.load[simd_width](idx, 0) # float 4๊ฐ๋ฅผ ๋์์ ๋ก๋
+a_simd = a.load[simd_width](Index(idx)) # float 4๊ฐ๋ฅผ ๋์์ ๋ก๋
+b_simd = b.load[simd_width](Index(idx)) # float 4๊ฐ๋ฅผ ๋์์ ๋ก๋
result = a_simd + b_simd # 4์์ ๋์์ ๋ง์
-output.store[simd_width](idx, 0, result) # ๊ฒฐ๊ณผ 4๊ฐ๋ฅผ ๋์์ ์ ์ฅ
+output.store[simd_width](Index(idx), result) # ๊ฒฐ๊ณผ 4๊ฐ๋ฅผ ๋์์ ์ ์ฅ
```
## ํจํด ๋น๊ต์ ์ค๋ ๋-์์
๋งคํ
diff --git a/book/i18n/ko/src/puzzle_29/memory_barrier.md b/book/i18n/ko/src/puzzle_29/memory_barrier.md
index 18f754de..220c0ddd 100644
--- a/book/i18n/ko/src/puzzle_29/memory_barrier.md
+++ b/book/i18n/ko/src/puzzle_29/memory_barrier.md
@@ -1,4 +1,4 @@
-
+
# ๋๋ธ ๋ฒํผ๋ง ์คํ
์ค ์ฐ์ฐ
@@ -327,7 +327,7 @@ stencil_count = 0
for neighbor in valid_neighbors:
stencil_sum += buffer[neighbor]
stencil_count += 1
-result[i] = stencil_sum / stencil_count
+result[i] = stencil_sum / Float32(stencil_count)
```
## **๋ฒํผ ์ญํ ๊ต๋**
From 8e97a8242eeb6c186f2cedbe6eaa96fe48bb65ad Mon Sep 17 00:00:00 2001
From: Jongmin Park <9290341+GzuPark@users.noreply.github.com>
Date: Thu, 23 Apr 2026 15:27:06 +0900
Subject: [PATCH 2/6] docs(i18n): Sync Korean P2 files with upstream
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Resolve partial-sync gaps where #238's mechanical replacement
landed but later upstream edits (#226, #235, #237, #244, #245)
and missing concept paragraphs were left behind.
- puzzle_09/second_case.md: apply #245 debugger transcript
updates (line numbers, `var`/`def` keywords, `input`โ`a`
parameter rename)
- puzzle_10/memcheck.md: translate #244 segfault warning
block, new callout, and expanded compatibility note
- puzzle_11/puzzle_11.md: translate the #238 pooling and
sliding window concept paragraph (previously dropped) and
the #243 single-block assumption blockquote
- puzzle_23/elementwise.md, tile.md, vectorize.md: adopt
`Index(...)` load/store signatures and `aligned_load`
from #226/#235
- puzzle_26/warp_shuffle_xor.md: wrap 6 `shuffle_xor`
offsets with explicit `UInt32(...)` per #237
- puzzle_27/block_prefix_sum.md: apply `Float32(num_bins)`
and `Int32(belongs_to_target)` casts from #237
- update i18n-source-commit markers so outdated-translation
warnings clear
---
book/i18n/ko/src/puzzle_09/second_case.md | 62 +++++++++----------
book/i18n/ko/src/puzzle_10/memcheck.md | 14 ++++-
book/i18n/ko/src/puzzle_11/puzzle_11.md | 23 ++++++-
book/i18n/ko/src/puzzle_23/elementwise.md | 6 +-
book/i18n/ko/src/puzzle_23/tile.md | 14 ++---
book/i18n/ko/src/puzzle_23/vectorize.md | 6 +-
.../i18n/ko/src/puzzle_26/warp_shuffle_xor.md | 14 ++---
.../i18n/ko/src/puzzle_27/block_prefix_sum.md | 8 +--
8 files changed, 89 insertions(+), 58 deletions(-)
diff --git a/book/i18n/ko/src/puzzle_09/second_case.md b/book/i18n/ko/src/puzzle_09/second_case.md
index 595a8537..bcaf1584 100644
--- a/book/i18n/ko/src/puzzle_09/second_case.md
+++ b/book/i18n/ko/src/puzzle_09/second_case.md
@@ -1,4 +1,4 @@
-
+
# ๐ ํ์ ์์ฌ: ๋ ๋ฒ์งธ ์ฌ๋ก
@@ -156,20 +156,20 @@ Each position should sum its neighbors: [left + center + right]
[Switching focus to CUDA kernel 0, grid 1, block (0,0,0), thread (0,0,0), device 0, sm 0, warp 0, lane 0]
CUDA thread hit application kernel entry function breakpoint, p09_process_sliding_window_...
- <<<(1,1,1),(4,1,1)>>> (output=..., input=...)
- at /home/ubuntu/workspace/mojo-gpu-puzzles/problems/p09/p09.mojo:30
-30 input: TileTensor[mut=False, dtype, vector_layout],
+ <<<(1,1,1),(4,1,1)>>> (output=..., a=...)
+ at /home/ubuntu/workspace/mojo-gpu-puzzles/problems/p09/p09.mojo:36
+36 a: TileTensor[mut=False, dtype, VectorLayout, ImmutAnyOrigin],
```
#### Step 4: ๋ฉ์ธ ๋ก์ง์ผ๋ก ์ด๋
```bash
(cuda-gdb) n
-29 output: TileTensor[mut=True, dtype, vector_layout],
+35 output: TileTensor[mut=True, dtype, VectorLayout, MutAnyOrigin],
(cuda-gdb) n
-32 thread_id = thread_idx.x
+38 var thread_id = thread_idx.x
(cuda-gdb) n
-38 for offset in range(ITER):
+44 for offset in range(ITER):
```
#### Step 5: ๋ณ์ ์ ๊ทผ์ฑ ํ
์คํธ - ์ค์ํ ๋ฐ๊ฒฌ
@@ -209,15 +209,15 @@ $3 = {{0}, {1}, {2}, {3}}
#### Step 6: ๋ฐ๋ณต๋ฌธ ๋ชจ๋ํฐ๋ง ์ค์
```bash
-(cuda-gdb) b 42
-Breakpoint 1 at 0x7fffd326ffd0: file problems/p09/p09.mojo, line 42.
+(cuda-gdb) b 45
+Breakpoint 1 at 0x7fffd326ffd0: file problems/p09/p09.mojo, line 45.
(cuda-gdb) c
Continuing.
CUDA thread hit Breakpoint 1, p09_process_sliding_window_...
- <<<(1,1,1),(4,1,1)>>> (output=..., input=...)
- at /home/ubuntu/workspace/mojo-gpu-puzzles/problems/p09/p09.mojo:42
-42 idx = thread_id + offset - 1
+ <<<(1,1,1),(4,1,1)>>> (output=..., a=...)
+ at /home/ubuntu/workspace/mojo-gpu-puzzles/problems/p09/p09.mojo:45
+45 var idx = Int(thread_id) + offset - 1
```
**๐ ์ด์ ๋ฐ๋ณต๋ฌธ ๋ณธ๋ฌธ ์์ ์์ต๋๋ค. ์ง์ ๋ฐ๋ณต ํ์๋ฅผ ์ธ์ด๋ด
์๋ค.**
@@ -226,12 +226,12 @@ CUDA thread hit Breakpoint 1, p09_process_sliding_window_...
```bash
(cuda-gdb) n
-43 if 0 <= idx < SIZE:
+46 if 0 <= idx < SIZE:
(cuda-gdb) n
-41 for offset in range(ITER):
+44 for offset in range(ITER):
```
-**์ฒซ ๋ฒ์งธ ๋ฐ๋ณต ์๋ฃ**: ๋ฐ๋ณต๋ฌธ์ด 42๋ฒ ์ค โ 43๋ฒ ์ค โ 41๋ฒ ์ค๋ก ๋์์์ต๋๋ค. ๋ฐ๋ณต๋ฌธ์ด ๊ณ์๋ฉ๋๋ค.
+**์ฒซ ๋ฒ์งธ ๋ฐ๋ณต ์๋ฃ**: ๋ฐ๋ณต๋ฌธ์ด 45๋ฒ ์ค โ 46๋ฒ ์ค โ 44๋ฒ ์ค๋ก ๋์์์ต๋๋ค. ๋ฐ๋ณต๋ฌธ์ด ๊ณ์๋ฉ๋๋ค.
#### Step 8: ๋ ๋ฒ์งธ ๋ฐ๋ณต (offset = 1)
@@ -239,29 +239,29 @@ CUDA thread hit Breakpoint 1, p09_process_sliding_window_...
(cuda-gdb) n
CUDA thread hit Breakpoint 1, p09_process_sliding_window_...
-42 idx = thread_id + offset - 1
+45 var idx = Int(thread_id) + offset - 1
(cuda-gdb) n
-43 if 0 <= idx < SIZE:
+46 if 0 <= idx < SIZE:
(cuda-gdb) n
-44 value = rebind[Scalar[dtype]](input[idx])
+47 var value = rebind[Scalar[dtype]](a[idx])
(cuda-gdb) n
-45 window_sum += value
+48 window_sum += value
(cuda-gdb) n
-43 if 0 <= idx < SIZE:
+46 if 0 <= idx < SIZE:
(cuda-gdb) n
-41 for offset in range(ITER):
+44 for offset in range(ITER):
```
-**๋ ๋ฒ์งธ ๋ฐ๋ณต ์๋ฃ**: ์ด๋ฒ์๋ if ๋ธ๋ก(44-45๋ฒ ์ค)์ ํต๊ณผํ์ต๋๋ค.
+**๋ ๋ฒ์งธ ๋ฐ๋ณต ์๋ฃ**: ์ด๋ฒ์๋ if ๋ธ๋ก(47-48๋ฒ ์ค)์ ํต๊ณผํ์ต๋๋ค.
#### Step 9: ์ธ ๋ฒ์งธ ๋ฐ๋ณต ํ
์คํธ
```bash
(cuda-gdb) n
-47 output[thread_id] = window_sum
+50 output[thread_id] = window_sum
```
-**๊ฒฐ์ ์ ๋ฐ๊ฒฌ**: ๋ฐ๋ณต๋ฌธ์ด 2๋ฒ๋ง ๋๊ณ ์ข
๋ฃ๋์์ต๋๋ค! 42๋ฒ ์ค์ ๋ธ๋ ์ดํฌํฌ์ธํธ์ ๋ค์ ๊ฑธ๋ฆฌ์ง ์๊ณ 47๋ฒ ์ค๋ก ๋ฐ๋ก ๋์ด๊ฐ์ต๋๋ค.
+**๊ฒฐ์ ์ ๋ฐ๊ฒฌ**: ๋ฐ๋ณต๋ฌธ์ด 2๋ฒ๋ง ๋๊ณ ์ข
๋ฃ๋์์ต๋๋ค! 45๋ฒ ์ค์ ๋ธ๋ ์ดํฌํฌ์ธํธ์ ๋ค์ ๊ฑธ๋ฆฌ์ง ์๊ณ 50๋ฒ ์ค๋ก ๋ฐ๋ก ๋์ด๊ฐ์ต๋๋ค.
**๊ฒฐ๋ก **: ๋ฐ๋ณต๋ฌธ์ด ์ ํํ **2๋ฒ** ๋๊ณ ์ข
๋ฃ๋์์ต๋๋ค.
@@ -269,7 +269,7 @@ CUDA thread hit Breakpoint 1, p09_process_sliding_window_...
```bash
(cuda-gdb) n
-31 fn process_sliding_window(
+34 def process_sliding_window(
(cuda-gdb) n
[Switching to Thread 0x7ffff7cc0e00 (LWP 110927)]
0x00007ffff064f84a in ?? () from /lib/x86_64-linux-gnu/libcuda.so.1
@@ -293,10 +293,10 @@ No symbol "offset" in current context.
๊ฐ ์ค๋ ๋๊ฐ ๊ณ์ฐํด์ผ ํ ๊ฒ:
-- **์ค๋ ๋ 0**: window_sum = input[-1] + input[0] + input[1] = (๊ฒฝ๊ณ) + 0 + 1 = 1.0
-- **์ค๋ ๋ 1**: window_sum = input[0] + input[1] + input[2] = 0 + 1 + 2 = 3.0
-- **์ค๋ ๋ 2**: window_sum = input[1] + input[2] + input[3] = 1 + 2 + 3 = 6.0
-- **์ค๋ ๋ 3**: window_sum = input[2] + input[3] + input[4] = 2 + 3 + (๊ฒฝ๊ณ) = 5.0
+- **์ค๋ ๋ 0**: window_sum = a[-1] + a[0] + a[1] = (๊ฒฝ๊ณ) + 0 + 1 = 1.0
+- **์ค๋ ๋ 1**: window_sum = a[0] + a[1] + a[2] = 0 + 1 + 2 = 3.0
+- **์ค๋ ๋ 2**: window_sum = a[1] + a[2] + a[3] = 1 + 2 + 3 = 6.0
+- **์ค๋ ๋ 3**: window_sum = a[2] + a[3] + a[4] = 2 + 3 + (๊ฒฝ๊ณ) = 5.0
#### Step 12: ์ค๋ ๋ 0์ ์ค์ ์คํ ์ถ์
@@ -312,13 +312,13 @@ No symbol "offset" in current context.
- `idx = thread_id + offset - 1 = 0 + 1 - 1 = 0`
- `if 0 <= idx < SIZE:` โ `if 0 <= 0 < 4:` โ **True**
-- `window_sum += input[0]` โ `window_sum += 0`
+- `window_sum += a[0]` โ `window_sum += 0`
**๋๋ฝ๋ ๋ฐ๋ณต 3 (offset = 2)**:
- `idx = thread_id + offset - 1 = 0 + 2 - 1 = 1`
- `if 0 <= idx < SIZE:` โ `if 0 <= 1 < 4:` โ **True**
-- `window_sum += input[1]` โ `window_sum += 1` โ **์ด ์ฐ์ฐ์ด ์คํ๋์ง ์์**
+- `window_sum += a[1]` โ `window_sum += 1` โ **์ด ์ฐ์ฐ์ด ์คํ๋์ง ์์**
**๊ฒฐ๊ณผ**: ์ค๋ ๋ 0์ `window_sum = 0 + 1 = 1` ๋์ `window_sum = 0`์ ์ป์ต๋๋ค
diff --git a/book/i18n/ko/src/puzzle_10/memcheck.md b/book/i18n/ko/src/puzzle_10/memcheck.md
index 2127623a..30ca176e 100644
--- a/book/i18n/ko/src/puzzle_10/memcheck.md
+++ b/book/i18n/ko/src/puzzle_10/memcheck.md
@@ -1,4 +1,4 @@
-
+
# ๐ฎ๐ผโโ๏ธ ๋ฉ๋ชจ๋ฆฌ ์๋ฐ ํ์ง
@@ -180,6 +180,14 @@ MODULAR_DEVICE_CONTEXT_MEMORY_MANAGER_SIZE_PERCENT=0 pixi run compute-sanitizer
```txt
========= COMPUTE-SANITIZER
+[...]:WARNING close_multiple.cc:66] close: Bad file descriptor (9)
+[...]:WARNING close_multiple.cc:66] close: Bad file descriptor (9)
+Please submit a bug report to https://github.com/modular/modular/issues and include the crash backtrace along with all the relevant source codes.
+Stack dump:
+0. Program arguments: .../.pixi/envs/default/bin/mojo problems/p10/p10.mojo --memory-bug
+ #0 0x... (/.../.pixi/envs/default/bin/mojo+0x...)
+ ...
+[...] intermediate process terminated by signal 11 (Segmentation fault) (core dumped)
out shape: 2 x 2
Running memory bug example (bounds checking issue)...
out: HostBuffer([10.0, 11.0, 12.0, 13.0])
@@ -190,6 +198,8 @@ expected: HostBuffer([10.0, 11.0, 12.0, 13.0])
**โ
์ฑ๊ณต:** ๋ฉ๋ชจ๋ฆฌ ์๋ฐ์ด ํ์ง๋์ง ์์์ต๋๋ค!
+> **์ธ๊ทธํดํธ ๊ด๋ จ ์ฐธ๊ณ **: ์ ์ถ๋ ฅ์ ํฌ๋์ ๋ผ์ธ("intermediate process terminated by signal 11")์ Mojo์ ํ๋ก์ธ์ค ์ด๊ธฐํ์ compute-sanitizer์ ์ฃผ์
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ด์ ์๋ ค์ง ํธํ์ฑ ๋ฌธ์ ์
๋๋ค. ์ด ๋ฉ์์ง๋ GPU ์ปค๋์ด ์คํ๋๊ธฐ *์ *์ ๋ํ๋๋ฉฐ ์๋ํ์ด์ ์ ๋ถ์์๋ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ด ํ์ด์ง ํ๋จ์ ์ฐธ๊ณ ๋ฅผ ํ์ธํ์ธ์.
+
## ํต์ฌ ํ์ต ํฌ์ธํธ
### ์๋ ๊ฒฝ๊ณ ๊ฒ์ฌ๊ฐ ์ค์ํ ์ด์
@@ -212,4 +222,4 @@ expected: HostBuffer([10.0, 11.0, 12.0, 13.0])
MODULAR_DEVICE_CONTEXT_MEMORY_MANAGER_SIZE_PERCENT=0 pixi run compute-sanitizer --tool memcheck mojo your_code.mojo
```
-**์ฐธ๊ณ **: ์๋ํ์ด์ ์ถ๋ ฅ์์ Mojo ๋ฐํ์ ๊ฒฝ๊ณ ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์ค์ ๋ฉ๋ชจ๋ฆฌ ์๋ฐ์ ํ์ธํ๋ ค๋ฉด `========= Invalid`์ `========= ERROR SUMMARY` ๋ผ์ธ์ ์ง์คํ์ธ์.
+**Mojo + compute-sanitizer ํธํ์ฑ ์ฐธ๊ณ **: ์๋ํ์ด์ ์ถ๋ ฅ ์์ ๋ถ๋ถ์์ ํฌ๋์๋ฅผ ๋ณผ ์ ์์ต๋๋ค โ `close: Bad file descriptor` ๊ฐ์ ๋ผ์ธ, ์คํ ๋คํ, `intermediate process terminated by signal 11 (Segmentation fault)` ๋ฑ์ด ๋ํ๋ ์ ์์ต๋๋ค. ์ด๋ compute-sanitizer์ ์ฃผ์
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ Mojo์ ํ๋ก์ธ์ค ์ด๊ธฐํ์ ์ถฉ๋ํ๋ ์๋ ค์ง ๋ฌธ์ ์
๋๋ค. ํฌ๋์๊ฐ ๋ฐ์ํด๋ ์๋ํ์ด์ ๋ GPU ์ปค๋ ๋ถ์์ ์ ์์ ์ผ๋ก ์๋ฃํฉ๋๋ค. ์ธ์ ๋ ๋งจ ๋์ `========= ERROR SUMMARY` ๋ผ์ธ์ ์ต์ข
ํ๋จ ๊ธฐ์ค์ผ๋ก ์ผ๊ณ , ๊ตฌ์ฒด์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์๋ฐ์ `========= Invalid` ๋ผ์ธ์์ ํ์ธํ์ธ์.
diff --git a/book/i18n/ko/src/puzzle_11/puzzle_11.md b/book/i18n/ko/src/puzzle_11/puzzle_11.md
index 80e8540e..138b1212 100644
--- a/book/i18n/ko/src/puzzle_11/puzzle_11.md
+++ b/book/i18n/ko/src/puzzle_11/puzzle_11.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 11: ํ๋ง
@@ -6,6 +6,8 @@
1D TileTensor `a`์์ ๊ฐ ์์น์ ์ง์ 3๊ฐ ๊ฐ์ ํฉ์ ๊ณ์ฐํ์ฌ 1D TileTensor `output`์ ์ ์ฅํ๋ ์ปค๋์ ๊ตฌํํ์ธ์.
+**ํ๋ง(pooling)** ์ ์ผ์ ์์ญ์ ๊ฐ๋ค์ ํ๋์ ์์ฝ ๊ฐ(์: ํฉ, ์ต๋๊ฐ, ํ๊ท )์ผ๋ก ์์ถํ๋ ์ฐ์ฐ์
๋๋ค. **์ฌ๋ผ์ด๋ฉ ์๋์ฐ(sliding window)** ๋ ์
๋ ฅ ์๋ก ๊ณ ์ ํฌ๊ธฐ์ ์๋์ฐ๋ฅผ ํ ์นธ์ฉ ์ฎ๊ฒจ ๊ฐ๋ฉฐ ์ด ์์ถ์ ๋ฐ๋ณต ์ ์ฉํด, ์๋์ฐ ์์น๋ง๋ค ์ถ๋ ฅ๊ฐ์ ํ๋์ฉ ๋ง๋ค์ด๋
๋๋ค. ์ฌ๊ธฐ์๋ ์๋์ฐ ํญ์ด 3์ด๊ณ ์์ฝ ํจ์๊ฐ ํฉ์ด๋ฏ๋ก, ๊ฐ ์ถ๋ ฅ ์์๋ ํ์ฌ ์์์ ๊ทธ ์ ๋ ์์์ ํฉ์ด ๋ฉ๋๋ค(์ฌ์ฉ ๊ฐ๋ฅํ ์์๊ฐ 3๊ฐ๋ณด๋ค ์ ์ ๊ฒฝ๊ณ ์ง์ ์์๋ ํน์ ์ผ์ด์ค๋ก ์ฒ๋ฆฌ).
+
**์ฐธ๊ณ :** _๊ฐ ์์น๋ง๋ค ์ค๋ ๋ 1๊ฐ๊ฐ ์์ต๋๋ค. ์ค๋ ๋๋น ์ ์ญ ์ฝ๊ธฐ 1ํ, ์ ์ญ ์ฐ๊ธฐ 1ํ๋ง ํ์ํฉ๋๋ค._
@@ -165,6 +167,25 @@ TileTensor๋ฅผ ํ์ฉํ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ํฉ๊ณ ๊ตฌํ์
๋๋ค. ์ฃผ์
window_sum = shared[i-2] + shared[i-1] + shared[i]
```
+> **๋จ์ผ ๋ธ๋ก ์ ์ :** ์ด ํผ์ฆ์ด `BLOCKS_PER_GRID = (1, 1)`๊ณผ `SIZE == TPB = 8`๋ก ๊ตฌ์ฑ๋์ด ์์ด์
+> ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ฐ์ ๋ธ๋ก์ ์ํ๊ณ `global_i == local_i`๊ฐ ๋ณด์ฅ๋๊ธฐ ๋๋ฌธ์ ์ด ์๋ฃจ์
์ด ์ฌ๋ฐ๋ฅด๊ฒ
+> ๋์ํฉ๋๋ค. ์ด ์ ์ฝ์์๋ `global_i > 1`์ผ ๋๋ง๋ค `local_i >= 2`์ด๋ฏ๋ก
+> `shared[local_i - 2]`์ `shared[local_i - 1]`์ด ์ธ์ ๋ ์ ํจํฉ๋๋ค.
+>
+> **๋ค์ค ๋ธ๋ก** ์ปค๋์์๋ 0๋ฒ ๋ธ๋ก ์ดํ์ ๊ฐ ๋ธ๋ก์์ ์ฒซ ๋ ์ค๋ ๋๊ฐ `global_i > 1`์ธ๋ฐ๋
+> `local_i = 0` ๋๋ `local_i = 1`์ด ๋์ด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฒ์ ์ด๊ณผ ์ฝ๊ธฐ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ค์ค ๋ธ๋ก
+> ํ๋ง์์ ์์ ์ ์ผ๋ก ๋์ํ๋ ํจํด์ `local_i`๋ก ๊ฐ๋๋ฅผ ๊ฑธ๊ณ , ํค์ผ๋ก(halo) ์์์ ๋ํด์๋
+> ์ ์ญ ์ฝ๊ธฐ๋ก ๋์ฒดํ๋ ๊ฒ์
๋๋ค:
+>
+> ```mojo
+> if local_i >= 2:
+> output[global_i] = shared[local_i-2] + shared[local_i-1] + shared[local_i]
+> elif local_i == 1 and global_i >= 2:
+> output[global_i] = a[global_i-2] + shared[0] + shared[1]
+> elif local_i == 0 and global_i >= 2:
+> output[global_i] = a[global_i-2] + a[global_i-1] + shared[0]
+> ```
+
4. **๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํจํด**
- ์ค๋ ๋๋ง๋ค ๊ณต์ ํ
์๋ก ์ ์ญ ์ฝ๊ธฐ 1ํ
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํ ํจ์จ์ ์ธ ์ด์ ์ ๊ทผ
diff --git a/book/i18n/ko/src/puzzle_23/elementwise.md b/book/i18n/ko/src/puzzle_23/elementwise.md
index ec223236..153eba0a 100644
--- a/book/i18n/ko/src/puzzle_23/elementwise.md
+++ b/book/i18n/ko/src/puzzle_23/elementwise.md
@@ -1,4 +1,4 @@
-
+
# elementwise - ๊ธฐ๋ณธ GPU ํจ์ํ ์ฐ์ฐ
@@ -92,7 +92,7 @@ result = a_simd + b_simd # 4๊ฐ ์์์ SIMD ๋ง์
์ ๋์์ ์ํ (GPU
### 5. **SIMD ์ ์ฅ**
```mojo
-output.store[simd_width](idx, 0, result) # 4๊ฐ ๊ฒฐ๊ณผ๋ฅผ ํ ๋ฒ์ ์ ์ฅ (GPU ์์กด์ )
+output.store[simd_width](Index(idx), result) # 4๊ฐ ๊ฒฐ๊ณผ๋ฅผ ํ ๋ฒ์ ์ ์ฅ (GPU ์์กด์ )
```
์ ์ฒด SIMD ๋ฒกํฐ๋ฅผ ํ ๋ฒ์ ์ฐ์ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ ๊ธฐ๋กํฉ๋๋ค.
@@ -239,7 +239,7 @@ idx = indices[0] # ์ ํ ์ธ๋ฑ์ค: 0, 4, 8,
a_simd = a.aligned_load[simd_width](Index(idx)) # ๋ก๋: [a[0:4], a[4:8], a[8:12]...] (๋ก๋๋น 4๊ฐ ์์)
b_simd = b.aligned_load[simd_width](Index(idx)) # ๋ก๋: [b[0:4], b[4:8], b[8:12]...] (๋ก๋๋น 4๊ฐ ์์)
ret = a_simd + b_simd # SIMD: 4๊ฐ ๋ง์
์ ๋ณ๋ ฌ ์ํ (GPU ์์กด์ )
-output.store[simd_width](Index(global_start), ret) # ์ ์ฅ: 4๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋์ ์ ์ฅ (GPU ์์กด์ )
+output.store[simd_width](Index(idx), ret) # ์ ์ฅ: 4๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋์ ์ ์ฅ (GPU ์์กด์ )
```
**์คํ ๊ณ์ธต ๊ตฌ์กฐ ์๊ฐํ:**
diff --git a/book/i18n/ko/src/puzzle_23/tile.md b/book/i18n/ko/src/puzzle_23/tile.md
index ad7cc70d..d7ae9ae7 100644
--- a/book/i18n/ko/src/puzzle_23/tile.md
+++ b/book/i18n/ko/src/puzzle_23/tile.md
@@ -1,4 +1,4 @@
-
+
# tile - ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ธ ํ์ผ๋ง ์ฒ๋ฆฌ
@@ -86,10 +86,10 @@ for i in range(tile_size):
### 4. **ํ์ผ ์์ ๋ด SIMD ์ฐ์ฐ**
```mojo
-a_vec = a_tile.load[simd_width](i, 0) # ํ์ผ ๋ด ์์น i์์ ๋ก๋
-b_vec = b_tile.load[simd_width](i, 0) # ํ์ผ ๋ด ์์น i์์ ๋ก๋
+a_vec = a_tile.load[simd_width](Index(i)) # ํ์ผ ๋ด ์์น i์์ ๋ก๋
+b_vec = b_tile.load[simd_width](Index(i)) # ํ์ผ ๋ด ์์น i์์ ๋ก๋
result = a_vec + b_vec # SIMD ๋ง์
(GPU ์์กด์ ํญ)
-out_tile.store[simd_width](i, 0, result) # ํ์ผ ๋ด ์์น i์ ์ ์ฅ
+out_tile.store[simd_width](Index(i), result) # ํ์ผ ๋ด ์์น i์ ์ ์ฅ
```
### 5. **์ค๋ ๋ ๊ตฌ์ฑ์ ์ฐจ์ด์ **
@@ -234,10 +234,10 @@ Tile 31 (thread 31): [992, 993, ..., 1023] โ ์์ 992-1023
```mojo
@parameter
for i in range(tile_size):
- a_vec = a_tile.load[simd_width](i, 0)
- b_vec = b_tile.load[simd_width](i, 0)
+ a_vec = a_tile.load[simd_width](Index(i))
+ b_vec = b_tile.load[simd_width](Index(i))
ret = a_vec + b_vec
- out_tile.store[simd_width](i, 0, ret)
+ out_tile.store[simd_width](Index(i), ret)
```
**์ ์์ฐจ ์ฒ๋ฆฌ์ธ๊ฐ?**
diff --git a/book/i18n/ko/src/puzzle_23/vectorize.md b/book/i18n/ko/src/puzzle_23/vectorize.md
index f80957dc..c76c5e2f 100644
--- a/book/i18n/ko/src/puzzle_23/vectorize.md
+++ b/book/i18n/ko/src/puzzle_23/vectorize.md
@@ -1,4 +1,4 @@
-
+
# vectorize - SIMD ์ ์ด
@@ -70,8 +70,8 @@ global_start = tile_id * chunk_size + i * simd_width
### 3. **ํ
์ ์ง์ ์ ๊ทผ**
```mojo
-a_vec = a.load[simd_width](global_start, 0) # ์ ์ญ ํ
์์์ ๋ก๋
-output.store[simd_width](global_start, 0, ret) # ์ ์ญ ํ
์์ ์ ์ฅ
+a_vec = a.aligned_load[simd_width](Index(global_start)) # ์ ์ญ ํ
์์์ ๋ก๋
+output.store[simd_width](Index(global_start), ret) # ์ ์ญ ํ
์์ ์ ์ฅ
```
์ฐธ๊ณ : ํ์ผ ๋ทฐ๊ฐ ์๋ ์๋ณธ ํ
์์ ์ ๊ทผํฉ๋๋ค.
diff --git a/book/i18n/ko/src/puzzle_26/warp_shuffle_xor.md b/book/i18n/ko/src/puzzle_26/warp_shuffle_xor.md
index 638f8966..f8acf375 100644
--- a/book/i18n/ko/src/puzzle_26/warp_shuffle_xor.md
+++ b/book/i18n/ko/src/puzzle_26/warp_shuffle_xor.md
@@ -1,4 +1,4 @@
-
+
# `warp.shuffle_xor()` ๋ฒํฐํ๋ผ์ด ํต์
@@ -408,7 +408,7 @@ if global_i < size:
# ๋ฒํฐํ๋ผ์ด ๋ฆฌ๋์
ํธ๋ฆฌ: ๋ชจ๋ WARP_SIZE์ ๋์ ์ผ๋ก ๋์
offset = WARP_SIZE // 2
while offset > 0:
- max_val = max(max_val, shuffle_xor(max_val, offset))
+ max_val = max(max_val, shuffle_xor(max_val, UInt32(offset)))
offset //= 2
output[global_i] = max_val # ๋ชจ๋ ๋ ์ธ์ด ์ ์ญ ์ต๋๊ฐ์ ๊ฐ์ง
@@ -601,10 +601,10 @@ if global_i < size:
# max์ min ๋์ ๋ฒํฐํ๋ผ์ด ๋ฆฌ๋์
(log_2(WARP_SIZE) ๋จ๊ณ)
offset = WARP_SIZE // 2
while offset > 0:
- neighbor_val = shuffle_xor(current_val, offset)
+ neighbor_val = shuffle_xor(current_val, UInt32(offset))
current_val = max(current_val, neighbor_val) # Max ๋ฆฌ๋์
- min_neighbor_val = shuffle_xor(min_val, offset)
+ min_neighbor_val = shuffle_xor(min_val, UInt32(offset))
min_val = min(min_val, min_neighbor_val) # Min ๋ฆฌ๋์
offset //= 2
@@ -645,10 +645,10 @@ if global_i < size:
```mojo
offset = WARP_SIZE // 2
while offset > 0:
- neighbor_val = shuffle_xor(current_val, offset)
+ neighbor_val = shuffle_xor(current_val, UInt32(offset))
current_val = max(current_val, neighbor_val)
- min_neighbor_val = shuffle_xor(min_val, offset)
+ min_neighbor_val = shuffle_xor(min_val, UInt32(offset))
min_val = min(min_val, min_neighbor_val)
offset //= 2
@@ -712,7 +712,7 @@ while offset > 0:
```mojo
offset = WARP_SIZE // 2
while offset > 0:
- neighbor_val = shuffle_xor(current_val, offset)
+ neighbor_val = shuffle_xor(current_val, UInt32(offset))
current_val = operation(current_val, neighbor_val)
offset //= 2
```
diff --git a/book/i18n/ko/src/puzzle_27/block_prefix_sum.md b/book/i18n/ko/src/puzzle_27/block_prefix_sum.md
index cbfcaceb..c2aa832f 100644
--- a/book/i18n/ko/src/puzzle_27/block_prefix_sum.md
+++ b/book/i18n/ko/src/puzzle_27/block_prefix_sum.md
@@ -1,4 +1,4 @@
-
+
# block.prefix_sum()๊ณผ ๋ณ๋ ฌ ํ์คํ ๊ทธ๋จ ๊ตฌ๊ฐ ๋ถ๋ฅ
@@ -94,7 +94,7 @@ local_i = thread_idx.x
```mojo
my_value = input_data[global_i][0] # ๋ด์ ์์์ฒ๋ผ SIMD ์ถ์ถ
-bin_number = Int(floor(my_value * num_bins))
+bin_number = Int(floor(my_value * Float32(num_bins)))
```
**๊ฒฝ๊ณ ์ฌ๋ก ์ฒ๋ฆฌ**: ์ ํํ 1.0์ธ ๊ฐ์ ๊ตฌ๊ฐ `NUM_BINS`์ ๋ค์ด๊ฐ์ง๋ง, ์ค์ ๊ตฌ๊ฐ์ 0๋ถํฐ `NUM_BINS-1`๊น์ง์
๋๋ค. `if` ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ต๋ ๊ตฌ๊ฐ์ ์ ํํ์ธ์.
@@ -142,7 +142,7 @@ if belongs_to_target == 1:
```mojo
if local_i == tpb - 1: # ๋ธ๋ก์ ๋ง์ง๋ง ์ค๋ ๋
- total_count = offset[0] + belongs_to_target # ํฌํจ = ๋นํฌํจ + ์์ ์ ๊ธฐ์ฌ๋ถ
+ total_count = offset[0] + Int32(belongs_to_target) # ํฌํจ = ๋นํฌํจ + ์์ ์ ๊ธฐ์ฌ๋ถ
count_output[0] = total_count
```
@@ -324,7 +324,7 @@ belongs_to_target=1์ธ ์ค๋ ๋๋ง ๊ธฐ๋ก:
```
๋ง์ง๋ง ์ค๋ ๋๊ฐ ์ด ๊ฐ์๋ฅผ ๊ณ์ฐ (์ค๋ ๋ 0์ด ์๋!):
if local_i == tpb - 1: // ์ด ๊ฒฝ์ฐ ์ค๋ ๋ 127
- total = write_offset[0] + belongs_to_target // ํฌํจ ํฉ ๊ณต์
+ total = write_offset[0] + Int32(belongs_to_target) // ํฌํจ ํฉ ๊ณต์
count_output[0] = total
```
From 230a07402b61098df2fd9fb3514c5161fcb451e0 Mon Sep 17 00:00:00 2001
From: Jongmin Park <9290341+GzuPark@users.noreply.github.com>
Date: Thu, 23 Apr 2026 15:45:45 +0900
Subject: [PATCH 3/6] docs(i18n): Restore dropped concept paragraphs (ko)
The #238 TileTensor migration added educational concept paragraphs
to the English Overview sections, but the Korean pass dropped them
instead of translating. Restore the missing content so readers get
the same intuition before the implementation.
- puzzle_05/puzzle_05.md: restore the broadcasting definition
paragraph (regression introduced by the mechanical rename), add
the missing "boundary conditions" learning bullet, and expand the
Broadcasting/Access patterns bullets to match upstream
- puzzle_08/puzzle_08.md: translate the shared-memory introduction
paragraph (on-chip storage, block locality, barrier coordination)
- puzzle_12/puzzle_12.md: translate the parallel-reduction
introduction paragraph (O(log n) tree reduction with barrier)
- bump i18n-source-commit markers to 19dfa37b so the outdated
translation banners clear
---
book/i18n/ko/src/puzzle_05/puzzle_05.md | 14 +++++++++-----
book/i18n/ko/src/puzzle_08/puzzle_08.md | 4 +++-
book/i18n/ko/src/puzzle_12/puzzle_12.md | 4 +++-
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/book/i18n/ko/src/puzzle_05/puzzle_05.md b/book/i18n/ko/src/puzzle_05/puzzle_05.md
index f572c2b8..95559ee4 100644
--- a/book/i18n/ko/src/puzzle_05/puzzle_05.md
+++ b/book/i18n/ko/src/puzzle_05/puzzle_05.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 5: ๋ธ๋ก๋์บ์คํธ
@@ -6,6 +6,8 @@
1D TileTensor `a`์ `b`๋ฅผ ๋ธ๋ก๋์บ์คํธ๋ก ๋ํด 2D TileTensor `output`์ ์ ์ฅํ๋ ์ปค๋์ ๊ตฌํํด ๋ณด์ธ์.
+๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์์ **๋ธ๋ก๋์บ์คํธ(broadcasting)** ๋ ์์๋ณ ์ฐ์ฐ์ ํ ๋ ์ ์ฐจ์ ๋ฐฐ์ด์ ๊ณ ์ฐจ์ ๋ฐฐ์ด์ ํ์์ ๋ง๊ฒ ์๋์ผ๋ก ํ์ฅํ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์ค์ ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ์ง ์๊ณ , ์ถ๊ฐ ์ฐจ์์ ๊ฑธ์ณ ๊ฐ์ ๋
ผ๋ฆฌ์ ์ผ๋ก ๋ฐ๋ณตํ๋ ๋ฐฉ์์
๋๋ค. ์๋ฅผ ๋ค์ด, 2D ํ๋ ฌ์ ๊ฐ ํ(๋๋ ์ด)์ 1D ๋ฒกํฐ๋ฅผ ๋ํ ๋ ๋ฒกํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ณต์ฌํ์ง ์์๋ ๊ฐ์ ์์๊ฐ ์๋์ผ๋ก ๋ฐ๋ณต ์ ์ฉ๋ฉ๋๋ค.
+
**์ฐธ๊ณ **: _์ค๋ ๋ ์๊ฐ ํ๋ ฌ์ ์์น ์๋ณด๋ค ๋ง์ต๋๋ค._
@@ -15,14 +17,16 @@
์ด ํผ์ฆ์์ ๋ฐฐ์ธ ๋ด์ฉ:
-- ๋ธ๋ก๋์บ์คํธ ์ฐ์ฐ์ `TileTensor` ์ฌ์ฉํ๊ธฐ
-- ์๋ก ๋ค๋ฅธ ํ
์ ํฌ๊ธฐ ๋ค๋ฃจ๊ธฐ
-- `TileTensor`๋ก 2D ์ธ๋ฑ์ฑ ์ฒ๋ฆฌํ๊ธฐ
+- `TileTensor`๋ก ์๋ก ๋ค๋ฅธ ์ฐจ์์ 1D ๋ฒกํฐ ๋ธ๋ก๋์บ์คํธํ๊ธฐ
+- 2D ์ค๋ ๋ ์ธ๋ฑ์ค๋ก GPU ์ค๋ ๋๋ฅผ 2D ์ถ๋ ฅ ํ๋ ฌ์ ๋งคํํ๊ธฐ
+- ํผํฉ ์ฐจ์ ์ฐ์ฐ์ ์ํด ์๋ก ๋ค๋ฅธ ํ
์ ํฌ๊ธฐ ๋ค๋ฃจ๊ธฐ
+- ๋ธ๋ก๋์บ์คํธ ํจํด์์ ๊ฒฝ๊ณ ์กฐ๊ฑด ์ฒ๋ฆฌํ๊ธฐ
ํต์ฌ์ `TileTensor`๊ฐ ์๋ก ๋ค๋ฅธ ํ
์ ํฌ๊ธฐ \\((1, n)\\)์ \\((n, 1)\\)์ \\((n,n)\\)์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ๋ธ๋ก๋์บ์คํธํ ์ ์๋ค๋ ์ ์
๋๋ค. ๊ทธ๋ฌ๋ฉด์๋ ๊ฒฝ๊ณ ๊ฒ์ฌ๋ ์ฌ์ ํ ํ์ํฉ๋๋ค.
- **ํ
์ ํฌ๊ธฐ**: ์
๋ ฅ ๋ฒกํฐ์ ํฌ๊ธฐ๋ \\((1, n)\\)๊ณผ \\((n, 1)\\)
-- **๋ธ๋ก๋์บ์คํธ**: ๋ ์ฐจ์์ ๊ฒฐํฉํด \\((n,n)\\) ์ถ๋ ฅ ์์ฑ
+- **๋ธ๋ก๋์บ์คํธ**: `a`์ ๊ฐ ์์๊ฐ `b`์ ๊ฐ ์์์ ๊ฒฐํฉ๋์ด ๋ ์ฐจ์์ด ํ์ฅ๋ \\((n,n)\\) ์ถ๋ ฅ ์์ฑ
+- **์ ๊ทผ ํจํด**: `a[0, col]`์ ํ์ ๋ฐ๋ผ ์ํ์ผ๋ก ๋ธ๋ก๋์บ์คํธ๋๊ณ , `b[row, 0]`์ ์ด์ ๋ฐ๋ผ ์์ง์ผ๋ก ๋ธ๋ก๋์บ์คํธ๋จ
- **๊ฐ๋ ์กฐ๊ฑด**: ์ถ๋ ฅ ํฌ๊ธฐ์ ๋ํ ๊ฒฝ๊ณ ๊ฒ์ฌ๋ ์ฌ์ ํ ํ์
- **์ค๋ ๋ ๋ฒ์**: ํ
์ ์์ \\((2 \times 2)\\)๋ณด๋ค ์ค๋ ๋ \\((3 \times 3)\\)๊ฐ ๋ง์
diff --git a/book/i18n/ko/src/puzzle_08/puzzle_08.md b/book/i18n/ko/src/puzzle_08/puzzle_08.md
index 0137735d..75c36f1c 100644
--- a/book/i18n/ko/src/puzzle_08/puzzle_08.md
+++ b/book/i18n/ko/src/puzzle_08/puzzle_08.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 8: ๊ณต์ ๋ฉ๋ชจ๋ฆฌ
@@ -6,6 +6,8 @@
1D TileTensor `a`์ ๊ฐ ์์น์ 10์ ๋ํด 1D TileTensor `output`์ ์ ์ฅํ๋ ์ปค๋์ ๊ตฌํํด ๋ณด์ธ์.
+**๊ณต์ ๋ฉ๋ชจ๋ฆฌ(shared memory)** ๋ ๊ฐ์ ๋ธ๋ก ์์ ๋ชจ๋ ์ค๋ ๋๊ฐ ์ ๊ทผํ ์ ์๋, ์นฉ์ ๋ด์ฅ๋ ๋น ๋ฅธ ์ ์ฅ์์
๋๋ค. ๋ชจ๋ ๋ธ๋ก์ด ์ ๊ทผํ ์ ์์ง๋ง ๋๋ฆฐ ์ ์ญ ๋ฉ๋ชจ๋ฆฌ์ ๋ฌ๋ฆฌ, ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ฐ ์๊ฐ์ CPU์ ๋ ์ง์คํฐ ์บ์ ์์ค์
๋๋ค. ๊ฐ ๋ธ๋ก์ ๊ณ ์ ํ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ง๋ฏ๋ก, ํ ๋ธ๋ก์ ์ค๋ ๋๋ ๋ค๋ฅธ ๋ธ๋ก์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ฐ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ์ฝ๊ณ ์ธ ์ ์๊ธฐ ๋๋ฌธ์, ํ ์ค๋ ๋๊ฐ ๋ค๋ฅธ ์ค๋ ๋์ ์ฐ๊ธฐ๊ฐ ๋๋๊ธฐ ์ ์ ๊ฐ์ ์ฝ๋ ์ํฉ์ ๋ง์ผ๋ ค๋ฉด `barrier()`๋ฅผ ํตํ ์กฐ์จ์ด ํ์ํฉ๋๋ค.
+
**์ฐธ๊ณ :** _๋ธ๋ก๋น ์ค๋ ๋ ์๊ฐ `a`์ ํฌ๊ธฐ๋ณด๋ค ์์ต๋๋ค._
diff --git a/book/i18n/ko/src/puzzle_12/puzzle_12.md b/book/i18n/ko/src/puzzle_12/puzzle_12.md
index ccfdb365..d27fd959 100644
--- a/book/i18n/ko/src/puzzle_12/puzzle_12.md
+++ b/book/i18n/ko/src/puzzle_12/puzzle_12.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 12: ๋ด์
@@ -21,6 +21,8 @@
## ํต์ฌ ๊ฐ๋
+**๋ณ๋ ฌ ๋ฆฌ๋์
(parallel reduction)** ์ ์ดํญ ์ฐ์ฐ(์ฌ๊ธฐ์๋ ๋ง์
)์ ์ฌ์ฉํด \\(n\\) ๊ฐ์ ๊ฐ์ ํ๋๋ก ํฉ์น๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, \\(O(n)\\) ๋ฒ์ ์์ฐจ ์ฒ๋ฆฌ ๋์ \\(O(\log n)\\) ๋จ๊ณ ๋ง์ ๋๋ฉ๋๋ค. ๊ฐ ๋จ๊ณ์์ ํ์ฑ ์ค๋ ๋์ ์ ๋ฐ์ด ๊ฐ์ ํ๋์ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ ๋ํ๋ฉด์ ๋จ์ ๋ถ๋ถํฉ์ ๊ฐ์๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์
๋๋ค. \\(\log_2 n\\) ๋จ๊ณ๊ฐ ์ง๋๋ฉด ์ค๋ ๋ 0์ด ์ต์ข
ํฉ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ์ด ํธ๋ฆฌ ๋ชจ์์ ๊ณ์ฐ์ ํ ์ค๋ ๋๊ฐ ๋ถ๋ถ์ ์ผ๋ก๋ง ๊ฐฑ์ ๋ ๊ฐ์ ์ฝ์ง ์๋๋ก ๋จ๊ณ ์ฌ์ด์ `barrier()`๋ฅผ ๋ฌ์ผ ํฉ๋๋ค.
+
์ด ํผ์ฆ์์ ๋ฐฐ์ธ ๋ด์ฉ:
- [Puzzle 8](../puzzle_08/puzzle_08.md), [Puzzle 11](../puzzle_11/puzzle_11.md)์์ ์ด์ด์ง๋ TileTensor ๊ธฐ๋ฐ ๋ณ๋ ฌ ๋ฆฌ๋์
From 6f728d3fb4475db659536a6929e8546561f839e7 Mon Sep 17 00:00:00 2001
From: Jongmin Park <9290341+GzuPark@users.noreply.github.com>
Date: Thu, 23 Apr 2026 16:24:29 +0900
Subject: [PATCH 4/6] docs(i18n): Finish Korean P3 sync pass
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Tied off the remaining priority-3 files after a structural audit
against the English sources. Most were already content-aligned โ
only three had real gaps; the rest just needed their source-commit
markers refreshed so the "outdated translation" banners clear.
Content additions:
- puzzle_06/puzzle_06.md: translate the thread-block introduction
paragraph that anchors global-index math for the rest of Part I
- puzzle_26/puzzle_26.md: wrap the butterfly `shuffle_xor` offset
with `UInt32(...)` per #237 (one call missed in the earlier pass)
- puzzle_26/warp_prefix_sum.md: same `UInt32(offset)` cast for the
warp-level total reduction
Marker-only refreshes (40 files spanning puzzle_01 through
puzzle_34): verified English and Korean cumulative diffs match
token-by-token (line-count deltas come from translator-added blank
lines in blockquotes, not content gaps), so only the header stamp
moves forward.
---
book/i18n/ko/src/puzzle_01/puzzle_01.md | 2 +-
book/i18n/ko/src/puzzle_01/tile_tensor_preview.md | 2 +-
book/i18n/ko/src/puzzle_02/puzzle_02.md | 2 +-
book/i18n/ko/src/puzzle_03/puzzle_03.md | 2 +-
book/i18n/ko/src/puzzle_04/introduction_tile_tensor.md | 2 +-
book/i18n/ko/src/puzzle_04/puzzle_04.md | 2 +-
book/i18n/ko/src/puzzle_04/tile_tensor.md | 2 +-
book/i18n/ko/src/puzzle_06/puzzle_06.md | 4 +++-
book/i18n/ko/src/puzzle_07/puzzle_07.md | 2 +-
book/i18n/ko/src/puzzle_09/puzzle_09.md | 2 +-
book/i18n/ko/src/puzzle_09/third_case.md | 2 +-
book/i18n/ko/src/puzzle_10/puzzle_10.md | 2 +-
book/i18n/ko/src/puzzle_13/block_boundary.md | 2 +-
book/i18n/ko/src/puzzle_13/puzzle_13.md | 2 +-
book/i18n/ko/src/puzzle_13/simple.md | 2 +-
book/i18n/ko/src/puzzle_14/complete.md | 2 +-
book/i18n/ko/src/puzzle_14/puzzle_14.md | 2 +-
book/i18n/ko/src/puzzle_14/simple.md | 2 +-
book/i18n/ko/src/puzzle_15/puzzle_15.md | 2 +-
"book/i18n/ko/src/puzzle_16/na\303\257ve.md" | 2 +-
book/i18n/ko/src/puzzle_16/shared_memory.md | 2 +-
book/i18n/ko/src/puzzle_16/tiled.md | 2 +-
book/i18n/ko/src/puzzle_17/puzzle_17.md | 2 +-
book/i18n/ko/src/puzzle_18/puzzle_18.md | 2 +-
book/i18n/ko/src/puzzle_19/puzzle_19.md | 2 +-
book/i18n/ko/src/puzzle_23/benchmarking.md | 2 +-
book/i18n/ko/src/puzzle_23/puzzle_23.md | 2 +-
book/i18n/ko/src/puzzle_24/puzzle_24.md | 2 +-
book/i18n/ko/src/puzzle_24/warp_sum.md | 2 +-
book/i18n/ko/src/puzzle_25/puzzle_25.md | 2 +-
book/i18n/ko/src/puzzle_25/warp_broadcast.md | 2 +-
book/i18n/ko/src/puzzle_25/warp_shuffle_down.md | 2 +-
book/i18n/ko/src/puzzle_26/puzzle_26.md | 4 ++--
book/i18n/ko/src/puzzle_26/warp_prefix_sum.md | 4 ++--
book/i18n/ko/src/puzzle_27/block_broadcast.md | 2 +-
book/i18n/ko/src/puzzle_27/block_sum.md | 2 +-
book/i18n/ko/src/puzzle_27/puzzle_27.md | 2 +-
book/i18n/ko/src/puzzle_28/puzzle_28.md | 2 +-
book/i18n/ko/src/puzzle_32/conflict_free_patterns.md | 2 +-
book/i18n/ko/src/puzzle_33/puzzle_33.md | 2 +-
book/i18n/ko/src/puzzle_34/advanced_cluster_patterns.md | 2 +-
book/i18n/ko/src/puzzle_34/cluster_collective_ops.md | 2 +-
book/i18n/ko/src/puzzle_34/cluster_coordination_basics.md | 2 +-
43 files changed, 47 insertions(+), 45 deletions(-)
diff --git a/book/i18n/ko/src/puzzle_01/puzzle_01.md b/book/i18n/ko/src/puzzle_01/puzzle_01.md
index dbbe968b..7ae3e171 100644
--- a/book/i18n/ko/src/puzzle_01/puzzle_01.md
+++ b/book/i18n/ko/src/puzzle_01/puzzle_01.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 1: Map
diff --git a/book/i18n/ko/src/puzzle_01/tile_tensor_preview.md b/book/i18n/ko/src/puzzle_01/tile_tensor_preview.md
index 87635036..124cc1ba 100644
--- a/book/i18n/ko/src/puzzle_01/tile_tensor_preview.md
+++ b/book/i18n/ko/src/puzzle_01/tile_tensor_preview.md
@@ -1,4 +1,4 @@
-
+
## ์ TileTensor๋ฅผ ๊ณ ๋ คํด์ผ ํ ๊น์?
diff --git a/book/i18n/ko/src/puzzle_02/puzzle_02.md b/book/i18n/ko/src/puzzle_02/puzzle_02.md
index 480ba4c2..0b927166 100644
--- a/book/i18n/ko/src/puzzle_02/puzzle_02.md
+++ b/book/i18n/ko/src/puzzle_02/puzzle_02.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 2: Zip
diff --git a/book/i18n/ko/src/puzzle_03/puzzle_03.md b/book/i18n/ko/src/puzzle_03/puzzle_03.md
index 901181ec..da562d6d 100644
--- a/book/i18n/ko/src/puzzle_03/puzzle_03.md
+++ b/book/i18n/ko/src/puzzle_03/puzzle_03.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 3: ๊ฐ๋
diff --git a/book/i18n/ko/src/puzzle_04/introduction_tile_tensor.md b/book/i18n/ko/src/puzzle_04/introduction_tile_tensor.md
index 076a239b..acaf3ade 100644
--- a/book/i18n/ko/src/puzzle_04/introduction_tile_tensor.md
+++ b/book/i18n/ko/src/puzzle_04/introduction_tile_tensor.md
@@ -1,4 +1,4 @@
-
+
# TileTensor ์์๋ณด๊ธฐ
diff --git a/book/i18n/ko/src/puzzle_04/puzzle_04.md b/book/i18n/ko/src/puzzle_04/puzzle_04.md
index d97ce9b4..fba3980e 100644
--- a/book/i18n/ko/src/puzzle_04/puzzle_04.md
+++ b/book/i18n/ko/src/puzzle_04/puzzle_04.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 4: 2D Map
diff --git a/book/i18n/ko/src/puzzle_04/tile_tensor.md b/book/i18n/ko/src/puzzle_04/tile_tensor.md
index 75499e48..3f85a11e 100644
--- a/book/i18n/ko/src/puzzle_04/tile_tensor.md
+++ b/book/i18n/ko/src/puzzle_04/tile_tensor.md
@@ -1,4 +1,4 @@
-
+
# TileTensor ๋ฒ์
diff --git a/book/i18n/ko/src/puzzle_06/puzzle_06.md b/book/i18n/ko/src/puzzle_06/puzzle_06.md
index 08909897..3af50f01 100644
--- a/book/i18n/ko/src/puzzle_06/puzzle_06.md
+++ b/book/i18n/ko/src/puzzle_06/puzzle_06.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 6: ๋ธ๋ก
@@ -6,6 +6,8 @@
๋ฒกํฐ `a`์ ๊ฐ ์์น์ 10์ ๋ํด `output`์ ์ ์ฅํ๋ ์ปค๋์ ๊ตฌํํด ๋ณด์ธ์.
+**์ค๋ ๋ ๋ธ๋ก(thread block)** (๋๋ ์ค์ฌ์ **๋ธ๋ก**)์ ํ๋์ GPU ๋ฉํฐํ๋ก์ธ์์์ ํจ๊ป ์คํ๋๋ ์ค๋ ๋ ๋ฌถ์์
๋๋ค. ๊ฐ์ ๋ธ๋ก ์์ ๋ชจ๋ ์ค๋ ๋๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ๊ณ ์๋ก ๋๊ธฐํํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๊ฐ ํ ๋ธ๋ก์ด ์ฒ๋ฆฌํ ์ ์๋ ๋ฒ์๋ณด๋ค ํฌ๋ฉด GPU๋ ์ฌ๋ฌ ๋ธ๋ก์ ์ค์ผ์ค๋งํ๊ณ , ๊ฐ ๋ธ๋ก์ ์๊ธฐ ๋ชซ์ ๋ฐ์ดํฐ๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ค๋ ๋์ ์ ์ญ ์์น๋ ๋ธ๋ก ๋ด ์์น(`thread_idx.x`)์ ์์ ๋ธ๋ก(`block_idx.x`)์ ํฉ์ณ ๊ณ์ฐํฉ๋๋ค: `global_i = block_dim.x * block_idx.x + thread_idx.x`.
+
**์ฐธ๊ณ :** _๋ธ๋ก๋น ์ค๋ ๋ ์๊ฐ `a`์ ํฌ๊ธฐ๋ณด๋ค ์์ต๋๋ค._
diff --git a/book/i18n/ko/src/puzzle_07/puzzle_07.md b/book/i18n/ko/src/puzzle_07/puzzle_07.md
index 3cb2b593..6e31b787 100644
--- a/book/i18n/ko/src/puzzle_07/puzzle_07.md
+++ b/book/i18n/ko/src/puzzle_07/puzzle_07.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 7: 2D ๋ธ๋ก
diff --git a/book/i18n/ko/src/puzzle_09/puzzle_09.md b/book/i18n/ko/src/puzzle_09/puzzle_09.md
index 7a8610e3..76fc6e73 100644
--- a/book/i18n/ko/src/puzzle_09/puzzle_09.md
+++ b/book/i18n/ko/src/puzzle_09/puzzle_09.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 9: GPU ๋๋ฒ๊น
์ํฌํ๋ก์ฐ
diff --git a/book/i18n/ko/src/puzzle_09/third_case.md b/book/i18n/ko/src/puzzle_09/third_case.md
index d6b8b02e..eb4ca91f 100644
--- a/book/i18n/ko/src/puzzle_09/third_case.md
+++ b/book/i18n/ko/src/puzzle_09/third_case.md
@@ -1,4 +1,4 @@
-
+
# ๐ต ํ์ ์์ฌ: ์ธ ๋ฒ์งธ ์ฌ๋ก
diff --git a/book/i18n/ko/src/puzzle_10/puzzle_10.md b/book/i18n/ko/src/puzzle_10/puzzle_10.md
index 273c2bf6..bc151251 100644
--- a/book/i18n/ko/src/puzzle_10/puzzle_10.md
+++ b/book/i18n/ko/src/puzzle_10/puzzle_10.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 10: ์๋ํ์ด์ ๋ก ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ์ ๊ฒฝ์ ์ํ ์ฐพ๊ธฐ
diff --git a/book/i18n/ko/src/puzzle_13/block_boundary.md b/book/i18n/ko/src/puzzle_13/block_boundary.md
index 4ed215ce..5f005590 100644
--- a/book/i18n/ko/src/puzzle_13/block_boundary.md
+++ b/book/i18n/ko/src/puzzle_13/block_boundary.md
@@ -1,4 +1,4 @@
-
+
# ๋ธ๋ก ๊ฒฝ๊ณ ๋ฒ์
diff --git a/book/i18n/ko/src/puzzle_13/puzzle_13.md b/book/i18n/ko/src/puzzle_13/puzzle_13.md
index 34f50da0..2ddd9674 100644
--- a/book/i18n/ko/src/puzzle_13/puzzle_13.md
+++ b/book/i18n/ko/src/puzzle_13/puzzle_13.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 13: 1D ํฉ์ฑ๊ณฑ
diff --git a/book/i18n/ko/src/puzzle_13/simple.md b/book/i18n/ko/src/puzzle_13/simple.md
index d7b9303c..31730ddd 100644
--- a/book/i18n/ko/src/puzzle_13/simple.md
+++ b/book/i18n/ko/src/puzzle_13/simple.md
@@ -1,4 +1,4 @@
-
+
# ๋จ์ผ ๋ธ๋ก์ ์ฌ์ฉํ ๊ธฐ๋ณธ ๋ฒ์
diff --git a/book/i18n/ko/src/puzzle_14/complete.md b/book/i18n/ko/src/puzzle_14/complete.md
index 64136f82..ec6daa4b 100644
--- a/book/i18n/ko/src/puzzle_14/complete.md
+++ b/book/i18n/ko/src/puzzle_14/complete.md
@@ -1,4 +1,4 @@
-
+
# ์์ฑ ๋ฒ์
diff --git a/book/i18n/ko/src/puzzle_14/puzzle_14.md b/book/i18n/ko/src/puzzle_14/puzzle_14.md
index cf13e437..79e56d12 100644
--- a/book/i18n/ko/src/puzzle_14/puzzle_14.md
+++ b/book/i18n/ko/src/puzzle_14/puzzle_14.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 14: ๋์ ํฉ
diff --git a/book/i18n/ko/src/puzzle_14/simple.md b/book/i18n/ko/src/puzzle_14/simple.md
index 9d67eba9..41529171 100644
--- a/book/i18n/ko/src/puzzle_14/simple.md
+++ b/book/i18n/ko/src/puzzle_14/simple.md
@@ -1,4 +1,4 @@
-
+
# ๊ธฐ๋ณธ ๋ฒ์
diff --git a/book/i18n/ko/src/puzzle_15/puzzle_15.md b/book/i18n/ko/src/puzzle_15/puzzle_15.md
index 4420577f..b8ff93a3 100644
--- a/book/i18n/ko/src/puzzle_15/puzzle_15.md
+++ b/book/i18n/ko/src/puzzle_15/puzzle_15.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 15: ์ถ ํฉ๊ณ
diff --git "a/book/i18n/ko/src/puzzle_16/na\303\257ve.md" "b/book/i18n/ko/src/puzzle_16/na\303\257ve.md"
index 6b16a048..89255e25 100644
--- "a/book/i18n/ko/src/puzzle_16/na\303\257ve.md"
+++ "b/book/i18n/ko/src/puzzle_16/na\303\257ve.md"
@@ -1,4 +1,4 @@
-
+
# ์ ์ญ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ธฐ๋ณธ ๋ฒ์
diff --git a/book/i18n/ko/src/puzzle_16/shared_memory.md b/book/i18n/ko/src/puzzle_16/shared_memory.md
index 4fd595b6..8d86c17a 100644
--- a/book/i18n/ko/src/puzzle_16/shared_memory.md
+++ b/book/i18n/ko/src/puzzle_16/shared_memory.md
@@ -1,4 +1,4 @@
-
+
# ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฒ์
diff --git a/book/i18n/ko/src/puzzle_16/tiled.md b/book/i18n/ko/src/puzzle_16/tiled.md
index 88158781..5959a3b7 100644
--- a/book/i18n/ko/src/puzzle_16/tiled.md
+++ b/book/i18n/ko/src/puzzle_16/tiled.md
@@ -1,4 +1,4 @@
-
+
# ํ์ผ๋ง ๋ฒ์
diff --git a/book/i18n/ko/src/puzzle_17/puzzle_17.md b/book/i18n/ko/src/puzzle_17/puzzle_17.md
index d3d6b0cd..45a4b076 100644
--- a/book/i18n/ko/src/puzzle_17/puzzle_17.md
+++ b/book/i18n/ko/src/puzzle_17/puzzle_17.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 17: 1D ํฉ์ฑ๊ณฑ Op
diff --git a/book/i18n/ko/src/puzzle_18/puzzle_18.md b/book/i18n/ko/src/puzzle_18/puzzle_18.md
index 4b9fa15b..f28abd4f 100644
--- a/book/i18n/ko/src/puzzle_18/puzzle_18.md
+++ b/book/i18n/ko/src/puzzle_18/puzzle_18.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 18: ์ํํธ๋งฅ์ค Op
diff --git a/book/i18n/ko/src/puzzle_19/puzzle_19.md b/book/i18n/ko/src/puzzle_19/puzzle_19.md
index 1673b32e..947018b9 100644
--- a/book/i18n/ko/src/puzzle_19/puzzle_19.md
+++ b/book/i18n/ko/src/puzzle_19/puzzle_19.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 19: ์ดํ
์
Op
diff --git a/book/i18n/ko/src/puzzle_23/benchmarking.md b/book/i18n/ko/src/puzzle_23/benchmarking.md
index 8c47c1a0..62b450f1 100644
--- a/book/i18n/ko/src/puzzle_23/benchmarking.md
+++ b/book/i18n/ko/src/puzzle_23/benchmarking.md
@@ -1,4 +1,4 @@
-
+
# ๐ Mojo ๋ฒค์น๋งํน - ์ฑ๋ฅ ๋ถ์๊ณผ ์ต์ ํ
diff --git a/book/i18n/ko/src/puzzle_23/puzzle_23.md b/book/i18n/ko/src/puzzle_23/puzzle_23.md
index 4a57fb24..b4d28060 100644
--- a/book/i18n/ko/src/puzzle_23/puzzle_23.md
+++ b/book/i18n/ko/src/puzzle_23/puzzle_23.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 23: GPU ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจํด
diff --git a/book/i18n/ko/src/puzzle_24/puzzle_24.md b/book/i18n/ko/src/puzzle_24/puzzle_24.md
index 2ae13f47..8d064ac0 100644
--- a/book/i18n/ko/src/puzzle_24/puzzle_24.md
+++ b/book/i18n/ko/src/puzzle_24/puzzle_24.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 24: ์ํ ๊ธฐ์ด
diff --git a/book/i18n/ko/src/puzzle_24/warp_sum.md b/book/i18n/ko/src/puzzle_24/warp_sum.md
index b635fa95..1ccd24b0 100644
--- a/book/i18n/ko/src/puzzle_24/warp_sum.md
+++ b/book/i18n/ko/src/puzzle_24/warp_sum.md
@@ -1,4 +1,4 @@
-
+
# warp.sum()์ ํต์ฌ - ์ํ ๋ ๋ฒจ ๋ด์
diff --git a/book/i18n/ko/src/puzzle_25/puzzle_25.md b/book/i18n/ko/src/puzzle_25/puzzle_25.md
index b57819da..1166572c 100644
--- a/book/i18n/ko/src/puzzle_25/puzzle_25.md
+++ b/book/i18n/ko/src/puzzle_25/puzzle_25.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 25: ์ํ ํต์
diff --git a/book/i18n/ko/src/puzzle_25/warp_broadcast.md b/book/i18n/ko/src/puzzle_25/warp_broadcast.md
index 49672ad2..092e3e0d 100644
--- a/book/i18n/ko/src/puzzle_25/warp_broadcast.md
+++ b/book/i18n/ko/src/puzzle_25/warp_broadcast.md
@@ -1,4 +1,4 @@
-
+
# `warp.broadcast()` ์ผ๋๋ค ํต์
diff --git a/book/i18n/ko/src/puzzle_25/warp_shuffle_down.md b/book/i18n/ko/src/puzzle_25/warp_shuffle_down.md
index 108f73ee..9dec5fd2 100644
--- a/book/i18n/ko/src/puzzle_25/warp_shuffle_down.md
+++ b/book/i18n/ko/src/puzzle_25/warp_shuffle_down.md
@@ -1,4 +1,4 @@
-
+
# `warp.shuffle_down()` ์ผ๋์ผ ํต์
diff --git a/book/i18n/ko/src/puzzle_26/puzzle_26.md b/book/i18n/ko/src/puzzle_26/puzzle_26.md
index e44d00e7..d0d693f1 100644
--- a/book/i18n/ko/src/puzzle_26/puzzle_26.md
+++ b/book/i18n/ko/src/puzzle_26/puzzle_26.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 26: ๊ณ ๊ธ ์ํ ํจํด
@@ -117,7 +117,7 @@ output[global_i] = scan_result
max_val = input[global_i]
offset = WARP_SIZE // 2
while offset > 0:
- max_val = max(max_val, shuffle_xor(max_val, offset))
+ max_val = max(max_val, shuffle_xor(max_val, UInt32(offset)))
offset //= 2
# ๋ชจ๋ ๋ ์ธ์ด ์ ์ญ ์ต๋๊ฐ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค
```
diff --git a/book/i18n/ko/src/puzzle_26/warp_prefix_sum.md b/book/i18n/ko/src/puzzle_26/warp_prefix_sum.md
index 961b50a4..847e170d 100644
--- a/book/i18n/ko/src/puzzle_26/warp_prefix_sum.md
+++ b/book/i18n/ko/src/puzzle_26/warp_prefix_sum.md
@@ -1,4 +1,4 @@
-
+
# `warp.prefix_sum()` ํ๋์จ์ด ์ต์ ํ ๋ณ๋ ฌ ์ค์บ
@@ -393,7 +393,7 @@ if global_i < size:
# ์ํ ์ ์ฒด์ ํฉ์ฐ์ ์ํ ๋ฒํฐํ๋ผ์ด ๋ฆฌ๋์
: ๋ชจ๋ WARP_SIZE์ ๋์ ๋์
offset = WARP_SIZE // 2
while offset > 0:
- warp_left_total += shuffle_xor(warp_left_total, offset)
+ warp_left_total += shuffle_xor(warp_left_total, UInt32(offset))
offset //= 2
# 4๋จ๊ณ: ์ถ๋ ฅ ์์น์ ๊ธฐ๋ก
diff --git a/book/i18n/ko/src/puzzle_27/block_broadcast.md b/book/i18n/ko/src/puzzle_27/block_broadcast.md
index 31474e02..03727bca 100644
--- a/book/i18n/ko/src/puzzle_27/block_broadcast.md
+++ b/book/i18n/ko/src/puzzle_27/block_broadcast.md
@@ -1,4 +1,4 @@
-
+
# block.broadcast()์ ๋ฒกํฐ ์ ๊ทํ
diff --git a/book/i18n/ko/src/puzzle_27/block_sum.md b/book/i18n/ko/src/puzzle_27/block_sum.md
index da3c945d..5f1aac73 100644
--- a/book/i18n/ko/src/puzzle_27/block_sum.md
+++ b/book/i18n/ko/src/puzzle_27/block_sum.md
@@ -1,4 +1,4 @@
-
+
# block.sum()์ ํต์ฌ - ๋ธ๋ก ๋ ๋ฒจ ๋ด์
diff --git a/book/i18n/ko/src/puzzle_27/puzzle_27.md b/book/i18n/ko/src/puzzle_27/puzzle_27.md
index 2e0b1430..d16c7ee0 100644
--- a/book/i18n/ko/src/puzzle_27/puzzle_27.md
+++ b/book/i18n/ko/src/puzzle_27/puzzle_27.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 27: ๋ธ๋ก ์ ์ฒด ํจํด
diff --git a/book/i18n/ko/src/puzzle_28/puzzle_28.md b/book/i18n/ko/src/puzzle_28/puzzle_28.md
index 89021720..6a5cb30f 100644
--- a/book/i18n/ko/src/puzzle_28/puzzle_28.md
+++ b/book/i18n/ko/src/puzzle_28/puzzle_28.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 28: ๋น๋๊ธฐ ๋ฉ๋ชจ๋ฆฌ ์ฐ์ฐ๊ณผ ๋ณต์ฌ ์ค์ฒฉ
diff --git a/book/i18n/ko/src/puzzle_32/conflict_free_patterns.md b/book/i18n/ko/src/puzzle_32/conflict_free_patterns.md
index 5dc47afa..d9ba7814 100644
--- a/book/i18n/ko/src/puzzle_32/conflict_free_patterns.md
+++ b/book/i18n/ko/src/puzzle_32/conflict_free_patterns.md
@@ -1,4 +1,4 @@
-
+
# ์ถฉ๋ ์๋ ํจํด
diff --git a/book/i18n/ko/src/puzzle_33/puzzle_33.md b/book/i18n/ko/src/puzzle_33/puzzle_33.md
index 4912e19e..3a73f399 100644
--- a/book/i18n/ko/src/puzzle_33/puzzle_33.md
+++ b/book/i18n/ko/src/puzzle_33/puzzle_33.md
@@ -1,4 +1,4 @@
-
+
# Puzzle 33: ํ
์ ์ฝ์ด ์ฐ์ฐ
diff --git a/book/i18n/ko/src/puzzle_34/advanced_cluster_patterns.md b/book/i18n/ko/src/puzzle_34/advanced_cluster_patterns.md
index 8fb33014..7b655c2b 100644
--- a/book/i18n/ko/src/puzzle_34/advanced_cluster_patterns.md
+++ b/book/i18n/ko/src/puzzle_34/advanced_cluster_patterns.md
@@ -1,4 +1,4 @@
-
+
# ๐ง ๊ณ ๊ธ ํด๋ฌ์คํฐ ์๊ณ ๋ฆฌ์ฆ
diff --git a/book/i18n/ko/src/puzzle_34/cluster_collective_ops.md b/book/i18n/ko/src/puzzle_34/cluster_collective_ops.md
index 116140af..a04792de 100644
--- a/book/i18n/ko/src/puzzle_34/cluster_collective_ops.md
+++ b/book/i18n/ko/src/puzzle_34/cluster_collective_ops.md
@@ -1,4 +1,4 @@
-
+
# โธ๏ธ ํด๋ฌ์คํฐ ์ ์ฒด ์งํฉ ์ฐ์ฐ
diff --git a/book/i18n/ko/src/puzzle_34/cluster_coordination_basics.md b/book/i18n/ko/src/puzzle_34/cluster_coordination_basics.md
index 67d391ce..c1051711 100644
--- a/book/i18n/ko/src/puzzle_34/cluster_coordination_basics.md
+++ b/book/i18n/ko/src/puzzle_34/cluster_coordination_basics.md
@@ -1,4 +1,4 @@
-
+
# ๋ฉํฐ ๋ธ๋ก ์กฐ์ ๊ธฐ์ด
From f638e78e545961c517c40343ef9074aca19ee0f9 Mon Sep 17 00:00:00 2001
From: Jongmin Park <9290341+GzuPark@users.noreply.github.com>
Date: Thu, 23 Apr 2026 16:41:00 +0900
Subject: [PATCH 5/6] docs(i18n): Bump markers on Korean common pages
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
SUMMARY, introduction, and howto were already translated to match
the upstream changes (#232 discord invite link and #238 TileTensor
rename / raw+layout_tensor sub-entry removals); only the stale
source-commit markers were still triggering the "outdated
translation" banner.
- SUMMARY.md โ 19dfa37b (#238 final TileTensor state)
- introduction.md โ 19dfa37b (#238 + #232 discord link)
- howto.md โ 3e0e9809 (#232 discord link)
---
book/i18n/ko/src/SUMMARY.md | 2 +-
book/i18n/ko/src/howto.md | 2 +-
book/i18n/ko/src/introduction.md | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/book/i18n/ko/src/SUMMARY.md b/book/i18n/ko/src/SUMMARY.md
index ba409758..3fdbc484 100644
--- a/book/i18n/ko/src/SUMMARY.md
+++ b/book/i18n/ko/src/SUMMARY.md
@@ -1,4 +1,4 @@
-
+
# ๋ชฉ์ฐจ
diff --git a/book/i18n/ko/src/howto.md b/book/i18n/ko/src/howto.md
index 15d28330..4203796b 100644
--- a/book/i18n/ko/src/howto.md
+++ b/book/i18n/ko/src/howto.md
@@ -1,4 +1,4 @@
-
+
## ํผ์ฆ ์ฌ์ฉ ๊ฐ์ด๋
diff --git a/book/i18n/ko/src/introduction.md b/book/i18n/ko/src/introduction.md
index b1616edc..936f924d 100644
--- a/book/i18n/ko/src/introduction.md
+++ b/book/i18n/ko/src/introduction.md
@@ -1,4 +1,4 @@
-
+
# Mojo ๐ฅ GPU Puzzles, Edition 1
From ee08bc8d65c5066f4e35743cc4b87e2fac070e99 Mon Sep 17 00:00:00 2001
From: Jongmin Park <9290341+GzuPark@users.noreply.github.com>
Date: Sat, 25 Apr 2026 15:49:51 +0900
Subject: [PATCH 6/6] docs: Fix broken puzzle_08 link in puzzle_10
The link to `../puzzle_08/tile_tensor.md` was broken because that file
was removed in commit 924961c (Simplify problems with two approaches),
which merged the content into `puzzle_08/puzzle_08.md` but missed
updating this cross-reference. Fixed in both English and Korean.
---
book/i18n/ko/src/puzzle_10/puzzle_10.md | 2 +-
book/src/puzzle_10/puzzle_10.md | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/book/i18n/ko/src/puzzle_10/puzzle_10.md b/book/i18n/ko/src/puzzle_10/puzzle_10.md
index bc151251..aa4383d8 100644
--- a/book/i18n/ko/src/puzzle_10/puzzle_10.md
+++ b/book/i18n/ko/src/puzzle_10/puzzle_10.md
@@ -125,7 +125,7 @@ GPU ๊ฒ์ฌ๋ฅผ ํ๋ ค๋ฉด **๋ณ๋ ฌ ํ๋ก๊ทธ๋จ ํ์ **์ด ๋์ด์ผ ํฉ๋๋ค.
- Puzzle 1-8์์ ๋ค๋ฃฌ GPU ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋
(๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ์ค๋ ๋ ์กฐ์จ, ๋ฐฐ๋ฆฌ์ด)
- **[ํธํ NVIDIA GPU ํ๋์จ์ด](https://docs.modular.com/max/faq#gpu-requirements)**
- `compute-sanitizer` ์ ๊ทผ์ ์ํ `pixi` ํจํค์ง ๋งค๋์ ํ๊ฒฝ ์ค์
-- **์ ํ ํผ์ฆ**: [Puzzle 4](../puzzle_04/introduction_tile_tensor.md)์ [Puzzle 8](../puzzle_08/tile_tensor.md) ์์ง ๊ถ์ฅ
+- **์ ํ ํผ์ฆ**: [Puzzle 4](../puzzle_04/introduction_tile_tensor.md)์ [Puzzle 8](../puzzle_08/puzzle_08.md) ์์ง ๊ถ์ฅ
**๋ชฉํ**:
diff --git a/book/src/puzzle_10/puzzle_10.md b/book/src/puzzle_10/puzzle_10.md
index 5d990c61..dbe97bb3 100644
--- a/book/src/puzzle_10/puzzle_10.md
+++ b/book/src/puzzle_10/puzzle_10.md
@@ -123,7 +123,7 @@ But like any good detective, you'll learn to:
- GPU programming concepts from Puzzles 1-8 (memory management, thread coordination, barriers)
- **[Compatible NVIDIA GPU hardware](https://docs.modular.com/max/faq#gpu-requirements)**
- Environment setup with `pixi` package manager for accessing `compute-sanitizer`
-- **Prior puzzles**: Familiarity with [Puzzle 4](../puzzle_04/introduction_tile_tensor.md) and [Puzzle 8](../puzzle_08/tile_tensor.md) are recommended
+- **Prior puzzles**: Familiarity with [Puzzle 4](../puzzle_04/introduction_tile_tensor.md) and [Puzzle 8](../puzzle_08/puzzle_08.md) are recommended
**What you'll gain**: