๐Ÿ  ํ™ˆ
๋ฒค์น˜๋งˆํฌ
๐Ÿ“Š ๋ชจ๋“  ๋ฒค์น˜๋งˆํฌ ๐Ÿฆ– ๊ณต๋ฃก v1 ๐Ÿฆ– ๊ณต๋ฃก v2 โœ… ํ•  ์ผ ๋ชฉ๋ก ์•ฑ ๐ŸŽจ ์ฐฝ์˜์ ์ธ ์ž์œ  ํŽ˜์ด์ง€ ๐ŸŽฏ FSACB - ๊ถ๊ทน์˜ ์‡ผ์ผ€์ด์Šค ๐ŸŒ ๋ฒˆ์—ญ ๋ฒค์น˜๋งˆํฌ
๋ชจ๋ธ
๐Ÿ† ํ†ฑ 10 ๋ชจ๋ธ ๐Ÿ†“ ๋ฌด๋ฃŒ ๋ชจ๋ธ ๐Ÿ“‹ ๋ชจ๋“  ๋ชจ๋ธ โš™๏ธ ํ‚ฌ๋กœ ์ฝ”๋“œ ๋ชจ๋“œ
๋ฆฌ์†Œ์Šค
๐Ÿ’ฌ ํ”„๋กฌํ”„ํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๐Ÿ“– AI ์šฉ์–ด ์‚ฌ์ „ ๐Ÿ”— ์œ ์šฉํ•œ ๋งํฌ
โ† ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Cฦก bแบฃn

๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ถ„์‚ฐ ์บ์‹ฑ ์ „๋žต ์ตœ์ ํ™”

#distributed systems #caching #redis #scalability #architecture

์ดˆ๋‹น ์ˆ˜๋ฐฑ๋งŒ ๊ฑด์˜ ์š”์ฒญ(RPS)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ Redis ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋กœ์ปฌ ์บ์‹œ๋ฅผ ๊ฒฐํ•ฉํ•œ ๋ฉ€ํ‹ฐ ๋ ˆ๋ฒจ ์บ์‹ฑ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ๊ณผ ์บ์‹œ ์Šคํƒฌํ”ผ๋“œ(Cache Stampede) ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ์•ˆํ•˜์‹ญ์‹œ์˜ค.

๋Œ€๊ทœ๋ชจ ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ์˜ ์ƒํ’ˆ ์กฐํšŒ ์„œ๋น„์Šค๋ฅผ ์„ค๊ณ„ ์ค‘์ž…๋‹ˆ๋‹ค. ์ƒํ’ˆ ์ •๋ณด๋Š” ๊ฐฑ์‹ ์ด ๋นˆ๋ฒˆํ•˜์ง€ ์•Š์œผ๋‚˜ ์กฐํšŒ ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋Š” ์ด๋ฒคํŠธ ์‹œ๊ฐ„๋Œ€์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜๋ฅผ ๊ฒฌ๋””๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ ์บ์‹œ(Caffeine)์™€ ๋ถ„์‚ฐ ์บ์‹œ(Redis Cluster)๋ฅผ ํ™œ์šฉํ•œ ๋ฉ€ํ‹ฐ ๋ ˆ๋ฒจ ์บ์‹ฑ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์ธก๋ฉด์— ๋Œ€ํ•ด ๊ตฌ์ฒด์ ์ธ ์ตœ์ ํ™” ๋ฐฉ์•ˆ์„ ์„œ์ˆ ํ•˜์‹ญ์‹œ์˜ค. 1. **Look-aside vs Write-through ํŒจํ„ด ์„ ํƒ**: ๋†’์€ ๋™์‹œ์„ฑ ์ƒํ™ฉ์—์„œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์บ์‹œ ์ „๋žต์€ ๋ฌด์—‡์ด๋ฉฐ, ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 2. **์บ์‹œ ์Šคํƒฌํ”ผ๋“œ ๋ฐฉ์ง€**: ํŠน์ • ์ธ๊ธฐ ์ƒํ’ˆ์˜ ์บ์‹œ๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ์„ ๋•Œ, ์ˆ˜๋งŒ ๊ฐœ์˜ ์š”์ฒญ์ด ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ชฐ๋ฆฌ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฝ(Lock) ๋น„๊ต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋˜์€ ํ™•๋ฅ ์  ๊ฐฑ์‹ (Probabilistic Early Expiration) ๊ธฐ๋ฒ•์„ ์„ค๊ณ„ํ•˜์‹ญ์‹œ์˜ค. 3. **๋ถ„์‚ฐ ์บ์‹œ ํŒŒํ‹ฐ์…”๋‹ ๋ฐ ์žฅ์•  ์กฐ์น˜**: Redis Cluster์˜ Slot ๋ถ„๋ฐฐ๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ํ•ซ์ŠคํŒŸ(Hotspot) ํ‚ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ํŠน์ • ์ƒค๋“œ ์žฅ์•  ์‹œ์˜ ์ž๋™ ์žฅ์•  ์กฐ์น˜(Failover) ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์บ์‹œ ๋ˆ„๋ฝ(Cache Miss) ํญ์ฆ์„ ์™„ํ™”ํ•˜๋Š” ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•˜์‹ญ์‹œ์˜ค.
Trung bรฌnh

๊ณ ์„ฑ๋Šฅ GPU ์ปค๋„์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค ๋ณ‘ํ•ฉ ์ตœ์ ํ™”

#cuda #gpu computing #memory optimization #parallel computing #hpc

CUDA ํ™˜๊ฒฝ์—์„œ ๋Œ€๊ทœ๋ชจ ํ–‰๋ ฌ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, ๊ธ€๋กœ๋ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค ํŒจํ„ด์„ ์ตœ์ ํ™”ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ํ•ด์†Œํ•˜๊ณ  ์›Œํ”„(Warp) ๋‚ด์˜ ๋ฉ”๋ชจ๋ฆฌ ํŠธ๋žœ์žญ์…˜ ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ถ„์„ํ•˜์‹ญ์‹œ์˜ค.

NVIDIA GPU ์•„ํ‚คํ…์ฒ˜(์˜ˆ: Ampere ๋˜๋Š” Hopper)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ์†Œ ํ–‰๋ ฌ-๋ฐ€์ง‘ ํ–‰๋ ฌ ๊ณฑ์…ˆ(SpMM) ์—ฐ์‚ฐ์„ ์ตœ์ ํ™”ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ตฌํ˜„๋œ ์ปค๋„์˜ ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง ๊ฒฐ๊ณผ, ๊ธ€๋กœ๋ฒŒ ๋ฉ”๋ชจ๋ฆฌ ๋กœ๋“œ/์Šคํ† ์–ด ๋ช…๋ น์–ด์˜ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์ „์ฒด ์‹คํ–‰ ์‹œ๊ฐ„์˜ 70% ์ด์ƒ์„ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•˜์—ฌ ์ปค๋„ ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ์ „๋žต์„ ์ œ์‹œํ•˜์‹ญ์‹œ์˜ค. 1. **Coalesced Access ๊ตฌํ˜„**: ๋ถˆ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š” ํฌ์†Œ ํ–‰๋ ฌ์˜ ์›์†Œ์— ์ ‘๊ทผํ•  ๋•Œ, ์“ฐ๋ ˆ๋“œ ๋ธ”๋ก๊ณผ ์›Œํ”„์˜ ์Šค๋ ˆ๋“œ ๋ฐฐ์น˜๋ฅผ ์žฌ์กฐ์ •ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค๋ฅผ ๋ณ‘ํ•ฉ(Coalescing)ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๊ณ„ํ•˜์‹ญ์‹œ์˜ค. 2. **Shared Memory ํ™œ์šฉ**: ์ž์ฃผ ์ฐธ์กฐ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Shared Memory์— ๋กœ๋“œํ•˜์—ฌ ๊ธ€๋กœ๋ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋Š” Tiling ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๊ณ , Shared Memory ๋ฑ…ํฌ ์ถฉ๋Œ(Bank Conflict)์„ ํ”ผํ•˜๋Š” ์ธ๋ฑ์‹ฑ ๋ฐฉ์‹์„ ์ œ์‹œํ•˜์‹ญ์‹œ์˜ค. 3. **๋ฒกํ„ฐํ™”๋œ ๋ฉ”๋ชจ๋ฆฌ ๋กœ๋“œ**: `float4` ๋˜๋Š” `ldg` ๋ช…๋ น์–ด์™€ ๊ฐ™์€ ๋ฒกํ„ฐํ™”๋œ ๋กœ๋“œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น์–ด ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ณ  ๋Œ€์—ญํญ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋น„๊ต ๋ถ„์„ํ•˜์‹ญ์‹œ์˜ค.
Cฦก bแบฃn

Python ๋ฐ˜๋ณต๋ฌธ ์†๋„ ๊ฐœ์„ 

#python #data #refactoring

๋ฒกํ„ฐํ™” ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์„ ๋†’์ž…๋‹ˆ๋‹ค.

์ค‘์ฒฉ๋œ for ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์šฉ๋Ÿ‰ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ์กด Python ์ฝ”๋“œ๋ฅผ Pandas์˜ ๋ฒกํ„ฐํ™” ์—ฐ์‚ฐ์ด๋‚˜ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜(List Comprehension)์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์‹คํ–‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค์‹ญ์‹œ์˜ค.
Trung bรฌnh

ํ™˜๊ฒฝ์  ์Šคํ† ๋ฆฌํ…”๋ง ๊ธฐ๋ฒ•

#์Šคํ† ๋ฆฌํ…”๋ง #๋ ˆ๋ฒจ ๋””์ž์ธ #๋ชฐ์ž…๊ฐ

๋Œ€์‚ฌ ์—†์ด ํ™˜๊ฒฝ๊ณผ ๋ฐฐ๊ฒฝ์„ ํ†ตํ•ด ์„œ์‚ฌ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณ ๊ธ‰ ์Šคํ† ๋ฆฌํ…”๋ง ๊ธฐ๋ฒ•์„ ์—ฐ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ๋‚˜ ์Œ์„ฑ ๋Œ€ํ™”๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์˜ค์ง ํ™˜๊ฒฝ(Environmental Storytelling)๋งŒ์œผ๋กœ ๊ณผ๊ฑฐ์— ์ผ์–ด๋‚œ ์ฐธ์‚ฌ์˜ ์ง„์‹ค์„ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” 3D ๋ ˆ๋ฒจ ๋””์ž์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค. ์กฐ๋ช…, ์•„์ดํ…œ ๋ฐฐ์น˜, ๊ฑด์ถ• ์–‘์‹์˜ ๋ณ€ํ™”, ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ๊ฒฝ ์‚ฌ์šด๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹œ๊ฐ„์˜ ํ๋ฆ„๊ณผ ์‚ฌ๊ฑด์˜ ๋ฐœ๋‹ฌ ๊ณผ์ •์„ ์•”์‹œํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ๋ฅผ 5๊ฐ€์ง€ ์ด์ƒ ํฌํ•จํ•˜์—ฌ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค.
Khรณ

๊ฒฝ์Ÿ ๊ฒŒ์ž„์˜ ๊ฑฐ์‹œ์  ์ „๋žต(Macro) ๋ถ„์„

#e์Šคํฌ์ธ  #์ „๋žต #๋ถ„์„

MOBA๋‚˜ RTS ๊ฒŒ์ž„์—์„œ์˜ ๊ณ ๊ธ‰ ์ „๋žต์  ์‚ฌ๊ณ ์™€ ๋งต ๋ฆฌ๋”ฉ ๋Šฅ๋ ฅ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • MOBA ๊ฒŒ์ž„์„ ๋Œ€์ƒ์œผ๋กœ, '๊ฒฝํ—˜์น˜ ๋ฐ ๊ณจ๋“œ ์ˆ˜์ต์˜ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ๋งต ๋ฆฌ๋”ฉ(Map Reading)' ๋ฐฉ์‹์— ๋Œ€ํ•ด ์‹ฌ๋„ ์žˆ๋Š” ๋ถ„์„๊ธ€์„ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค. ์ดˆ๋ฐ˜ ๋ผ์ธ์ „ ๋‹จ๊ณ„์—์„œ ์ •๊ธ€๋Ÿฌ์˜ ๊ฐฑํ‚น ๋ฃจํŠธ๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๋ฐฉ๋ฒ•, ์˜ค๋ธŒ์ ํŠธ(๋“œ๋ž˜๊ณค/๋ฐ”๋ก  ๋“ฑ) ์‹ธ์›€ ์ „์˜ ์Šค์™‘(Swap) ์ „๋žต, ๊ทธ๋ฆฌ๊ณ  ์ƒ๋Œ€์˜ ์‹œ์•ผ๋ฅผ ๊ต๋ž€ํ•˜์—ฌ ๊ฒฝ์ œ์  ์šฐ์œ„๋ฅผ ์ ํ•˜๋Š” '๊ฑฐ์‹œ์  ์šด์˜(Macro Management)'์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์„œ์ˆ ํ•˜์‹ญ์‹œ์˜ค.
์ดˆ๊ธ‰

๋‚˜๋งŒ์˜ ํ‹ˆ์ƒˆ ์‹œ์žฅ ์ฐพ๊ธฐ

#์ฐฝ์—… #์•„์ด๋””์–ด ๋ฐœ์ƒ #์‹œ์žฅ ๋ถ„์„

๋‹น์‹ ์˜ ๊ด€์‹ฌ์‚ฌ์™€ ์ „๋ฌธ์„ฑ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ˆ˜์ต์„ฑ ์žˆ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์•„์ด๋””์–ด๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ํ‰์†Œ ํฅ๋ฏธ๋ฅผ ๋А๋ผ๋Š” ์ฃผ์ œ 3๊ฐ€์ง€๋ฅผ ๋‚˜์—ดํ•ด ๋ณด์„ธ์š”. ๊ฐ ์ฃผ์ œ์— ๋Œ€ํ•ด ์‚ฌ๋žŒ๋“ค์ด ๊ฒช๋Š” ํ”ํ•œ ๋ฌธ์ œ์  ํ•˜๋‚˜์”ฉ ์ฐพ์•„๋ณด๊ณ , ๊ทธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ฐฝ์—… ์•„์ด๋””์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ œ์•ˆํ•ด ์ฃผ์„ธ์š”. ์ด ์•„์ด๋””์–ด๊ฐ€ ๊ธฐ์กด ์‹œ์žฅ๊ณผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•ด ๋ณด์„ธ์š”.