当前位置: 首页 > news >正文

UE4中性能优化和检测工具

UE4中性能优化和检测工具合集

  • 简述
  • CPU
    • Unreal Insight
    • Unreal Profiler
    • Simpleperf
    • Android Studio
    • Perfetto
    • XCode Timeprofiler
    • Best Practice
  • GPU
    • Adreno GPU
    • Mali GPU
    • Android GPU Inspector (AGI)
  • 内存
    • 堆内存分析
      • Android Studio
      • LoliProfiler
      • UE5 Memory Insights
      • Unity Mono 内存
      • Memreport
      • RHI Memory
      • XCode Allocations
  • 功耗
    • 硬件方案
      • 电流计
    • 软件方案
      • Perfdog
      • Android 的 Snapdragon Profiler
      • Ios 的 Instruments
  • 包体
    • SizeMap
    • Unreal PakViewer
    • Custom Built Profiler With CI
  • 代码崩溃 & 稳定性
    • Address Santizer
    • StompAllocator
    • Vulkan

简述

总结UE4中性能优化工具合集,之前转过一篇LLM内存统计工具,非常详细,这里会总结全面,包括了CPU/GPU/内存/功耗/包体/代码稳定的各类工具,方便筛选使用

对于每一帧来说,执行顺序依次为:Game Thread → Draw Thread → GPU Thread
Game Thread 首先会对整个游戏世界进行逻辑层面的计算与模拟(e.g.Spawn 多少个新的 actor、每个 actor 在这一帧位于何处、角色移动、动画状态等等),所有这些信息会被输送到 Draw Thread;
Draw Thread(也叫 Rendering Thread) 会根据这些信息,剔除(Culling)掉不需要显示的部分(e.g. 处于屏幕外的物体),接着创建一个列表,其中包含了渲染每个物体必备的关键信息(e.g. 如何被着色、映射哪些纹理等等),再将这个列表输送给 GPU Thread;
GPU Thread 在获取了这个列表之后,会计算出每个像素最终需要如何被渲染在屏幕上,形成这一帧的画面。

CPU

Game Thread 造成的开销,可以使用stat game显示 Tick 的耗时情况 ;dumpticks:可将所有正在 tick 的 actor 打印到 log 中

Unreal Insight

Unreal Insight在 Unreal Engine 4.24.3版本中开始支持移动平台性能数据录取。数据直接写入文件,GUI工具采集结束后离线解析数据文件。(平时使用较多)

优势:可长时间录制数据,数据在时间轴上以进程调度的形式展示,比较容易分析Game、RenderThread与WorkerThread的调度情况,从整体上结合时间连贯性对CPU瓶颈进行初步的定位。也可用于分析有规律的卡顿掉帧的情况。

劣势:所记录的调用堆栈较浅(可手动打点),较难定位到具体出问题的代码,人工分析需要时间与经验
在这里插入图片描述

Unreal Profiler

UE5已删除此模块

(平时使用较多)Unreal Engine 中的 Profiler则是分析CPU端性能情况的一个老工具,与Unreal Insights相比它缺少了线程间调度情况的数据,优点在于其记录的调用堆栈深度较深,可与Insights结合使用 UE4引擎窗口中菜单DeveloperTools下SessionFrontend界面即为Profiler所在的窗口 可通过两种方法抓取数据:

启动程序时增加参数:-messaging

游戏中使用命令: stat startfile, stat stopfile

/sdcard/UE4Game/YourProject/UE4CommandLine.txt
../../../YourProject/YourProject.uproject -messaging
# 数据存放于
/sdcard/UE4Game/FPSDemo/FPSDemo/Saved/Profiling/UnrealStats

在这里插入图片描述

Simpleperf

Simpleperf可录制很深的CPU调用堆栈,可用于详细分析问题时间内的CPU代码执行情况,其将数据聚合,输出类似于Instrument TimeProfiler的形式,可以看到不同函数在一段时间内的贡献、占比情况,及调用次数,方便对其进行更有针对性的优化。但这种聚合模式没有单帧的概念,主要用于宏观统计。因此可以与Profiler、Insights等工具结合使用。建议使用Test包进行数据分析,避免Development版本额外代码所造成的性能压力影响真实数据

Android Studio

使用Android Studio的 ProfileAPK 功能,即可较为自动的生成性能数据
在这里插入图片描述

Perfetto

Perfetto可以拿到simpleperf、systrace等数据

可用于分析APP、系统整体CPU调度,渲染节奏等问题

XCode Timeprofiler

XCode Timeprofiler 与Simpleperf原理相同的CPU性能分析工具,功能强大

Best Practice

粗粒度工具:FramePro、UnrealInsight 用于开发期CI暴漏明显问题

发现问题后,使用细粒度工具进行深度分析:Simpleperf、Streamline、TimeProfiler

建议使用Test包,排除Cache、冗余代码、Profiler本身对性能的影响

尝试:离线计算、ParallelFor、异步化、SOA化等方案

并使用CacheSim、Streamline进行 Cache Miss 分析,压榨出最后的水分

GPU

如果是在PC平台上可以使用ProfileGPU命令或者使用快捷键Ctrl+Shift+,影响GPU瓶颈最主要的是BasePass和PrePass

现代Mobile GPU通常使用 TBR、TBDR 硬件架构
在这里插入图片描述
在有限的功耗下提供尽可能多的性能空间
除了控制 运算负载、动态分支、全精度运算 等天然GPU不友好的指标之外
Mobile GPU因其On-chip Memory较小的原因
需要严格控制寄存器数量,避免Register Spill产生额外IO带宽

Adreno GPU

Adreno GPU
使用Snapdragon Profiler进行Counter数据抓取 提供python脚本进行Counter数据汇总与分类

Mali GPU

Android GPU Inspector (AGI)

Android GPU Inspector (AGI)

在这里插入图片描述
系统性能分析
执行系统级跟踪和分析,以深入了解游戏和系统服务使用的资源,例如 GPU、CPU、内存、电池和 GPU 计数器。支持 Qualcomm® AdrenoTM、Arm® MaliTM 和 Imagination® PowerVRTM GPU
帧性能分析
从单个应用帧捕获跟踪记录,然后对游戏的 GPU 使用情况执行深入分析。其中包括对 Vulkan 和 OpenGL ES API 调用进行更深入的介绍和分析

内存

Android、iOS内存管理核心:

  1. 分页(Paging)
  2. 内存映射(Memory Mapping)

CPU & GPU 公用一套内存硬件(GPU有少量OnChip Memory)
当内存不足时触发分页(Page Out)释放内存:触发 内存压缩; 删除Clean Page; 当剩余内存低于阈值,系统将开始杀进程

堆内存分析

Android Studio

Android Studio 支持 Native(C++) 堆内存分配的分析工作
在这里插入图片描述

Perfetto组件可使用Heapperfd进行Native内存分析工作

LoliProfiler

LoliProfiler支持整合至 UE、Unity 引擎分析 Native(C++)内存
在这里插入图片描述

UE5 Memory Insights

UE5 Memory Insights

在这里插入图片描述

Unity Mono 内存

Mono虚拟机(IL2CPP)提供内存快照接口

UnityMemPerf用C++&QT完美还原了Unity IL2CPP内存工具PerfAssist的体验,无需Unity、无需SDK,连接USB拉起APP即可抓取托管内存快照,进行内存分析、快照Diff

Memreport

提供 UE4 Memreport 数据解析、Diff与可视化功能:(经常使用)

RHI Memory

可针对性的对 UE Vulkan、GL、Metal RHI层内存申请接口结合 FRHIResource 的DebugName

实现一套数据Dump机制,以链接 RHI 内存与 UE RHI资源,深入分析RHI内存

XCode Allocations

类似 Simpleperf 在 iOS 可查看堆内存分配数据的工具
iOS Memory Deep Dive

功耗

手机硬件集成度高,重度手游发热明显,发热与功耗的关系越来越受到开发者的重视
功耗统计难点:

  1. 硬件集成度高,被动散热上限低
  2. 难以测量单模块功耗
  3. 静态、动态功耗叠加
  4. 能耗和利用率、频率呈线性关系,和电压呈二次关系
    综合导致:功耗数据获取难度大,功耗数据体现非线性,数据分析难度也很大

优化建议:均衡CPU利用率;多线程使用;空间换时间;注意屏幕耗电;实时查询响应能耗发热;与硬件厂商合作

硬件方案

电流计

设备充满电(100%),将电流计与充电头连接。
在系统的蓝牙管理面板中查找设备,配对连接并且获取其Mac地址记下。

软件方案

Perfdog

支持基于驱动上报的功耗数据获取, iOS直接解析了XCode Energy的数据

Android 的 Snapdragon Profiler

Snapdragon Profiler
使用实时指标识别潜在问题区域,从 150 多个硬件性能计数器中进行选择
分析跨 CPU、GPU 和 DSP* 的系统、图形和 ML 工作负载
使用 Snapshot 捕获捕获和调试图形工作负载,从而实现更深入的帧和着色器分析
对任何 DirectX、Vulkan、OpenCL 和 OpenGL ES 工作负载进行详细分析
在这里插入图片描述

Ios 的 Instruments

Instruments 是 Xcode 的一个工具集,为我们提供了强大的程序性能分析及测试能力。可以进行CPU 性能测试、图形性能测试、内存性能测试等

包体

包体的大小、首包资源的大小对于玩家有较大影响

尽可能减少包体大小,也是开发者需要关注的重点问题

SizeMap

SizeMap介绍,可以将本地的pak包加载, SizeMap以TreeMap图的形式将资源分类,我们可以点击任意分类进入更深的层级来分析数据
在这里插入图片描述

Unreal PakViewer

Unreal PakViewer

Custom Built Profiler With CI

Asset Registry 中包含资源的 Meta 信息(AssetRegistrySearchable),可在Cook & Package 结束后使用 Commandlet 分析此信息

代码崩溃 & 稳定性

可通过addr2line翻译崩溃符号至具体代码行号

# android-ndk-r21d\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-addr2line.exe
addr2line.exe -f -C -e path/to/libUE4.so 0x009988ff

Address Santizer

Android、iOS平台原生支持 ASan,UE也已整合至引擎中
测试ASan包,提前发现内存越界、Use-after-free等常见内存问题
安卓使用ASan检查UE4内存问题

StompAllocator

Windows平台也支持ASan,不行的是至少4.27版本的引擎仍旧无法正常使用ASan功能
可使用替代品,UE内部的 Stomp Allocator(会占用巨量虚拟内存(60G+))

https://pzurita.wordpress.com/2015/06/29/memory-stomp-allocator-for-unreal-engine-4/

通过Page可以设置Read、Write保护的特性,在每次申请内存时,使用Page读写保护来保护内存区域
当越界读写时,就会触发保护,从而崩溃在问题出现的第一现场

Vulkan

Vulkan RHI在较新的移动设备中已全面支持
其RHI性能、驱动内存占用,可玩性、以及可优化性 远超 OpenGL RHI
包含Command的Trace工具,发现崩溃问题时,可通过Trace工具记录完整Command数据

相关文章:

UE4中性能优化和检测工具

UE4中性能优化和检测工具合集 简述CPUUnreal InsightUnreal ProfilerSimpleperfAndroid StudioPerfettoXCode TimeprofilerBest Practice GPUAdreno GPUMali GPUAndroid GPU Inspector (AGI) 内存堆内存分析Android StudioLoliProfilerUE5 Memory InsightsUnity Mono 内存Memre…...

大型ERP设计-业务与功能指引:外币折算与辅助账套

外币折算与辅助账套 前言:在对ORACLE和SAP的核心模块功能全面解读的基础上,给出大型ERP设计的建议-业务与功能指引,企业选型、开发大型ERP软件的公司和ERP顾问可以参考。模块包括财务、计划与制造、供应链、项目及设备(MRO),初步预…...

重学java 73.设计模式

本想送你一本沉思录,可该迷途知返的人是我 —— 24.6.18 设计模式 设计模式(Design pattern),是一套被反复使用、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、保证代码可靠性、程序的重用性,稳定性。 1995 年&#x…...

线代的学习(矩阵)

1.矩阵的乘法 矩阵实现满足:内标相等 矩阵相乘之后的结果:前行后列 需要注意:1.矩阵的乘法不具有交换律:AB!BA 2.矩阵的乘法满足分配律:A(BC) AB AC 抽象逆矩阵求逆矩阵 方法1.凑定义法、 方法2.长除法 数字型矩阵…...

【Java基础5】JDK、JRE和JVM的区别与联系

JDK、JRE和JVM的区别与联系 Java是一种广泛使用的编程语言,它的跨平台特性得益于Java虚拟机(JVM)。然而,在Java的世界里,JDK、JRE和JVM这三个术语常常让人感到困惑。本文将阐述它们各自的功能,以及它们是如…...

2024年先进机械电子、电气工程与自动化国际学术会议(ICAMEEA 2024)

2024年先进机械电子、电气工程与自动化国际学术会议(ICAMEEA 2024) 2024 International Conference on Advanced Mechatronic, Electrical Engineering and Automation 会议地点:杭州,中国 网址:www.icameea.com 邮箱: icameeasub-conf.c…...

WPF 深入理解四、样式

样式 WPF中的各类控件元素,都可以自由的设置其样式。 诸如: 字体(FontFamily) 字体大小(FontSize) 背景颜色(Background) 字体颜色(Foreground) 边距(Margin) 水平位置(HorizontalAlignment) 垂直位置(VerticalAlignment)等等。 而样式则是组织和重用以上的重要工具。不是使…...

TCP相关细节

1. 常用TCP参数 1.1 ReceiveBufferSize ReceiveBuffersize指定了操作系统读缓冲区的大小, 默认值是8192(如图5-10 所示)。在第4章的例子中,会有"假设操作系统缓冲区的长度是8" 这样的描述,可通过socket.ReceiveBufferSize 8 实现。当接收端缓冲区满了的时…...

flutter实现UDP发送魔法包唤醒主机

魔法包 魔法包是用16进制表示的数据包,它是由固定的前缀数据(FFFFFFFFFFFF)以及固定重复次数(16次)的目标主机MAC地址组成。 假设目标主机的MAC地址是:"50:eb:f6:27:ae:a8" 那么魔法包就是[FFFFFFFFFFFF50EBF627AEA850EBF627AEA850EBF627AEA8…...

回溯算法练习题(2024/6/18)

1全排列 II 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1]]示例 2: 输入:nums [1,2,3] 输出:[[1,…...

DSP——从入门到放弃系列2——PLL锁相环(持续更新)

1、概述 锁相环(Phase Locked Loop,PLL)是处理器的时钟源,控制着C6678处理器中C66x内核、各外围设备的时钟的时钟比、对准和选通功能。 2、功能描述 上图显示了PLL和PLL控制器的逻辑实现。PLL控制器提供通过软件可配置的分频器&#xff0…...

Altair 人工智能技术助力MABE预测消费者行为,实现设备性能优化

主要看点 行业: 家电行业 挑战: 企业面临的挑战是如何利用已收集的大量数据,深入了解消费者在产品使用过程中对某些保鲜程序的影响。 Altair 解决方案: Altair采用了Altair RapidMiner人工智能平台来解决问题,特别是…...

解决Spring Boot项目中数据源URL属性的问题

今天测试Springboot项目的时候,报错: . ____ _ __ _ _/\\ / ____ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | _ | _| | _ \/ _ | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) ) |____| .__|_| |_|_| |_\__, | / / / /|_||___…...

Java每日作业day6.18

ok了家人们今天我们继续学习方法的更多使用,闲话少叙,我们来看今天学了什么 1.重载 在同一个类中,可不可以存在同名的方法?重载:在同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或参数个…...

mac如何检测硬盘损坏 常用mac硬盘检测坏道工具推荐

mac有时候也出现一些问题,比如硬盘损坏。硬盘损坏会导致数据丢失、系统崩溃、性能下降等严重的后果,所以及时检测和修复硬盘损坏是非常必要的。那么,mac如何检测硬盘损坏呢?有哪些常用的mac硬盘检测坏道工具呢? 一、m…...

怎么通俗理解概率论中的c r(cramer rao 克拉默拉奥)不等式?

还是推一下比较好记 视频链接 【数理统计学重要定理证明:C-R不等式——无偏估计的方差下界-哔哩哔哩】 https://b23.tv/4gk1AvU 【数理统计学重要定理证明:C-R不等式——无偏估计的方差下界-哔哩哔哩】...

Flask之模板

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 一、模板的基本用法 1.1、创建模板 1.2、模板语法 1.3、渲染模板 二、模板辅助工具 2.1、上下文 2.2、全局对象 2.3、过滤器 2.4、测试…...

如何优化 Bash 脚本的执行效率?

要优化 Bash 脚本的执行效率,可以考虑以下几个方面: 减少命令执行次数:Bash 脚本中的命令执行是比较耗时的,在可能的情况下,可以尽量减少命令的执行次数。例如,可以将多个命令合并成一个,使用管…...

c语言---循环 、判断基础知识详解

if语句 else离最近的if语句结合。 if语句题目 //1. 判断一个数是否为奇数 //2. 输出1 - 100之间的奇数 #include <stdio.h> int main() {int n 0;scanf("%d", &n);if (n % 2){printf("奇数\n");}else{printf("不是奇数\n"…...

Opencv高级图像处理

文章目录 Opencv高级图像处理图像坐标二值化滤波高斯滤波中值滤波 开闭运算检测霍夫圆检测边缘检测Canny边缘检测findContours区别傅里叶变换-高/低通滤波 直线检测 相机标定视频处理视频格式 模板摄像头处理&#xff08;带参调节&#xff09;单图片处理&#xff08;带参调节&a…...

Linux操作系统学习:day03

内容来自&#xff1a;Linux介绍 视频推荐&#xff1a;[Linux基础入门教程-linux命令-vim-gcc/g -动态库/静态库 -makefile-gdb调试]( 目录 day0317、创建删除目录创建目录删除目录 18、文件的拷贝19、mv 命令20、查看文件内容的相关命令21、给文件创建软连接或硬链接 day03 …...

快排(霍尔排序实现+前后指针实现)(递归+非递归)

前言 快排是很重要的排序&#xff0c;也是一种比较难以理解的排序&#xff0c;这里我们会用递归的方式和非递归的方式来解决&#xff0c;递归来解决是比较简单的&#xff0c;非递归来解决是有点难度的 快排也称之为霍尔排序&#xff0c;因为发明者是霍尔&#xff0c;本来是命名…...

客户端输入网址后发生的全过程解析(协议交互、缓存、渲染)

目录 1. 输入 URL 并按下回车键2. DNS 解析3. TCP 连接4. 发送 HTTP 请求5. 服务器处理请求6. 发送 HTTP 响应7. 浏览器接收响应8. 渲染网页9. 执行脚本10. 处理其他资源11. TLS/SSL 加密&#xff08;如果使用 HTTPS&#xff09;握手过程 12. 协议协商和优化 总结 1. 输入 URL …...

未来科技:Web3如何重塑物联网生态系统

随着Web3技术的崛起&#xff0c;物联网&#xff08;IoT&#xff09;的发展正迎来一场深刻的变革。本文将深入探讨Web3如何重塑物联网生态系统&#xff0c;从技术原理到应用实例&#xff0c;全面解析其对未来科技发展的影响和潜力。 1. Web3技术简介与发展背景 Web3技术是建立在…...

C++之模板(二)

1、类模板 2、使用类模板 类模板在使用的时候要显示的调用是哪种类型&#xff0c;而不是像函数模板一样能够根据参数来推导出是哪种类型。 Stack.h #include <stdexcept>template <typename T> class Stack { public:explicit Stack(int maxSize);~Stack();void …...

相机的标定

文章目录 相机的标定标定步骤标定结果影响因素参数分析精度提升一、拍摄棋盘格二、提升标定精度 标定代码实现 相机的标定 双目相机的标定是确保它们能够准确聚焦和成像的关键步骤。以下是详细的标定步骤和可能的结果&#xff0c;同时考虑了不同光照条件和镜头光圈大小等因素对…...

C# 利用XejeN框架源码,编写一个在 Winform 界面上的语法高亮的编辑器,使用 Monaco 编辑器

析锦基于Monaco技术实现的Winform语法高亮编辑器 winform中&#xff0c;我们有时需要高亮显示基于某种语言的语法编辑器。 目前比较强大且UI现代化的&#xff0c;无疑是宇宙最强IDE的兄弟&#xff1a;VS Code。 类似 VS Code 的体验&#xff0c;可以考虑使用 Monaco Editor&a…...

03- jQuery事件处理和动画效果

1. jQuery的事件处理 1.1 绑定事件处理函数 on() 将一个或多个事件的处理方法绑定到被选择的元素上。on()方法适用于当前或未来的元素&#xff0c;如用脚本创建的新元素。 $(selector).on(event,childSelector,data,function) 参数描述event必需。规定要从被选元素添加的一…...

RabbitMQ 入门

目录 一&#xff1a;什么是MQ 二&#xff1a;安装RabbitMQ 三&#xff1a;在Java中如何实现MQ的使用 RabbitMQ的五种消息模型 1.基本消息队列&#xff08;BasicQueue&#xff09; 2.工作消息队列&#xff08;WorkQueue&#xff09; 3. 发布订阅&#xff08;Publish、S…...

物联网协议应用

目录 前言一、WIFI简介二、NTP协议2.1 NTP简介2.2 NTP实现 三、HTTP协议3.1 HTTP协议简介3.2 HTTP服务器 四、MQTT协议4.1 MQTT协议简介4.1.1 MQTT通信模型4.1.2 MQTT协议实现原理4.1.3 MQTT 控制报文 4.2 移植MQTT协议 前言 本文主要介绍一下物联网协议如NTP协议、HTTP协议和M…...

可以建网站的公司/谷歌推广怎么样

中国釉面砖市场产销规模调研与需求前景预测报告2022-2028年 ═━┈┈━══━┈┈━══━┈┈━══━ 【出版机构】: 中商经济研究网 第一章 釉面砖行业发展综述 第一节 釉面砖行业定义及分类 一、行业定义 二、行业主要产品分类 三、行业主要商业模式 第二节 釉面…...

团队logo标志设计/正规seo排名多少钱

ITIL&#xff08;信息技术基础设施库&#xff09;是Information Technology Infrastructure Library的缩写。ITIL是英国政府中央计算机与电信管理中心&#xff08;CCTA&#xff09;在20世纪90年代初期发布的一套IT服务管理最佳实践指南&#xff0c;旨在解决IT服务质量不佳的情况…...

西安企业网站建设代理机构/邯郸seo

优平均差稳定性简单选择排序O(n2)O(n2)O(n2) 直接插入排序O(n)O(n2)O(n2) √冒泡排序O(n)O(n2)O(n2) √希尔排序O(nlog2n)O(nlogn)O(nlog2n) 快速排序O(nlogn)O(nlogn)O(n2) 堆排序O(nlogn)O(nlogn)O(nlogn) 归并排序O(nlogn)O(nlogn)O(nlogn) √计数排序…...

小说做任务赚钱的网站/网站友情链接购买

在Linux上可以通过ifconfig和route命令添加IP别名。 现在我们在eth0上添加两个IP别名192.168.0.111和192.168.0.112&#xff1a; Shell>ifconfig eth0:1 192.168.0.111 broadcast 192.168.0.255 netmask 255.255.255.0 up Shell>route add -host 192.168.0.111 dev eth0:…...

合浦网站建设/seo上海网站推广

[1] http://blog.csdn.net/lanxu_yy/article/details/11907615 每当遇到0&#xff0c;则放到当前可放置的最左端‘如果遇到2&#xff0c;则放到当前可放置位置的最右边。 具体的过程&#xff1a; 如果当前元素是2&#xff0c;那么将其交换到最右边&#xff0c;rightindex--&…...

网站建设骗/品牌推广策划

特征归一化:为什么需要对数值类型的特征做归一化? 特征归一化的方法为什么要对数值型特征做归一化?是否所有方法都需要对数值进行归一化?代码演示参考资料对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间。 特征归一化的方法 最常用的方法主要有…...