일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 암호화
- Framework
- 2D Camera
- job
- C#
- 프레임워크
- DotsTween
- Job 시스템
- 단말기 해상도
- Dynamic Font
- AES
- base64
- Unity Editor
- 가이드
- 다이나믹 폰트
- 샘플
- Custom Package
- sha
- 텍스트 메시 프로
- 최적화
- ui
- TextMeshPro
- 커스텀 패키지
- unity
- jumping ball
- Dots
- Tween
- 이미지 폰트
- adfit
- RSA
- Today
- Total
EveryDay.DevUp
[Unity] DOTS - Burst Compiler 본문
ECS를 알아보기 전 DOTS에 대해 궁금한 점이 있다면 하단의 링크를 통해 알아 볼 수 있다.
https://everyday-devup.tistory.com/67
● 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/
참고 자료 : https://docs.unity3d.com/Packages/com.unity.burst@1.3/manual/index.html
'Unity' 카테고리의 다른 글
[Unity] Unity Package Manager (유니티 패키지 매니저 UPM ) (0) | 2020.06.14 |
---|---|
[Unity] Assembly definition files ( 어셈블리 정의 파일 ) (3) | 2020.06.11 |
[Unity] DOTS - 프로세스, 스레드, C# Job 시스템 (0) | 2020.06.03 |
[Unity] DOTS - ECS ( Entity, Component, System ) (0) | 2020.06.02 |
[Unity] DOTS ( Data Oriented Technology Stack ) (0) | 2020.06.02 |