Adreno GPU上Windows基于Arm64游戏开发介绍(4)
示例介绍
在 Arm64 目标上启动 GPU 捕获
GPU 捕获(用于 Arm64 的 Unreal Engine 4.25)
在此示例中,引擎在 WinPixEventRuntime 库的帮助下将 PIX 事件插入到 GPU 命令流中。 这有助于跟踪帧渲染操作。
启动 CPU 捕获
CPU 捕获
此示例显示了 UE4 4.25 的单个渲染帧的 CPU 捕获。 针对 CPU 和 GPU 捕获报告 PIX 事件。 核心利用率 4 到 7 是更快的Gold内核。
PIX 故障排除
如果计算机不在域中,WinPixRemoteMonitorUI.exe 会在启动期间提供警告,提示它无法在安全连接上运行。 要继续,请在 UI 中将连接模式切换为不安全。
如果 GPU 分析不起作用,请确保你以管理员身份运行 WinPixRemoteMonitorUI.exe。
平台详情
骁龙 8cx
Snapdragon 8cx SoC 具有以下组件:
4 X Silver Kryo 495 Cortex-A76 Armv8.2-A 内核 (1.80 GHz)
4 X Gold Kryo 495 Cortex-A76 Armv8.2-A 内核 (2.84 GHz)
Adreno 680 GPU(1842.5 GFLOP)
8 通道低功耗 DDR SDRAM,频率为 2133 MHz (68.26 GB/s)
Gold 内核提供更高的性能,而 Silver 内核具有更好的热和功率特性。 这些内核之间的性能差异是由于频率和架构差异造成的。
将高性能应用程序移植到 8cx 时,必须在 Gold 和 Silver 内核之间配置线程关联以平衡性能和功耗。
有关此异构处理架构的更多详细信息,请参阅 Arm big.LITTLE。
内存模型
Armv8 架构采用弱排序内存模型。 为了优化性能,读取和写入*存储器的顺序可能与程序指令规定的顺序不同。
其他体系结构,例如 amd64,也使用弱排序内存。 如果你使用高级线程 API,这些问题会为你处理。 但是,移植自己的低级多线程代码实现的用户必须使用适当的内存屏障和硬件平台的其他配置。
有关更多信息,请参阅 Armv8-A 程序员指南的内存排序章节。
Neon SIMD
如果你的软件使用 SIMD 进行并行数据处理,则必须将 SSE 代码移植到 Neon 指令集。 有关详细信息,请参阅适用于 Armv8-A 的 Neon 程序员指南。
Visual Studio 支持 Neon 内在函数。 新的 Neon 代码可以与现有的 SSE 代码并行编写,并在编译时启用以进行移植。 还值得注意的是,Arm 计算库可用,并提供常用算法的 Neon 优化实现。
Visual Studio 还支持源代码的自动矢量化。 这是由 /arch 选项控制的。
Adreno 和桌面 GPU 之间的主要区别
Qualcomm® Snapdragon™ 8cx 计算平台中的 Adreno 680 是一款基于区块的 GPU,经过优化以提供高性能和低功耗。
基于平铺的渲染是一种渲染管道架构,它将屏幕拆分为多个平铺,并依次渲染每个平铺。 与较老的桌面GPU技术所青睐的直接渲染模型相比,这大大降低了内存带宽,从而降低了功耗并提高了性能。
虽然这项技术是在移动设备上率先使用的,但主要供应商的现代和离散桌面 GPU 也都使用平铺渲染。
如果您从较旧的渲染架构移植,请确保渲染管道针对平铺渲染器进行了优化。 当从立即模式 GPU 移动到平铺 GPU 时,使用延迟渲染器并减少着色器数量将产生最佳性能改进。
Adreno 680 还受益于骁龙 8cx SoC 的统一内存架构。 与独立的桌面 GPU 相比,操作系统内存和 GPU 内存之间没有区别,这使得: - 根据 CPU 或 GPU 密集型任务更好地利用资源 - *和 GPU 内存之间没有传输 - 整体功耗更低
有关更多详细信息,请参阅开发人员指南的各个部分。
参考
高通技术公司
骁龙开发者工具https://developer.qualcomm.com/solutions/snapdragon-developer-tools
Windows
Windows 10 on Arm 文档 https://docs.microsoft.com/en-us/windows/arm/
平台细节
Armv8-A 程序员指南 https://developer.arm.com/docs/den0024/a
内存排序 https://developer.arm.com/docs/den0024/a/memory-ordering
Windows on Arm——汇编语言入门 https://www.codemachine.com/article_armasm.html