▶▷ 컴퓨터 구조와 메모리
컴퓨터 드라이브의 기원
초기 PC에는 A드라이브와 B드라이브가 있었고, 각각 운영체제와 응용 소프트웨어를 위한 플로피 디스크를 삽입하는 용도로 사용됨.
기술이 발전하면서 디스크가 내장형으로 바뀌고, 드라이브 명은 그대로 이어져 C드라이브부터 시작하게 됨.
➡️ 우리가 흔히 사용하는 윈도우의 기본 드라이브가 C부터 시작하는 이유
컴퓨터의 역사와 비트 개념
과거 컴퓨터는 전구를 기반으로 작동, 전구의 켜짐/꺼짐으로 1과 0을 표현.
이후 반도체로 진화하면서 이진법의 기반이 된 비트(Bit) 개념이 등장함.
두 개의 비트를 조합해 숫자를 표현하는 방식 등 기초적인 컴퓨터 원리를 설명함.
➡️ 이런 기초 개념은 컴퓨터가 정보를 어떻게 저장하고 처리하는지 이해하는 데 매우 중요함.
int 자료형의 한계
int형 데이터는 표현 가능한 수의 범위가 정해져 있음 (예: -21억 ~ +21억).
범위를 초과하면 언더플로우/오버플로우가 발생함.
부호 있는 정수에서 최소값은 반전 시 자기 자신이 되는 구조도 존재함.
➡️ 프로그래밍 시 숫자 연산의 오류나 예외 처리를 다룰 때 주의해야 할 대표적인 사례임.
컴퓨터의 자료구조와 이진법
컴퓨터는 이진법 기반으로 작동하기 때문에 다양한 자료 구조가 필요함.
같은 이진수라도 해석 방식에 따라 의미가 달라지며, 상황에 따라 오버플로우도 발생할 수 있음.
➡️ 자료 구조는 데이터를 효율적으로 저장하고 접근하는 데 핵심이므로, 시스템의 성능과 직결됨.
CPU의 역할
CPU는 연산 처리를 담당하지만, 모든 데이터를 직접 들고 있을 수는 없음 (비용 문제).
하드디스크는 영구 저장소, 램(RAM)은 임시 저장소로 사용되며, CPU는 램에서 필요한 데이터를 불러와 처리함.
➡️ 이 구조는 메모리 계층 구조라고 하며, 컴퓨터 아키텍처 설계에서 매우 중요한 개념임.
CPU 캐시 메모리
CPU는 속도 향상을 위해 자주 쓰는 데이터를 캐시 메모리에 저장해 둠.
캐시 히트율이 성능에 큰 영향을 주며, 하드디스크 → RAM → 캐시 순으로 접근 속도가 빨라짐.
➡️ 고성능 시스템일수록 캐시 최적화가 중요하며, CPU 내부에도 L1, L2, L3 캐시로 구분됨.
GPU의 등장 배경
초기 컴퓨터에는 GPU가 없었음. 단순 텍스트 기반 프로그램에는 필요하지 않았기 때문임.
현대 프로그램은 화면을 지속적으로 리프레시해야 하므로 그래픽 처리가 중요해졌고, CPU의 부담을 줄이기 위해 GPU가 등장함.
➡️ GPU는 그래픽 전용 프로세서로 시작했지만, 지금은 범용 연산(GPGPU)에도 널리 활용됨.
GPU의 병렬 처리 장점
GPU는 수많은 단순 연산을 병렬로 수행할 수 있어 효율적임.
비트코인 채굴이나 AI 작업 등 반복적이고 계산량 많은 작업에 적합하며, GPU는 CPU보다 병렬 연산에 특화되어 있음.
➡️ 수천 개 이상의 코어를 가진 GPU는 이미지 처리나 딥러닝 연산에 매우 강력함.
CPU-GPU 병목 현상
프로그램 최적화 시 GPU가 과부하되면 병목 현상이 발생할 수 있음.
이럴 경우 불필요한 리소스 제거, 에셋 정리 등으로 GPU의 부담을 줄여야 함.
➡️ 병목 현상을 줄이기 위해 CPU와 GPU의 역할 분담과 자원 관리를 전략적으로 설계해야 함.
▶▷ 최적화
프로젝트의 성능을 향상시키기 위한 대표적인 최적화
- 어드레서블:
리소스를 동적으로 로드하고 언로드할 수 있어 메모리 관리가 용이하며, 대규모 프로젝트에서 유리함. - 드로우콜 최적화:
화면에 렌더링되는 오브젝트 수를 줄여 GPU 연산을 줄이는 방법. 배칭, 머티리얼 정리 등을 통해 개선 가능함. - 리소스 최적화:
텍스처, 메시, 오디오 등의 용량과 해상도를 적절히 조절하여 전체 퍼포먼스를 높이는 방식. - 그 외 다양한 최적화 방식:
다이나믹/정적 배칭, GPU 인스턴싱, SRP 배칭 등 유니티에서 제공하는 다양한 기능들을 활용
➡️ 이 방식들은 독립적으로도 유효하지만 프로젝트의 구조, 장르, 플랫폼에 따라 우선순위를 조정하여 상황에 따라 조합해서 사용하면 더 큰 효과를 얻을 수 있음.
배치 수 줄이기
그래픽 데이터들을 하나로 묶어 GPU에 넘기는 단위를 "배치(Batch)"라고 하며, 배치 수가 많을수록 성능 저하가 발생함.
스프라이트, 메시 렌더러, 파티클 시스템 등 다양한 요소가 배치 수에 영향을 줌.
➡️ 드로우콜 최적화의 핵심이 바로 이 배치 수 줄이기이며, 실시간 렌더링 퍼포먼스에 직결됨.
다이나믹 배칭
다이나믹 배칭은 실행 중 유사한 오브젝트들을 자동으로 묶어 GPU에 전달하는 방식임.
유니티에서 런타임 중 확인 가능하며, 조건이 맞으면 자동으로 배치 수가 줄어듦.
➡️ 하지만 특정 조건(버텍스 수, 머티리얼 일치 등)을 충족해야 하므로, 적용 대상에 대한 이해가 필요함.
정적 배칭과 SRP 배칭
정적 배칭은 움직이지 않는 오브젝트들을 사전에 묶어 GPU에 전달하는 방식임.
인스펙터에서 Static 설정을 통해 지정하며, 배치 수를 줄이는 데 효과적임.
SRP 배칭은 정적 배칭의 한계를 보완한 것으로, 머티리얼이 달라도 같은 셰이더를 사용하면 묶을 수 있음.
➡️ URP, HDRP 등 스크립터블 렌더 파이프라인에서 주로 사용되며, 렌더링 최적화에 큰 기여를 함.
GPU 인스턴싱
동일한 메시와 재질을 사용하는 오브젝트를 한 번에 처리할 수 있게 해주는 기법임.
하나의 재질로 수백 개의 오브젝트를 렌더링할 수 있어 매우 효율적임.
유니티에서는 256개 미만의 버텍스를 가진 메시일 경우 주의가 필요함.
➡️ 반복되는 오브젝트가 많은 장면(예: 나무, 돌, 벽돌 등)에서 성능 최적화에 탁월한 효과를 발휘함.
'게임 개발 공부 기록' 카테고리의 다른 글
43일차 - 최적화 1 (0) | 2025.03.25 |
---|---|
42일차 - UI 복습 2 (0) | 2025.03.24 |
40일차 - UI 복습 1 (0) | 2025.03.20 |
39일차 - Path Of Survival 팀 프로젝트 마무리 (0) | 2025.03.19 |
38일차 - 에셋 관리 (0) | 2025.03.18 |