工作原理
- 游戏启用 GPU 动态电源状态。
- GPU 计算归一化的帧统计数据并作为历史数据保存。
- GPU 会根据当前需求和历史数据自动切换电源状态,节省能耗。
游戏可以进一步采用 XBOX 可持续性工具包 中的其他措施,以进一步降低能耗。
案例研究
Call of Duty: Black Ops 6
Call of Duty 高级技术总监 Rulon Raymond:我们花了几天时间试用 DPS,结果令人鼓舞。具体来说,我们在 XBOX 可持续性工具包之外的场景中,能看到额外 10–15% 的功耗节省。我们此前已经对游戏引擎的部分子系统做了降载(例如在菜单或前端界面时),对玩家的帧率没有影响,这已经为我们节省了大量能耗 —— 而 DPS 让我们能够零成本地获得额外收益。在发布时,Black Ops 6 团队的计划:
- 在所有已经应用节能措施的位置启用 DPS。
- 提供一个默认关闭的开关来始终启用 DPS,同时继续进行多日性能测试。
Two Point Museum
Two Point Studios 技术总监兼联合创始人 Ben Hymers 通过 XBOX 团队管理的云端设置发布了 DPS —— 无需修改代码:我们把动态电源状态和 Constrained+ 模式一起测试,以最大化能效。两者结合后,主菜单的功耗降低了大约 50–58%,constrained 模式下的能耗降低了 39–63%。上线以来,我们观察到平均能耗有明显下降,而游戏画面没有任何降级。例如 XBOX Series X 的平均功耗从 135 W 降到 125 W。在我们的全部玩家中,这相当于每年节能约 6.5 兆瓦时,相当于连续观看电视 65,000 小时,或近 7.5 年不间断的观看。Two Point Museum 是第一家通过云端配置远程启用 DPS 的第三方工作室。
无需修改代码测试 DPS(仅限开发环境)
你可以在开发主机上全局启用 DPS,而无需重新构建作品:1
更新你的开发主机
确保开发主机安装了至少 2024 年 8 月的 Recovery。
2
创建标志文件
在你的 PC 上创建一个名为
DynamicPowerEnable 的空文件。3
将其复制到主机的 D: 盘
4
启动并分析
启动你的游戏。DPS 现已生效。
5
使用完毕后禁用 DPS
实时观察 DPS
通过 PIX 或 XBOX Manager 中主机的设置启用 Title Performance Overlay。- 如果 DPS 已启用,右下角的 overlay 会包含一条红线,以及 GPU power state 指标(0–4)。4 表示全速;数值越小代表越省电。
- 如果 DPS 已禁用,GPU power state 会显示为
N/A。
在你的游戏中启用 DPS(正式发布)
在图形设备上使用现有的SetDriverHintX() API。
API
启用 DPS
禁用 DPS
通过帧统计在运行时检测 DPS
游戏可以查询帧统计,以根据 DPS 行为做出渲染决策(动态分辨率等)。GetFrameStatisticsX
新增了一种帧统计类型:D3D12XBOX_RENDER_STATISTICS 返回 GPUBusyDuration:
GPUBusyDuration 是归一化的 —— 它假设 GPU 时钟处于 P4,且与当前电源状态无关。power-scaling 帧统计会受到电源状态变化的影响,并且会与 GPUBusyDuration 不同。
示例
一段在 P4 下需要 8 ms 的 GPU 工作,在 P2 下(时钟更低)会延长到 12 ms:之所以保留归一化的
GPUBusyDuration,是因为游戏引擎会用它做动态分辨率计算。将归一化和缩放测量值分开,可避免反馈环路 —— 否则较低的电源状态会导致动态分辨率不断下降,直到降到最低。