在经过一个月的逆向工程后,Collabora日前发布了有关Valhall指令集的文档。
逆向工程的其他结果包括可由程序解析的XML 架构描述,以及用作逆向工程辅助工具的 Valhall汇编器和反汇编器。
Valhall 是第四个 Arm® Mali™ 架构和第五个 Mali 指令集。它在 Arm® Mali™-G78(最新发布的 Mali 硬件)中实施,并且 Valhall 将继续在未来的 Mali 产品中实施。
每个架构都代表了从上一个架构的范式转变。
Midgard通过统一着色器阶段、添加通用内存访问和支持各种位大小的整数,将Utgard像素处理器一般化,以支持计算着色器。
Bifrost对Midgard进行了扩展,从Utgard和Midgard固定的4通道矢量(vec4)架构过渡到依赖基于warp的并行执行,更好地在现代工作负载上使用硬件。
Valhall线性化Bifrost,删除其上一代的超长指令字机制。Valhall 用硬件动态调度代替编译器的静态调度,用额外的控制硬件换取更高的平均性能。这意味着不再需要带有“无操作”指令的填充,这可能会减少代码大小,保证更好的指令缓存使用。
除了 Mali-G78 “Borr” GPU,这项工作也适用于其他 Valhall GPU,包括 Mali-G77 “TryM”、Mali-G57 “Natt-A/B”、Mali-G68 “Ottr”和Mali-G78AE “Borr” -AE”适用于汽车和工业应用。
Alyssa Rosenzweig 解释了 Collabora 基于国际版三星 Galaxy S21 手机的工作,该手机由配备 Mali-G78 MP14 GPU的三星 Exynos 2100片上系统提供支持。她指出,Android 上的逆向工程工作比 Linux 更难,但这是目前唯一的选择。
该团队设法使用包装库识别每一层,该库转储执行的每个着色器以对新指令集进行逆向工程并开发反汇编器。他们确实从一些公开信息中得到了帮助,尤其是一篇 Anandtech的文章,该文章揭示了有关 Valhall 的有用信息:
获取指令集文档以及汇编器和反汇编器是让 Panfrost 支持 Valhall GPU 的第一步。Alyssa 还指出,Mali G78 确实带来了指令集以外的变化,具有明显不同的数据结构,以减少 Vulkan 驱动程序的开销,但幸运的是,许多数据结构可以从 Bifrost 进行调整,只需对 Mesa 驱动程序进行很少的更改。她还邀请设计带有 Valhall GPU 的 Linux 友好设备的人员/公司与 Collabora 取得联系,以帮助获得开源 Linux 驱动程序。
更多内容可查看Collabora的文章。
详细Valhall指令集文档请点击PDF文件查看。
参考链接:
Demi Xia编译
Demi编译