자세히보기

공부 나눔 (Sharing Study)/Unity만

[Unity] 병목 현상 해결하기

윤스톤 2023. 9. 11. 11:05

* 이 게시글은 아래 영상을 공부한 내용을 개인적으로 정리한 것입니다.

[병목 현상이란?]

말 그대로 병의 목 부분, 물이 빨리 빠지지 않게 만드는 원인 구간

→ 데이터의 흐름에서 문제가 되는 구간

병목이 CPU 바운드인지, GPU 바운드인지 먼저 찾는 것이 중요!

 

(드로우콜 > 이전 작성 게시글 확인)

2023.09.11 - [공부 나눔 (Sharing Study)/Unity만] - [Unity] 드로우콜과 배칭

 

[Unity] 드로우콜과 배칭

* 이 게시글은 ⌜유니티 그래픽스 최적화 스타트업⌟ 서적으로 공부한 내용을 개인적으로 정리한 것입니다. [드로우콜] : CPU가 GPU에게 렌더링하라고 명령을 보내는 것 오브젝트를 렌더링하려면

yoonstone-games.tistory.com

 

아래 사진은 GPU는 할 일이 남았지만, CPU는 일처리가 끝나고 아무것도 안하는 중

→ 렌더링되길 기다리는 중이라서 프로파일러에 Present 키워드가 존재함

(반대로 CPU가 아무것도 한산한 상태가 있기도 함)

 

이와 같이 CPU와 GPU 중 누가 일이 많은 상태인지를 먼저 확인해야 함

CPU가 바쁘고 일이 버거운데 GPU의 일을 줄이는 건 올바른 최적화 과정이 아님!

따라서 CPU 바운드인지, GPU 바운드인지를 먼저 찾는 것이 중요함

XCode를 이용해 프로파일링할 수 있음

 

[메모리 - PC]

CPU, GPU 바운드를 찾는 것 외에도 중요한 것 : 메모리

대부분 모바일 개발을 하는데, 모바일 환경에서의 메모리 관리가 어려움

 

우리가 사용하는 거의 모든 운영체제는 가상 메모리 개념을 사용함

 

게임을 실행하면 하드디스크에 저장되어있던 메모리가 CPU 메모리에 올라감

→ 쉐이더나 텍스처와 같이 렌더링이 필요한 메모리라면 GPU 메모리로 올라감

 

64비트 : 2^64 (16엑사)

32비트 : 2^32 (4기가)

 

실제 물리보다 더 많은 양의 메모리를 쓰게 되면 하드디스크의 일정 공간을 메모리로 활용

→ 스왑 페이지 (가상 메모리처럼 사용, 이론적으로는 16엑사바이트까지 사용 가능)

스왑이 많이 발생하면 그만큼 병목이 일어남 (게임이 늘어지긴해도 뻗진 않음)

 

(CPU와 GPU를 왔다갔다하는 메모리는 GL이라고 함 > 이전 작성 게시글 확인)

2023.09.11 - [공부 나눔 (Sharing Study)/Unity만] - [Unity] 그래픽스

 

[Unity] 그래픽스

* 이 게시글은 아래 영상을 공부한 내용을 개인적으로 정리한 것입니다. [그래픽스 라이브러리(GL)] 플래폼마다 지원하는 그래픽스 라이브러리가 다름 (그래픽스 라이브러리 = 그래픽스 API) 유니

yoonstone-games.tistory.com

 

[메모리 - 모바일]

모바일은 단일 칩 체제 → PC처럼 하드디스크 스왑이나 CPU 메모리가 GPU 메모리를 백업해주는 건 불가능

 

가상 메모리가 아니라서 물리적인 메모리가 4기가가 있다면 정말 4기가만 쓸 수 있음

다만, 메모리의 영역을 스왑페이지를 써서 여러 앱들이 공유 (하드디스크X)

 

게임A를 하다가 백그라운드로 내리고 게임B를 하면 게임A의 메모리를 압축해서 저장
→ 오랜시간 사용하지 않으면 데이터 날림 → 이전 게임으로 돌아가면 다시 로드

실제 메모리를 벗어날 수 없는 이유

1. NAND flash에 수명이 있기 때문

2. 대역폭과 발열

    대역폭: 플래시 메모리와 메인 메모리 사이에 데이터가 왔다갔다하는 통로의 크기

    대역폭이 클 수록 발열 이슈가 많이 발생함

 

 

[CPU와 GPU가 반 프레임씩 밀림]

CPU와 GPU는 정확히 동기화되지는 않음 (반프레임정도씩 밀림)

 

CPU가 할 일 다 하고 GPU의 일이 끝날 때까지 기다리는 상황 (Present)

→ 가만히 있지 말고, 다음 프레임의 로직에 대해 처리할 수 있도록

 

* 얼른 유니티의 프로파일러를 사용해보는 게 좋을 듯 (E북참고)

* 프로파일러를 볼 때 위 사진처럼 반 프레임씩 밀린다는 걸 기억하고 확인하기

반응형