如何在 Unity 中获取有关缓存未命中的分析数据?

Posted

技术标签:

【中文标题】如何在 Unity 中获取有关缓存未命中的分析数据?【英文标题】:How to get profiling data on cache misses in Unity? 【发布时间】:2020-01-26 04:20:31 【问题描述】:

我正在寻找一种方法来为我的 Unity 项目获取有关缓存未命中的分析数据。

我已经搜索了具有这些统计信息的 Visual Studio 工具。我可以看到 Visual Studio 有用于显示缓存未命中的 .NET 应用程序的工具(就像这里描述的 https://docs.microsoft.com/en-us/visualstudio/profiling/cpu-and-windows-counters?view=vs-2017),比如它的性能向导,但对于我的 Unity 项目,它们总是灰显的。

我尝试将 Visual Studio 的性能工具附加到我正在运行的 Unity 项目中,但我似乎无法找到我正在寻找的数据。

不幸的是,Unity 的分析器似乎没有显示我正在寻找的缓存未命中统计信息。

我正在使用单声道,但如果有帮助,我愿意切换到 IL2CPP,我目前主要在探索统一性能。

我想从我的优化中删除猜测工作。有什么我错过的吗?

编辑 1: 这是我测试的。

我使用在播放器选项中选择的 IL2CPP 创建了我的测试项目的构建

在 Visual Studio 中,我进入了 Debug/Performance Profiler,我选择了“Executable”目标并使用了“Performance Wizard”选项。 单击“开始”后,我使用了“仪器”选项,单击下一步,对我要分析的应用程序使用“可执行文件”,单击下一步,选择我创建的构建的 .exe,单击下一步并完成。

然后我得到一个失败的说法:

Profiling started.
Instrumenting <my path to my exe> in place
Info VSP3049: Small functions will be excluded from instrumentation.
Microsoft (R) VSInstr Post-Link Instrumentation 15.8.18219.1 x86
Unable to obtain debug information. Link with the /PROFILE linker switch.
PRF0002: Instrumentation failed with these options: /u "<my path to exe> /excludesmallfuncs.  Please check the output window for additional details.
Data written to <my path>200126(5).vsp.
Profiling finished.
Profiling complete.

我尝试调查Error VSP1011: Unable to obtain debug information. Link with the /Profile linker switch,但我不确定它是否相关。

我安装了 VS2013 并尝试了相同的步骤,但它给了我相同的错误。

【问题讨论】:

您使用的是 Mono 还是 IL2CPP? 我正在测试 Unity 的性能,所以我愿意切换。我用的是单声道 你应该使用 IL2CPP。它应该更快,因为没有 JIT 并且它是优化的 C++。然后,为了您的代码优化,您可能不应该关注缓存未命中。尝试为您的解决方案探索新算法,进行更多缓存,避免垃圾收集等。要消除猜测工作,您可以简单地分析(或深入分析)您的游戏并检查 CPU/GPU 时序以及哪些功能花费了过多的 CPU 时间。然后您可以专注于这些功能并相应地优化它们。 感谢您的回答。我已经知道如何使用 Unity 的分析器优化和分析 CPU/GPU。但是,知道缓存访问比内存访问快约 25 倍,如果我想从我的游戏中获得更多的汁液,我想知道如何进行下一步,看看我可以从哪里获得额外的性能.我的问题不是如何优化我的游戏,而是如何使用 Unity 进行缓存未命中分析 尝试使用 IL2CPP 项目进行分析 【参考方案1】:

我终于找到了一个很好的工具。

看起来英特尔的 VTune 很容易使用并且提供了很好的信息。可以肯定的是,它是抽样,并没有显示确切的信息,但它为我提供了要调查的热点。

【讨论】:

以上是关于如何在 Unity 中获取有关缓存未命中的分析数据?的主要内容,如果未能解决你的问题,请参考以下文章

5 分钟快速学习,缓存一致性优化方案!

分析例程的缓存未命中

代码分析器哪些参数显示缓存未命中?

是啥导致我的代码中的缓存未命中?

“干净数据缓存未命中”和“脏数据缓存未命中”之间的区别

如何提升缓存命中率