UE4中性能优化工具合集

news2025/9/18 6:27:53

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
  • 功耗
    • 硬件方案
      • 电流计
    • 软件方案
  • 包体
    • SizeMap
    • Unreal PakViewer
    • Custom Built Profiler With CI
  • 代码崩溃 & 稳定性
    • Address Santizer
    • StompAllocator
    • Vulkan

简述

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

CPU

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

现代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. 能耗和利用率、频率呈线性关系,和电压呈二次关系
    综合导致:功耗数据获取难度大,功耗数据体现非线性,数据分析难度也很大

硬件方案

电流计

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

软件方案

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

包体

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

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

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数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1822457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript 基础 - 第2天【函数】

文章目录 前言一、声明和调用1、声明(定义)2、调用 二、参数三、返回值四、作用域1、全局作用域2、局部作用域 五、匿名函数1、函数表达式2、立即执行函数 前言 理解封装的意义,能够通过函数的声明实现逻辑的封装,知道对象数据类…

基于pytorch的LSTM模型训练与预测(附源码)

1.LSTM模型 关于这个模型的基本概念长短时记忆网络(LSTM)(超详细 |附训练代码)_lstm代码-CSDN博客可以查看这篇文章,写得很详细,我觉得能大概看明白反向传递各个部分的推导就行了。 2.pytorch的安装 我使用的是conda环境,在参照网上的安装过程…

EndNote 专业的文献管理软件下载,强大的引用和参考文献生成功能

EndNote,它以其强大的功能和便捷的操作赢得了广大学术工作者的青睐,成为了他们不可或缺的研究助手。 EndNote软件的出现,极大地简化了学术文献的管理和组织工作。用户只需将收集到的文献导入软件,便可轻松实现对文献的分类、排序和…

【APP移动端自动化测试】第四节.元素操作的API

文章目录 前言一、点击&输入&清空操作 1.1 点击元素 1.2 输入&清空元素二、获取文本内容&位置&大小操作 2.1 获取文本内容 2.2 获取位置&大小三、根据属性名获取属性值操作四、滑动和拖拽操作 4.1 _swipe 4.2 _scroll …

20240613确认飞凌的OK3588-C的核心板的HDMI IN功能

20240613确认飞凌的OK3588-C的核心板的HDMI IN功能 2024/6/13 16:09 v4l2-ctl --list-devices v4l2-ctl --list-formats-ext -d /dev/video8 【这里必须拿到HDMI OUT机芯的分辨率。如果拿不到,肯定硬件异常/线没有接好】 v4l2-ctl -V -d /dev/video8 gst-launch-1.…

宏电“灌区哨兵”助力灌区信息化建设,开启灌区“智水”时代

灌区是保障国家粮食安全的重要水利设施。“十四五”提出,要推进大中型灌区节水改造和精细化管理。灌区信息化是建设智慧水利、深化行业监管、提升灌区科学管理水平的基础支撑,也是“十四五”期间灌区现代化改造的重点内容之一。 宏电智慧灌区信息化解决方…

探秘扩散模型:训练算法与采样算法的双重解读

很早之前就新建了一个专栏从0开始弃坑扩散模型,但发了一篇文章就没有继续这一系列,在这个AIGC的时代,于是我准备重启这个专栏。 整个专栏的学习顺序可以见这篇汇总文章 很多时候我们看到一篇文章很长,难免会心生胆怯,所以我将这些…

docker的教程长亭

把我的常用docker写在这里 之前用 vul - hub 靶场经常用 现在docker不知道为什么挂了 开启 docker-compose up -d 关闭 docker-compose down docker ps 只是运行 docker ps -a 所有 包括停止 docker ps -q 只看id docker stop <container_name_or_id> docker 的容器…

Pinia的简要概述

Pinia是专为 Vue 应用程序开发的状态管理库&#xff0c;Pinia 支持 Vue2和 Vue3。在 Vue3项目中,既可以使用传统的 Vuex实现状态管理&#xff0c;又可以使用 Pinia 实现状态管理。本章将对 Pinia的基本使用方法进行讲解。 一.Pinia 概述 Pinia 是新一代的轻量级状态管理库&…

Echarts图表实现X轴自动滚动加载数据

1.用到了Echarts图表自带的dataZoom组件 2.使用定时器定时刷新数据 效果图 关键代码 dataZoom: [{xAxisData: 0,//这里是从X轴的0刻度开始show: false,//是否显示滑动条type: slider, // 这个 dataZoom 组件是 slider 型 dataZoom 组件startValue: 0, // 从头开始。endValue:…

小程序 UI 风格,构建美妙视觉

小程序 UI 风格&#xff0c;构建美妙视觉

数据结构——队列(Queue)详解

1.队列&#xff08;Queue&#xff09; 1.1概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out)的性质 入队列&#xff1a;进行插入操作的一端称为队尾(Tail/Rear) 出…

10054 远程主机强迫关闭了一个现有的连接

在连接数据库SQLserver&#xff0c;时可能会出现如下的故障&#xff0c;特别是当操作系统是Win11时&#xff0c;在连接比较旧的版本数据库时会出现这样的问题&#xff1a;10054 远程主机强迫关闭了一个现有的连接。报错如下图所示&#xff1a; 根据微软的官方网站&#xff0c;查…

U盘文件损坏且无法读取怎么修复?五个方法帮你搞定

在现代社会&#xff0c;U盘已经是我们日常生活和工作中不可缺少的工具之一。U盘的容量大、体积小、携带方便&#xff0c;很多人都喜欢使用U盘用于个人和工作数据的存储和传输。但是&#xff0c;U盘和其他的电子设备一样&#xff0c;在试用期间有时候会出现U盘打不开提示目录结构…

jadx+android studio+雷电模拟器 动态调试apk

# 环境准备 1.雷电模拟器&#xff0c;开启root 2.jadx&#xff1a; https://sourceforge.net/projects/jadx.mirror/files/v1.5.0/jadx-gui-1.5.0-with-jre-win.zip/download 3.java jdk 11 https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.…

【CT】LeetCode手撕—21. 合并两个有序链表

目录 题目1-思路2- 实现⭐21. 合并两个有序链表——题解思路 3- ACM实现 题目 原题连接&#xff1a;21. 合并两个有序链表 1-思路 双指针&#xff1a;题目提供的 list1 和 list2 就是两个双指针 通过每次移动 list1 和 list2 并判断二者的值&#xff0c;判断完成后将其 插入…

【Text2SQL 论文】CodeS:Text2SQL 领域的开源语言模型

论文&#xff1a;CodeS: Towards Building Open-source Language Models for Text-to-SQL ⭐⭐⭐⭐ arXiv:2402.16347, SIGMOD 2024 人大 Code: CodeS | GitHub 一、论文速读 本文提出一个开源的专门用于 Text2SQL 任务的 LLM —— CodeS&#xff0c;有多个参数规模的版本&…

揭秘App广告监测黑科技!Xinstall助你洞察用户行为,提升转化率!

在移动互联网时代&#xff0c;App的推广与运营已成为企业获取用户、提升品牌知名度的重要手段。然而&#xff0c;面对激烈的市场竞争&#xff0c;如何确保广告投放的精准性、提高广告效果转化率&#xff0c;成为了摆在每一位推广者面前的难题。今天&#xff0c;我们就来聊聊如何…

盘点:支持国产化信创的项目管理软件有哪些?

对于个人或者预算充足的团队来说&#xff0c;找到一个靠谱、好用的项目管理软件是一件很有必要的事情&#xff0c;那么目前国内有哪些【国产化信创】的项目管理软件值得选择呢&#xff1f; 下面盘点10款&#xff0c;每一款都独具特色。 1、国产化项目管理软件&#xff0c;可灵活…

Go微服务框架Kratos中makefile命令的使用方法及报错处理

运用 kratos 微服务框架开发项目时&#xff0c;可以使用提供的 makefile 中的命令自动且快速生产相关代码&#xff0c;提高开发效率。 krotos中makefile文件内容如下&#xff1a; GOHOSTOS:$(shell go env GOHOSTOS) GOPATH:$(shell go env GOPATH) VERSION$(shell git descri…