
[유니티 TIPS] 알쓸유잡 | 병목 (Bottleneck) - 최적화 및 프로파일링 팁 - YouTube
7월22일에 올라온 유니티 코리아 공식 유튜브에서는 병목 현상을 해결하는 방법과 최적화, 프로파일링 팁에대해 설명했다.
당장 게임을 만들며 최적화를 위해 쓸 수 있는 방법들은 아니지만, 알쓸유잡이라는 제목 답게 주제를 선정했다.
병목(BottleNeck)

병목현상이란 어떤 하나의 요소때문에 전체적인 성능이나 기능에 제한을 받는것을 뜻한다.
병목이 병의 몸통보다 가늘기때문에 물이 상대적으로 천천히 쏟아지는것에 비유한것이라고 한다.
CPU 바운드 , GPU 바운드

CPU/GPU는 직렬이 아닌 병렬처리 방식이다.
CPU는 GPU에게 명령을 하고 자기에게 할당된 남은 일들을 열심히 처리한다.
GPU도 CPU에게 받은 명령을 통해 열심히 작업을 한다.
서로 작업을 하다가 GPU가 작업이 끝났는데도 CPU는 업무량이 너무 많아 GPU가 기다리는 일이 발생한다.
이걸 CPU 바운드라고 한다.
반대로 CPU가 작업을 전부 마칠때까지 GPU는 작업을 끝내지 못해 CPU가 기다리고 있다면,
이건 GPU 바운드이다.
이 병목현상이 어디서 오는것인지를 먼저 파악을 해야 문제를 해결 할 수 있는것이다.
CPU바운드인데 GPU가 말라 비틀어질때까지 먼지 탈탈털며 최적화를 시켜봐야 병목현상을 해결 할 수 없다는 뜻이다.
유니티 프로파일링에서 확인 할 수 있지만 버전마다 이름이 달라서 유니티 공식 유튜브에서도 정확히 얘기해주진 못했다.
유니티에서도 확인해보고 아이폰 어플을 개발중이라면 Xcode를 이용해 프로파일링을 하는것을 추천했다.
안드로이드 진영에서는 추천해줄만큼 괜찮은게 없는듯했다.
메모리
가상 메모리

프로그래밍을 배우면 메모리라는 단어를 수도없이 들으셨을 것이다.
최적화를 위해 이 메모리라는것이 엄청 중요한데, 우리는 가상메모리 라는 개념을 알아야한다.

예를들어 우리가 실제 컴퓨터에 달고있는 물리적인 램이 8기가 라고 해보자.
만약 게임을 하며 우리 컴퓨터에 붙어있는 8기가를 넘어 16기가를 써야 한다면 , 옆에 하드디스크나 ssd의 일정 공간을 빌려 메모리로 활용을 한다.
이 과정을 SwapPage 라고 한다. OS에서 지원해주는 기능이다.

GPU에도 이런식으로 당연히 메모리가 붙어있는데, GPU의 메모리가 부족하다면 이것도 CPU나 ssd,hdd에서 빌려올수 있다고 한다.(OpenGL과 같은 그래픽 라이브러리가 제공해준다.)
다시 가상 메모리 얘기로 넘어가서 , 이런식으로 물리적인 메모리+추가적인 메모리 공간들을 합한 메모리를 한겹 포장해서 가상메모리로 만들어 가상의 메모리 주소로 넘겨준다. 그래서 프로그래머들은 물리적인 메모리, 빌려온 메모리를 따로 구분 할 필요 없이 가상의 메모리 주소를 이용하여 프로그래밍을 한다.
스마트폰의 메모리
옛날 32비트 OS를 쓰던 시절 메모리는 2^32 로 4기가까지 인식이 가능했다.
지금 64비트 운영체제에서는 약 16엑사바이트까지 가능하다고 한다.
인식도 더 많이 가능하고, 한번에 더 많은양을 처리 할 수 있는 64비트 운영체제와 더불어 가상메모리라는 개념이 더해진다면 PC에서의 개발은 한결 더 맘이 편해진다.
SwapPage로 인해 병목현상이 생길수는 있어도, 메모리를 빌려 올 수 있기 때문에 뻗지는 않는다는 얘기다.
문제는 유니티는 PC개발보다는 모바일 개발이 많다는 것이다.


모바일은 단일 칩 체제로 CPU와 GPU의 물리적인 메모리 구분이 없다고한다.
우리가 핸드폰에서 쓰고있는 메모리를 쪼개 CPU,GPU에 필요할때 할당하여 처리를 하는것이다.
우리가 2개의 게임을 틀어놓고 하다보면 하나가 다시 로그인을 해야하거나 로딩을 하는 경우가 있는데,
이 경우는 메모리가 부족해서 폰 자체에서 그 메모리를 죽여버린 것이다.
모바일장치는 PC와 같은 스왑페이지가 없기 때문에 메모리의 최적화에 대한 요구사항이 높아진다.
끝
30분 정도의 영상이였는데 잠깐 틀어놨다가 재밌어서 계속 봤다.
정확한 프로파일링법, 최적화법 그런것은 없었지만 새로운 지식도 쌓였고 모바일에서의 메모리 중요성에대해 다시 한번 생각하게 된다.
유니티 코리아 공식 블로그에는 프로파일링 사용하기에 대한 내용이 상세하게 나와있으니 관심이 있으신 분들은 보시면 좋을 것 같다.
Unity 2021 LTS의 프로파일링 사용하기 : 네이버 블로그 (naver.com)
'게임 엔진 > Unity' 카테고리의 다른 글
[유니티 공식 유튜브] IL2CPP란 무엇일까? (0) | 2022.08.09 |
---|---|
[유니티 공식 유튜브] 모바일 게임 성능 최적화 - 2편 (0) | 2022.08.07 |
[유니티 공식 유튜브] 모바일 게임 성능 최적화 - 1편 (0) | 2022.08.01 |
2D가 만들고싶어지는 <Lost Crypt> - 2D Sample Project (0) | 2022.07.19 |
유니티에서 비주얼 스튜디오 코드(vs Code) 사용하기 (0) | 2022.07.15 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!