[ECS/DOTS] BurstCompile를 사용해보자

네,가능합니다 ㅣ 2024. 11. 19. 15:47

이전 편에서는 5000개의 캐릭터를 만들고 여러 가지 행동을 시키는 예제를 따라 하고 이해하는 시간을 가졌었다.

 

이번엔 일을 벌려놨으니 최적화를 해야겠지..?

 

간단한 버스트 컴파일러를 이용해서 최적화를 해볼 것이다.

 

방법은 아주 간단하다.

 

 

SpawnSystem의 OnUpdate 메서드에 아래와 같이 '[BurstCompile]' 속성을 추가하기만 하면 된다.

 

 

? 장난하세요 ?

 

이렇게 하면 버스트 컴파일러에 의해 고속 네이티브 코드로 변환된다고 한다.

 

원래라면 이 BurstCompile를 사용하려면 매우 엄격한 제약을 지켜야 한다.

 

ECS에서는 이런 제약을 지키면서 코딩할 수 있도록 여러 조치가 이루어져 있다.

 

아까 작성한 코드도 제약을 자연스럽게 충족하고 있기 때문에 BurstCompile을 그대로 사용할 수 있었다.

 

이제 프로파일링을 다시 해보기 전에 유니티 에디터의 상단에 'Jobs/Burst/Synchronous Compilation'을 ON으로 설정해 주자.

 

버스트 컴파일러는 기본적으로 비동기로 컴파일을 실행하기 때문에 계측할 때 컴파일이 완료되지 않을 가능성도 있어서 확실하게 버스트 컴파일러를 적용하는 것이 좋다.

 

이제 프로파일링을 해보자.

 

버스트 컴파일을 딸깍 했는데, 영상자료의 기준으로는 0.559ms의 속도가 나왔다. 이건 기존보다 5배 이상 빨라진 것이다.

(본인이 컴파일러보다 나을 거라는 생각은 아니.. 생각도 하지 말자)

 

이제 생성을 하는 첫 번째 프레임은 어느 정도 빨라졌는데, 그 후의 처리는 여전히 문제가 있을 것이다. (춤을 추고 걷고 이런 행동들을 하면서)

 

현재 프로파일러 기준으로

WalkerSystem은 6.6ms

DancerSystem은 5.7ms

가 측정되고 있다. 이러한 속성들도 속도를 높여보자.

 

먼저 아까처럼 OnUpdate에 딸깍해 주자

 

 

그리고 이 상태에서 확인을 해봤더니

 

DancerSystem은 속도가 0.2ms까지 줄어들었다. 

이 시점에서 충분히 유의미한 속도 향상이 이루어졌다.

 

다음 시간에는 C# Job System으로 병렬처리를 하는 시간을 가져보겠다.

 

여기까지가 공식 가이드 영상의 7분 40초쯤까지의 내용이다.