棋子 · 2020年01月08日

部分寄存器依赖霓虹灯1

我在查找有关部分霓虹灯寄存器依赖项的任何信息时遇到问题。

以下面的代码为例:

ld2 {v0.16b, v1.16b}[0], [x0]
ld2 {v0.16b, v1.16b}[1], [x1]
ld2 {v0.16b, v1.16b}[2], [x2]
...

第二个负载是否必须等待上一个负载完成,还是可以立即继续?

我正在处理需要从256个16位条目表中堆放的图像数据,并且我想使用neon对其进行进一步处理。不幸的是,由于表的大小,tbl指令不是一个选项,因为它将占用所有32个寄存器。首先使用arm进行查找,然后将结果合并并传输到4个64位寄存器中,会更快吗?

如果有帮助,我的目标是Cortex-A57。

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2020年01月08日

《Cortex-A57软件优化指南》的 “ 4.4注册转发危险”一章 讨论了类似情况。

您可能要使用PMU来衡量您的特定示例:

“ Cortex-A57中的性能监视器单元(PMU)可用于确定何时真正发生寄存器转发危险。已将实现定义的PMU事件编号0x12C(DISP_SWDW_STALL)分配为计算由于这些危险而停滞所花费的周期数。 ”

你的回答
关注数
1
收藏数
0
浏览数
2239
极术小姐姐
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息