Runtime: ๊ณ„์ธตํ˜• JIT ๋„์ž…

์— ๋งŒ๋“  2016๋…„ 04์›” 14์ผ  ยท  63์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dotnet/runtime

.NET JIT๊ฐ€ ๊ณ„์ธตํ™”๋˜์ง€ ์•Š์€ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

JIT์—๋Š” ๋น ๋ฅธ ์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ๋†’์€ ์ •์ƒ ์ƒํƒœ ์ฒ˜๋ฆฌ๋Ÿ‰์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์„ค๊ณ„ ๋ชฉํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ์ด๋Ÿฌํ•œ ๋ชฉํ‘œ๊ฐ€ ์„œ๋กœ ๋งž์ง€ ์•Š๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 2๊ณ„์ธต JIT ์„ค๊ณ„์—์„œ๋Š” ๋‘˜ ๋‹ค ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ชจ๋“  ์ฝ”๋“œ๋Š” ํ•ด์„๋˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ๋งค์šฐ ๋น ๋ฅธ ์‹œ์ž‘ ์‹œ๊ฐ„(RyuJIT๋ณด๋‹ค ๋น ๋ฆ„)์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: Main ๋ฐฉ๋ฒ•์€ ๊ฑฐ์˜ ํ•ญ์ƒ ์ฐจ๊ฐ‘๊ณ  ์ง€ํŒ…ํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„ ๋‚ญ๋น„์ž…๋‹ˆ๋‹ค.
  2. ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋Š” ๊ณ ํ’ˆ์งˆ ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€ํŒ…๋ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ์†Œ์ˆ˜์˜ ๋ฐฉ๋ฒ•์ด ์ธ๊ธฐ๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(1%?). ๋”ฐ๋ผ์„œ ๊ณ ํ’ˆ์งˆ JIT์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์€ ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. C ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•„์ฃผ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ๋“œ๋Š” ์‹œ๊ฐ„๋งŒํผ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ๊ฐ€ ํ•ซํ•˜๋‹ค๊ณ  _๊ฐ€์ •_ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ์นœ ๊ฒƒ์ฒ˜๋Ÿผ ์ธ๋ผ์ธ๋˜๊ณ  ๋ฃจํ”„๋ฅผ ํŽผ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ํฌ๊ธฐ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์•„ํ‚คํ…์ฒ˜์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ํ†ต์—ญ์‚ฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ JIT์— ๋น„ํ•ด ์ €๋ ดํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.
  2. ๊ณ ํ’ˆ์งˆ ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ VC ๋˜๋Š” LLCC ํ”„๋กœ์ ํŠธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ํ•ด์„๋œ ์‹คํ–‰ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๋‹ค; JVM์ด ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ ๊ต์ฒด(OSR) ์‹œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

JIT ํŒ€์—์„œ ์ด ์•„์ด๋””์–ด๋ฅผ ์ถ”๊ตฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

.NET์€ ์ˆ˜์–ต ๋Œ€์˜ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ์ฝ”๋“œ ์ƒ์„ฑ์œผ๋กœ ์ธํ•ด ๋งŽ์€ ์„ฑ๋Šฅ์ด ํ…Œ์ด๋ธ”์— ๋‚จ์•„ ์žˆ๊ณ  ์ˆ˜๋ฐฑ๋งŒ ๋Œ€์˜ ์„œ๋ฒ„๊ฐ€ ๊ณ ๊ฐ์„ ์œ„ํ•ด ๋‚ญ๋น„๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

๋ฒ”์ฃผ:์ฒ˜๋ฆฌ๋Ÿ‰
ํ…Œ๋งˆ: ํฐ ๋ฒ ํŒ…
๊ธฐ์ˆ  ์ˆ˜์ค€:์ „๋ฌธ๊ฐ€
๋น„์šฉ:์ดˆ๋Œ€ํ˜•

area-CodeGen-coreclr enhancement optimization tenet-performance

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ตœ๊ทผ PR(https://github.com/dotnet/coreclr/pull/17840, https://github.com/dotnet/sdk/pull/2201)์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ„์ธตํ™”๋œ ์ปดํŒŒ์ผ์„ ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. json ์†์„ฑ ๋˜๋Š” msbuild ํ”„๋กœ์ ํŠธ ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ตœ๊ทผ ๋นŒ๋“œ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ํ•œ๋™์•ˆ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  63 ๋Œ“๊ธ€

@GSPP ๊ณ„์ธตํ™”๋Š” ๊ณ„ํš ๋Œ€ํ™”์—์„œ ๋Š์ž„์—†๋Š” ์ฃผ์ œ์ž…๋‹ˆ๋‹ค. ๋‚ด ์ธ์ƒ์€ ๊ทธ๊ฒƒ์ด ์–ด๋–ค ์œ„์•ˆ์„ ์ œ๊ณตํ•œ๋‹ค๋ฉด _if_๊ฐ€ ์•„๋‹ˆ๋ผ _์–ธ์ œ_์˜ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š๋Š” _์ด์œ _์— ๊ด€ํ•ด์„œ๋Š”, ์—ญ์‚ฌ์ ์œผ๋กœ ์ธ์ง€๋œ ์ž ์žฌ์  ์ด๋“์ด ๋‹ค์ค‘ codegen ๋ชจ๋“œ์˜ ์ฆ๊ฐ€๋œ ๋ณต์žก์„ฑ๊ณผ ์œ„ํ—˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ถ”๊ฐ€ ๊ฐœ๋ฐœ ์ž์›์„ ์ •๋‹นํ™”ํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ „๋ฌธ๊ฐ€๋“ค์ด ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋„๋ก ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

/cc @dotnet/jit-contrib @russellhadley

์–ด์จŒ๋“  ์ด๊ฒƒ์ด crossgen/ngen, Ready to Run ๋ฐ corert์˜ ์„ธ๊ณ„์—์„œ ์—ฌ์ „ํžˆ ๊ด€๋ จ์„ฑ์ด ์žˆ๋Š”์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

์ด๋“ค ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ ์›น ์•ฑ์— ์ค‘์š”ํ•œ ๋†’์€ ์•ˆ์ •์ ์ธ ์ƒํƒœ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ทธ๋“ค์ด ๊ทธ๋ ‡๊ฒŒ ํ•œ๋‹ค๋ฉด ๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์‹œ์ž‘ ์‹œ๊ฐ„์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์— ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ๊นŒ์ง€ .NET์šฉ ๋ชจ๋“  ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋Š” ๋‘ ๋ชฉํ‘œ ์‚ฌ์ด์—์„œ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ท ํ˜•์„ ์ด๋ฃจ๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋‘˜ ๋‹ค ์ž˜ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ตœ์ ํ™”๋ฅผ 11๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ท ํ˜• ์กฐ์ •์„ ์ œ๊ฑฐํ•ฉ์‹œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ๊นŒ์ง€ .NET์šฉ ๋ชจ๋“  ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋Š” ๋‘ ๋ชฉํ‘œ ์‚ฌ์ด์—์„œ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ท ํ˜•์„ ์ด๋ฃจ๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋‘˜ ๋‹ค ์ž˜ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ตœ์ ํ™”๋ฅผ 11๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ท ํ˜• ์กฐ์ •์„ ์ œ๊ฑฐํ•ฉ์‹œ๋‹ค.

๋™์˜ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํ†ต์—ญ์‚ฌ ๊ฐ™์€ ๊ฒƒ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ๋‚˜์€ RyuJIT ๋˜๋Š” LLILC๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ํฌ๋กœ์Šค์   ์ปดํŒŒ์ผ๋Ÿฌ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

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

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

์›น ์•ฑ์€ ngen ์Šคํƒ€์ผ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์— ์ž˜ ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํฐ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค(๊ฑฐ์˜ ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ๋™์ ์œผ๋กœ ์ฃฝ๊ฑฐ๋‚˜ ์ฐจ๊ฐ‘๋”๋ผ๋„).

๋˜ํ•œ ์›น ์•ฑ์„ ๋””๋ฒ„๊น…ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ๋•Œ ์‹ค์ œ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ngen์— ์˜์กดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ๋‚˜๋Š” ์บ๋กค์˜ ๋™์  ์ •๋ณด ์‚ฌ์šฉ์˜ 2๋ฒˆ์งธ ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค. ํ•ด์„ ๊ณ„์ธต์€ ์ฝ”๋“œ(๋ถ„๊ธฐ, ๋ฃจํ”„ ํŠธ๋ฆฝ ํšŸ์ˆ˜, ๋™์  ๋””์ŠคํŒจ์น˜ ๋Œ€์ƒ)๋ฅผ ํ”„๋กœํŒŒ์ผ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™„๋ฒฝํ•œ ์ผ์น˜์ž…๋‹ˆ๋‹ค! ๋จผ์ € ํ”„๋กœํ•„์„ ์ˆ˜์ง‘ํ•œ ๋‹ค์Œ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

๊ณ„์ธตํ™”๋Š” ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ๋ชจ๋“  ๊ฒƒ์„ ์˜์›ํžˆ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋žต์ ์œผ๋กœ ๋งํ•˜์ž๋ฉด :) ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ JIT์˜ ์•ฝ์†์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ์˜ RyuJIT ๊ตฌํ˜„์€ Tier 1์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค... ์งˆ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ดํ›„์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ซ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด Tier 2 ๊ทนํ•œ ์ตœ์ ํ™” JIT๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ณธ์งˆ์ ์œผ๋กœ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋œจ๊ฒ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ธฐ์— ์ถฉ๋ถ„ํ•œ ๋Ÿฐํƒ€์ž„ ์ •๋ณด๊ฐ€ ๊ฐ์ง€๋˜๊ฑฐ๋‚˜ ์žˆ์„ ๋•Œ ๋˜๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์ด๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋„๋ก ์š”์ฒญํ•  ๋•Œ.

RyuJIT๋Š” ํ‹ฐ์–ด 1์— ์ถฉ๋ถ„ํžˆ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ (๋‚ด ์ถ”์ •์œผ๋กœ๋Š”) _ํ›จ์”ฌ_ ๋น ๋ฅธ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” Tier 2๋กœ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Tier 1 ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋กœ์ปฌ ์ƒํƒœ๊ฐ€ ์ƒˆ๋กœ์šด Tier 2 ์ฝ”๋“œ(OSR)๋กœ ์ด์ „๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. RyuJIT ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋™์‹œ์— ๋” ๋‚˜์€ ์‹œ์ž‘ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•˜๋Š” ๋” ์ €๋ ดํ•œ ๊ฒฝ๋กœ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋” ์ €๋ ดํ•œ ๋ณ€ํ˜•์€ ์‹คํ–‰ ์ค‘์ธ ์ฝ”๋“œ๋ฅผ Tier 2 ์ฝ”๋“œ๋กœ ๊ต์ฒดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  Tier 1 ์ฝ”๋“œ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐ˜ํ™˜๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์„ธ์š”. ์ฝ”๋“œ๊ฐ€ ์žฅ๊ธฐ ์‹คํ–‰ ํ•ซ ๋ฃจํ”„์— ๋“ค์–ด๊ฐ€๋ฉด ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์‹์œผ๋กœ Tier 2 ์„ฑ๋Šฅ์— ๋„๋‹ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋„ˆ๋ฌด ๋‚˜์˜์ง€ ์•Š๊ณ  v1 ์ „๋žต์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ๋ฅผ ํ•ซ์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ์†์„ฑ๊ณผ ๊ฐ™์€ ์™„ํ™” ์•„์ด๋””์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋Š” ํ˜„์žฌ JIT ์ „๋žต์—์„œ๋„ ์–ด์จŒ๋“  ์กด์žฌํ•ด์•ผ ํ•จ).

@GSPP ๊ทธ๊ฒƒ์€ ์‚ฌ์‹ค์ด์ง€๋งŒ ์ด๊ฒƒ์ด ๋‹ค์Œ ์‹คํ–‰์—์„œ ๊ทธ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. Jitted ์ฝ”๋“œ ๋ฐ ๊ณ„์ธก์ด ์ง€์†๋˜๋ฉด ๋‘ ๋ฒˆ์งธ ์‹คํ–‰์€ ์—ฌ์ „ํžˆ โ€‹โ€‹Tier 2 ์ฝ”๋“œ(์ผ๋ถ€ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ํฌ์ƒํ•˜์—ฌ)๋ฅผ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ†ต์—ญ์‚ฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ JIT์— ๋น„ํ•ด ์ €๋ ดํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹  ์ตœ์ ํ™”๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ์—์„œ RyuJIT๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ถฉ๋ถ„ํžˆ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ณ ํ’ˆ์งˆ ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ VC๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Visual C++ ๋ฐฑ์—”๋“œ์ธ C2๋ฅผ ๋ง์”€ํ•˜์‹œ๋Š” ๊ฑด๊ฐ€์š”? ๊ทธ๊ฒƒ์€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด ์•„๋‹ˆ๋ฉฐ ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์กฐ๋งŒ๊ฐ„ ์ผ์–ด๋‚  ๊ฒƒ์ด๋ผ๊ณ  ์˜์‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ ํ™”๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ OSR ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„์ด ์•ˆ์ „ํ•œ ์ง€์ ์—์„œ ๋Ÿฐํƒ€์ž„ ์‹œ IL ์•„ํ‚คํ…์ฒ˜ ์ƒํƒœ(๋กœ์ปฌ ๋ฐ ์Šคํƒ)๋ฅผ ํŒŒ์ƒํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ๊ณ„์ธต 2 jitted ์ฝ”๋“œ์— ๋ณต์‚ฌํ•˜๊ณ  ๊ธฐ๋Šฅ ์ค‘๊ฐ„์— ๊ณ„์ธต 2 ์‹คํ–‰์„ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์–ด๋ ค์šด์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. JVM์ด ๊ทธ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋Š”์ง€ ๋ˆ„๊ฐ€ ์••๋‹ˆ๊นŒ?

์˜ˆ, C2์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Desktop JIT ์ค‘ ์ ์–ด๋„ ํ•˜๋‚˜๋Š” C2 ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. CoreCLR์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฐ์Šคํฌํƒ‘์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. LLVM์€ ํ›Œ๋ฅญํ•œ ์„ ํƒ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์—ฌ๋Ÿฌ ์–ธ์–ด๊ฐ€ LLVM์ด GC ๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๋Ÿฐํƒ€์ž„๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

LLVM์€ ํ›Œ๋ฅญํ•œ ์„ ํƒ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์—ฌ๋Ÿฌ ์–ธ์–ด๊ฐ€ LLVM์ด GC ๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๋Ÿฐํƒ€์ž„๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ํฅ๋ฏธ๋กœ์šด ๊ธฐ์‚ฌ: Apple์€ ์ตœ๊ทผ JavaScript JIT์˜ ์ตœ์ข… ๊ณ„์ธต์„ LLVM( https://webkit.org/blog/5852/introducing-the-b3-jit-compiler/ )์—์„œ ๋ฉ€๋ฆฌ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋Š๋ฆฐ ์ปดํŒŒ์ผ ์‹œ๊ฐ„๊ณผ LLVM์˜ ์†Œ์Šค ์–ธ์–ด ์ง€์‹ ๋ถ€์กฑ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

RyuJIT๋ณด๋‹ค 10๋ฐฐ ๋Š๋ฆฐ 2๊ณ„์ธต์—์„œ๋Š” ์™„์ „ํžˆ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์†Œ์Šค ์–ธ์–ด์— ๋Œ€ํ•œ ์ง€์‹ ๋ถ€์กฑ(์ง„์ •ํ•œ ๊ด€์‹ฌ์‚ฌ)์ด LLVM ์•„ํ‚คํ…์ฒ˜์— ๋‚ด์žฌ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํŒ€์ด LLVM์„ ์†Œ์Šค ์–ธ์–ด ์ง€์‹์„ ๋” ์‰ฝ๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ์˜ฎ๊ธฐ๋Š๋ผ ๋ฐ”์˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. _All_ C๊ฐ€ ์•„๋‹Œ ๊ณ ๊ธ‰ ์–ธ์–ด๋Š” LLVM์—์„œ ์ปดํŒŒ์ผํ•  ๋•Œ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

WebKIT FTL/B3 ํ”„๋กœ์ ํŠธ๋Š” .NET๋ณด๋‹ค ์„ฑ๊ณตํ•˜๊ธฐ ์–ด๋ ค์šด ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค. _์ „์ฒด์ ์œผ๋กœ_ ์ˆ˜๋ฐฑ ๋ฐ€๋ฆฌ์ดˆ์˜ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•œ ๋‹ค์Œ ์ข…๋ฃŒ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํƒ์›”ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์›น ํŽ˜์ด์ง€๋ฅผ ๊ตฌ๋™ํ•˜๋Š” JavaScript ์›Œํฌ๋กœ๋“œ์˜ ํŠน์„ฑ์ž…๋‹ˆ๋‹ค. .NET์€ ๊ทธ ์ž๋ฆฌ์— ์—†์Šต๋‹ˆ๋‹ค.

@GSPP ์•„๋งˆ๋„ LLILC ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.

์šฐ๋ฆฌ๋Š” CLR ๊ฐœ๋…์— ๋Œ€ํ•œ LLVM ์ง€์›์— ๋Œ€ํ•ด ํ•œ๋™์•ˆ ์ž‘์—…ํ•ด ์™”์œผ๋ฉฐ EH ๋ฐ GC ๊ฐœ์„ ์— ํˆฌ์žํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ๋‘˜ ๋‹ค ํ•  ์ผ์ด ๊ฝค ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„ GC๊ฐ€ ์žˆ๋Š” ์ƒํƒœ์—์„œ ์ตœ์ ํ™”๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋Š” ์ž‘์—…๋Ÿ‰์ด ์žˆ์Šต๋‹ˆ๋‹ค.

LLILC๊ฐ€ ๋ฉˆ์ถ˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์Šต๋‹ˆ๊นŒ?
2016๋…„ 4์›” 18์ผ ์˜คํ›„ 7์‹œ 32๋ถ„์— "Andy Ayers" [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@GSPP https://github.com/GSPP ์•„๋งˆ๋„ LLILC์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค
https://github.com/dotnet/lllc. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.

์šฐ๋ฆฌ๋Š” CLR ๊ฐœ๋…์— ๋Œ€ํ•œ LLVM ์ง€์›์— ๋Œ€ํ•ด ํ•œ๋™์•ˆ ์ž‘์—…ํ•ด ์™”์œผ๋ฉฐ
EH ๋ฐ GC ๊ฐœ์„ ์— ํˆฌ์žํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ํ•  ์ผ์ด ๊ฝค ๋งŽ๋‹ค
๋‘˜ ๋‹ค. ๊ทธ ์™ธ์—๋Š” ์•Œ ์ˆ˜ ์—†๋Š” ์ž‘์—…๋Ÿ‰์ด ์žˆ์Šต๋‹ˆ๋‹ค.
GC๊ฐ€ ์žˆ๋Š” ์ƒํƒœ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/dotnet/coreclr/issues/4331#issuecomment -211630483

@drbo - LLILC๋Š” ํ˜„์žฌ ๋ฐฑ ๋ฒ„๋„ˆ์— ์žˆ์Šต๋‹ˆ๋‹ค. MS ํŒ€์€ RyuJIT์—์„œ ๋” ๋งŽ์€ ๋Œ€์ƒ์„ ๊ฐ€์ ธ์˜ค๊ณ  CoreCLR ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์ถœ์‹œํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ (ํ˜„์žฌ) LLILC๋ฅผ ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๊ตํ›ˆ์„ ์–ป์€ ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋‚ด TODO ๋ชฉ๋ก(๋งŽ์€ ์ž์œ  ์‹œ๊ฐ„์—)์— ์žˆ์ง€๋งŒ ์•„์ง ๋„๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ณ„์ธตํ™”์—์„œ ์ด ์ฃผ์ œ๋Š” ์ˆ˜๋…„ ๋™์•ˆ ๋งŽ์€ ํ† ๋ก ์„ ๋ถˆ๋Ÿฌ์ผ์œผ์ผฐ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ์›Œํฌ๋กœ๋“œ์™€ ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•  ์ค€๋น„๊ฐ€ ๋œ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๊ณ„์ธตํ™” ๋ฐฉ๋ฒ•๊ณผ ์œ„์น˜๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์‚ดํŽด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@russellhadley ๊ธ€์„ ์“ธ ์‹œ๊ฐ„์ด ์žˆ์œผ์…จ๋‚˜์š”?

๋‚˜๋Š” ์Šน๊ฒฉ๋˜์ง€ ์•Š์€ ์Šคํƒ ์Šฌ๋กฏ๊ณผ gcroots๊ฐ€ ์ตœ์ ํ™”๋ฅผ ๊นจ๊ณ  ์ง€ํŒ… ์‹œ๊ฐ„์ด ๋Š๋ ค์ง„๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—... ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ SelectionDAG๋กœ ์ง์ ‘ ์ด๋™ํ•˜์—ฌ LLVM ๋ฐฑ์—”๋“œ์˜ ์ผ๋ถ€๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์ˆ˜์ต์„ฑ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ์ผ๋ถ€ ์—ฟ๋ณด๊ธฐ ๋ฐ ๋ณต์‚ฌ ์ „ํŒŒ ... ์˜ˆ๋ฅผ ๋“ค์–ด ๋ ˆ์ง€์Šคํ„ฐ์— ๋Œ€ํ•œ gcroot ์Šน๊ฒฉ์ด LLILC์—์„œ ์ง€์›๋˜๋Š” ๊ฒฝ์šฐ

ํ˜„์žฌ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ํฌํ•จํ•˜์—ฌ LLILC์˜ ์ƒํƒœ์™€ RyuJIT์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๋Œ€์ฒ˜ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋ณธ๊ฒฉ์ ์ธ "์‚ฐ์—…์šฉ" ์ปดํŒŒ์ผ๋Ÿฌ์ธ LLVM์€ OSS์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ ํ™”๊ฐ€ ๋งค์šฐ ํ’๋ถ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์—์„œ ๋น„ํŠธ์ฝ”๋“œ ํ˜•์‹์˜ ๋ณด๋‹ค ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅธ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™”์— ๋Œ€ํ•œ ๋…ผ์˜๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด LLILC์— ์œ ์šฉํ•œ ๊ฒƒ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์ƒ๊ฐ์ด ๋” ์ด์ƒ ์—†์—ˆ์Šต๋‹ˆ๊นŒ? @russellhadley CoreCLR์ด ์ถœ์‹œ๋˜์—ˆ๊ณ  RyuJIT๊ฐ€ (์ตœ์†Œํ•œ) x86์œผ๋กœ ์ด์‹๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ๋งต์˜ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด์— ๋Œ€ํ•œ ์ž‘์—… ์‹œ์ž‘์€ dotnet/coreclr#10478์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋˜ํ•œ dotnet/coreclr#12193

@noahfalk , ๋Ÿฐํƒ€์ž„์— ๊ด€๋ฆฌ ์ฝ”๋“œ ์ž์ฒด์—์„œ ์ฆ‰์‹œ Tier 2 ์ปดํŒŒ์ผ์„ ๊ฐ•์ œ ์‹คํ–‰ํ•˜๋„๋ก ์ง€์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ณ„์ธตํ˜• ์ปดํŒŒ์ผ์€ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ๋งค์šฐ ์ข‹์€ ์•„์ด๋””์–ด์ด์ง€๋งŒ ์‹œ์ž‘ ์‹œ๊ฐ„์€ ๊ด€๋ จ์ด ์—†์ง€๋งŒ ์ฒ˜๋ฆฌ๋Ÿ‰ ๊ณผ ์•ˆ์ •์ ์ธ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ํ•„์ˆ˜์ ์ธ ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋จธ๋ฆฌ ๊ผญ๋Œ€๊ธฐ์—์„œ ์ด๊ฒƒ์€ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์ƒˆ ์„ค์ •, JIT๊ฐ€ ํ•ญ์ƒ ๊ณ„์ธต 1์„ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ํ•˜๋Š” <gcServer enabled="true" /> ์™€ ๊ฐ™์€ ์Šค์œ„์น˜
  • ๋˜๋Š” RuntimeHelpers.PrepareMethod ์™€ ๊ฐ™์ด ํ•ซ ๊ฒฝ๋กœ์˜ ์ผ๋ถ€์ธ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์˜ ์ฝ”๋“œ์— ์˜ํ•ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค(์‹œ์ž‘ ์‹œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์ „ JITํ•˜๋Š” ๋ฐ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค). ์ด๊ฒƒ์€ ํ•ซ ํŒจ์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋” ํฐ ์ž์œ ๋„๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ์˜ ์ถ”๊ฐ€ ์˜ค๋ฒ„๋กœ๋“œ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก , ์ด๋กœ๋ถ€ํ„ฐ ํ˜œํƒ์„ ๋ฐ›๋Š” ํ”„๋กœ์ ํŠธ๋Š” ๊ฑฐ์˜ ์—†์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ์ ํ™”๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋Š” JIT ์— ๋Œ€ํ•ด ๊ฑฑ์ •์ด ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ๋””์ž์ธ ๋ฌธ์„œ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ฆฌ ์ฝ”๋“œ API์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž์ฒด ์ˆ˜์ • ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋งค์šฐ ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค ๐Ÿ˜ ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ๋‚ด๊ฐ€ ๋ฌป๋Š” ๋‚ด์šฉ์ด ์—ฌ๊ธฐ์— ํฌํ•จ๋˜๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.


๋˜ํ•œ ๊ด€๋ จ ์งˆ๋ฌธ: ๋‘ ๋ฒˆ์งธ JIT ํŒจ์Šค๋Š” ์–ธ์ œ ์‹œ์ž‘๋ฉ๋‹ˆ๊นŒ? ๋ฉ”์†Œ๋“œ๊ฐ€ n ๋ฒˆ์งธ๋กœ ํ˜ธ์ถœ๋  ์˜ˆ์ •์€ ์–ธ์ œ์ž…๋‹ˆ๊นŒ? ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์Šค๋ ˆ๋“œ์—์„œ JIT๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „์— ์ง€์—ฐ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ์ ๊ทน์ ์ธ ์ตœ์ ํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์ด ์ง€์—ฐ์ด ํ˜„์žฌ JIT ์‹œ๊ฐ„๋ณด๋‹ค ๊ธธ์–ด์ ธ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”์„œ๋“œ๊ฐ€ ์ถฉ๋ถ„ํžˆ ํ˜ธ์ถœ๋˜๊ฑฐ๋‚˜ ๋ฃจํ”„๊ฐ€
์ถฉ๋ถ„ํ•œ ๋ฐ˜๋ณต์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค(๋‹จ๊ณ„๋ณ„ ๊ต์ฒด). ๊ทธ๊ฒƒ์€ ์ผ์–ด๋‚˜์•ผ ํ•œ๋‹ค
๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ

2017๋…„ 6์›” 29์ผ ์˜คํ›„ 7์‹œ 1๋ถ„, "Lucas Trzesniewski" ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

@noahfalk https://github.com/noahfalk , ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
๋Ÿฐํƒ€์ž„์— ๊ณ„์ธต 2 ์ปดํŒŒ์ผ์„ ๊ฐ•์ œ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.
๊ด€๋ฆฌ ์ฝ”๋“œ ์ž์ฒด? ๊ณ„์ธตํ™” ๋œ ์ปดํŒŒ์ผ์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋งค์šฐ ์ข‹์€ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.
์‚ฌ์šฉ ์‚ฌ๋ก€์ด์ง€๋งŒ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๊ด€๋ จ์ด ์—†๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ฒ˜๋ฆฌ๋Ÿ‰ ๊ณผ ์•ˆ์ •์ ์ธ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

๋‚ด ๋จธ๋ฆฌ ๊ผญ๋Œ€๊ธฐ์—์„œ ์ด๊ฒƒ์€ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์ƒˆ ์„ค์ •, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์Šค์œ„์น˜ enable="true" /> JIT๊ฐ€ ํ•ญ์ƒ ๊ณ„์ธต 1์„ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ํ•˜๋ ค๋ฉด
  • ๋˜๋Š” RuntimeHelpers.PrepareMethod์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    ํ•ซ ๊ฒฝ๋กœ์˜ ์ผ๋ถ€์ธ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์—์„œ ์ฝ”๋“œ์— ์˜ํ•ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค(์šฐ๋ฆฌ๋Š”
    ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ์‹œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์ „ JITํ•ฉ๋‹ˆ๋‹ค). ์ด๊ฒƒ์€ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค
    ๋ฌด์—‡์„ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋” ๋งŽ์€ ์ž์œ ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    ํ•ซํŒจ์Šค๋‹ค. ์ด ๋ฉ”์„œ๋“œ์˜ ์ถ”๊ฐ€ ์˜ค๋ฒ„๋กœ๋“œ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ด๋กœ๋ถ€ํ„ฐ ํ˜œํƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋Š” ๊ฑฐ์˜ ์—†์ง€๋งŒ
JIT๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ์ ํ™”๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์ด์— ๋Œ€ํ•ด ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋Œ€์‹  ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ๋””์ž์ธ ๋ฌธ์„œ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ฆฌ ์ฝ”๋“œ API์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ˆ˜ํ–‰
์ž์ฒด ์ˆ˜์ • ์ฝ”๋“œ.

์•„์ฃผ ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฌ๋„ค์š” ๐Ÿ˜ ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์„ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

์—ฌ๊ธฐ์— ๋ฌป์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ด€๋ จ ์งˆ๋ฌธ: ๋‘ ๋ฒˆ์งธ JIT ํŒจ์Šค๋Š” ์–ธ์ œ ์‹œ์ž‘๋ฉ๋‹ˆ๊นŒ? ์–ธ์ œ
๋ฉ”์†Œ๋“œ๊ฐ€ n ๋ฒˆ์งธ๋กœ ํ˜ธ์ถœ๋  ์˜ˆ์ •์ž…๋‹ˆ๊นŒ? JIT๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?
๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์Šค๋ ˆ๋“œ? ๊ทธ๋ ‡๋‹ค๋ฉด ์†Œ๊ฐœํ• 
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „ ์ง€์—ฐ ๋” ๊ณต๊ฒฉ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด
์ตœ์ ํ™” ์ด ์ง€์—ฐ์€ ํ˜„์žฌ JIT ์‹œ๊ฐ„๋ณด๋‹ค ๊ธธ์–ด์ง‘๋‹ˆ๋‹ค.
๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/dotnet/coreclr/issues/4331#issuecomment-312130920 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AGGWB2WbZ2qVBjRIQWS86MStTSa1ODfoks5sJCzOgaJpZM4IHWs8
.

@ltrzesniewski - ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ํ™•์‹คํžˆ ๋‚˜๋Š” ๊ณ„์ธตํ™”๋œ ์ปดํŒŒ์ผ์ด ๋Œ€๋‹ค์ˆ˜์˜ ํ”„๋กœ์ ํŠธ์— ์œ ์šฉํ•˜๊ธฐ๋ฅผ ํฌ๋งํ•˜์ง€๋งŒ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์ด์ƒ์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ณ„์ธตํ˜• ์ง€ํŒ…์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘˜ ๊ฒƒ์ด๋ผ๊ณ  ์ถ”์ธกํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ง€๊ธˆ์˜ ๋Ÿฐํƒ€์ž„ ๋™์ž‘์„ ๋” ๋†’์€ ํ’ˆ์งˆ(๊ทธ๋Ÿฌ๋‚˜ ์ƒ์„ฑ ์†๋„๋Š” ๋Š๋ฆผ) ์ง€ํŒ…์œผ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์•ฑ์—์„œ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ํ•ฉ๋‹นํ•œ ์ผ์ž…๋‹ˆ๊นŒ? ๋‹ค๋ฅธ ์˜ต์…˜๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ตฌ์„ฑ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ด€์‹ฌ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ด€๋ จ ์งˆ๋ฌธ: ๋‘ ๋ฒˆ์งธ JIT ํŒจ์Šค๋Š” ์–ธ์ œ ์‹œ์ž‘๋ฉ๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ฐœ์ „ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋†’์€ ์ •์ฑ…์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ํ”„๋กœํ† ํƒ€์ž… ๊ตฌํ˜„์€ "๋ฉ”์†Œ๋“œ๊ฐ€ >= 30๋ฒˆ ํ˜ธ์ถœ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?"๋ผ๋Š” ๋‹จ์ˆœํ•œ ์ •์ฑ…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
https://github.com/dotnet/coreclr/blob/master/src/vm/tieredcompilation.cpp#L89
https://github.com/dotnet/coreclr/blob/master/src/vm/tieredcompilation.cpp#L122

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

@DemiMarie - ํ˜„์žฌ ์ •์ฑ…์˜ ์ผ๋ถ€๋กœ ๋ฃจํ”„ ๋ฐ˜๋ณต์„ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์€ ์—†์ง€๋งŒ ๋ฏธ๋ž˜์— ๋Œ€ํ•œ ํฅ๋ฏธ๋กœ์šด ์ „๋ง์ž…๋‹ˆ๋‹ค.

ํ”„๋กœํŒŒ์ผ๋ง, ์ถ”์ธก ์ตœ์ ํ™” ๋ฐ
์ตœ์ ํ™” ํ•ด์ œ? JVM์€ ์ด ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

2017๋…„ 6์›” 29์ผ ์˜คํ›„ 8์‹œ 58๋ถ„์— "Noah Falk" [email protected] ์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

@ltrzesniewski https://github.com/ltrzesniewski - ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค
ํ”ผ๋“œ๋ฐฑ! ํ™•์‹คํžˆ ๋‚˜๋Š” ๊ณ„์ธตํ™”๋œ ์ปดํŒŒ์ผ์ด ๊ด‘๋Œ€ํ•œ
๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๋˜์ง€๋งŒ ์ ˆ์ถฉ์•ˆ์€ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์ด์ƒ์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘˜ ๊ฒƒ์ด๋ผ๊ณ  ์ถ”์ธกํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ณ„์ธตํ˜• ์ง€ํŒ…์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„ ๋™์ž‘์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์ด์ œ ๋” ๋†’์€ ํ’ˆ์งˆ(๊ทธ๋Ÿฌ๋‚˜ ์ƒ์„ฑ ์†๋„๋Š” ๋” ๋Š๋ฆผ)์„ ์ „๋ฉด์— ๋‚ด์„ธ์šฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ~์ด๋‹ค
์•ฑ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ ˆํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
๋‹ค๋ฅธ ์˜ต์…˜๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค ๊ทธ๋ƒฅ ํ™˜๊ฒฝ์— ๋Œ๋ฆฝ๋‹ˆ๋‹ค
์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ตฌ์„ฑ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ด€๋ จ ์งˆ๋ฌธ: ๋‘ ๋ฒˆ์งธ JIT ํŒจ์Šค๋Š” ์–ธ์ œ ์‹œ์ž‘๋ฉ๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ฐœ์ „ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋†’์€ ์ •์ฑ…์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ
ํ”„๋กœํ† ํƒ€์ž… ๊ตฌํ˜„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ˆœํ•œ ์ •์ฑ…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
>= 30๋ฒˆ ํ˜ธ์ถœ"
https://github.com/dotnet/coreclr/blob/master/src/vm/
tieredcompilation.cpp#L89
https://github.com/dotnet/coreclr/blob/master/src/vm/
tieredcompilation.cpp#L122

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

@DemiMarie https://github.com/demimarie - ์šฐ๋ฆฌ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค
์ง€๊ธˆ์€ ์ •์ฑ…์˜ ์ผ๋ถ€๋กœ ๋ฃจํ”„ ๋ฐ˜๋ณต์„ ์ถ”์ ํ•˜์ง€๋งŒ ํฅ๋ฏธ๋กœ์šด
๋ฏธ๋ž˜์— ๋Œ€ํ•œ ์ „๋ง.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/dotnet/coreclr/issues/4331#issuecomment-312146470 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AGGWB5m2qCnOKJsaXFCFigI3J6Ql8PMQks5sJEgZgaJpZM4IHWs8
.

@noahfalk ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ํ™•์‹คํžˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ณ„๋กœ ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ์„œ๋ฒ„/์„œ๋น„์Šค ์•ฑ์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์„ฑ๋Šฅ์„ ํฌ์ƒ์‹œํ‚ค๋ฉด์„œ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค). ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ์ž‘๋™ํ•˜๊ณ  ์ž ์žฌ์ ์ธ ์‹ ๊ทœ ๊ณ ๊ฐ์ด ์ˆ˜ํ–‰ํ•œ ์˜ˆ์™ธ์ ์ธ ๊ฒฝ๋กœ๋‚˜ ๋ฒค์น˜๋งˆํฌ์—์„œ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ง์ ‘ ๋ง์”€๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ์ผ๋ฐ˜์ ์ธ ํ™˜๊ฒฝ์—์„œ ๊ฐ€๋™ ์‹œ๊ฐ„์€ ํ•œ ๋ฒˆ์— ๋ช‡ ์ฃผ ๋‹จ์œ„๋กœ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 30์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋”๋ผ๋„ ์ƒ๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‹ ๊ฒฝ์“ฐ๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ผ๋ฐ˜ ์Šค์œ„์น˜(์ „๋ถ€ ๋˜๋Š” ์ „๋ฌด)๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ฑฐ๋‚˜ ์‹ฌ์ง€์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์ด์— ๋Œ€ํ•ด ์‹ ๊ฒฝ์“ฐ๋„๋ก ํ•˜๋Š” ๊ฒƒ(์˜ˆ: ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ •๋จ)์€ 10๋‹จ๊ณ„ ํ›„ํ‡ดํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜คํ•ดํ•˜์ง€ ๋งˆ์„ธ์š”. JIT ์ˆ˜์ค€์—์„œ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•œ ๋งŒํผ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ๊ณ ์„ฑ๋Šฅ์˜ ๊ธธ์„ ์—ด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Tiered JIT๋ฅผ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜ค๋ž˜์ „์— JIT ์—”์ง€๋‹ˆ์–ด๋“ค๊ณผ์˜ ๋น„๊ณต์‹์ ์ธ ๋Œ€ํ™”์—์„œ ๋‚˜ ์ž์‹ ์„ ์ œ์•ˆํ•˜๊ธฐ๋„ ํ–ˆ๊ณ , ๋‹น์‹ ์€ ์ด๋ฏธ ๊ทธ๊ฒƒ์„ ์ธ์ง€ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™์ž‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด(์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ์•„๋‹˜)๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ (์ ์–ด๋„ ์šฐ๋ฆฌ์—๊ฒŒ๋Š”) ์ด ํŠน์ • ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ํ’ˆ์งˆ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์ผ๋ถ€ ์Šคํƒ€์ผ ๋ฌธ์ œ.

@redknightlois - ํ›„์† ์กฐ์น˜์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๋ณ„๋กœ ์ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

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

set COMPLUS_EXPERIMENTAL_TieredCompilation=1
MyApp.exe
set COMPLUS_EXPERIMENTAL_TieredCompilation=0

์šฐ๋ฆฌ๊ฐ€ ์‹ ๊ฒฝ ์“ฐ๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ... ์‹ ๊ฒฝ์“ฐ๋„๋ก ๊ฐ•์š”ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ผ ์•ฑ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์„ฑ ์„ค์ •์„ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ? env var์˜ ํ•œ ๊ฐ€์ง€ ๊ฐ€๋Šฅ์„ฑ์€ ์‚ฌ์šฉ์ž๊ฐ€ coreclr ์•ฑ์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ž˜ํผ(๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€)๋ฅผ ์‹œ์ž‘ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋Œ€์•ˆ์— ์—ด๋ ค ์žˆ๊ณ  ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Œ€์น˜๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์€ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ์ ๊ทน์ ์ธ ๋””์ž์ธ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ผ ์˜์—ญ์ด ์•„๋‹ˆ์ง€๋งŒ ์ ์ ˆํ•œ ๊ตฌ์„ฑ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ฃผ์˜ํ•˜์‹ญ์‹œ์˜ค. ๊ณ„์ธตํ™”๋œ ์ปดํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณ„์† ์ง„ํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๊ณ„์ธตํ™”๋œ ์ปดํŒŒ์ผ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ์ž‘์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ˜„์žฌ์˜ ์ •์ƒ ์ƒํƒœ ์„ฑ๋Šฅ์„ ๋Šฅ๊ฐ€ํ•˜๋Š” ์ง€์ ์— ๋„๋‹ฌํ–ˆ๋‹ค๊ณ  ์‰ฝ๊ฒŒ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์‹œ์ž‘ ์„ฑ๋Šฅ์ด ๋ชฉํ‘œ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์˜ ํ•œ๊ณ„๋Š” ์•„๋‹™๋‹ˆ๋‹ค. :)

ํ”„๋กœํŒŒ์ผ๋ง, ์ถ”์ธก ์ตœ์ ํ™” ๋ฐ
์ตœ์ ํ™” ํ•ด์ œ?

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

@noahfalk ์˜ˆ, ์šฐ์•„ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์€ ์‹คํ–‰ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ (๊ทธ๋ฆฌ๊ณ  ๋งค์šฐ ๊ทธ๋Ÿด ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ) ๋ณธ์งˆ์ ์œผ๋กœ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋Š” ๋Œ€์•ˆ์€ app.config ํ•ญ๋ชฉ๊ณผ ํ•จ๊ป˜ ์„œ๋ฒ„ GC๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ณ„์ธตํ™”๋œ ์ปดํŒŒ์ผ์—์„œ๋„ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ ์–ด๋„ Tiered๋Š” ์ง€์†์ ์œผ๋กœ ์ •์ƒ ์ƒํƒœ ์„ฑ๋Šฅ์„ ๋Šฅ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). JIT์ด๊ธฐ ๋•Œ๋ฌธ์— assembly.config ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด์…ˆ๋ธ”๋ฆฌ๋ณ„๋กœ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ๋‹ค๋ฅธ ๋…ธ๋ธŒ๋„ ๊ทธ๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ํ˜„์žฌ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์‚ฌ์šฉ์ž ๋˜๋Š” ์‹œ์Šคํ…œ๋ณ„๋กœ ์„ค์ •๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ ๋Ÿฐํƒ€์ž„์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „์—์„œ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์— ์ž ์žฌ์ ์œผ๋กœ ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ๋ณ„ ๊ตฌ์„ฑ ํŒŒ์ผ์€ ํ›จ์”ฌ ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž๋ณ„/์‹œ์Šคํ…œ๋ณ„๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋”๋ผ๋„) -- app.config์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์Šคํฌํƒ‘ ๊ตฌ์„ฑ ๊ฐ’๊ณผ ๊ฐ™์ง€๋งŒ env vars ๋˜๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋„ ์‚ฌ์šฉ .

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

๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์ง€๋งŒ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋‘ ๋ฒˆ์งธ ๊ณ„์ธต ์ง€ํŠธ๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚  jit๊ฐ€ ํ•˜๋Š” ์ผ์„ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋” ๋งŽ์€ ์ผ์„ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ช‡ ๊ฐ€์ง€ ์ž ์žฌ์ ์ธ ํ•ฉ๋ณ‘์ฆ์„ ์ง€์ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค....

๋‘ ๋ฒˆ์งธ ๊ณ„์ธต ์ง€ํŠธ๋Š” ์ฒซ ๋ฒˆ์งธ ๊ณ„์ธต์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ฝ”๋“œ์˜ ๋™์ž‘์— ๋Œ€ํ•œ ๊ด€์ฐฐ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์ฒด์ ์œผ๋กœ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒซ ๋ฒˆ์งธ ๊ณ„์ธต์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋‘ ๋ฒˆ์งธ ๊ณ„์ธต์„ ์ง์ ‘ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์€ ๊ณ„์ธตํ™” ๊ณผ์ •์„ ๊ทธ๋Œ€๋กœ ๋‘๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "๊ณ„์ธตํ™” ์šฐํšŒ" ์˜ต์…˜์ด ๊ตฌํ˜„๋˜๋”๋ผ๋„ ๊ฒฐ๊ตญ 2์ฐจ ๊ณ„์ธต jit๊ฐ€ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ jit์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๊ณ„์ธต jit๋Š” ๋งŽ์€ ๋ฐฉ๋ฒ• ์ง‘ํ•ฉ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆฐ jit ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์กฐ์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๊ณ„์ธต ์ง€ํŠธ๊ฐ€ ๋” ์ฒ ์ €ํ•œ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์•„์ง ์—ฌ๊ธฐ์„œ ์ ์ ˆํ•œ ์ ˆ์ถฉ์•ˆ์„ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ง์ด...

"๊ณต๊ฒฉ์  ์ตœ์ ํ™”" ๋ฉ”์„œ๋“œ ์†์„ฑ์ด ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. jit์ด ํŠน์ • ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋‘ ๋ฒˆ์งธ ๊ณ„์ธต jit์ฒ˜๋Ÿผ ๋‹ค์†Œ ๋™์ž‘ํ•˜๋„๋ก ์š”์ฒญํ•˜๊ณ  prejitting ์ค‘์— ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(prejitted ์ฝ”๋“œ๊ฐ€ jitted ์ฝ”๋“œ๋ณด๋‹ค ๋Š๋ฆฌ๊ฒŒ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŠนํžˆ R2R์˜ ๊ฒฝ์šฐ). ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฐœ๋…์„ ์ „์ฒด ์–ด์…ˆ๋ธ”๋ฆฌ ๋˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชจ๋“  ์–ด์…ˆ๋ธ”๋ฆฌ์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ๋งค๋ ฅ์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

@AndyAyersMS ๋‚˜๋Š” ๋‹น์‹ ์ด ๊ฑฐ๊ธฐ์— ๋ชป์„ ๋ฐ•์•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. "์ ๊ทน์  ์ตœ์ ํ™”" ์†์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” JIT๋Š” ์ฒซ ๋ฒˆ์งธ ๊ณ„์ธต ์ง€ํŠธ๊ฐ€ ํ•ด๋‹น ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•  ์‹œ๊ฐ„์ด ์—†๋Š” ์ƒํƒœ์—์„œ ๊ฒฉ๋ฆฌ์—์„œ ๋” ๋‚˜์€ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ์˜ ๋Œ€๋ถ€๋ถ„์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@redknightlois ์†์„ฑ์€ ๋” ๋งŽ์€ ๊ณ„์ธตํ™”๋ฅผ ์›ํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. - T3 JIT, T4 JIT, ... ๋‘ ์ˆ˜์ค€์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ ์–ด๋„ ์ด ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

MPGO ์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๋ฒˆ์งธ ๊ณ„์ธต jitted ์ฝ”๋“œ๋กœ ์‹คํ–‰์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ณ„์ธต์„ ์™„์ „ํžˆ ์šฐํšŒํ•˜๋Š” ๋Œ€์‹  ๋นจ๋ฆฌ ๊ฐ๊ธฐ.

@AndyAyersMS , Azul์ด LLVM์„ ์‚ฌ์šฉํ•˜์—ฌ JVM์šฉ ๊ด€๋ฆฌ JIT๋ฅผ ๊ตฌํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— CLR์— LLVM์„ ๋” ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ถ„๋ช…ํžˆ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํ”„๋กœ์„ธ์Šค์—์„œ LLVM์œผ๋กœ ์—…์ŠคํŠธ๋ฆผ์œผ๋กœ ํ‘ธ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ €๋Š” ๋ช‡ ๊ฐ€์ง€ ํŠน์ • ์ž‘์—…์„ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ž‘์—… ํ•ญ๋ชฉ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค(#12609, dotnet/coreclr#12610, dotnet/coreclr#12611, dotnet/coreclr#12612, dotnet/coreclr #12617). ๊ท€ํ•˜์˜ ๊ด€์‹ฌ์ด ๊ทธ ์ค‘ ํ•˜๋‚˜์™€ ์ง์ ‘์ ์ธ ๊ด€๋ จ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ž์œ ๋กญ๊ฒŒ ์˜๊ฒฌ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ฃผ์ œ์— ๋Œ€ํ•ด์„œ๋Š” ํ† ๋ก ์ด ์—ฌ๊ธฐ์—์„œ ๊ณ„์†๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ํŠน์ • ํ•˜์œ„ ์ฃผ์ œ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์ด ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ๋…์ž์ ์œผ๋กœ ํŠน์ • ํ•˜์œ„ ์ฃผ์ œ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@MendelMonteiro ์ง€ํŒ… ํ•  ๋•Œ MPGO ์Šคํƒ€์ผ ํ”ผ๋“œ๋ฐฑ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ํ™•์‹คํžˆ ์˜ต์…˜์ž…๋‹ˆ๋‹ค(ํ˜„์žฌ๋Š” ์‚ฌ์ „ ์ง€ํŒ…ํ•  ๋•Œ๋งŒ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ฝ์„ ์ˆ˜ ์žˆ์Œ). ๊ณ„์ธกํ•  ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ์—๋Š” ๋‹ค์–‘ํ•œ ์ œํ•œ์ด ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ์ด ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ ์‚ดํŽด๋ด์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ์ œํ•œ ์‚ฌํ•ญ(์˜ˆ: ์ธ๋ผ์ธ์— ๋Œ€ํ•ด ํ”ผ๋“œ๋ฐฑ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ), ์ƒ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ณ„์ธก ๋ฐ ๊ต์œก ์‹คํ–‰์ด ์žˆ์Šต๋‹ˆ๋‹ค. MPGO ๋ฐ์ดํ„ฐ๋Š” ๋งŽ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์žฅ๋ฒฝ์ด๋ฉฐ MPGO ๋ฐ์ดํ„ฐ๋Š” ์ฒซ ๋ฒˆ์งธ ๊ณ„์ธต์—์„œ ๋ถ€ํŠธ์ŠคํŠธ๋žฉํ•  ๋•Œ ๊ฐ€์ง„ ๊ฒƒ๊ณผ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์•„์ด๋””์–ด๋Š” ํ™•์‹คํžˆ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

LLVM ๊ธฐ๋ฐ˜ ์ƒ์œ„ ๊ณ„์ธต์ด ์ง„ํ–‰๋˜๋Š” ํ•œ -- ๋ถ„๋ช…ํžˆ ์šฐ๋ฆฌ๋Š” LLILC๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋Š ์ •๋„ ์กฐ์‚ฌํ–ˆ์œผ๋ฉฐ ๋‹น์‹œ Azul ์‚ฌ๋žŒ๋“ค๊ณผ ์ž์ฃผ ์ ‘์ด‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋“ค์ด ํ•˜๊ณ  ์žˆ๋˜ ๋งŽ์€ ์ผ์— ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค. LLVM์„ ์‚ฌ์šฉํ•˜๋ฉด ์ •ํ™•ํ•œ GC๋กœ ์–ธ์–ด๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

CLR์— ํ•„์š”ํ•œ LLVM ์ง€์›๊ณผ GC ๋ฐ EH ๋ชจ๋‘์—์„œ Java์— ํ•„์š”ํ•œ ์ง€์› ๋ฐ ์ตœ์ ํ™” ํ”„๋กœ๊ทธ๋žจ์— ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ์ œํ•œ์— ์ƒ๋‹นํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ ์žˆ์„ ์ˆ˜ ์žˆ์Œ). ํ•œ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด CLR GC๋Š” ํ˜„์žฌ ๊ฐœ์ฒด ๋์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ด€๋ฆฌ ํฌ์ธํ„ฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Java๋Š” ๊ธฐ๋ณธ/ํŒŒ์ƒ ์Œ์„ ์ด๋ฃจ๋Š” ๋ณด๊ณ  ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์Œ์„ ์ด๋ฃจ๋Š” ๋ณด๊ณ ์— ๋Œ€ํ•œ ์ง€์›์„ CLR๋กœ ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ LLVM์˜ ์˜ตํ‹ฐ๋งˆ์ด์ € ํŒจ์Šค๋ฅผ ์ œํ•œํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ LLILC jit์€ ๋Š๋ฆฌ๊ณ  ๊ถ๊ทน์ ์œผ๋กœ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์ƒ์„ฑํ• ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ LLILC๊ฐ€ ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ž ์žฌ์ ์ธ ๋‹ค์ค‘ ๊ณ„์ธต ์ ‘๊ทผ ๋ฐฉ์‹์— ์–ด๋–ป๊ฒŒ ์ ํ•ฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ธฐ์ƒ์กฐ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ์•„์ด๋””์–ด๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์— ๊ณ„์ธตํ™”ํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ๊ณ„์ธต ์ง€ํŠธ์— RyuJit์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ๋งŽ์ด ๋ฐฐ์šฐ๋ฉด ์‹ค์ œ๋กœ ๋” ๋†’์€ ๊ณ„์ธต์˜ ์ง€ํŠธ๋ฅผ ์œ„ํ•œ ์—ฌ์ง€๊ฐ€ ์žˆ์Œ์„ ๋ฐœ๊ฒฌํ•˜๊ฑฐ๋‚˜ ์ ์–ด๋„ ๊ทธ๋Ÿฌํ•œ ์ผ์ด ์ดํ•ด๋˜๊ธฐ ์ „์— ํ•ด์•ผ ํ•  ๋‹ค๋ฅธ ์ž‘์—…์„ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@AndyAyersMS LLVM์˜ ์ œํ•œ ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋„์ž…ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Multicore JIT ๋ฐ ํ•ด๋‹น ํ”„๋กœํ•„ ์ตœ์ ํ™”๊ฐ€ coreclr๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

@benaadams - ๋„ค, ๋ฉ€ํ‹ฐ์ฝ”์–ด JIT๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์‹œ๋‚˜๋ฆฌ์˜ค(์žˆ๋Š” ๊ฒฝ์šฐ)๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์ง€๋งŒ ๊ตฌ์„ฑ์„ ํ†ตํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/dotnet/coreclr/blob/master/src/inc/clrconfigvalues.h# L548

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

๋‚ด ๋ง์€: ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ ์ค‘๋˜๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ธ๋ผ์ธ ๋ช…๋ น์–ด ์ˆ˜ ์ฆ๊ฐ€
  • ๋ณด๋‹ค "๊ณ ๊ธ‰" ๋ ˆ์ง€์Šคํ„ฐ ํ• ๋‹น์ž ์‚ฌ์šฉ(LLVM๊ณผ ์œ ์‚ฌํ•œ ์—ญ์ถ”์  ์ฐฉ์ƒ‰๊ธฐ ๋˜๋Š” ์ „์ฒด ์ฐฉ์ƒ‰๊ธฐ)
  • ๋” ๋งŽ์€ ์ตœ์ ํ™” ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. ์ผ๋ถ€๋Š” ํ˜„์ง€ ์ง€์‹์— ํŠนํ™”๋˜์–ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ: ๊ฐœ์ฒด๊ฐ€ ๋ฉ”์„œ๋“œ์—์„œ ์„ ์–ธ๋˜๊ณ  ๋” ํฐ ์ธ๋ผ์ธ ํ•จ์ˆ˜์˜ ๋ณธ๋ฌธ์— ํ• ๋‹น๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ „์ฒด ๊ฐœ์ฒด ํ• ๋‹น์„ ์Šคํƒ ํ• ๋‹น์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • CHA๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์ ์ค‘ ๊ฐœ์ฒด์— PIC๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด StringBuilder๋„ ์žฌ์ •์˜๋˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋†’์œผ๋ฉฐ, ์ฝ”๋“œ๊ฐ€ StringBuilder๋กœ ์ ์ค‘๋  ๋•Œ๋งˆ๋‹ค ๋กœ ํ‘œ์‹œ๋˜๋ฉด ๋‚ด๋ถ€์—์„œ ํ˜ธ์ถœ๋œ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ€์ƒํ™”ํ•  ์ˆ˜ ์žˆ๊ณ  ์œ ํ˜• ๋ณดํ˜ธ ์žฅ์น˜๊ฐ€ SB์˜ ์•ก์„ธ์Šค ์•ž์— ์„ค์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋˜ํ•œ ๋งค์šฐ ์ข‹์„ ๊ฒƒ์ด์ง€๋งŒ ์•„๋งˆ๋„ ์ด๊ฒƒ์€ CompilerServices๊ฐ€ ์ฝ”๋“œ๋‚˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ์ถœ๋˜๋Š” "๊ณ ๊ธ‰ ์ปดํŒŒ์ผ๋Ÿฌ"๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ฒŒ์ž„์ด๋‚˜ ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ๊ณผ ๊ฐ™์€ ์žฅ์†Œ์—์„œ "๋” ๊นŠ์ด ์ปดํŒŒ์ผ"ํ•  ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ NGen์€ ์•„๋‹ˆ์ง€๋งŒ ๊ณ„์ธตํ™”๋˜์ง€ ์•Š์€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ(๋ฐ”๋žŒ์งํ•œ ๊ฒฝ์šฐ) ์ตœ์†Œํ•œ ์ด ์ถ”๊ฐ€ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์— ๋” ๋ฌด๊ฑฐ์šด ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํ”Œ๋žซํผ์ด ๋ฌด๊ฑฐ์šด ์ตœ์ ํ™”๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด(Mono๋ผ๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค) API ํ˜ธ์ถœ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ NO-OP๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@noahfalk , @kouvel ๋“ฑ์˜ ๋…ธ๋ ฅ ๋•๋ถ„์— ์ด์ œ ๊ณ„์ธตํ™”๋ฅผ ์œ„ํ•œ ๊ฒฌ๊ณ ํ•œ ๊ธฐ๋ฐ˜์ด ๋งˆ๋ จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ณ  "๊ณ„์ธตํ˜• ์ง€ํŒ…์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•" ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ์ฃผ์ œ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ํ˜„์žฌ ๊ณ„์ธต์ด ํ˜„์žฌ ์–ด๋–ค ์ƒํ™ฉ์ธ์ง€ ์•„์ด๋””์–ด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ข‹๋“  ๋‚˜์˜๋“  ์‹ค์ œ ํ–‰๋™์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋™์ž‘์ด ์–ด๋”˜๊ฐ€์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์ง€๋งŒ ๊ตฌ์ฒด์ ์œผ๋กœ ๊ณ„์ธตํ™”ํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ˆ˜์ง‘ํ•œ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ณง ์–ด๋–ค ์ข…๋ฅ˜์˜ ์š”์•ฝ ๊ธ€์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

COMPlus_TieredCompilation=1 ๋ฅผ ์„ค์ •ํ•˜์—ฌ 2.1์—์„œ ๊ณ„์ธตํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋„ํ•˜์‹œ๋ฉด ๋ฐœ๊ฒฌํ•œ ๋‚ด์šฉ์„ ๋‹ค์‹œ ์•Œ๋ ค์ฃผ์„ธ์š”....

์ตœ๊ทผ PR(https://github.com/dotnet/coreclr/pull/17840, https://github.com/dotnet/sdk/pull/2201)์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ„์ธตํ™”๋œ ์ปดํŒŒ์ผ์„ ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. json ์†์„ฑ ๋˜๋Š” msbuild ํ”„๋กœ์ ํŠธ ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ตœ๊ทผ ๋นŒ๋“œ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ํ•œ๋™์•ˆ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@jkotas ์—์„œ ์ด์ „์— ๋…ผ์˜ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ณ„์ธตํ˜• JIT๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?
Tizen ํœด๋Œ€์ „ํ™”์—์„œ ์—ฌ๋Ÿฌ ์•ฑ์„ ์ธก์ •ํ•œ ๊ฒฐ๊ณผ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ DLL|์•ฑ DLL|๊ณ„์ธตํ™”|์‹œ๊ฐ„, s
-----------|--------|------|--------
R2R |R2R |์•„๋‹ˆ์š” |2.68
R2R |R2R |์˜ˆ |2.61 (-3%)
R2R |์•„๋‹ˆ์š” |์•„๋‹ˆ์š” |4.40
R2R |์•„๋‹ˆ์š” |์˜ˆ |3.63 (-17%)

FNV ๋ชจ๋“œ๋„ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค๋งŒ, ์ด๋ฏธ์ง€๊ฐ€ ์—†์„ ๋•Œ๋Š” ์ž˜ ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

cc @gbalykov @nkaretnikov2

์ฐธ๊ณ ๋กœ ๊ณ„์ธตํ™”๋œ ์ปดํŒŒ์ผ์€ ์ด์ œ .NET Core์˜ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค. https://github.com/dotnet/coreclr/pull/19525

@alpencolt , R2R๊ณผ ๊ฐ™์€ AOT ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๋•Œ ์‹œ์ž‘ ์‹œ๊ฐ„ ๊ฐœ์„ ์ด ๋œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘ ์‹œ๊ฐ„ ๊ฐœ์„ ์€ ํ˜„์žฌ ๋” ์ ์€ ์ˆ˜์˜ ์ตœ์ ํ™”๋กœ ๋” ๋น ๋ฅด๊ฒŒ ์ง€ํŒ…ํ•˜๋Š” ๋ฐ์„œ ๋น„๋กฏ๋˜๋ฉฐ, AOT ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๋•Œ JIT์— ๋œ ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ œ๋„ค๋ฆญ, IL ์Šคํ… ๋ฐ ๊ธฐํƒ€ ๋™์  ๋ฉ”์„œ๋“œ์™€ ๊ฐ™์€ ์ผ๋ถ€ ๋ฉ”์„œ๋“œ๋Š” ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ œ๋„ค๋ฆญ์€ AOT ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์‹œ์ž‘ํ•˜๋Š” ๋™์•ˆ ๊ณ„์ธตํ™”์˜ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@kouvel ์˜ ์ปค๋ฐ‹์„ ํ†ตํ•ด ์ œ๋ชฉ์˜ ์š”์ฒญ์„ ๋‹ฌ์„ฑํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. D ์‚ฌ๋žŒ๋“ค์€ ์š”์ฒญ๋œ ๊ฐœ์„  ์‚ฌํ•ญ, ์งˆ๋ฌธ ๋˜๋Š” ํŠน์ • ์กฐ์‚ฌ. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์ด ์กฐ๊ธฐ์— ๋‹ซํ˜”๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ๋ฌผ๋ก  ์ €ํฌ์—๊ฒŒ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

@kouvel ๋งˆ๊ฐ๋œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋…ผํ‰์„ ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. crossgen๊ณผ ๊ฐ™์€ AOT ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๋•Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—ฌ์ „ํžˆ ํ•ซ์ŠคํŒŸ ์ฝ”๋“œ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๋‘ ๋ฒˆ์งธ ๊ณ„์ธต ์ปดํŒŒ์ผ์˜ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

@daxian-dbw ๋„ค, ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„์— Jit๋Š” ํฌ๋กœ์Šค ์–ด์…ˆ๋ธ”๋ฆฌ ์ธ๋ผ์ธ(dll ๊ฐ„)์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜์— ๊ธฐ๋ฐ˜ํ•œ ๋ถ„๊ธฐ ์ œ๊ฑฐ( readonly static ); ๋“ฑ

@benaadams ๊ทธ๋ฆฌ๊ณ  ์ž˜ ์„ค๊ณ„๋œ AOT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๊นŒ?

https://blogs.msdn.microsoft.com/dotnet/2018/08/02/tiered-compilation-preview-in-net-core-2-1/ ์—์„œ ์ด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ์ด๋ฏธ์ง€์—๋Š” ์ผ๋ถ€ ์œ ํ˜•์˜ ์ตœ์ ํ™”๋ฅผ ๊ธˆ์ง€ํ•˜๋Š” ๋ฒ„์ „ ์ง€์ • ์ œ์•ฝ ์กฐ๊ฑด ๋ฐ CPU ๋ช…๋ น ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์ฃผ Tiered Compilation์ด๋ผ๊ณ  ํ•˜๋Š” ์ด๋Ÿฌํ•œ ์ด๋ฏธ์ง€์˜ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด JIT๋Š” ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ๋ฒ„์ „์„ ๋Œ€์ฒดํ•  ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ์ƒ์„ฑํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, "์ž˜ ์„ค๊ณ„๋œ AOT๊ฐ€ ์•„๋‹˜"์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜›

๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ์ด๋ฏธ์ง€์—๋Š” ์ผ๋ถ€ ์œ ํ˜•์˜ ์ตœ์ ํ™”๋ฅผ ๊ธˆ์ง€ํ•˜๋Š” ๋ฒ„์ „ ์ง€์ • ์ œ์•ฝ ์กฐ๊ฑด ๋ฐ CPU ๋ช…๋ น ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ ์ค‘ ํ•˜๋‚˜๋Š” ํ•˜๋“œ์›จ์–ด ๋‚ด์žฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. AOT ์ปดํŒŒ์ผ๋Ÿฌ(crossgen)๋Š” x86/x64์˜ codegen ๋Œ€์ƒ์œผ๋กœ SSE2๋ฅผ ๊ฐ€์ •ํ•˜๋ฏ€๋กœ ํ•˜๋“œ์›จ์–ด ๋‚ด์žฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ ํ•˜๋“œ์›จ์–ด ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” JIT์— ์˜ํ•ด ํฌ๋กœ์Šค์  ์— ์˜ํ•ด ๊ฑฐ๋ถ€๋˜๊ณ  ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ž˜ ์„ค๊ณ„๋œ AOT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

AOT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋งํฌ ์‹œ๊ฐ„ ์ตœ์ ํ™”(๊ต์ฐจ ์–ด์…ˆ๋ธ”๋ฆฌ ์ธ๋ผ์ด๋‹์˜ ๊ฒฝ์šฐ) ๋ฐ ํ”„๋กœํ•„ ๊ธฐ๋ฐ˜ ์ตœ์ ํ™”(๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜์˜ ๊ฒฝ์šฐ)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ•œํŽธ AOT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” SIMD ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ "์ตœ์ข…์„ " ํ•˜๋“œ์›จ์–ด ์ •๋ณด(gcc/clang์˜ -mavx2 ์™€ ๊ฐ™์€)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ ์ค‘ ํ•˜๋‚˜๋Š” ํ•˜๋“œ์›จ์–ด ๋‚ด์žฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. AOT ์ปดํŒŒ์ผ๋Ÿฌ(crossgen)๋Š” x86/x64์˜ codegen ๋Œ€์ƒ์œผ๋กœ SSE2๋ฅผ ๊ฐ€์ •ํ•˜๋ฏ€๋กœ ํ•˜๋“œ์›จ์–ด ๋‚ด์žฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ ํ•˜๋“œ์›จ์–ด ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” JIT์— ์˜ํ•ด ํฌ๋กœ์Šค์  ์— ์˜ํ•ด ๊ฑฐ๋ถ€๋˜๊ณ  ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค? ๋‚˜๋Š” ์—ฌ๊ธฐ๋ฅผ ์ž˜ ๋”ฐ๋ฅด์ง€ ์•Š๋Š”๋‹ค. AOT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ๊ฑฐ๋ถ€ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ทธ๋ฆฌ๊ณ  ์ž˜ ์„ค๊ณ„๋œ AOT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

AOT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋งํฌ ์‹œ๊ฐ„ ์ตœ์ ํ™”(๊ต์ฐจ ์–ด์…ˆ๋ธ”๋ฆฌ ์ธ๋ผ์ด๋‹์˜ ๊ฒฝ์šฐ) ๋ฐ ํ”„๋กœํ•„ ๊ธฐ๋ฐ˜ ์ตœ์ ํ™”(๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜์˜ ๊ฒฝ์šฐ)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ•œํŽธ, AOT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” SIMD ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ "์ตœ์ข…์„ " ํ•˜๋“œ์›จ์–ด ์ •๋ณด(์˜ˆ: gcc/clang์˜ -mavx2)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋„ค, ์ œ๊ฐ€ ๋งํ–ˆ๋“ฏ์ด "์ž˜ ์„ค๊ณ„๋œ AOT ์ปดํŒŒ์ผ๋Ÿฌ"์ž…๋‹ˆ๋‹ค. ๐Ÿ˜

@masonwheeler ๋‹ค๋ฅธ ์‹œ๋‚˜๋ฆฌ์˜ค; crossgen์€ Jit๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” AoT์ด๋ฉฐ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์žฌ์ปดํŒŒ์ผ ๋ฐ ์žฌ๋ฐฐํฌ ์—†์ด dll์˜ ์„œ๋น„์Šค/ํŒจ์นญ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. Tier1๋ณด๋‹ค ๋” ๋น ๋ฅธ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ Tier0๋ณด๋‹ค ๋” ๋‚˜์€ ์ฝ”๋“œ ์ƒ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”Œ๋žซํผ ์ค‘๋ฆฝ์ ์ด์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

Tier0, crossgen ๋ฐ Tier1์€ ๋ชจ๋‘ coreclr ์—์„œ ์‘์ง‘๋ ฅ ์žˆ๋Š” ๋ชจ๋ธ๋กœ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ต์ฐจ ์–ด์…ˆ๋ธ”๋ฆฌ ์ธ๋ผ์ธ(Jit์ด ์•„๋‹˜)์„ ์œ„ํ•ด์„œ๋Š” ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๋‹จ์ผ ํŒŒ์ผ ์‹คํ–‰ ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ์ด ํ•„์š”ํ•˜๋ฉฐ ์‚ฌ์šฉ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํŒจ์น˜ํ•˜๊ณ  ํŠน์ • ํ”Œ๋žซํผ(์–ด๋–ค ๋ฒ„์ „์˜ ์‚ฌ์šฉํ•  SSE, Avx ๋“ฑ, ๊ฐ€์žฅ ๋‚ฎ์€ ๊ณตํ†ต ๋˜๋Š” ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ƒ์‚ฐ ๋ฒ„์ „?).

corert ์€ ์ด ์Šคํƒ€์ผ์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ AoTํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ; Jit์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ • ์œ ํ˜•์˜ ๋ถ„๊ธฐ ์ œ๊ฑฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋Œ€์ฒด ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ๋งŽ์€ ์–‘์˜ ์ถ”๊ฐ€ asm ์ƒ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ํŠธ๋ฆฌ์˜ ๋Ÿฐํƒ€์ž„ ํŒจ์น˜

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ(Tier1 Jit์€ ๋ชจ๋“  if s๋ฅผ ์ œ๊ฑฐํ•จ)

readonly static _numProcs = Environment.ProcessorCount;

public void DoThing()
{
    if (_numProcs == 1) 
    {
       // Single proc path
    }
    else if (_numProcs == 2) 
    {
       // Two proc path
    }
    else
    {
       // Multi proc path
    }
}

@benaadams

๊ต์ฐจ ์–ด์…ˆ๋ธ”๋ฆฌ ์ธ๋ผ์ธ(Jit์ด ์•„๋‹˜)์„ ์œ„ํ•ด์„œ๋Š” ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๋‹จ์ผ ํŒŒ์ผ ์‹คํ–‰ ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ์ด ํ•„์š”ํ•˜๋ฉฐ ์‚ฌ์šฉ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํŒจ์น˜ํ•˜๊ณ  ํŠน์ • ํ”Œ๋žซํผ(์–ด๋–ค ๋ฒ„์ „์˜ ์‚ฌ์šฉํ•  SSE, Avx ๋“ฑ, ๊ฐ€์žฅ ๋‚ฎ์€ ๊ณตํ†ต ๋˜๋Š” ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ƒ์‚ฐ ๋ฒ„์ „?).

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์ฒด ์žฌ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. Android์˜ ART ์ปดํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์‚ดํŽด๋ณด์„ธ์š”. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌ ์ฝ”๋“œ(Java์˜ ๊ฒฝ์šฐ Java, ๋™์ผํ•œ ์›์น™์ด ์ ์šฉ๋จ)๋กœ ๋ฐฐํฌํ•˜๊ณ  ๋กœ์ปฌ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์ธ AOT๋Š” ๊ด€๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”๋œ ๊ธฐ๋ณธ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

์•ฝ๊ฐ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ชจ๋“  ๊ด€๋ฆฌ ์ฝ”๋“œ๊ฐ€ ์—ฌ์ „ํžˆ ์กด์žฌํ•˜๋ฉฐ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ๋ฐฐํฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํŒจ์น˜๋งŒ ์žˆ์œผ๋ฉด AOT๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์—ฌ ์ƒˆ ์‹คํ–‰ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋ถ„๋ช…ํžˆ ์ด๊ฒƒ์€ Android์˜ APK ์•ฑ ๋ฐฐํฌ ๋ชจ๋ธ๋กœ ์ธํ•ด Android ๋น„์œ ๊ฐ€ ๊นจ์ง€๋Š” ๋ถ€๋ถ„์ด์ง€๋งŒ ๋ฐ์Šคํฌํ†ฑ/์„œ๋ฒ„ ๊ฐœ๋ฐœ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

๋กœ์ปฌ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” AOT๊ฐ€ ๊ด€๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค...

์ด๊ฒƒ์€ ์ „์ฒด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์‚ฌ์šฉํ•œ ์ด์ „ NGen ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ ์ฝ”๋“œ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— ์ธ๋ผ์ธํ•˜๋Š” ๋‹จ์ผ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? .NET Core 2.1์—์„œ ์‹คํ–‰๋˜๋Š” Bing.com์—์„œ ๋‘ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์ฐจ์ด์ ์ด ๊ฐ•์กฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ

ReadyToRun ์ด๋ฏธ์ง€

๊ด€๋ฆฌ๋˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๋จผ์ € ๋ฉ”์„œ๋“œ๋ฅผ ๊ธฐ๊ณ„ ์ฝ”๋“œ๋กœ JIT ์ปดํŒŒ์ผํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‹œ์ž‘ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .NET Framework์—๋Š” NGEN์ด๋ผ๋Š” ์‚ฌ์ „ ์ปดํŒŒ์ผ ๊ธฐ์ˆ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ NGEN์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์ „ ์ปดํŒŒ์ผ ๋‹จ๊ณ„๊ฐ€ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Bing์˜ ๊ฒฝ์šฐ ์ด๋Š” ์ˆ˜์ฒœ ๋Œ€์˜ ์ปดํ“จํ„ฐ์—์„œ NGENing์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ณต๊ฒฉ์ ์ธ ๋ฐฐํฌ ์ฃผ๊ธฐ์™€ ๊ฒฐํ•ฉ๋˜์–ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์›น ์„œ๋น„์Šค ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์ „ ์ปดํŒŒ์ผ๋  ๋•Œ ์ƒ๋‹นํ•œ ์„œ๋น„์Šค ์šฉ๋Ÿ‰ ๊ฐ์†Œ๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ NGEN์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๊ด€๋ฆฌ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋ฉฐ, ์ด๋Š” ์ข…์ข… ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์„ค์ •์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ฒ ์ €ํžˆ ์กฐ์‚ฌ๋ฉ๋‹ˆ๋‹ค. .NET Core์—์„œ crossgen ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋นŒ๋“œ ๋žฉ์—์„œ์™€ ๊ฐ™์ด ์‚ฌ์ „ ๋ฐฐํฌ ๋‹จ๊ณ„๋กœ ์ฝ”๋“œ๋ฅผ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋œ ์ด๋ฏธ์ง€๋Š” ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

@masonwheeler AOT๋Š” .Net ํ”„๋กœ์„ธ์Šค์˜ ๋™์  ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์ „์ฒด .Net์—์„œ ์—ญํ’์— ์ง๋ฉดํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด .Net์˜ ๋ฉ”์„œ๋“œ ๋ณธ๋ฌธ์€ ์–ธ์ œ๋“ ์ง€ ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, interop๊ณผ ๊ฐ™์€ ์ž‘์—…์— ํ•„์š”ํ•œ ๋Œ€๋กœ ๋Ÿฐํƒ€์ž„์—์„œ ์ƒˆ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ ˆ์ฐจ ๊ฐ„ ๋ถ„์„ ์ •๋ณด๋Š” ๊ธฐ๊ปํ•ด์•ผ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ผ์‹œ์ ์ธ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. .Net์˜ ๋ชจ๋“  ์ ˆ์ฐจ ๊ฐ„ ๋ถ„์„ ๋˜๋Š” ์ตœ์ ํ™”(์ธ๋ผ์ด๋‹ ํฌํ•จ)๋Š” ๋Ÿฐํƒ€์ž„์— ์‹คํ–‰ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

AOT๋Š” AOT ์‹œ๊ฐ„๊ณผ ๋Ÿฐํƒ€์ž„ ์‚ฌ์ด์— ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ์˜ ์ง‘ํ•ฉ์ด ์ž‘๊ณ  ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์˜ ์˜ํ–ฅ์ด ์ง€์—ญํ™”๋˜์–ด AOT ์ตœ์ ํ™”์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ ๋ฒ”์œ„๊ฐ€ ํ•ญ์ƒ ์ฐธ์ด์–ด์•ผ ํ•˜๋Š” ํ•ญ๋ชฉ์„ ํฌ๊ฒŒ ๋ฐ˜์˜ํ•  ๋•Œ ๊ฐ€์žฅ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์•ˆ์˜ ์ˆ˜).

.Net ํ”„๋กœ์„ธ์Šค์˜ ๋™์  ํŠน์„ฑ์— ๋Œ€์ฒ˜ํ•˜๊ฑฐ๋‚˜ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ˆœ์ˆ˜ํ•œ AOT๋Š” ๊ฝค ์ž˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด .Net Native๋Š” ๋ฐ˜์‚ฌ ๋ฐ ์ƒํ˜ธ ์šด์šฉ์„ฑ์˜ ์˜ํ–ฅ์„ ๊ณ ๋ คํ•˜๊ณ  ์–ด์…ˆ๋ธ”๋ฆฌ ๋กœ๋”ฉ, ๋ฐ˜์‚ฌ ๋ฐฉ์ถœ ๋ฐ ( ๋‚˜๋Š” ์ถ”์ •) ํ”„๋กœํ•„ ์ฒจ๋ถ€. ํ•˜์ง€๋งŒ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํ•ต์‹ฌ ํ”„๋ ˆ์ž„์›Œํฌ(๋˜๋Š” ๋ชจ๋“  asp.net ์–ด์…ˆ๋ธ”๋ฆฌ)๋ฅผ ๋ฒˆ๋“ค๋กœ AOT ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋„๋ก crossgen์˜ ๋ฒ”์œ„๋ฅผ ์—ฌ๋Ÿฌ ์–ด์…ˆ๋ธ”๋ฆฌ๋กœ ํ™•์žฅํ•˜๋Š” ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒํ™ฉ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ์ฝ”๋“œ ์ƒ์„ฑ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ฐฑ์œผ๋กœ jit๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

@AndyAyersMS ๋‚˜๋Š” .NET AOT ์†”๋ฃจ์…˜์ด "์ˆœ์ˆ˜ํ•œ AOT ์ „์šฉ" ์†”๋ฃจ์…˜์ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฒฐ์ฝ” ๋ฏฟ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์—ฌ๊ธฐ์—์„œ ์„ค๋ช…ํ•˜๋Š” ์ด์œ  ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. JIT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”์— ๋”ฐ๋ผ ์ƒˆ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์†Œ์ˆ˜์˜ ์ƒํ™ฉ์—์„œ ๋งค์šฐ ๋งŽ์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์ด๋ฏ€๋กœ ์œ ํ˜• ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ Anders Hejlsberg์˜ ๊ทœ์น™์ด ์—ฌ๊ธฐ์— ์œ ์šฉํ•˜๊ฒŒ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•˜๋ฉด ์ •์ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋™์ .

System.Linq.Expressions์—์„œ
๊ณต๊ฐœ TDelegate ์ปดํŒŒ์ผ(bool ์šฐ์„  ํ•ด์„);

PreferInterpretation์ด true์ธ ๊ฒฝ์šฐ ๊ณ„์ธตํ™”๋œ ์ปดํŒŒ์ผ์ด ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰