SlideShare a Scribd company logo
1 of 46
Download to read offline
Unity Internals:
Memory and Performance
Moscow, 16/05/2014
Marco Trivellato – Field Engineer
Page6/9/14 2
This Talk
Goals and Benefits
Page
Who Am I ?
•  Now Field Engineer @ Unity
•  Previously, Software Engineer
•  Mainly worked on game engines
•  Shipped several video games:
•  Captain America: Super Soldier
•  FIFA ‘07 – FIFA ’10
•  Fight Night: Round 3
6/9/14 3
Page
Topics
•  Memory Overview
•  Garbage Collection
•  Mesh Internals
•  Scripting
•  Job System
•  How to use the Profiler
6/9/14 4
Page6/9/14 5
Memory Overview
Page
Memory Domains
•  Native (internal)
•  Asset Data: Textures, AudioClips, Meshes
•  Game Objects & Components: Transform, etc..
•  Engine Internals: Managers, Rendering, Physics, etc..
•  Managed - Mono
•  Script objects (Managed dlls)
•  Wrappers for Unity objects: Game objects, assets,
components
•  Native Dlls
•  User’s dlls and external dlls (for example: DirectX)
6/9/14 6
Page
Native Memory: Internal Allocators
•  Default
•  GameObject
•  Gfx
•  Profiler
5.x: We are considering to expose an API for using a native
allocator in Dlls
6/9/14 7
Page
Managed Memory
•  Value types (bool, int, float, struct, ...)
•  Exist in stack memory. De-allocated when removed
from the stack. No Garbage.
•  Reference types (classes)
•  Exist on the heap and are handled by the mono/.net
GC. Removed when no longer being referenced.
•  Wrappers for Unity Objects :
•  GameObject
•  Assets : Texture2D, AudioClip, Mesh, …
•  Components : MeshRenderer, Transform, MonoBehaviour
6/9/14 8
Page
Mono Memory Internals
•  Allocates system heap blocks for internal allocator
•  Will allocate new heap blocks when needed
•  Heap blocks are kept in Mono for later use
•  Memory can be given back to the system after a while
•  …but it depends on the platform è don’t count on it
•  Garbage collector cleans up
•  Fragmentation can cause new heap blocks even
though memory is not exhausted
6/9/14 9
Page6/9/14 10
Garbage Collection
Page
Unity Object wrapper
•  Some Objects used in scripts have large native
backing memory in unity
•  Memory not freed until Finalizers have run
6/9/14 11
WWW
Decompression buffer
Compressed file
Decompressed file
Managed Native
Page
Mono Garbage Collection
•  GC.Collect
•  Runs on the main thread when
•  Mono exhausts the heap space
•  Or user calls System.GC.Collect()
•  Finalizers
•  Run on a separate thread
•  Controlled by mono
•  Can have several seconds delay
•  Unity native memory
•  Dispose() cleans up internal
memory
•  Eventually called from finalizer
•  Manually call Dispose() to cleanup
6/9/14 12
Main thread Finalizer thread
www = null;
new(someclass);
//no more heap
-> GC.Collect();
www.Dispose();
.....
Page
Garbage Collection
•  Roots are not collected in a GC.Collect
•  Thread stacks
•  CPU Registers
•  GC Handles (used by Unity to hold onto managed
objects)
•  Static variables!!
•  Collection time scales with managed heap size
•  The more you allocate, the slower it gets
6/9/14 13
Page
GC: does lata layout matter ?
struct Stuff
{
int a;
float b;
bool c;
string leString;
}
Stuff[] arrayOfStuff; << Everything is scanned. GC takes more time
VS
int[] As;
float[] Bs;
bool[] Cs;
string[] leStrings; << Only this is scanned. GC takes less time.
6/9/14 14
Page
GC: Best Practices
•  Reuse objects è Use object pools
•  Prefer stack-based allocations è Use struct
instead of class
•  System.GC.Collect can be used to trigger
collection
•  Calling it 6 times returns the unused memory to
the OS
•  Manually call Dispose to cleanup immediately
6/9/14 15
Page
Avoid temp allocations
•  Don’t use FindObjects or LINQ
•  Use StringBuilder for string concatenation
•  Reuse large temporary work buffers
•  ToString()
•  .tag è use CompareTag() instead
6/9/14 16
Page
Unity API Temporary Allocations
Some Examples:
•  GetComponents<T>
•  Vector3[] Mesh.vertices
•  Camera[] Camera.allCameras
•  foreach
•  does not allocate by definition
•  However, there can be a small allocation, depending on the
implementation of .GetEnumerator()
5.x: We are working on new non-allocating versions
6/9/14 17
Page
Memory fragmentation
•  Memory fragmentation is hard to account for
•  Fully unload dynamically allocated content
•  Switch to a blank scene before proceeding to next level
•  This scene could have a hook where you may pause the game
long enough to sample if there is anything significant in
memory
•  Ensure you clear out variables so GC.Collect will
remove as much as possible
•  Avoid allocations where possible
•  Reuse objects where possible within a scene play
•  Clear them out for map load to clean the memory
6/9/14 18
Page
Unloading Unused Assets
•  Resources.UnloadUnusedAssets will trigger asset
garbage collection
•  It looks for all unreferenced assets and unloads them
•  It’s an async operation
•  It’s called internally after loading a level
•  Resources.UnloadAsset is preferable
•  you need to know exactly what you need to Unload
•  Unity does not have to scan everything
•  Unity 5.0: Multi-threaded asset garbage collection
6/9/14 19
Page6/9/14 20
Mesh Internals
Memory vs. Cycles
Page
Mesh Read/Write Option
•  It allows you to modify the mesh at run-time
•  If enabled, a system-copy of the Mesh will remain in
memory
•  It is enabled by default
•  In some cases, disabling this option will not reduce the
memory usage
•  Skinned meshes
•  iOS
Unity 5.0: disable by default – under consideration
6/9/14 21
Page
Non-Uniform scaled Meshes
We need to correctly transform vertex normals
•  Unity 4.x:
•  transform the mesh on the CPU
•  create an extra copy of the data
•  Unity 5.0
•  Scaled on GPU
•  Extra memory no longer needed
6/9/14 22
Page
Static Batching
What is it ?
•  It’s an optimization that reduces number of draw
calls and state changes
How do I enable it ?
•  In the player settings + Tag the object as static
6/9/14 23
Page
Static Batching
How does it work internally ?
•  Build-time: Vertices are transformed to world-
space
•  Run-time: Index buffer is created with indices of
visible objects
Unity 5.0:
•  Re-implemented static batching without copying of
index buffers
6/9/14 24
Page
Dynamic Batching
What is it ?
•  Similar to Static Batching but it batches non-static
objects at run-time
How do I enable it ?
•  In the player settings
•  no need to tag. it auto-magically works…
6/9/14 25
Page
Dynamic Batching
How does it work internally ?
•  objects are transformed to world space on the
CPU
•  Temporary VB & IB are created
•  Rendered in one draw call
Unity 5.x: we are considering to expose per-platform
parameters
6/9/14 26
Page
Mesh Skinning
Different Implementations depending on platform:
•  x86: SSE
•  iOS/Android/WP8: Neon optimizations
•  D3D11/XBoxOne/GLES3.0: GPU
•  XBox360, WiiU: GPU (memexport)
•  PS3: SPU
•  WiiU: GPU w/ stream out
Unity 5.0: Skinned meshes use less memory by sharing
index buffers between instances
6/9/14 27
Page6/9/14 28
Scripting
Page
Unity 5.0: Mono
•  No upgrade
•  Mainly bug fixes
•  New tech in WebGL: IL2CPP
•  http://blogs.unity3d.com/2014/04/29/on-the-future-of-
web-publishing-in-unity/
•  Stay tuned: there will be a blog post about it
6/9/14 29
Page
GetComponent<T>
It asks the GameObject, for a component of the
specified type:
•  The GO contains a list of Components
•  Each Component type is compared to T
•  The first Component of type T (or that derives from
T), will be returned to the caller
•  Not too much overhead but it still needs to call into
native code
6/9/14 30
Page
Unity 5.0: Property Accessors
•  Most accessors will be removed in Unity 5.0
•  The objective is to reduce dependencies,
therefore improve modularization
•  Transform will remain
•  Existing scripts will be converted. Example:
in 5.0:
6/9/14 31
Page
Transform Component
•  this.transform is the same as GetComponent<Transform>()
•  transform.position/rotation needs to:
•  find Transform component
•  Traverse hierarchy to calculate absolute position
•  Apply translation/rotation
•  transform internally stores the position relative to the parent
•  transform.localPosition = new Vector(…) è simple
assignment
•  transform.position = new Vector(…) è costs the same if
no father, otherwise it will need to traverse the hierarchy
up to transform the abs position into local
•  finally, other components (collider, rigid body, light, camera,
etc..) will be notified via messages
6/9/14 32
Page
Instantiate
API:
•  Object Instantiate(Object, Vector3, Quaternion);
•  Object Instantiate(Object);
Implementation:
•  Clone GameObject Hierarchy and Components
•  Copy Properties
•  Awake
•  Apply new Transform (if provided)
6/9/14 33
Page
Instantiate cont..ed
•  Awake can be expensive
•  AwakeFromLoad (main thread)
•  clear states
•  internal state caching
•  pre-compute
Unity 5.0:
•  Allocations have been reduced
•  Some inner loops for copying the data have been
optimized
6/9/14 34
Page
JIT Compilation
What is it ?
•  The process in which machine code is generated from CIL
code during the application's run-time
Pros:
•  It generates optimized code for the current platform
Cons:
•  Each time a method is called for the first time, the
application will suffer a certain performance penalty because
of the compilation
6/9/14 35
Page
JIT compilation spikes
What about pre-JITting ?
•  RuntimeHelpers.PrepareMethod does not work:
…better to use MethodHandle.GetFunctionPointer()
6/9/14 36
Page6/9/14 37
Job System
Page
Unity 5.0: Job System (internal)
The goals of the job system:
•  make it easy to write very efficient job based
multithreaded code
•  The jobs should be able to run safely in parallel to
script code
6/9/14 38
Page
Job System: Why ?
Modern architectures are multi-core:
•  XBox 360: 3 cores
•  PS4/Xbox One: 8 cores
…which includes mobile devices:
•  iPhone 4S: 2 cores
•  Galaxy S3: 4 cores
6/9/14 39
Page
Job System: What is it ?
•  It’s a Framework that we are going to use in
existing and new sub-systems
•  We want to have Animation, NavMesh, Occlusion,
Rendering, etc… run as much as possible in
parallel
•  This will ultimately lead to better performance
6/9/14 40
Page
Unity 5.0: Profiler Timeline View
It’s a tool that allows you to analyse internal (native)
threads execution of a specific frame
6/9/14 41
Page
Unity 5.0: Frame Debugger
6/9/14 42
Page6/9/14 43
Conclusions
Page
Budgeting Memory
How much memory is available ?
•  It depends…
•  For example, on 512mb devices running iOS 6.0:
~250mb. A bit less with iOS 7.0
What’s the baseline ?
•  Create an empty scene and measure memory
•  Don’t forget that the profiler requires some
memory
•  For example: on Android 15.5mb (+ 12mb profiler)
6/9/14 44
Page
Profiling
•  Don’t make assumptions
•  Profile on target device
•  Editor != Player
•  Platform X != Platform Y
•  Managed Memory is not returned to Native Land!
For best results…:
•  Profile early and regularly
6/9/14 45
Page6/9/14 46
Questions ?
marcot@unity3d.com - Twitter: @m_trive

More Related Content

What's hot

East Coast DevCon 2014: The Slate UI Framework - Architecture & Tools
East Coast DevCon 2014: The Slate UI Framework - Architecture & ToolsEast Coast DevCon 2014: The Slate UI Framework - Architecture & Tools
East Coast DevCon 2014: The Slate UI Framework - Architecture & Tools
Gerke Max Preussner
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
devCAT Studio, NEXON
 

What's hot (20)

GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자
 
East Coast DevCon 2014: The Slate UI Framework - Architecture & Tools
East Coast DevCon 2014: The Slate UI Framework - Architecture & ToolsEast Coast DevCon 2014: The Slate UI Framework - Architecture & Tools
East Coast DevCon 2014: The Slate UI Framework - Architecture & Tools
 
Built for performance: the UIElements Renderer – Unite Copenhagen 2019
Built for performance: the UIElements Renderer – Unite Copenhagen 2019Built for performance: the UIElements Renderer – Unite Copenhagen 2019
Built for performance: the UIElements Renderer – Unite Copenhagen 2019
 
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
 
Forts and Fights Scaling Performance on Unreal Engine*
Forts and Fights Scaling Performance on Unreal Engine*Forts and Fights Scaling Performance on Unreal Engine*
Forts and Fights Scaling Performance on Unreal Engine*
 
Mobile Performance Tuning: Poor Man's Tips And Tricks
Mobile Performance Tuning: Poor Man's Tips And TricksMobile Performance Tuning: Poor Man's Tips And Tricks
Mobile Performance Tuning: Poor Man's Tips And Tricks
 
DX12 & Vulkan: Dawn of a New Generation of Graphics APIs
DX12 & Vulkan: Dawn of a New Generation of Graphics APIsDX12 & Vulkan: Dawn of a New Generation of Graphics APIs
DX12 & Vulkan: Dawn of a New Generation of Graphics APIs
 
UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1
 
DirectStroage프로그래밍소개
DirectStroage프로그래밍소개DirectStroage프로그래밍소개
DirectStroage프로그래밍소개
 
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
 
Speed up your asset imports for big projects - Unite Copenhagen 2019
Speed up your asset imports for big projects - Unite Copenhagen 2019Speed up your asset imports for big projects - Unite Copenhagen 2019
Speed up your asset imports for big projects - Unite Copenhagen 2019
 
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
 
[UniteKorea2013] Memory profiling in Unity
[UniteKorea2013] Memory profiling in Unity[UniteKorea2013] Memory profiling in Unity
[UniteKorea2013] Memory profiling in Unity
 
LOD and Culling Systems That Scale - Unite LA
LOD and Culling Systems That Scale  - Unite LALOD and Culling Systems That Scale  - Unite LA
LOD and Culling Systems That Scale - Unite LA
 
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
 
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonLow-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
 
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
 
Scene Graphs & Component Based Game Engines
Scene Graphs & Component Based Game EnginesScene Graphs & Component Based Game Engines
Scene Graphs & Component Based Game Engines
 

Viewers also liked

Mono for Game Developers - AltDevConf 2012
Mono for Game Developers - AltDevConf 2012Mono for Game Developers - AltDevConf 2012
Mono for Game Developers - AltDevConf 2012
Xamarin
 
Shaderx5 2.6normalmappingwithoutprecomputedtangents 130318 (1)
Shaderx5 2.6normalmappingwithoutprecomputedtangents 130318 (1)Shaderx5 2.6normalmappingwithoutprecomputedtangents 130318 (1)
Shaderx5 2.6normalmappingwithoutprecomputedtangents 130318 (1)
Kyuseok Hwang(allosha)
 
Avoid loss of hair while coding Unity3D plugin for mobile
Avoid loss of hair while coding Unity3D plugin for mobileAvoid loss of hair while coding Unity3D plugin for mobile
Avoid loss of hair while coding Unity3D plugin for mobile
Valerio Riva
 

Viewers also liked (19)

Unity Optimization Tips, Tricks and Tools
Unity Optimization Tips, Tricks and ToolsUnity Optimization Tips, Tricks and Tools
Unity Optimization Tips, Tricks and Tools
 
EA: Optimization of mobile Unity application
EA: Optimization of mobile Unity applicationEA: Optimization of mobile Unity application
EA: Optimization of mobile Unity application
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
 
Unity3D Tips and Tricks or "You are doing it wrong!"
Unity3D Tips and Tricks or "You are doing it wrong!"Unity3D Tips and Tricks or "You are doing it wrong!"
Unity3D Tips and Tricks or "You are doing it wrong!"
 
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
 
Performance and Memory Management improvement applying Design Patterns at Unity.
Performance and Memory Management improvement applying Design Patterns at Unity.Performance and Memory Management improvement applying Design Patterns at Unity.
Performance and Memory Management improvement applying Design Patterns at Unity.
 
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
 
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
 
Mono for Game Developers - AltDevConf 2012
Mono for Game Developers - AltDevConf 2012Mono for Game Developers - AltDevConf 2012
Mono for Game Developers - AltDevConf 2012
 
Shaderx5 2.6normalmappingwithoutprecomputedtangents 130318 (1)
Shaderx5 2.6normalmappingwithoutprecomputedtangents 130318 (1)Shaderx5 2.6normalmappingwithoutprecomputedtangents 130318 (1)
Shaderx5 2.6normalmappingwithoutprecomputedtangents 130318 (1)
 
Avoid loss of hair while coding Unity3D plugin for mobile
Avoid loss of hair while coding Unity3D plugin for mobileAvoid loss of hair while coding Unity3D plugin for mobile
Avoid loss of hair while coding Unity3D plugin for mobile
 
Тарас Леськів “Game Programming Patterns and Unity”
Тарас Леськів “Game Programming Patterns and Unity”Тарас Леськів “Game Programming Patterns and Unity”
Тарас Леськів “Game Programming Patterns and Unity”
 
Memory Pools for C and C++
Memory Pools for C and C++Memory Pools for C and C++
Memory Pools for C and C++
 
製作 Unity Plugin for iOS
製作 Unity Plugin for iOS製作 Unity Plugin for iOS
製作 Unity Plugin for iOS
 
Fast and energy-efficient eNVM based memory organisation at L3-L1 layers for ...
Fast and energy-efficient eNVM based memory organisation at L3-L1 layers for ...Fast and energy-efficient eNVM based memory organisation at L3-L1 layers for ...
Fast and energy-efficient eNVM based memory organisation at L3-L1 layers for ...
 
Unity Editor Extensions for project automatization
Unity Editor Extensions for project automatizationUnity Editor Extensions for project automatization
Unity Editor Extensions for project automatization
 
Unity5 사용기
Unity5 사용기Unity5 사용기
Unity5 사용기
 
Software Engineer- A unity 3d Game
Software Engineer- A unity 3d GameSoftware Engineer- A unity 3d Game
Software Engineer- A unity 3d Game
 
Unity 3D Runtime Animation Generation
Unity 3D Runtime Animation GenerationUnity 3D Runtime Animation Generation
Unity 3D Runtime Animation Generation
 

Similar to Unity Internals: Memory and Performance

ABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat InternalsABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat Internals
Benjamin Zores
 

Similar to Unity Internals: Memory and Performance (20)

【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
 
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
 
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
 
Things I wish I knew about GemStone
Things I wish I knew about GemStoneThings I wish I knew about GemStone
Things I wish I knew about GemStone
 
memory_mapping.ppt
memory_mapping.pptmemory_mapping.ppt
memory_mapping.ppt
 
Deployment Strategies (Mongo Austin)
Deployment Strategies (Mongo Austin)Deployment Strategies (Mongo Austin)
Deployment Strategies (Mongo Austin)
 
Ruby and Distributed Storage Systems
Ruby and Distributed Storage SystemsRuby and Distributed Storage Systems
Ruby and Distributed Storage Systems
 
[NetherRealm Studios] Game Studio Perforce Architecture
[NetherRealm Studios] Game Studio Perforce Architecture[NetherRealm Studios] Game Studio Perforce Architecture
[NetherRealm Studios] Game Studio Perforce Architecture
 
Ansiblefest 2018 Network automation journey at roblox
Ansiblefest 2018 Network automation journey at robloxAnsiblefest 2018 Network automation journey at roblox
Ansiblefest 2018 Network automation journey at roblox
 
Ironic 140622212631-phpapp02
Ironic 140622212631-phpapp02Ironic 140622212631-phpapp02
Ironic 140622212631-phpapp02
 
Ironic
IronicIronic
Ironic
 
Ironic 140622212631-phpapp02
Ironic 140622212631-phpapp02Ironic 140622212631-phpapp02
Ironic 140622212631-phpapp02
 
Optimization in Unity: simple tips for developing with "no surprises" / Anton...
Optimization in Unity: simple tips for developing with "no surprises" / Anton...Optimization in Unity: simple tips for developing with "no surprises" / Anton...
Optimization in Unity: simple tips for developing with "no surprises" / Anton...
 
ABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat InternalsABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat Internals
 
Virtualization VM VirtualBox + Oracle Enterprise Linux With Oracle 11GR2
Virtualization VM VirtualBox + Oracle Enterprise Linux With Oracle 11GR2Virtualization VM VirtualBox + Oracle Enterprise Linux With Oracle 11GR2
Virtualization VM VirtualBox + Oracle Enterprise Linux With Oracle 11GR2
 
Tuning Linux for MongoDB
Tuning Linux for MongoDBTuning Linux for MongoDB
Tuning Linux for MongoDB
 
FreeBSD hosting
FreeBSD hostingFreeBSD hosting
FreeBSD hosting
 
Data Management and Streaming Strategies in Drakensang Online
Data Management and Streaming Strategies in Drakensang OnlineData Management and Streaming Strategies in Drakensang Online
Data Management and Streaming Strategies in Drakensang Online
 
Deployment Strategies
Deployment StrategiesDeployment Strategies
Deployment Strategies
 
XPDS13: Zero-copy display of guest framebuffers using GEM - John Baboval, Citrix
XPDS13: Zero-copy display of guest framebuffers using GEM - John Baboval, CitrixXPDS13: Zero-copy display of guest framebuffers using GEM - John Baboval, Citrix
XPDS13: Zero-copy display of guest framebuffers using GEM - John Baboval, Citrix
 

More from DevGAMM Conference

More from DevGAMM Conference (20)

The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...
 
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
 
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
 
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
 
AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)
 
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
 
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
 
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
 
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
 
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
 
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
 
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
 
How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...
 
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
 
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
 
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
 
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
 
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
 
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
 
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
 

Recently uploaded

Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...
Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...
Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...
amilabibi1
 
If this Giant Must Walk: A Manifesto for a New Nigeria
If this Giant Must Walk: A Manifesto for a New NigeriaIf this Giant Must Walk: A Manifesto for a New Nigeria
If this Giant Must Walk: A Manifesto for a New Nigeria
Kayode Fayemi
 
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptx
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptxChiulli_Aurora_Oman_Raffaele_Beowulf.pptx
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptx
raffaeleoman
 
Uncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac FolorunsoUncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac Folorunso
Kayode Fayemi
 
Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...
Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...
Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...
David Celestin
 

Recently uploaded (15)

Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...
Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...
Bring back lost lover in USA, Canada ,Uk ,Australia ,London Lost Love Spell C...
 
ICT role in 21st century education and it's challenges.pdf
ICT role in 21st century education and it's challenges.pdfICT role in 21st century education and it's challenges.pdf
ICT role in 21st century education and it's challenges.pdf
 
If this Giant Must Walk: A Manifesto for a New Nigeria
If this Giant Must Walk: A Manifesto for a New NigeriaIf this Giant Must Walk: A Manifesto for a New Nigeria
If this Giant Must Walk: A Manifesto for a New Nigeria
 
My Presentation "In Your Hands" by Halle Bailey
My Presentation "In Your Hands" by Halle BaileyMy Presentation "In Your Hands" by Halle Bailey
My Presentation "In Your Hands" by Halle Bailey
 
Digital collaboration with Microsoft 365 as extension of Drupal
Digital collaboration with Microsoft 365 as extension of DrupalDigital collaboration with Microsoft 365 as extension of Drupal
Digital collaboration with Microsoft 365 as extension of Drupal
 
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdfAWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
 
Dreaming Music Video Treatment _ Project & Portfolio III
Dreaming Music Video Treatment _ Project & Portfolio IIIDreaming Music Video Treatment _ Project & Portfolio III
Dreaming Music Video Treatment _ Project & Portfolio III
 
The workplace ecosystem of the future 24.4.2024 Fabritius_share ii.pdf
The workplace ecosystem of the future 24.4.2024 Fabritius_share ii.pdfThe workplace ecosystem of the future 24.4.2024 Fabritius_share ii.pdf
The workplace ecosystem of the future 24.4.2024 Fabritius_share ii.pdf
 
lONG QUESTION ANSWER PAKISTAN STUDIES10.
lONG QUESTION ANSWER PAKISTAN STUDIES10.lONG QUESTION ANSWER PAKISTAN STUDIES10.
lONG QUESTION ANSWER PAKISTAN STUDIES10.
 
SOLID WASTE MANAGEMENT SYSTEM OF FENI PAURASHAVA, BANGLADESH.pdf
SOLID WASTE MANAGEMENT SYSTEM OF FENI PAURASHAVA, BANGLADESH.pdfSOLID WASTE MANAGEMENT SYSTEM OF FENI PAURASHAVA, BANGLADESH.pdf
SOLID WASTE MANAGEMENT SYSTEM OF FENI PAURASHAVA, BANGLADESH.pdf
 
Dreaming Marissa Sánchez Music Video Treatment
Dreaming Marissa Sánchez Music Video TreatmentDreaming Marissa Sánchez Music Video Treatment
Dreaming Marissa Sánchez Music Video Treatment
 
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptx
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptxChiulli_Aurora_Oman_Raffaele_Beowulf.pptx
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptx
 
Uncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac FolorunsoUncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac Folorunso
 
Report Writing Webinar Training
Report Writing Webinar TrainingReport Writing Webinar Training
Report Writing Webinar Training
 
Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...
Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...
Proofreading- Basics to Artificial Intelligence Integration - Presentation:Sl...
 

Unity Internals: Memory and Performance

  • 1. Unity Internals: Memory and Performance Moscow, 16/05/2014 Marco Trivellato – Field Engineer
  • 3. Page Who Am I ? •  Now Field Engineer @ Unity •  Previously, Software Engineer •  Mainly worked on game engines •  Shipped several video games: •  Captain America: Super Soldier •  FIFA ‘07 – FIFA ’10 •  Fight Night: Round 3 6/9/14 3
  • 4. Page Topics •  Memory Overview •  Garbage Collection •  Mesh Internals •  Scripting •  Job System •  How to use the Profiler 6/9/14 4
  • 6. Page Memory Domains •  Native (internal) •  Asset Data: Textures, AudioClips, Meshes •  Game Objects & Components: Transform, etc.. •  Engine Internals: Managers, Rendering, Physics, etc.. •  Managed - Mono •  Script objects (Managed dlls) •  Wrappers for Unity objects: Game objects, assets, components •  Native Dlls •  User’s dlls and external dlls (for example: DirectX) 6/9/14 6
  • 7. Page Native Memory: Internal Allocators •  Default •  GameObject •  Gfx •  Profiler 5.x: We are considering to expose an API for using a native allocator in Dlls 6/9/14 7
  • 8. Page Managed Memory •  Value types (bool, int, float, struct, ...) •  Exist in stack memory. De-allocated when removed from the stack. No Garbage. •  Reference types (classes) •  Exist on the heap and are handled by the mono/.net GC. Removed when no longer being referenced. •  Wrappers for Unity Objects : •  GameObject •  Assets : Texture2D, AudioClip, Mesh, … •  Components : MeshRenderer, Transform, MonoBehaviour 6/9/14 8
  • 9. Page Mono Memory Internals •  Allocates system heap blocks for internal allocator •  Will allocate new heap blocks when needed •  Heap blocks are kept in Mono for later use •  Memory can be given back to the system after a while •  …but it depends on the platform è don’t count on it •  Garbage collector cleans up •  Fragmentation can cause new heap blocks even though memory is not exhausted 6/9/14 9
  • 11. Page Unity Object wrapper •  Some Objects used in scripts have large native backing memory in unity •  Memory not freed until Finalizers have run 6/9/14 11 WWW Decompression buffer Compressed file Decompressed file Managed Native
  • 12. Page Mono Garbage Collection •  GC.Collect •  Runs on the main thread when •  Mono exhausts the heap space •  Or user calls System.GC.Collect() •  Finalizers •  Run on a separate thread •  Controlled by mono •  Can have several seconds delay •  Unity native memory •  Dispose() cleans up internal memory •  Eventually called from finalizer •  Manually call Dispose() to cleanup 6/9/14 12 Main thread Finalizer thread www = null; new(someclass); //no more heap -> GC.Collect(); www.Dispose(); .....
  • 13. Page Garbage Collection •  Roots are not collected in a GC.Collect •  Thread stacks •  CPU Registers •  GC Handles (used by Unity to hold onto managed objects) •  Static variables!! •  Collection time scales with managed heap size •  The more you allocate, the slower it gets 6/9/14 13
  • 14. Page GC: does lata layout matter ? struct Stuff { int a; float b; bool c; string leString; } Stuff[] arrayOfStuff; << Everything is scanned. GC takes more time VS int[] As; float[] Bs; bool[] Cs; string[] leStrings; << Only this is scanned. GC takes less time. 6/9/14 14
  • 15. Page GC: Best Practices •  Reuse objects è Use object pools •  Prefer stack-based allocations è Use struct instead of class •  System.GC.Collect can be used to trigger collection •  Calling it 6 times returns the unused memory to the OS •  Manually call Dispose to cleanup immediately 6/9/14 15
  • 16. Page Avoid temp allocations •  Don’t use FindObjects or LINQ •  Use StringBuilder for string concatenation •  Reuse large temporary work buffers •  ToString() •  .tag è use CompareTag() instead 6/9/14 16
  • 17. Page Unity API Temporary Allocations Some Examples: •  GetComponents<T> •  Vector3[] Mesh.vertices •  Camera[] Camera.allCameras •  foreach •  does not allocate by definition •  However, there can be a small allocation, depending on the implementation of .GetEnumerator() 5.x: We are working on new non-allocating versions 6/9/14 17
  • 18. Page Memory fragmentation •  Memory fragmentation is hard to account for •  Fully unload dynamically allocated content •  Switch to a blank scene before proceeding to next level •  This scene could have a hook where you may pause the game long enough to sample if there is anything significant in memory •  Ensure you clear out variables so GC.Collect will remove as much as possible •  Avoid allocations where possible •  Reuse objects where possible within a scene play •  Clear them out for map load to clean the memory 6/9/14 18
  • 19. Page Unloading Unused Assets •  Resources.UnloadUnusedAssets will trigger asset garbage collection •  It looks for all unreferenced assets and unloads them •  It’s an async operation •  It’s called internally after loading a level •  Resources.UnloadAsset is preferable •  you need to know exactly what you need to Unload •  Unity does not have to scan everything •  Unity 5.0: Multi-threaded asset garbage collection 6/9/14 19
  • 21. Page Mesh Read/Write Option •  It allows you to modify the mesh at run-time •  If enabled, a system-copy of the Mesh will remain in memory •  It is enabled by default •  In some cases, disabling this option will not reduce the memory usage •  Skinned meshes •  iOS Unity 5.0: disable by default – under consideration 6/9/14 21
  • 22. Page Non-Uniform scaled Meshes We need to correctly transform vertex normals •  Unity 4.x: •  transform the mesh on the CPU •  create an extra copy of the data •  Unity 5.0 •  Scaled on GPU •  Extra memory no longer needed 6/9/14 22
  • 23. Page Static Batching What is it ? •  It’s an optimization that reduces number of draw calls and state changes How do I enable it ? •  In the player settings + Tag the object as static 6/9/14 23
  • 24. Page Static Batching How does it work internally ? •  Build-time: Vertices are transformed to world- space •  Run-time: Index buffer is created with indices of visible objects Unity 5.0: •  Re-implemented static batching without copying of index buffers 6/9/14 24
  • 25. Page Dynamic Batching What is it ? •  Similar to Static Batching but it batches non-static objects at run-time How do I enable it ? •  In the player settings •  no need to tag. it auto-magically works… 6/9/14 25
  • 26. Page Dynamic Batching How does it work internally ? •  objects are transformed to world space on the CPU •  Temporary VB & IB are created •  Rendered in one draw call Unity 5.x: we are considering to expose per-platform parameters 6/9/14 26
  • 27. Page Mesh Skinning Different Implementations depending on platform: •  x86: SSE •  iOS/Android/WP8: Neon optimizations •  D3D11/XBoxOne/GLES3.0: GPU •  XBox360, WiiU: GPU (memexport) •  PS3: SPU •  WiiU: GPU w/ stream out Unity 5.0: Skinned meshes use less memory by sharing index buffers between instances 6/9/14 27
  • 29. Page Unity 5.0: Mono •  No upgrade •  Mainly bug fixes •  New tech in WebGL: IL2CPP •  http://blogs.unity3d.com/2014/04/29/on-the-future-of- web-publishing-in-unity/ •  Stay tuned: there will be a blog post about it 6/9/14 29
  • 30. Page GetComponent<T> It asks the GameObject, for a component of the specified type: •  The GO contains a list of Components •  Each Component type is compared to T •  The first Component of type T (or that derives from T), will be returned to the caller •  Not too much overhead but it still needs to call into native code 6/9/14 30
  • 31. Page Unity 5.0: Property Accessors •  Most accessors will be removed in Unity 5.0 •  The objective is to reduce dependencies, therefore improve modularization •  Transform will remain •  Existing scripts will be converted. Example: in 5.0: 6/9/14 31
  • 32. Page Transform Component •  this.transform is the same as GetComponent<Transform>() •  transform.position/rotation needs to: •  find Transform component •  Traverse hierarchy to calculate absolute position •  Apply translation/rotation •  transform internally stores the position relative to the parent •  transform.localPosition = new Vector(…) è simple assignment •  transform.position = new Vector(…) è costs the same if no father, otherwise it will need to traverse the hierarchy up to transform the abs position into local •  finally, other components (collider, rigid body, light, camera, etc..) will be notified via messages 6/9/14 32
  • 33. Page Instantiate API: •  Object Instantiate(Object, Vector3, Quaternion); •  Object Instantiate(Object); Implementation: •  Clone GameObject Hierarchy and Components •  Copy Properties •  Awake •  Apply new Transform (if provided) 6/9/14 33
  • 34. Page Instantiate cont..ed •  Awake can be expensive •  AwakeFromLoad (main thread) •  clear states •  internal state caching •  pre-compute Unity 5.0: •  Allocations have been reduced •  Some inner loops for copying the data have been optimized 6/9/14 34
  • 35. Page JIT Compilation What is it ? •  The process in which machine code is generated from CIL code during the application's run-time Pros: •  It generates optimized code for the current platform Cons: •  Each time a method is called for the first time, the application will suffer a certain performance penalty because of the compilation 6/9/14 35
  • 36. Page JIT compilation spikes What about pre-JITting ? •  RuntimeHelpers.PrepareMethod does not work: …better to use MethodHandle.GetFunctionPointer() 6/9/14 36
  • 38. Page Unity 5.0: Job System (internal) The goals of the job system: •  make it easy to write very efficient job based multithreaded code •  The jobs should be able to run safely in parallel to script code 6/9/14 38
  • 39. Page Job System: Why ? Modern architectures are multi-core: •  XBox 360: 3 cores •  PS4/Xbox One: 8 cores …which includes mobile devices: •  iPhone 4S: 2 cores •  Galaxy S3: 4 cores 6/9/14 39
  • 40. Page Job System: What is it ? •  It’s a Framework that we are going to use in existing and new sub-systems •  We want to have Animation, NavMesh, Occlusion, Rendering, etc… run as much as possible in parallel •  This will ultimately lead to better performance 6/9/14 40
  • 41. Page Unity 5.0: Profiler Timeline View It’s a tool that allows you to analyse internal (native) threads execution of a specific frame 6/9/14 41
  • 42. Page Unity 5.0: Frame Debugger 6/9/14 42
  • 44. Page Budgeting Memory How much memory is available ? •  It depends… •  For example, on 512mb devices running iOS 6.0: ~250mb. A bit less with iOS 7.0 What’s the baseline ? •  Create an empty scene and measure memory •  Don’t forget that the profiler requires some memory •  For example: on Android 15.5mb (+ 12mb profiler) 6/9/14 44
  • 45. Page Profiling •  Don’t make assumptions •  Profile on target device •  Editor != Player •  Platform X != Platform Y •  Managed Memory is not returned to Native Land! For best results…: •  Profile early and regularly 6/9/14 45