--- id: [[P-Reinforce|P-Reinforce]]-AUTO-035B08 category: "10_Wiki/๐Ÿ’ก Topics/Graphics & Performance" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - GPU_[[WebGL|WebGL]] ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ฏธ์„ธ ์ง€์—ฐ(Micro-latency) ์ธก์ • ์‚ฌ๋ก€" --- # [[GPU_WebGL แ„‘แ…กแ„‹แ…ตแ„‘แ…ณแ„…แ…กแ„‹แ…ตแ†ซแ„‹แ…ด แ„†แ…ตแ„‰แ…ฆ แ„Œแ…ตแ„‹แ…งแ†ซ(Micro-latency) แ„Žแ…ณแ†จแ„Œแ…ฅแ†ผ แ„‰แ…กแ„…แ…จ|GPU_WebGL ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ฏธ์„ธ ์ง€์—ฐ(Micro-latency) ์ธก์ • ์‚ฌ๋ก€]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > GPU/WebGL ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ฏธ์„ธ ์ง€์—ฐ(Micro-latency)์€ CPU, GPU ๋ฐ ๋ธŒ๋ผ์šฐ์ € ์ถ”์ƒํ™” ๊ณ„์ธต ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์„œ๋ธŒ ํ”„๋ ˆ์ž„(Sub-frame) ์ˆ˜์ค€์˜ ์‹œ๊ฐ„ ์ง€์—ฐ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ๋ชฐ์ž…๋„๋ฅผ ์ €ํ•˜์‹œํ‚ค๋Š” ์ฃผ์š” ์›์ธ์ž…๋‹ˆ๋‹ค [1]. ์ด๋ฅผ ์ •ํ™•ํžˆ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•ด WebGL/[[WebGPU|WebGPU]]์˜ ํƒ€์ด๋จธ API, ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์˜ ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ, ๊ทธ๋ฆฌ๊ณ  ๊ณ ์† ์นด๋ฉ”๋ผ์™€ ์˜ค์‹ค๋กœ์Šค์ฝ”ํ”„๋ฅผ ํ™œ์šฉํ•œ ํ•˜๋“œ์›จ์–ด ๊ธฐ๋ฐ˜ ์ธก์ • ๋“ฑ ๋‹ค์–‘ํ•œ ์ ‘๊ทผ๋ฒ•์ด ํ™œ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [2-6]. ๊ทธ๋Ÿฌ๋‚˜ ๋ณด์•ˆ ์ทจ์•ฝ์ (Spectre, Meltdown ๋“ฑ)์œผ๋กœ ์ธํ•ด ์ •๋ฐ€ํ•œ ์‹œ๊ฐ„ ์ธก์ • ๊ธฐ๋Šฅ์ด ๋ธŒ๋ผ์šฐ์ € ์ฐจ์›์—์„œ ์–‘์žํ™”([[Quantization|Quantization]])๋˜๊ฑฐ๋‚˜ ์ œํ•œ๋˜๋Š” ๋“ฑ ์—ฌ๋Ÿฌ ์ธก์ • ์ƒ์˜ ์ œ์•ฝ์ด ๋”ฐ๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [3, 7]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **API ์ˆ˜์ค€์˜ ๊ทธ๋ž˜ํ”ฝ ํƒ€์ด๋จธ ์ธก์ • (API-Level Timing)** * **WebGL ํƒ€์ด๋จธ ์ฟผ๋ฆฌ:** `EXT_disjoint_timer_query` ํ™•์žฅ์€ ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์„ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ณ  GPU ๋ช…๋ น์–ด ์„ธํŠธ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [2, 8]. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ณ ์ •๋ฐ€ ํƒ€์ด๋จธ๊ฐ€ Spectre ๋ฐ Meltdown๊ณผ ๊ฐ™์€ ์บ์‹œ ๋ถ€์ฑ„๋„ ๊ณต๊ฒฉ([[Side-channel Attack|Side-channel Attack]]s)์— ์•…์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ณด์•ˆ ์—ฐ๊ตฌ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ, ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ € ๋ฒค๋”๋Š” ํ•ด๋‹น ํ™•์žฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ํ•ด์ƒ๋„๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ์–‘์žํ™”(Quantization)ํ•˜์˜€์Šต๋‹ˆ๋‹ค [2, 3, 9-11]. * **WebGPU ํƒ€์ž„์Šคํƒฌํ”„ ์ฟผ๋ฆฌ:** WebGPU๋Š” `timestamp-query` ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋‚˜๋…ธ์ดˆ ๋‹จ์œ„์˜ ์ •๋ฐ€ํ•œ ์ธก์ •์„ ์ง€์›ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค [3, 12]. ํ•˜์ง€๋งŒ ์—ญ์‹œ ํƒ€์ด๋ฐ ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์ดํŠธ ๊ฒฉ๋ฆฌ(Site isolation) ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํƒ€์ž„์Šคํƒฌํ”„์˜ ํ•ด์ƒ๋„๊ฐ€ 100 ๋งˆ์ดํฌ๋กœ์ดˆ ์ˆ˜์ค€์œผ๋กœ ์–‘์žํ™”๋˜๊ฑฐ๋‚˜ ๋น„๊ฒฉ๋ฆฌ ์ปจํ…์ŠคํŠธ์—์„œ๋Š” ์•„์˜ˆ ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š” ๋ณด์•ˆ ์กฐ์น˜๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [3, 7, 13, 14]. ๊ฐœ๋ฐœ์ž๋Š” ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๋ธŒ๋ผ์šฐ์ € ํ”Œ๋ž˜๊ทธ(`enable-webgpu-developer-features`)๋ฅผ ์ผœ์„œ ์ด๋Ÿฌํ•œ ์ œํ•œ์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 15]. * **๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€ ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ ([[Browser|Browser]]-Internal Profiling)** * **[[Chrome DevTools|Chrome DevTools]] (Performance ํŒจ๋„):** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋Ÿฐํƒ€์ž„ ํŠธ๋ ˆ์ด์Šค๋ฅผ ์บก์ฒ˜ํ•˜์—ฌ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ์ฐจ๋‹จ ๋ฐ ํ”„๋ ˆ์ž„ ๋“œ๋กญ์„ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [16]. CPU ์Šค๋กœํ‹€๋ง(Throttling) ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ณ ์‚ฌ์–‘ ๊ธฐ๊ธฐ์—์„œ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์˜ ์„ฑ๋Šฅ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•จ์œผ๋กœ์จ, ๊ฐ•๋ ฅํ•œ ํ•˜๋“œ์›จ์–ด ์„ฑ๋Šฅ์— ๊ฐ€๋ ค์ ธ ์žˆ๋˜ ๋ฏธ์„ธ ์ง€์—ฐ์„ ๋“œ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 16]. * **[[Chrome|Chrome]] Tracing (`about:tracing`):** ๋ธŒ๋ผ์šฐ์ €์˜ ๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "CrGpuMain"๊ณผ "CrRendererMain" ์Šค๋ ˆ๋“œ์˜ ํ™œ์„ฑ ์ƒํƒœ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์‹œ์Šคํ…œ์ด CPU ๋ฐ”์šด๋“œ์ธ์ง€ GPU ๋ฐ”์šด๋“œ์ธ์ง€ ํŒ๋ณ„ํ•˜๋ฉฐ, ๊ธด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์ฃผ๊ธฐ๋‚˜ ๋„คํŠธ์›Œํฌ ๋Œ€๊ธฐ ๋“ฑ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์œ ํœด ์‹œ๊ฐ„(Idle-time) ๋ฏธ์„ธ ์ง€์—ฐ์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [4, 17-19]. * **ํ•˜๋“œ์›จ์–ด ์ง€์› ์ธก์ • ๋ฐฉ์‹ ([[Hardware|Hardware]]-Assisted Latency Measurement)** * ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ๋ฐ˜์˜ ์ธก์ •์€ ๋””์Šคํ”Œ๋ ˆ์ด ์ปจํŠธ๋กค๋Ÿฌ๋‚˜ ๋ฌผ๋ฆฌ์  ๋ชจ๋‹ˆํ„ฐ ์ž์ฒด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ง€์—ฐ์„ ํฌ์ฐฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๋งค์šฐ ์ •๋ฐ€ํ•œ ์—ฐ๊ตฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” ํ•˜๋“œ์›จ์–ด ๋ณด์กฐ ๊ธฐ๋ฒ•์ด ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค [5]. * **๊ณ ์† ์นด๋ฉ”๋ผ ๊ธฐ๋ฒ•:** 1000Hz(๋ฐ€๋ฆฌ์ดˆ๋‹น 1ํ”„๋ ˆ์ž„)๋กœ ๋…นํ™”ํ•˜๋Š” ๊ณ ์† ์นด๋ฉ”๋ผ์™€ LED ์ž…๋ ฅ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๋ฒ„ํŠผ ํด๋ฆญ๋ถ€ํ„ฐ ๋””์Šคํ”Œ๋ ˆ์ด์— ์‹œ๊ฐ์  ๋ณ€ํ™”๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ธฐ๊นŒ์ง€์˜ ์ „์ฒด "์ž…๋ ฅ ๋Œ€ ๋””์Šคํ”Œ๋ ˆ์ด(Input-to-Display)" ์ง€์—ฐ์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค [5]. * **์˜ค์‹ค๋กœ์Šค์ฝ”ํ”„์™€ ํฌํ† ๋‹ค์ด์˜ค๋“œ:** ๋ชจ๋‹ˆํ„ฐ์— ๋ถ€์ฐฉํ•œ ํฌํ† ๋‹ค์ด์˜ค๋“œ๋กœ ์‹œ๊ฐ์  ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ๋น›์˜ ๊ฐ•๋„ ๋ณ€ํ™”๋ฅผ ์ „์•• ์ŠคํŒŒ์ดํฌ๋กœ ๊ฐ์ง€ํ•˜๊ณ , ์ด๋ฅผ ์ž…๋ ฅ ์žฅ์น˜์˜ ์ „๊ธฐ ์‹ ํ˜ธ์™€ ์˜ค์‹ค๋กœ์Šค์ฝ”ํ”„์—์„œ ๋น„๊ตํ•˜์—ฌ ๋ฐ€๋ฆฌ์ดˆ ๋ฏธ๋งŒ์˜ ์ •๋ฐ€๋„๋กœ ์ข…๋‹จ ๊ฐ„ ์ง€์—ฐ์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค [6]. * **์šด์˜ ์ฒด์ œ ๋ฐ ๋“œ๋ผ์ด๋ฒ„ ์ˆ˜์ค€์˜ ๋ฏธ์„ธ ์ง€์—ฐ ์˜ค๋ฒ„ํ—ค๋“œ** * **์ปจํ…์ŠคํŠธ ์ƒ์„ฑ ์ง€์—ฐ (Context Creation Latency):** WebGL/WebGPU ์ปจํ…์ŠคํŠธ ์ƒ์„ฑ์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ OS ๊ทธ๋ž˜ํ”ฝ ์Šคํƒ๊ณผ ์ง์ ‘ ์†Œํ†ตํ•ด์•ผ ํ•˜๋Š” ๋™๊ธฐ์‹ ์ž‘์—…์œผ๋กœ ๋“œ๋ผ์ด๋ฒ„์— ๋”ฐ๋ผ ์‹ฌ๊ฐํ•œ ์ง€์—ฐ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: Mesa 50ms, NVIDIA 120ms, FGLRX 200ms) ์ด๋Š” ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ๊ฐ€์‹œ์ ์ธ ํ”„๋ฆฌ์ง•์„ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค [20-22]. * **[[ANGLE|ANGLE]] ๋ณ€ํ™˜ ์˜ค๋ฒ„ํ—ค๋“œ:** Windows ํ”Œ๋žซํผ์—์„œ๋Š” WebGL์˜ OpenGL ES ํ˜ธ์ถœ์„ Direct3D๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ANGLE ๊ณ„์ธต์„ ๊ฑฐ์น˜๋ฉฐ, ๋“œ๋กœ์šฐ ์ฝœ([[Draw Call|Draw Call]])๋งˆ๋‹ค ๋ช‡ ๋งˆ์ดํฌ๋กœ์ดˆ์˜ ๋ฏธ์„ธ ์ง€์—ฐ์ด ๋ถ€๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ด ์ง€์—ฐ์€ ์ˆ˜์ฒœ ๋ฒˆ์˜ ๋“œ๋กœ์šฐ ์ฝœ์ด ๋ฐœ์ƒํ•˜๋Š” ์”ฌ์—์„œ ๋ˆ„์ ๋˜์–ด GPU๊ฐ€ ์—ฌ์œ ๋กœ์šด ์ƒํ™ฉ์—์„œ๋„ CPU ๋ณ‘๋ชฉ(Bottleneck) ํ˜„์ƒ์„ ์ผ์œผํ‚ต๋‹ˆ๋‹ค [21, 23, 24]. * **[[JavaScript|JavaScript]] ์šฐํšŒ ์ธก์ • ๋ฐฉ๋ฒ•** * ์ผ๋ถ€ ๋ธŒ๋ผ์šฐ์ €(์˜ˆ: Chrome)์—์„œ๋Š” ์„ฑ๋Šฅ ๋ฐ ๊ตฌ์กฐ์ƒ์˜ ์ด์œ ๋กœ `gl.finish()`๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ `gl.flush()`๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ Œ๋”๋ง ์ง€์—ฐ์„ ์ง์ ‘ ์ธก์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค [11]. ์ด๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด `gl.readPixels()`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ํ”ฝ์…€์„ ๊ฐ•์ œ๋กœ ์ฝ์–ด ๋ชจ๋“  ๊ทธ๋ž˜ํ”ฝ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง€์—ฐ์‹œํ‚ค๊ณ  ๋™๊ธฐํ™”ํ•œ ๋’ค, ๊ทธ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ `performance.now()`๋กœ ์ธก์ • ๋ฐ ์ฐจ๊ฐํ•˜์—ฌ ์‹ค์ œ ์ž‘์—…์˜ ๋ Œ๋”๋ง ์‹œ๊ฐ„์„ ์ถ”์ •ํ•˜๋Š” ๊ธฐ๋ฒ•์ด ํ™œ์šฉ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค [25, 26]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Spectre and Meltdown|Spectre and Meltdown]], WebGPU [[Timestamp Queries|Timestamp Queries]], EXT_disjoint_timer_query - **Projects/Contexts:** Chrome DevTools [[Performance Panel|Performance Panel]], [[ANGLE (Almost Native Graphics Layer Engine)|ANGLE (Almost Native Graphics Layer Engine]] - **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด WebGL์˜ `gl.finish()` ํ•จ์ˆ˜๋Š” ๋ณธ๋ž˜ GPU ํŒŒ์ดํ”„๋ผ์ธ์˜ ์‹คํ–‰ ์™„๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ธฐ๋Šฅ์ด๋‚˜, Chrome์—์„œ๋Š” `gl.flush()`๋กœ ๋ณ„์นญ(alias) ์ง€์ •๋˜์–ด ์žˆ์–ด, ์ด๋ฅผ ์‚ฌ์šฉํ•ด ์‹ค์ œ ๋ Œ๋”๋ง ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋ ค๋Š” ์‹œ๋„๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [11, 27]. ๋˜ํ•œ `EXT_disjoint_timer_query` ํ™•์žฅ์ด๋‚˜ `performance.now()` ๋“ฑ์˜ ๋„๊ตฌ ์—ญ์‹œ ๊ฐ๊ฐ ๋ณด์•ˆ ๋ฌธ์ œ(์บ์‹œ ๊ธฐ๋ฐ˜ ์ •๋ณด ์œ ์ถœ) ๋ฐ ์ œํ•œ์ ์ธ ๋ Œ๋”๋ง ์กฐ๊ฑด ํƒ“์— ์ˆœ์ˆ˜ํ•˜๊ณ  ์™„๋ฒฝํ•œ ๋ฏธ์„ธ ์ง€์—ฐ ์ธก์ • ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [3, 11, 28]. --- *Last updated: 2026-04-19* ---