EveryDay.DevUp

[Unity] DOTS - Burst Compiler 본문

Unity

[Unity] DOTS - Burst Compiler

EveryDay.DevUp 2020. 6. 4. 22:26

ECS를 알아보기 전 DOTS에 대해 궁금한 점이 있다면 하단의 링크를 통해 알아 볼 수 있다.

https://everyday-devup.tistory.com/67

 

[Unity] DOTS ( Data Oriented Technology Stack )

● DOTS란? ▶ Unity를 통해 멀티스레딩과 퍼포먼스 향상이 가능한 차세대 유니티 기반 기술이다. ▶ ECS, Job System, Burst Compiler 의 각 고유한 기능들을 사용하여 DOD ( Data-Oriented Design )을 구현 하..

everyday-devup.tistory.com

● Burst 컴파일러

▶ C# 코드를 하드웨어의 최적화하여 Native 코드로 변경하는 것이다.

▶ iOS의 이슈로 Unity에서 IL2CPP를 지원하게 되었는데, IL2CPP는 iOS를 대응하기 위한 것이 였기 때문에 성능 향상에 목적은 아니였다. IL2CPP로 넘어오면서 성능을 개선할 수 있는 여지가 생겼고 그 결과 중 하나가 Burst이다.

▶ Burst는 SIMD ( Single Instruction Multiple Data )를 사용하여 CPU의 성능을 최대한 사용하고 C#에서 다양한 플랫폼위에 돌아가기 위해 성능적인 부분을 일부 포기했던 것을 최적화 한 것이다.

SIMD ( Single Instruction Multiple Data )

: 하나의 명령어로 여러개의 데이터를 한번에 처리하는 기법을 일반적인 프로그램은 SISD ( Single Instruction Single Data )로 구현되어 있기 때문에 CPU의 성능을 100%로 사용할 수는 없다.

: 한번에 여러개의 데이터를 모두 넘길 수 있으면 좋겠지만, 한번에 넘길 수 있는 대역폭이 정해져 있기 때문에 64비트, 128비트 등으로 데이터를 벡터라이즈하고, 연속된 메모리 공간에 있어야 하기 때문에 정렬 연산이 필요하다.

● Burst 컴파일 과정

● Burst 컴파일러 사용방법

[BurstCompile]
private struct MyJob : IJob
{
    public void Execute()
    {

    }
}

▶ Burst는 Job 구조체 위에 [BurstCompile] 어튜리뷰트를 선언하는 것만으로 적용이 된다.

● Burst 컴파일러 사용방법

: Burest를 C#의 문법으로 자유롭게 사용하고 싶지만, 여러가지 제약이 존재한다.

▶ Burst는 ECS와 같이 사용하기 용이하고, C#의 Struct와 Value Types는 사용할 수 있다.

Burst는 reference types ( class, string )에는 사용할 수 없으며, Classic으로 구현된 GameObject와 Component에도 사용할 수 없다. static variables에는 사용할 수 없지만, readonly인 경우에는 사용할 수 있다. try/catch는 사용할 수 없다.

Burst 컴파일러는 사용하기는 편할 수 있지만, 깊게 파고 들기 위해서는 컴퓨터 구조와 어셈블리어에 대한 이해가 동반된다. 해당 부분을 깊게 공부한다면 C# 코드를 최적화하는데도 도움이 될것으로 생각한다. 

참고 자료 : https://stonzeteam.github.io/SIMD-%EB%B3%91%EB%A0%AC-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/

 

SIMD 병렬 프로그래밍

SIMD 병렬 프로그래밍이 무엇인지 알아봅시다.

stonzeteam.github.io

참고 자료 : https://m.blog.naver.com/PostView.nhn?blogId=sorkelf&logNo=221126168094&proxyReferer=https:%2F%2Fwww.google.com%2F

 

SIMD의 개념 (What is the SIMD?)

SIMD란 무엇인가? ( What's the SIMD? ) SISD (Single Instruction, Single Data)SIM...

blog.naver.com

참고 자료 : https://docs.unity3d.com/Packages/com.unity.burst@1.3/manual/index.html

 

Burst User Guide | Burst | 1.3.0

Burst User Guide Burst is a compiler that translates from IL/.NET bytecode to highly optimized native code using LLVM. It is released as a Unity package and integrated into Unity using the Unity Package Manager. Quick Start Compile a Job with the Burst com

docs.unity3d.com