
cpuopt - CPU 优化
针对《怪物猎人:世界》CPU代码中特定问题的修复,通过测量游戏发现:一个效果bug会八次回读显存,较小的浪费,以及X3D CPU保持在缓存芯片上。在Ryzen 9 9950X3D上最高提升+88%,在显卡成为瓶颈时提升很小。需要Astera Loader。开源。
查看大图[size=4]针对《怪物猎人:世界》CPU 代码中若干问题的修复,
通过测量运行中的游戏发现。[/size]
[size=4][color=#f2b544][b]功能说明[/b][/color][/size]
[list]
[*][b]一个真正的 bug,也是最大的问题:[/b]特效(火焰、冰霜、火花、尘土)在本应为显卡准备的内存中构建顶点数据,而游戏每次都会从该内存读回每一条记录,共读八次。CPU 读取该内存非常慢:在 Ryzen 9 9950X3D 上,特效绘制耗时约为所需时间的十倍,特效繁重的时刻(黑龙的核爆)帧率会掉到 60 fps。[/*]
[*][b]一些较小的浪费:[/b]Steam 每帧被调用多次、最慢的绘制任务最后才启动、命中检测只在单线程上运行、一个持续占用核心的帧率限制器(见下方开关)。[/*]
[*][b]双 CCD X3D CPU[/b](7900X3D、7950X3D、9900X3D、9950X3D):让游戏保持在大缓存所在的 CCD 上,而 Windows 经常把它分散到两个 CCD。[/*]
[*]每项修复在游戏 Mods 菜单中(配合 [url=https://www.nexusmods.com/monsterhunterworld/mods/8856]CMFM[/url])或 cpuopt.ini 中都有独立开关,另有一个全部开启的开关。内置基准测试可以在开启和关闭优化的情况下测量你的电脑。[/*]
[/list]所有更改都在内存中进行,作用于 cpuopt 通过字节特征找到并验证恰好匹配一次的代码处。如果某处不匹配(游戏版本不同、其他 mod 修改了同一段代码),该开关会保持关闭,页面会说明原因;游戏随后会按原有方式运行该部分。不修改任何游戏文件,也不修改任何游戏数值:命中检测运行的是游戏自身的代码,只是使用了更多线程。
[size=4][color=#f2b544][b]在你的电脑上会有帮助吗?[/b][/color][/size]
这不是通用的加速。只有在 CPU 成为瓶颈时帧率才会提升:例如较快的显卡(比如 1440p 下的 RTX 4090、5080 或 5090)或较低的分辨率、繁忙的场景和战斗、高刷新率,并且目前为止在 AMD Ryzen 上提升最明显。在显卡已经满载的情况下(如目前测过的所有中端显卡),帧率保持不变;cpuopt 仍会减少每帧所需的 CPU 时间。页面的“Limited by”(受限于)一栏会显示当前限制你帧率的因素。
目前的测量结果,除注明外均为 2560x1440:
[list]
[*]Ryzen 9 9950X3D、RTX 5080、DLSS Performance、龙结晶之地:137 → 258 fps([b]+88%[/b])。[/*]
[*]Ryzen 9 9950X3D、RTX 5090、DLSS Quality、古代树森林:147 → 265 fps([b]+80%[/b]);在已有 Process Lasso 规则将游戏保持在缓存 CCD 上的情况下,172 → 271 fps(+58%)。[/*]
[*]Ryzen 9 9950X3D、RTX 5090、龙结晶之地历战王冰呪龙战斗:175 → 286 fps([b]+63%[/b]),随后受限于显卡。[/*]
[*]Core i7-13700K 搭配 RTX 3080 Ti、Core i5-12400F 搭配 RTX 3060(1920x1080)、Core i5-12600KF 搭配 RTX 3060 Ti:帧率相同,受限于显卡;在可测量的情况下游戏线程所需 CPU 时间减少了 8% 到 9%。[/*]
[/list]特效 bug 在目前测过的 Ryzen 上造成的开销远大于这些 Intel CPU,而 9950X3D 是目前唯一测过的 Ryzen。非常欢迎来自其他 CPU(非 X3D 和单 CCD Ryzen、较老的 CPU)的结果:运行基准测试并发布其报告。
[size=4][color=#f2b544][b]前置需求[/b][/color][/size]
[list]
[*]Steam 版游戏、DirectX 12、最终版本(421810)、Windows 系统。在 Linux 上通过 Proton 运行时,首次尝试未能进入标题画面;正在调查中。[/*]
[*][url=https://github.com/wowo-dot/AsteraLoader/releases]Astera Loader[/url] 0.2.2 或更新版本,用于加载本 mod。[/*]
[*]推荐:[url=https://www.nexusmods.com/monsterhunterworld/mods/8856]CMFM[/url] 0.1.1 或更新版本,用于设置页面和基准测试。没有它时,设置位于 cpuopt.ini。[/*]
[/list]无需安装其他内容:不需要 Visual C++ 运行库,不需要 .NET。
[i]Astera Loader 的链接指向其 GitHub releases,那里始终有最新版本;其 [url=https://www.nexusmods.com/monsterhunterworld/mods/8855]Nexus 页面[/url] 会发布重大更新。[/i]
[size=4][color=#f2b544][b]使用 Mod Organizer 2 安装[/b][/color][/size]
[list=1]
[*]按各自页面说明安装 Astera Loader(和 CMFM)。[/*]
[*]将此压缩包作为 mod 安装并启用。如果 MO2 提示没有 data 文件夹,按原样安装即可。[/*]
[*]通过你的 Astera Loader 条目启动游戏。[/*]
[*]位于 Options 下方的 Mods > CPU optimizations 应显示“all 7 optimizations on”(在没有缓存 CCD 的 CPU 上显示“all 6”)。[/*]
[/list]
[size=4][color=#f2b544][b]手动安装[/b][/color][/size]
将压缩包中的 AsteraLoader 文件夹复制到游戏文件夹中,与 MonsterHunterWorld.exe 同级,然后按其页面说明通过 Astera Loader 启动游戏。
[size=4][color=#f2b544][b]开关[/b][/color][/size]
除最后一项外全部默认开启。数据来自测试电脑(Ryzen 9 9950X3D、RTX 5090)。
[list]
[*][b]Effect drawing(特效绘制):[/b]重写特效循环中的 56 个字节,使其只写入显存。提升最大:特效绘制开销降低约十倍。[/*]
[*][b]Draw job order(绘制任务顺序):[/b]先启动最慢的绘制任务,按对象类型学习,这样任务线程不会都等待某个迟到的任务。在据点 +4.8%。[/*]
[*][b]Steam server time(Steam 服务器时间):[/b]每秒向 Steam 询问一次,而不是每帧多次(每次都要等待 Steam 内部的锁)。在据点 +3%。[/*]
[*][b]Update threads(更新线程):[/b]引擎只有在工作量超过 60 微秒时才在任务线程上运行一批对象更新;改为 40 微秒后,更多工作能并行执行。在古代树森林 +2.8%。[/*]
[*][b]Stay on the cache die(保持在缓存 CCD 上):[/b]仅限双 CCD X3D CPU,其他 CPU 上为灰色不可用。游戏运行在缓存 CCD 上,任务线程也按其规模设置。在 Windows 将游戏分散到两个 CCD 的情况下最高 +40%。[/*]
[*][b]Parallel hit detection(并行命中检测):[/b]引擎有并行的碰撞处理流程但从未开启,因为它在任务线程存在之前就做了决定;cpuopt 在任务线程创建后设置引擎自身的标志。战斗中每帧约节省 0.14 毫秒。[/*]
[*][b]Sleeping frame limiter(休眠式帧率限制器):[/b]设置了帧率上限时,使用精确计时器休眠,而不是在等待时持续占用一个核心。帧节奏相同,游戏线程 CPU 时间减少约五分之一。[/*]
[*][b]Remove 300 fps limit(移除 300 fps 限制)[/b](实验性,默认关闭):引擎即使在 No Limit 下也会在 300 fps 停止;此开关将其提升到 1000。你设置的更低上限仍然有效。[/*]
[/list]开关立即生效,关闭某个开关以及游戏退出时一切都会恢复。
[size=4][color=#f2b544][b]基准测试[/b][/color][/size]
[list=1]
[*]站在繁忙的地方保持不动,镜头也不要动:古代树森林的营地,或星辰/月辰的中心。[/*]
[*]Mods > CPU optimizations > Run benchmark,选 Yes。关闭所有菜单。[/*]
[*]10 秒后开始,耗时不到两分钟:八组 6 秒,优化交替关闭和开启。打开菜单或切换窗口会暂停测试。完成时会播放音效。[/*]
[/list]结果显示在页面上。完整报告会添加到 DLL 旁边的 cpuopt-benchmark.txt:帧率、帧时间和每帧 CPU 时间,以及你的 CPU、显卡和游戏设置,不包含文件路径或用户名。
[size=4][color=#f2b544][b]注意事项[/b][/color][/size]
[list]
[*]为“All optimizations”在页面上设置一个热键,以便在游戏时对比开启和关闭的效果。[/*]
[*]双 CCD X3D:开启 Stay on the cache die 后,MHW 不需要 Process Lasso 规则或 Game Bar 设置。如果某个工具已经把 MHW 绑定到特定核心,请将其指向缓存 CCD 或关闭此开关,以免两者冲突。在测试电脑上,Windows 游戏模式配合 AMD 芯片组驱动造成约 10% 的损失:如果提升低于预期,试试关闭游戏模式。[/*]
[*]使用帧率上限或垂直同步时,帧率不会上升,但游戏每帧需要的 CPU 更少:更凉快、更安静、更稳定。[/*]
[*]封闭测试期间,它与 [url=https://www.nexusmods.com/monsterhunterworld/mods/8857]MHW DLSS[/url]、HunterPie、Stracker 插件及其他 mod 一同运行。[/*]
[*]日志:cpuopt.dll 旁边的 cpuopt-session.log,每次启动时新建(在 MO2 下位于 mod 文件夹或 Overwrite 中)。提交 bug 报告时请附上它,如果运行过基准测试也附上 cpuopt-benchmark.txt。日志包含游戏和 mod 文件夹的路径,可能包含你的 Windows 用户名。[/*]
[*]卸载:关闭该 mod,或删除 AsteraLoader\plugins\cpuopt。不会更改电脑上或游戏中的其他任何内容。[/*]
[*]Vortex 尚未测试。[/*]
[/list][line]
[center]源码、研究笔记和 bug 报告:[url=https://github.com/wowo-dot/mhw-cpuopt]github.com/wowo-dot/mhw-cpuopt[/url]
感谢封闭测试人员,以及 Fexty,其带注释的游戏数据库帮助了逆向工作。
MIT 许可证。
[url=https://www.patreon.com/cw/wowowiwa][img]https://staticdelivery.nexusmods.com/mods/2531/images/8855/8855-1792008099-1086899091.png[/img][/url]
帮你省下了一两次猫车?大厨猫可不会给我倒一杯。[/center]
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。