๐Ÿ“š ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ฑ…ํฌ ์ดํ•ดํ•˜๊ธฐ

์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๊ฒƒ์„ ๋ฐ”ํƒ•์œผ๋กœ

GPU ์ตœ์ ํ™” ์—ฌ์ •์—์„œ ์ด๋ฏธ ๋งŽ์€ ๊ธธ์„ ๊ฑธ์–ด์™”์Šต๋‹ˆ๋‹ค. Puzzle 8์—์„œ๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅธ ๋ธ”๋ก ๋‚ด๋ถ€ ์ €์žฅ์†Œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. Puzzle 16์—์„œ๋Š” ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ปค๋„์ด ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํƒ€์ผ์„ ์บ์‹ฑํ•˜๊ณ , ๋น„์šฉ์ด ํฐ ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ๋ณ‘๋ ฌ ์—ฐ์‚ฐ์„ ์ง๋ ฌํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ˆจ๊ฒจ์ง„ ์„ฑ๋Šฅ ํ•จ์ •์ด ๋„์‚ฌ๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค: ๋ฑ…ํฌ ์ถฉ๋Œ.

์„ฑ๋Šฅ ๋ฏธ์Šคํ„ฐ๋ฆฌ: ๊ฒ‰๋ณด๊ธฐ์— ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋Š” ๋‘ ์ปค๋„์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค - ๋‘˜ ๋‹ค ๊ฐ™์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์™„๋ฒฝํ•œ ์ ์œ ์œจ์„ ๊ฐ€์ง€๋ฉฐ, ๊ฒฝ์Ÿ ์ƒํƒœ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ•˜๋‚˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ๋ณด๋‹ค 32๋ฐฐ ๋А๋ฆฝ๋‹ˆ๋‹ค. ๋ฒ”์ธ์€? ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ฑ…ํฌ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ฑ…ํฌ๋ž€?

๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฑ…ํฌ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” 32๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์œ ๋‹›์˜ ์ง‘ํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์„ธ์š”. ๊ฐ ๋ฑ…ํฌ๋Š” ํด๋ก ์‚ฌ์ดํด๋‹น ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฑ…ํ‚น ์‹œ์Šคํ…œ์ด ์กด์žฌํ•˜๋Š” ๊ทผ๋ณธ์ ์ธ ์ด์œ ๋Š” ํ•˜๋“œ์›จ์–ด ๋ณ‘๋ ฌ์„ฑ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

32๊ฐœ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ์›Œํ”„๊ฐ€ ๋™์‹œ์— ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ, ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฑ…ํฌ์— ์ ‘๊ทผํ•œ๋‹ค๋ฉด GPU๋Š” 32๊ฐœ์˜ ์š”์ฒญ์„ ๋ชจ๋‘ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ๋ฑ…ํฌ์— ์ ‘๊ทผํ•˜๋ ค ํ•˜๋ฉด ํ•˜๋“œ์›จ์–ด๋Š” ์ด๋ฅผ ์ง๋ ฌํ™”ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, 1์‚ฌ์ดํด์ด๋ฉด ๋  ์—ฐ์‚ฐ์ด ์—ฌ๋Ÿฌ ์‚ฌ์ดํด๋กœ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.

๋ฑ…ํฌ ์ฃผ์†Œ ๋งคํ•‘

๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ 4๋ฐ”์ดํŠธ ์›Œ๋“œ๋Š” ๋‹ค์Œ ๊ณต์‹์— ๋”ฐ๋ผ ํŠน์ • ๋ฑ…ํฌ์— ๋ฐฐ์ •๋ฉ๋‹ˆ๋‹ค:

bank_id = (byte_address / 4) % 32

๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฒ˜์Œ 128๋ฐ”์ดํŠธ๊ฐ€ ๋ฑ…ํฌ์— ๋งคํ•‘๋˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

Address RangeBank IDExample float32 Elements
0-3 bytesBank 0shared[0]
4-7 bytesBank 1shared[1]
8-11 bytesBank 2shared[2]
โ€ฆโ€ฆโ€ฆ
124-127 bytesBank 31shared[31]
128-131 bytesBank 0shared[32]
132-135 bytesBank 1shared[33]

ํ•ต์‹ฌ ํ†ต์ฐฐ: float32 ๋ฐฐ์—ด์—์„œ ๋ฑ…ํ‚น ํŒจํ„ด์€ 32๊ฐœ ์š”์†Œ๋งˆ๋‹ค ๋ฐ˜๋ณต๋˜๋ฉฐ, ์ด๋Š” 32๊ฐœ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ์›Œํ”„ ํฌ๊ธฐ์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ์—ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค - ์ตœ์ ์˜ ๋ณ‘๋ ฌ ์ ‘๊ทผ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฑ…ํฌ ์ถฉ๋Œ์˜ ์œ ํ˜•

์ถฉ๋Œ ์—†์Œ: ์ด์ƒ์ ์ธ ๊ฒฝ์šฐ

์›Œํ”„ ๋‚ด ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฑ…ํฌ์— ์ ‘๊ทผํ•˜๋ฉด 32๊ฐœ์˜ ์ ‘๊ทผ์ด ๋ชจ๋‘ 1์‚ฌ์ดํด์— ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค:

# Perfect case: each thread accesses a different bank
shared[thread_idx.x]  # Thread 0โ†’Bank 0, Thread 1โ†’Bank 1, ..., Thread 31โ†’Bank 31

๊ฒฐ๊ณผ: 32๊ฐœ ๋ณ‘๋ ฌ ์ ‘๊ทผ, ์ด 1์‚ฌ์ดํด

N-way ๋ฑ…ํฌ ์ถฉ๋Œ

N๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ๋ฑ…ํฌ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์†Œ์— ์ ‘๊ทผํ•˜๋ฉด ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ ‘๊ทผ์„ ์ง๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค:

# 2-way conflict: stride-2 access pattern
shared[thread_idx.x * 2]  # Thread 0,16โ†’Bank 0; Thread 1,17โ†’Bank 1; etc.

๊ฒฐ๊ณผ: ๋ฑ…ํฌ๋‹น 2ํšŒ ์ ‘๊ทผ, ์ด 2์‚ฌ์ดํด (ํšจ์œจ 50%)

# Worst case: all threads access different addresses in Bank 0
shared[thread_idx.x * 32]  # All threadsโ†’Bank 0

๊ฒฐ๊ณผ: 32ํšŒ ์ง๋ ฌํ™”๋œ ์ ‘๊ทผ, ์ด 32์‚ฌ์ดํด (ํšจ์œจ 3%)

๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์˜ˆ์™ธ

์ถฉ๋Œ ๊ทœ์น™์—๋Š” ํ•œ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์˜ˆ์™ธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ ‘๊ทผ. ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ผํ•œ ์ฃผ์†Œ๋ฅผ ์ฝ์œผ๋ฉด ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ด๋ฅผ ๋‹จ์ผ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์œผ๋กœ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค:

# Broadcast: all threads read the same value
constant = shared[0]  # All threads read shared[0]

๊ฒฐ๊ณผ: 1ํšŒ ์ ‘๊ทผ์œผ๋กœ 32๊ฐœ ์Šค๋ ˆ๋“œ์— ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ, ์ด 1์‚ฌ์ดํด

์ด ์ตœ์ ํ™”๊ฐ€ ์กด์žฌํ•˜๋Š” ์ด์œ ๋Š” ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๊ฐ€ ํ”ํ•œ ํŒจํ„ด(์ƒ์ˆ˜ ๋กœ๋”ฉ, ๋ฆฌ๋•์…˜ ์—ฐ์‚ฐ ๋“ฑ)์ด๊ณ , ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ ์—†์ด ๋‹จ์ผ ๊ฐ’์„ ๋ชจ๋“  ์Šค๋ ˆ๋“œ์— ๋ณต์ œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฑ…ํฌ ์ถฉ๋Œ์ด ์ค‘์š”ํ•œ ์ด์œ 

์„ฑ๋Šฅ ์˜ํ–ฅ

๋ฑ…ํฌ ์ถฉ๋Œ์€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ๊ฐ„์„ ์ง์ ‘์ ์œผ๋กœ ๋ฐฐ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค:

์ถฉ๋Œ ์œ ํ˜•์ ‘๊ทผ ์‹œ๊ฐ„ํšจ์œจ์„ฑ๋Šฅ ์˜ํ–ฅ
์ถฉ๋Œ ์—†์Œ1์‚ฌ์ดํด100%๊ธฐ์ค€์„ 
2-way conflict2์‚ฌ์ดํด50%2๋ฐฐ ๋А๋ฆผ
4-way conflict4์‚ฌ์ดํด25%4๋ฐฐ ๋А๋ฆผ
32-way conflict32์‚ฌ์ดํด3%32๋ฐฐ ๋А๋ฆผ

์‹ค์ „ ๋งฅ๋ฝ

Puzzle 30์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํŒจํ„ด์ด ๊ทน์ ์ธ ์„ฑ๋Šฅ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๋ฑ…ํฌ ์ถฉ๋Œ์€ ์ด ์›๋ฆฌ๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ ๋ณ‘ํ•ฉ์ด DRAM ๋Œ€์—ญํญ ํ™œ์šฉ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ๋ฑ…ํฌ ์ถฉ๋Œ์€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์ฒ˜๋ฆฌ๋Ÿ‰์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ์ฐจ์ด๋Š” ๊ทœ๋ชจ์— ์žˆ์Šต๋‹ˆ๋‹ค: ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ ์ง€์—ฐ ์‹œ๊ฐ„์€ ์ˆ˜๋ฐฑ ์‚ฌ์ดํด์ด์ง€๋งŒ, ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์ถฉ๋Œ์€ ์ ‘๊ทผ๋‹น ๋ช‡ ์‚ฌ์ดํด๋งŒ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง‘์ค‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์—ฐ์‚ฐ ์ง‘์•ฝ์  ์ปค๋„์—์„œ๋Š” ์ด โ€œ๋ช‡ ์‚ฌ์ดํดโ€œ์ด ๋น ๋ฅด๊ฒŒ ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค.

์›Œํ”„ ์‹คํ–‰๊ณผ์˜ ๊ด€๊ณ„

Puzzle 24์—์„œ ์›Œํ”„๊ฐ€ SIMT(Single Instruction, Multiple Thread) ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์›Œํ”„๊ฐ€ ๋ฑ…ํฌ ์ถฉ๋Œ์— ๋ถ€๋”ชํžˆ๋ฉด ์ง๋ ฌํ™”๋œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ 32๊ฐœ ์Šค๋ ˆ๋“œ ๋ชจ๋‘๊ฐ€ ๋Œ€๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„์€ ์ถฉ๋Œ์„ ์ผ์œผํ‚จ ์Šค๋ ˆ๋“œ๋งŒ์ด ์•„๋‹ˆ๋ผ ์›Œํ”„ ์ „์ฒด์˜ ์ง„ํ–‰์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

์ด๋Š” Puzzle 31์˜ ์ ์œ ์œจ ๊ฐœ๋…๊ณผ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค: ๋ฑ…ํฌ ์ถฉ๋Œ์€ ์›Œํ”„๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ง€์—ฐ ์‹œ๊ฐ„์„ ํšจ๊ณผ์ ์œผ๋กœ ์ˆจ๊ธฐ๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•˜์—ฌ, ๋†’์€ ์ ์œ ์œจ์˜ ์‹ค์งˆ์ ์ธ ์ด์ ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฑ…ํฌ ์ถฉ๋Œ ๊ฐ์ง€ํ•˜๊ธฐ

์‹œ๊ฐ์  ํŒจํ„ด ์ธ์‹

์ ‘๊ทผ ํŒจํ„ด์„ ๋ถ„์„ํ•˜๋ฉด ๋ฑ…ํฌ ์ถฉ๋Œ์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค:

์ˆœ์ฐจ ์ ‘๊ทผ (์ถฉ๋Œ ์—†์Œ):

# Thread ID:  0  1  2  3  ...  31
# Address:    0  4  8 12  ... 124
# Bank:       0  1  2  3  ...  31  โœ… All different banks

Stride-2 ์ ‘๊ทผ (2-way conflict):

# Thread ID:  0  1  2  3  ...  15 16 17 18 ... 31
# Address:    0  8 16 24  ... 120  4 12 20 ... 124
# Bank:       0  2  4  6  ...  30  1  3  5 ...  31
# Conflict:   Banks 0,2,4... have 2 threads each  โŒ

Stride-32 ์ ‘๊ทผ (32-way conflict):

# Thread ID:  0   1   2   3  ...  31
# Address:    0  128 256 384 ... 3968
# Bank:       0   0   0   0  ...   0  โŒ All threadsโ†’Bank 0

NSight Compute(ncu)๋ฅผ ์‚ฌ์šฉํ•œ ํ”„๋กœํŒŒ์ผ๋ง

Puzzle 30์—์„œ ๋ฐฐ์šด ํ”„๋กœํŒŒ์ผ๋ง ๋ฐฉ๋ฒ•๋ก ์„ ๋ฐ”ํƒ•์œผ๋กœ, ๋ฑ…ํฌ ์ถฉ๋Œ์„ ์ •๋Ÿ‰์ ์œผ๋กœ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# Key metrics for shared memory bank conflicts
ncu --metrics=l1tex__data_bank_conflicts_pipe_lsu_mem_shared_op_ld,l1tex__data_bank_conflicts_pipe_lsu_mem_shared_op_st your_kernel

# Additional context metrics
ncu --metrics=smsp__sass_average_branch_targets_threads_uniform.pct your_kernel
ncu --metrics=smsp__warps_issue_stalled_membar_per_warp_active.pct your_kernel

l1tex__data_bank_conflicts_pipe_lsu_mem_shared_op_ld์™€ l1tex__data_bank_conflicts_pipe_lsu_mem_shared_op_st ๋ฉ”ํŠธ๋ฆญ์€ ์ปค๋„ ์‹คํ–‰ ์ค‘ ๋กœ๋“œ ๋ฐ ์Šคํ† ์–ด ์—ฐ์‚ฐ์˜ ๋ฑ…ํฌ ์ถฉ๋Œ ํšŸ์ˆ˜๋ฅผ ์ง์ ‘ ์นด์šดํŠธํ•ฉ๋‹ˆ๋‹ค. ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํšŸ์ˆ˜์™€ ๊ฒฐํ•ฉํ•˜๋ฉด ์ถฉ๋Œ ๋น„์œจ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ•ต์‹ฌ์ ์ธ ์„ฑ๋Šฅ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.

๋ฑ…ํฌ ์ถฉ๋Œ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ

์—ฐ์‚ฐ ์ง‘์•ฝ์  ์ปค๋„

๋ฑ…ํฌ ์ถฉ๋Œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ปค๋„์—์„œ ๊ฐ€์žฅ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค:

  • ํƒ€์ดํŠธํ•œ ๋ฃจํ”„ ์•ˆ์—์„œ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์— ์ž์ฃผ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ
  • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ๋‹น ์—ฐ์‚ฐ๋Ÿ‰์ด ์ ์€ ๊ฒฝ์šฐ
  • ์ปค๋„์ด ๋ฉ”๋ชจ๋ฆฌ ๋ฐ”์šด๋“œ๊ฐ€ ์•„๋‹Œ ์—ฐ์‚ฐ ๋ฐ”์šด๋“œ์ธ ๊ฒฝ์šฐ

๋Œ€ํ‘œ์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค:

  • ํ–‰๋ ฌ ๊ณฑ์…ˆ ๋‚ด๋ถ€ ๋ฃจํ”„ (Puzzle 16์˜ ํƒ€์ผ๋ง ๋ฒ„์ „๊ณผ ๊ฐ™์€)
  • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์Šคํ…์‹ค ์—ฐ์‚ฐ
  • ๋ณ‘๋ ฌ ๋ฆฌ๋•์…˜ ์—ฐ์‚ฐ

๋ฉ”๋ชจ๋ฆฌ ๋ฐ”์šด๋“œ vs ์—ฐ์‚ฐ ๋ฐ”์šด๋“œ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

Puzzle 31์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ”์šด๋“œ ์›Œํฌ๋กœ๋“œ์—์„œ๋Š” ์ ์œ ์œจ์ด ๋œ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์•˜๋“ฏ์ด, ์ปค๋„์ด ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ์— ๋ณ‘๋ชฉ์ด ๊ฑธ๋ฆฌ๊ฑฐ๋‚˜ ์‚ฐ์ˆ  ๊ฐ•๋„๊ฐ€ ๋งค์šฐ ๋‚ฎ์€ ๊ฒฝ์šฐ์—๋Š” ๋ฑ…ํฌ ์ถฉ๋Œ์˜ ์˜ํ–ฅ๋„ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋งŽ์€ ์ปค๋„์€ ๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ”์šด๋“œ์—์„œ ์—ฐ์‚ฐ ๋ฐ”์šด๋“œ๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋ฑ…ํฌ ์ถฉ๋Œ์€ ์• ์ดˆ์— ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋„์ž…ํ•œ ์ด์œ ์˜€๋˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋‹ฌ์„ฑํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ์˜ ๋ฐฉํ–ฅ

๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ฑ…ํ‚น์„ ์ดํ•ดํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์ดˆ๋ฅผ ๊ฐ–์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:

  1. ์ ‘๊ทผ ํŒจํ„ด์„ ๋ถ„์„ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ์„ฑ๋Šฅ์„ ์˜ˆ์ธก
  2. ์ฒด๊ณ„์ ์ธ ํ”„๋กœํŒŒ์ผ๋ง ์ ‘๊ทผ๋ฒ•์œผ๋กœ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ง„๋‹จ
  3. ๋†’์€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์œ ์ง€ํ•˜๋Š” ์ถฉ๋Œ ์—†๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„
  4. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„์™€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ ์‚ฌ์ด์˜ ๊ท ํ˜• ์žกํžŒ ํŒ๋‹จ

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์ด ์ง€์‹์„ ์‹ค์Šต์— ์ ์šฉํ•˜์—ฌ ์ผ๋ฐ˜์ ์ธ ์ถฉ๋Œ ํŒจํ„ด๊ณผ ํ•ด๊ฒฐ์ฑ…์„ ์ง์ ‘ ๋‹ค๋ค„๋ด…๋‹ˆ๋‹ค - ์ด๋ก ์  ์ดํ•ด๋ฅผ ์‹ค์ „ ์ตœ์ ํ™” ์—ญ๋Ÿ‰์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.