툴/유니티

IL2CPP,Mono,Burst

스튜디오 오버그래픽스 2023. 1. 24. 14:07

https://youtu.be/-9X965jXrn8

https://youtu.be/ZuzBOXUuEeM

 

빌드 셋팅하다보면 IL2CPP나 Mono, Burst 등 생소한 용어들이 있어서 유니티 코리아에서 찾아봄

 

유니티 엔진 자체는 C++
유저 스크립팅만 C#으로 작성

C++은 메모리 관리를 직접하기 때문에 성능이 좋음, 대신 생산성이 떨어짐
C#은 MS닷넷 프레임 워크를 사용하고 메모리 관리를 직접 안함, 대신 생산성이 좋음

C#은 닷넷 프레임워크에서 돌아가는데 MS제품이 아닌데에서는 돌아가지 않음(안드로이드,IOS 이식 불가)
그래서 다른 플랫폼에 가능한건 Mono프레임워크를 사용하기때문
Mono프레임워크는 다른 플랫폼에서도 돌아감(리눅스 기반)

IL(intermediate language)  = 중간언어 =  닷넷 어셈블리
C# -> IL -> Mono ->MS가 아닌 다른 플랫폼
이러한 방식을 JIT(Just-in-time)이라고 함(그때그때 컴파일 하는 방식)

IL2CPP라는건 IL을 CPP로 변환 한다는거(C#을 중간언어 IL로 바꾸고, IL을 C++로 바꿈)
C++로 변환이 되면 애플(Object-C를 사용하는데 C++도 돌아가게 되어있음), 안드로이드 호환 가능

이러한 방식은 AOT(Ahead of time 플랫폼에 따라 기계어로 변환)

 

유니티에서는 2가지 컴파일을 지원

-Mono(JIT방식)

-IL2CPP(AOT방식)

 

Burst는 컴파일러(유니티에서 사용하기 위해 만들어진 컴파일러)

Burst 컴파일러는 IL2CPP처럼 AOT방식이고 최적화에 이점이 있음

Burst의 이점 중 하나가 SIMD(Single Instruction Multiple Data) - 하나의 연산을 데이터를 여러개 처리