[C#] JIT ๊ตฌ์กฐ
C#, dotnet ๋ฐํ์์์ JIT ์ต์ ํ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.
Java์ ๋น๊ตํ๋ฉด์ ๋ณด๋ ๊ฒ๋ ์๋ฏธ๊ฐ ์์ ๊ฒ์ด๋ค. JVM๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง๋ ์๋ค.
https://blog.naver.com/sssang97/223573816314
JIT ์ปดํ์ผ
JIT ์ปดํ์ผ์ด๋, ํ๋ก๊ทธ๋จ ์คํ์ค์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ค์ ๋จธ์ ์ฝ๋๋ก ๋ณํํ๋ ์ต์ ํ ๊ธฐ๋ฒ์ ๋งํ๋ค.
C# ์ปดํ์ผ๋ฌ๋ C# ์ฝ๋๋ฅผ CIL(Common Intermediate Language)๋ผ๊ณ ํ๋ ์ค๊ฐ ์ธ์ด๋ก ๋ณํํด์ฃผ๋ ๊ฒ์ ๋ถ๊ณผํ๊ณ , C# ๋ฐํ์์ ๊ทธ CIL ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด์ฃผ๋ ์ธํฐํ๋ฆฌํฐ๋ค.
๋น์ฐํ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๊ฒ์ ๋จธ์ ์ฝ๋์ ๋นํ๋ฉด ํจ์ฌ ๋๋ฆฌ๋ค. Python ๊ฐ์ ์์ ์ธํฐํ๋ฆฌํฐ๊ฐ ๋๋ฆฐ ์ด์ ์ด๊ธฐ๋ ํ๋ค.
ํ์ง๋ง C#, Java ๋ฑ์ ์ธ์ด๋ ํ์ด๋ธ๋ฆฌ๋ ์ธํฐํ๋ฆฌํฐ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์, CIL๋ฅผ ๊ทธ๋๊ทธ๋ ์ต์ ํ๋ ๋จธ์ ์ฝ๋๋ก ๋ณํํด์ ์คํํ๋ค.
https://www.geeksforgeeks.org/python/what-is-just-in-time-jit-compiler-in-dot-net/
์ด๊ฒ ๋๋ฆฌ๋ค๋ ์ด์ผ๊ธฐ๊ฐ ๊ทธ๋ ๊ฒ ๋ง์ด ๋์ค์ง ์๋ ์ด์ ๋ค.
๊ณ์ธตํ๋ ์ปดํ์ผ (Tiered Compilation)
์ด๊ฑด .Net Core 3.0๋ถํฐ ๊ธฐ๋ณธ์ผ๋ก ์ ์ฉ๋์ด์๋ค.
๊ทผ๋ฐ ํญ์ ๊ทน๋๋ก ์ต์ ํ๋ ๋จธ์ ์ฝ๋๋ฅผ ๋ฝ์๋ด์ ์คํํ๋ฉด ์ข๊ธด ํ๊ฒ ์ง๋ง, ํญ์ ๊ทธ๋ฌ๋๊ฑด ํจ์จ์ ์ด์ง ์์ ์ ์๋ค. ์ผ๋จ ์ปดํ์ผ ์๊ฐ์ด ๊ธธ์ด์ง ๊ฒ์ด๊ณ , ์คํ์ค์ ๋ญ๋นํ๋ ๋ฆฌ์์ค๋ ์ปค์ง ๊ฒ์ด๋ค.
๊ทธ๋์ ์ ๋นํ ์ ์ถฉํด์ ๋์
ํ ๊ฐ๋
์ด Tired Compile์ด๋ค.
JVM Hotspot์์ C1, C2 ์ปดํ์ผ๋ฌ๋ฅผ ๋๋ ๋ ๊ฒ๊ณผ ์ ์ฌํ๋ค.
Tier0, Tier1์ผ๋ก ๊ตฌ๋ถ๋๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๋ฉ์๋ ๋จ์๋ก ๊ด๋ฆฌ๋๋ค.
JVM๊ณผ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์, ์ธํฐํ๋ฆฌํฐ ๋ชจ๋ ์์ด ๊ฐ๋ฒผ์ด ์ต์ ํ(Tier0)๋ก ๋ฐ๋ก ์ง์
ํ๋ค๋ ๊ฒ์ด๋ค.
Tier0
Tier0๋ ๊ฐ๋ฒผ์ด ์ต์ ํ๋ฅผ ๊ฑฐ์น ์ฝ๋๋ค. ๋น ๋ฅด๊ฒ ์คํํ๊ธฐ ์ํด ์ต์ ํ ์์ค์ ๋์ง ์์ ์ฑ๋ก ์์ฑํ๋ค.
ํน๋ณํ ์ด์ ๊ฐ ์๋ค๋ฉด Tier0๋ก ์์ํ๋ฉฐ, ๋ฃจํ๊ฐ ์๋ ๋จ์ํ ๋ฉ์๋๋ผ๋ฉด ๋์ฑ ๋ Tier0๊ฐ ์ ํธ๋๋ค.
Tier1
Tier0 ๋จ๊ณ์ ๋ฉ์๋๊ฐ ์ผ์ ํ์ ์ด์ ํธ์ถ๋๋ค๋ฉด Tier1๋ก ํ๋จํ๊ณ ๋ค์ ์ ๋๋ก ์ต์ ํ๋ฅผ ํ๋ค.
"์ผ์ ํ์"๋ ํ์ฌ ๋ฉ์๋ ํธ์ถ ํ์ ๊ธฐ์ค 30์ผ๋ก ํ๋์ฝ๋ฉ๋์ด์๋ค. ์ถํ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ ์๋ค.
Tier0(QuickJit)์ผ๋ก ์ธํ ์ฑ๋ฅ ์ ํ
๊ทผ๋ฐ ์๋ฌด๋๋ tier0 ์ฝ๋๋ ๋์ถฉ ์ต์ ํ๋ฅผ ํ๋๊ฑฐ๋ผ์ ์ง๋์น๊ฒ ๋นํจ์จ์ ์ผ๋ก ์ปดํ์ผ์ด ๋ ์๋ ์๋ค.
๊ทธ๋์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ tiered ์ต์
์ ๋ถ๋ถ์ ์ผ๋ก, ํน์ ์ ์ญ์ ์ผ๋ก ๋๊ธฐ๋ฅผ ์ํ ์๋ ์๋ค.
๋ถ๋ถ์ ์ผ๋ก ์ ์ฉํ๋ ค๋ฉด ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ ์ ์๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ด๋
ธํ
์ด์
์ ์ง์ ํ๋ฉด tier0๋ก ์ปดํ์ผํ์ง ์๋๋ค.
[MethodImpl(MethodImplOptions.AggressiveOptimization | MethodImplOptions.NoInlining)]
public static void M1()
{
Interlocked.Increment(ref Test);
}
ํน์, ๊ทธ๋ฅ ์ ์ญ์ ์ผ๋ก ์ค์ ํ ์๋ ์๋ค.
์ด๋ฌ๋ฉด ๊ทธ๋ฅ TieredCompilation๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๊ฑฐ์ ๋ชจ๋๋ก ์คํ๋๋ค.
๊ทธ๋ฌ๋๊น, tier0 ์์ด ๋ฐ๋ก ์ต์ ํ๋ ์ฝ๋(tier1)๋ก ์คํํ๋ ๋ฒ์ ์ธ ๊ฒ์ด๋ค.
<TieredCompilation>false</TieredCompilation>

์ฐธ์กฐ
https://learn.microsoft.com/ko-kr/visualstudio/debugger/jit-optimization-and-debugging?view=vs-2022
https://github.com/dotnet/runtime/blob/main/docs/design/features/tiered-compilation.md
https://learn.microsoft.com/ko-kr/dotnet/core/whats-new/dotnet-core-3-0#tiered-compilation