SlideShare uma empresa Scribd logo
1 de 19
Mobile Memory 대역폭
2018/10 - Spotlight
목차
• 하드웨어
• 4년간 모바일 하드웨어 변화
• 게임에서 메모리 대역폭이 중요한 이유
• 게임에서 대역폭 사용 전략
• 안드로이드 메모리 구조
• 프로파일링
• 미래 메모리 하드웨어 구조 ( hUMA - HSA )
메모리란?
• 프로세스( CPU / GPU / DSP / ISP )가 연산을 위한 데이터 장소
• 가장 가까운 메모리 L1, L2, L3, 외부 메모리로 접근한다.
• 외부 메모리는 접근 속도(메모리 대역폭)가 느리다.
• 모든 기기설계에서 프로세스 와 메모리대역과 양은 밸런스를 맞춘다.
• 모바일 빼고…. ( 전력문제로 불가능 )
PC와 다른점
• 컴퓨터
• 고사양은 별도 GPU + VRAM 을 가진 외장그래픽 장착
• 저사양은 CPU + GPU 통합된 APU (내장형그래픽)
• UMA 구조로 메인램의 일정부분을 미리 나누어서 GPU용으로 정적으로 구분
• CMOS 에서 설정
• 모바일
• 모든 프로세서가 하나의 칩에 존재 ( SOC = CPU + GPU + DSP + ISP )
• UMA구조로 하나의 메모리만 존재하고 모든프로세스들이 동적으로 같이 사용
• 프로세스들은 각자 MMU을 가지고 DMC를 통해 물리적 메모리 접근
• 최근에서 프로세스 MMU와 DMC 의 연결비트폭을 다르게 주어 GPU에 힘을 준다.
MMU : 버추얼 메모리 > 피지컬 메모리 주소 맵핑
DMC : 다이나믹 메모리 컨트롤러
모바일 UMA 메모리 하드웨어 구조
각 프로세스를 하나의 프로그램으로 생각하면 MMU는 각 프로그램의 버추얼 메모리 테이블
하드웨어 변화
2014년 저가 2018년 저가 2014년 중급 2018년 중급 2014년 고가 2018년 고가
SOC Snap 410 Snap 435 Snap 615 Snap 630 Snap 805 Snap 845
GPU Adreno 306
21.6 GF
Adreno 505
48.6 GF
Adreno 405
59.4 GF
Adreno 508
170 GF
Adreno 420
144~172.8 GF
Adreno 630
727 GF
메모리대역폭 Single/32bit/533Mhz/
4.2GB
Single/32bit/667Mhz/
5.33GB
Single/32bit/800Mhz/
6.4GB
Dual/32bit/667Mhz/
10.66GB
Dual/64bit/800Mhz/
25.6GB
Dual/64bit/933Mhz/
29.9GB
• 4년동안 고가형 기준으로 GPU 연산력은 500% 높아졌지만 대역폭은 17%밖에 높아지지 않았다.
• CPU 역시 연산력이 높아져 전보다 메모리를 더 많이 쓴다.
• 비대칭구조로 인한 부족한 대역폭을 해결하는 방향으로 발전
• Tiled 방식, 얼리Z
• 캐시메모리를 증가
게임에서 메모리 대역폭
• 게임은 2~4개의 CPU 코어와 GPU가 동시에 한개의 메모리 버스 이용
• 단순무식한 가정
• 500Mb 의 메모리를 쓰는 게임이 초당 60프레임일때 메모리대역 사용량은?
• 500mb x 60fps = 30 G/s
• 후처리(Post Process) 가볍게 몇개 켜주시면
• 1920 x 1080 x 4 x 60 fps x ??? = ??
• 어제나온 최신기기도 29 G/s 였는데….
게임에서 메모리 대역폭
• 모바일 GPU 연산력은 PS3( 192 GF/s )를 넘어 PS4( 1843 GF/s ) 에 근접
• 하지만 대역폭은 PS4 ( 176 GB/s )가 아니라 PS3 ( CPU전용 약15 GB/s + GPU전용 22.4 GB/s ) 에도 못 미친다.
• 연산을 빛의 속도로 계산해도 이미 램대역폭에서 병목
• CPU/GPU 연산력이 느린건지 메모리대역폭때문인지 개발자가 알 방법이 없다.
• 테스트를 통한 추측과 통계로 최적화
• 위 이유로 모바일에서는 Deferred 가 불가능
• 1920 x 1080 x 8 x 4 Msaa x 60 fps 기본 프레임버퍼
• 1920 x 1080 x 4 x 3장(deferred MRT) x 60 fps ( 엄청난 텍스처 샘플링…즉 대역폭 소모 )
• Tiled 구조에서 쥐약인 반복되는 FBO 스왑 ( 모든 타일버퍼 플러쉬 )
게임에서 메모리 전략
• 프로파일링을 피처 단위로 하지말자.
• 공유자원(램대역)때문에 다른기능 성능에 영향 ( cpu로직/ui/사운드/io/후처리/gpu/네트워크 )
• 개별적 기능 프로파일링이 의미가 PC와 같지 않다. ( ex: 테스트씬에서는 빨랐는데? )
• 메모리 대역을 많이 쓰는 것보다 연산을 많이 쓰는게 오히려 빠를수도 있다. (최신기기일수록)
• 텍스처 스트리밍을 적극 사용
• 2018.2 부터 가능, 밉맵을 작은것부터 로드하여 업로딩을 절약한다. 샘플링은 동일.
• 모바일에서 사용하기위해서는 APK를 LZ4 로 빌드필요
• 너무 작은 버짓을 설정하면 오히려 독이 된다. ( 자주 텍스처를 올리고 내린다. )
• 모바일에서 다이나믹 배칭은 DrawCall 이득보다 램대역폭과 cpu오버로드가 더 클 경우가 많다.
안드로이드 메모리 관리
• 메모리 페이지는 3가지 종류
• Used Pages - 사용되고 있는 메모리
• Cached Pages - 사용되었다가 사용안하고 있어서 캐싱되어있는 페이지
• Free Pages - 사용되고 있지 않는 메모리
• 모든 App 은 3가지의 램사이즈가 존재
• RSS( Resident Set Size ): App에서 사용되는 모든 메모리 사이즈, 다른 App과 공유해서 사용하는 영역포함
• PSS( Proportional Set Size ): RSS에서 다른 App와 공유해서 사용하는 영역을 공유숫자로 나누어서 계산
• USS( Unique Set Size ): App만 쓰는 메모리 영역
• OS는 메모리가 부족해지면 PSS 기준으로 사용량과 중요도를 계산해 앱을 죽이고 메모리 확보
게임의 사용 메모리 보기 ( PSS )
유니티 메모리 프로파일러(simple)
• Total - streaming데이타(Video, FMOD) 와 Profiler를 제외한 총 사용 메모리
• Unity - 유니티 엔진에서 사용하는 메모리(c++)
• Mono - 모노런타임에 할당된 메모리(c#)
• GfxDriver - 렌더타겟을 제외한 텍스처 메모리만 표시
• 그래픽드라이버가 사용하는 비디오램이 아니다. 쉐이더나 다른 버퍼X
• FMOD - 사운드 파일 용량
• Video - 비디오파일로 사용하는 메모리
• Profiler - 프로파일러가 사용하는 메모리
Used / Reserved - 현재 쓰는 / 확보한 메모리 용량 ( OS에 자주 메모리 할당을 하지않기 위해 버퍼를 확보하여 놓는다.)
유니티 메모리 프로파일러 한계
• 코드메모리와 라이브러리 메모리를 표시하지는 않는다.
• 프로파일러는 오직 어플에서 할당한 메모리만 표시한다.
• 컴퓨터의 Editor에서 메모리 프로파일러는 실기기와 다르다.
• 텍스처 압축포맷이 다르다.
• Editor와 플랫폼간의 다른 로직 ( #if UnityEditor )
• 꼭 실기빌드를 가지고 프로파일링 하자
메모리 프로파일러(detail)
• Other - 밑의 항목 들 제외한 모든 사용량
• Assets - Scene/Resources/AssetBundles 등을 통해 로드 된 모든 에셋들
• Builtin Resources - 유니티에서 사용하는 기본 로드되는 리소스 + Editor에서 사용하는 리소스
• Scene Memory - 게임오브젝트와 컴포넌트가 쓰는 메모리
• Not Saved - DontSave 가 설정된 게임오브젝트들
메모리 프로파일러 익스텐션
• 훨씬 강력한 메모리 프로파일러로 모든 레퍼런스 카운트와 오브젝트를 찾아 디테일한 분석
• Version 1
• https://bitbucket.org/Unity-Technologies/memoryprofiler
• 5.6 이상 유니티 버전 필요
• Version 2
• 2018.3 이상 유니티 버전 필요
• 현재(2018.10월) JSON 파일 직접 수정해서
설치해야함
• 위치: 프로젝트폴더/Packages/manifest.json
UMA 구조 발전
• hUMA - 각 프로세스가 메모리 주소를 공유하여 메모리사용량과 대역, 큐잉 모두 절약
• hUMA 현재 상황
• AMD와 퀄컴에서 밀고있는 HSA규격이 가장 발전함
• 인텔은 브로드웰부터 Shared Virtual Memory 로 독자 규격 만듬
• Nvidia ???
• CPU < > GPU 간의 메모리 제로 카피가능
• 그래픽드라이버가 버퍼를 생성하고 포인터로 카피
HSA
• AMD가 최초 개발하여 퀄컴과 함께 개발하는 표준
http://www.hsafoundation.com
• AMD GCN구조인 Kaveri 가 최초로 PS4/XBOX 에 쓰임
• 2015년에 1.0 ver ( 현재 1.1 ver )
• 삼성칩은 G71 gpu가 달린 Exynos8895 부터 ( 2017년 )
• 스냅드래곤은 아직 정확한 지원여부 확인X
• 하드웨어, 소프트웨어 둘다 지원 필요
• 현재 게임기, OpenCL, CUDA 등을 통해서만
hUMA 이득을 얻음
• 모바일 게임에서는 아직 사용X
Reference
• https://www.slideshare.net/linaroorg/hsa-linaro-updatejuly102013 (HSA Overview)
• http://www.hsafoundation.com
• https://www.slideshare.net/InformaticaUCM/programming-models-for-heterogeneous-chips
• https://legacy.iis.ee.ethz.ch/~gmichi/asocd/lecturenotes/Lecture10.pdf
Thank you

Mais conteúdo relacionado

Semelhante a Mobile memory

Compute shader
Compute shaderCompute shader
Compute shader
QooJuice
 
테슬라 도조 프로젝트 (What is Tesla's Dojo Supercomputer?)
테슬라 도조 프로젝트 (What is Tesla's Dojo Supercomputer?)테슬라 도조 프로젝트 (What is Tesla's Dojo Supercomputer?)
테슬라 도조 프로젝트 (What is Tesla's Dojo Supercomputer?)
BoanLabDKU
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
ChangKyu Song
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
Amazon Web Services Korea
 

Semelhante a Mobile memory (20)

Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
 
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
System+os study 1
System+os study 1System+os study 1
System+os study 1
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
 
Game engine 2011
Game engine 2011Game engine 2011
Game engine 2011
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
Compute shader
Compute shaderCompute shader
Compute shader
 
테슬라 도조 프로젝트 (What is Tesla's Dojo Supercomputer?)
테슬라 도조 프로젝트 (What is Tesla's Dojo Supercomputer?)테슬라 도조 프로젝트 (What is Tesla's Dojo Supercomputer?)
테슬라 도조 프로젝트 (What is Tesla's Dojo Supercomputer?)
 
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
 
더 빠른 게임시스템을 위하여 개선된 서비스들 - 김병수 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
더 빠른 게임시스템을 위하여 개선된 서비스들 - 김병수 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019더 빠른 게임시스템을 위하여 개선된 서비스들 - 김병수 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
더 빠른 게임시스템을 위하여 개선된 서비스들 - 김병수 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
 
Ai based on gpu
Ai based on gpuAi based on gpu
Ai based on gpu
 
유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석
 
Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 

Mobile memory

  • 2. 목차 • 하드웨어 • 4년간 모바일 하드웨어 변화 • 게임에서 메모리 대역폭이 중요한 이유 • 게임에서 대역폭 사용 전략 • 안드로이드 메모리 구조 • 프로파일링 • 미래 메모리 하드웨어 구조 ( hUMA - HSA )
  • 3. 메모리란? • 프로세스( CPU / GPU / DSP / ISP )가 연산을 위한 데이터 장소 • 가장 가까운 메모리 L1, L2, L3, 외부 메모리로 접근한다. • 외부 메모리는 접근 속도(메모리 대역폭)가 느리다. • 모든 기기설계에서 프로세스 와 메모리대역과 양은 밸런스를 맞춘다. • 모바일 빼고…. ( 전력문제로 불가능 )
  • 4. PC와 다른점 • 컴퓨터 • 고사양은 별도 GPU + VRAM 을 가진 외장그래픽 장착 • 저사양은 CPU + GPU 통합된 APU (내장형그래픽) • UMA 구조로 메인램의 일정부분을 미리 나누어서 GPU용으로 정적으로 구분 • CMOS 에서 설정 • 모바일 • 모든 프로세서가 하나의 칩에 존재 ( SOC = CPU + GPU + DSP + ISP ) • UMA구조로 하나의 메모리만 존재하고 모든프로세스들이 동적으로 같이 사용 • 프로세스들은 각자 MMU을 가지고 DMC를 통해 물리적 메모리 접근 • 최근에서 프로세스 MMU와 DMC 의 연결비트폭을 다르게 주어 GPU에 힘을 준다. MMU : 버추얼 메모리 > 피지컬 메모리 주소 맵핑 DMC : 다이나믹 메모리 컨트롤러
  • 5. 모바일 UMA 메모리 하드웨어 구조 각 프로세스를 하나의 프로그램으로 생각하면 MMU는 각 프로그램의 버추얼 메모리 테이블
  • 6. 하드웨어 변화 2014년 저가 2018년 저가 2014년 중급 2018년 중급 2014년 고가 2018년 고가 SOC Snap 410 Snap 435 Snap 615 Snap 630 Snap 805 Snap 845 GPU Adreno 306 21.6 GF Adreno 505 48.6 GF Adreno 405 59.4 GF Adreno 508 170 GF Adreno 420 144~172.8 GF Adreno 630 727 GF 메모리대역폭 Single/32bit/533Mhz/ 4.2GB Single/32bit/667Mhz/ 5.33GB Single/32bit/800Mhz/ 6.4GB Dual/32bit/667Mhz/ 10.66GB Dual/64bit/800Mhz/ 25.6GB Dual/64bit/933Mhz/ 29.9GB • 4년동안 고가형 기준으로 GPU 연산력은 500% 높아졌지만 대역폭은 17%밖에 높아지지 않았다. • CPU 역시 연산력이 높아져 전보다 메모리를 더 많이 쓴다. • 비대칭구조로 인한 부족한 대역폭을 해결하는 방향으로 발전 • Tiled 방식, 얼리Z • 캐시메모리를 증가
  • 7. 게임에서 메모리 대역폭 • 게임은 2~4개의 CPU 코어와 GPU가 동시에 한개의 메모리 버스 이용 • 단순무식한 가정 • 500Mb 의 메모리를 쓰는 게임이 초당 60프레임일때 메모리대역 사용량은? • 500mb x 60fps = 30 G/s • 후처리(Post Process) 가볍게 몇개 켜주시면 • 1920 x 1080 x 4 x 60 fps x ??? = ?? • 어제나온 최신기기도 29 G/s 였는데….
  • 8. 게임에서 메모리 대역폭 • 모바일 GPU 연산력은 PS3( 192 GF/s )를 넘어 PS4( 1843 GF/s ) 에 근접 • 하지만 대역폭은 PS4 ( 176 GB/s )가 아니라 PS3 ( CPU전용 약15 GB/s + GPU전용 22.4 GB/s ) 에도 못 미친다. • 연산을 빛의 속도로 계산해도 이미 램대역폭에서 병목 • CPU/GPU 연산력이 느린건지 메모리대역폭때문인지 개발자가 알 방법이 없다. • 테스트를 통한 추측과 통계로 최적화 • 위 이유로 모바일에서는 Deferred 가 불가능 • 1920 x 1080 x 8 x 4 Msaa x 60 fps 기본 프레임버퍼 • 1920 x 1080 x 4 x 3장(deferred MRT) x 60 fps ( 엄청난 텍스처 샘플링…즉 대역폭 소모 ) • Tiled 구조에서 쥐약인 반복되는 FBO 스왑 ( 모든 타일버퍼 플러쉬 )
  • 9. 게임에서 메모리 전략 • 프로파일링을 피처 단위로 하지말자. • 공유자원(램대역)때문에 다른기능 성능에 영향 ( cpu로직/ui/사운드/io/후처리/gpu/네트워크 ) • 개별적 기능 프로파일링이 의미가 PC와 같지 않다. ( ex: 테스트씬에서는 빨랐는데? ) • 메모리 대역을 많이 쓰는 것보다 연산을 많이 쓰는게 오히려 빠를수도 있다. (최신기기일수록) • 텍스처 스트리밍을 적극 사용 • 2018.2 부터 가능, 밉맵을 작은것부터 로드하여 업로딩을 절약한다. 샘플링은 동일. • 모바일에서 사용하기위해서는 APK를 LZ4 로 빌드필요 • 너무 작은 버짓을 설정하면 오히려 독이 된다. ( 자주 텍스처를 올리고 내린다. ) • 모바일에서 다이나믹 배칭은 DrawCall 이득보다 램대역폭과 cpu오버로드가 더 클 경우가 많다.
  • 10. 안드로이드 메모리 관리 • 메모리 페이지는 3가지 종류 • Used Pages - 사용되고 있는 메모리 • Cached Pages - 사용되었다가 사용안하고 있어서 캐싱되어있는 페이지 • Free Pages - 사용되고 있지 않는 메모리 • 모든 App 은 3가지의 램사이즈가 존재 • RSS( Resident Set Size ): App에서 사용되는 모든 메모리 사이즈, 다른 App과 공유해서 사용하는 영역포함 • PSS( Proportional Set Size ): RSS에서 다른 App와 공유해서 사용하는 영역을 공유숫자로 나누어서 계산 • USS( Unique Set Size ): App만 쓰는 메모리 영역 • OS는 메모리가 부족해지면 PSS 기준으로 사용량과 중요도를 계산해 앱을 죽이고 메모리 확보
  • 11. 게임의 사용 메모리 보기 ( PSS )
  • 12. 유니티 메모리 프로파일러(simple) • Total - streaming데이타(Video, FMOD) 와 Profiler를 제외한 총 사용 메모리 • Unity - 유니티 엔진에서 사용하는 메모리(c++) • Mono - 모노런타임에 할당된 메모리(c#) • GfxDriver - 렌더타겟을 제외한 텍스처 메모리만 표시 • 그래픽드라이버가 사용하는 비디오램이 아니다. 쉐이더나 다른 버퍼X • FMOD - 사운드 파일 용량 • Video - 비디오파일로 사용하는 메모리 • Profiler - 프로파일러가 사용하는 메모리 Used / Reserved - 현재 쓰는 / 확보한 메모리 용량 ( OS에 자주 메모리 할당을 하지않기 위해 버퍼를 확보하여 놓는다.)
  • 13. 유니티 메모리 프로파일러 한계 • 코드메모리와 라이브러리 메모리를 표시하지는 않는다. • 프로파일러는 오직 어플에서 할당한 메모리만 표시한다. • 컴퓨터의 Editor에서 메모리 프로파일러는 실기기와 다르다. • 텍스처 압축포맷이 다르다. • Editor와 플랫폼간의 다른 로직 ( #if UnityEditor ) • 꼭 실기빌드를 가지고 프로파일링 하자
  • 14. 메모리 프로파일러(detail) • Other - 밑의 항목 들 제외한 모든 사용량 • Assets - Scene/Resources/AssetBundles 등을 통해 로드 된 모든 에셋들 • Builtin Resources - 유니티에서 사용하는 기본 로드되는 리소스 + Editor에서 사용하는 리소스 • Scene Memory - 게임오브젝트와 컴포넌트가 쓰는 메모리 • Not Saved - DontSave 가 설정된 게임오브젝트들
  • 15. 메모리 프로파일러 익스텐션 • 훨씬 강력한 메모리 프로파일러로 모든 레퍼런스 카운트와 오브젝트를 찾아 디테일한 분석 • Version 1 • https://bitbucket.org/Unity-Technologies/memoryprofiler • 5.6 이상 유니티 버전 필요 • Version 2 • 2018.3 이상 유니티 버전 필요 • 현재(2018.10월) JSON 파일 직접 수정해서 설치해야함 • 위치: 프로젝트폴더/Packages/manifest.json
  • 16. UMA 구조 발전 • hUMA - 각 프로세스가 메모리 주소를 공유하여 메모리사용량과 대역, 큐잉 모두 절약 • hUMA 현재 상황 • AMD와 퀄컴에서 밀고있는 HSA규격이 가장 발전함 • 인텔은 브로드웰부터 Shared Virtual Memory 로 독자 규격 만듬 • Nvidia ??? • CPU < > GPU 간의 메모리 제로 카피가능 • 그래픽드라이버가 버퍼를 생성하고 포인터로 카피
  • 17. HSA • AMD가 최초 개발하여 퀄컴과 함께 개발하는 표준 http://www.hsafoundation.com • AMD GCN구조인 Kaveri 가 최초로 PS4/XBOX 에 쓰임 • 2015년에 1.0 ver ( 현재 1.1 ver ) • 삼성칩은 G71 gpu가 달린 Exynos8895 부터 ( 2017년 ) • 스냅드래곤은 아직 정확한 지원여부 확인X • 하드웨어, 소프트웨어 둘다 지원 필요 • 현재 게임기, OpenCL, CUDA 등을 통해서만 hUMA 이득을 얻음 • 모바일 게임에서는 아직 사용X
  • 18. Reference • https://www.slideshare.net/linaroorg/hsa-linaro-updatejuly102013 (HSA Overview) • http://www.hsafoundation.com • https://www.slideshare.net/InformaticaUCM/programming-models-for-heterogeneous-chips • https://legacy.iis.ee.ethz.ch/~gmichi/asocd/lecturenotes/Lecture10.pdf