当前位置: 首页 > 知识库问答 >
问题:

Cortex-A57能否双重发布128位neon指令?

方宁
2023-03-14

《Cortex-A57优化指南》指出,对128位矢量数据进行操作的大多数整数指令都可以双重发出(第24页,整数基本F0/F1,逻辑F0/F1,执行吞吐量2)。

然而,在我们的内部(合成)基准测试中,吞吐量似乎仅限于1条128位neon整数指令,即使有大量可用的指令并行性(编写基准测试的目的是测试128位neon指令是否可以双重发出,所以这是我们要注意的)。当将50%128位指令与50%64位指令混合使用时,我们能够实现每个时钟1.25条指令(只有neon整数arith,没有加载/存储)。

在使用128位ASIMD/Neon指令时,是否必须采取特殊措施以获得双问题吞吐量?

谢谢克莱门斯

共有2个答案

郦兴德
2023-03-14

在实代码中,并非所有指令结果都将写入寄存器文件,而是通过转发路径。如果在代码中混合使用依赖指令和独立指令,则可能会看到更高的IPC。

A57优化指南指出,对于乘法累加指令链,延迟转发会发生,因此,类似这样的情况可能会出现双重问题。

.loop
    vmla.s16 q0,q0,q1
    vmla.s16 q0,q0,q2
    vmla.s16 q0,q0,q3
    vmla.s16 q4,q4,q1
    vmla.s16 q4,q4,q2
    vmla.s16 q4,q4,q3
    ...etc
王棋
2023-03-14

根据ARM支持,原因似乎是NEON寄存器文件仅支持3个64位写入端口。

因此,尽管NEON ALU能够处理2x128位向量,但寄存器文件无法使用结果......多么(非常)奇怪的设计方案。

 类似资料:
  • 3、双精度移位指令 此组指令有:双精度左移SHLD(Shift Left Double)和双精度右移SHRD(Shift Right Double)。它们都是具有三个操作数的指令,其指令的格式如下: SHLD/SHRD Reg/Mem, Reg, CL/Imm;80386+ 其中:第一操作数是一个16位/32位的寄存器或存储单元;第二操作数(与前者具有相同位数)一定是寄存器;第三操作数是移动的位数

  • Cortex 是用来管理 React 深度嵌套结构的不可变数据存储。 主要特性: 支持深度嵌套数据 使用不可变数据,允许快速比较:shouldComponentUpdate 高效的分支更新 简单 APIs 轻量级  (4.5kB minified and gzip) 使用 ES6 编写 示例 skyline (4-level nested components) file system (arbi

  • 本文向大家介绍JavaScript 双重否定(!! x),包括了JavaScript 双重否定(!! x)的使用技巧和注意事项,需要的朋友参考一下 示例 双重否定!!不是唯一的JavaScript运算符,也不是特殊的语法,而仅仅是两个否定的序列。它用于将任何类型的值转换为适当的值true或false布尔值,具体取决于它是true还是falsy。 首先否定任何值转换为false它是否truthy以及

  • 我希望得到一些关于我打算在ASP.NET MVC4应用程序中防止重复记录的方法的反馈,以及我对用户体验没有的冲击效果。 web表单有六个输入字段和一个保存按钮(以及一个取消按钮),用户可以花10分钟填写表单。

  • go-cortex 是一个服务,通过倾听你的句子,并试图理解你的意思,然后执行相应的动作。它使用 Wit.ai 来处理文本并将从句子中抽取的信息传递给调用者。

  • Cortex Command 是一款像素风格的策略冒险游戏,它的特点是实时战术战斗,还提供了一个基于策略的、基于回合的图元名称,支持最多 4 名玩家在分屏幕上使用。动态 2D 像素图形,加上一个极其详细的物理引擎,使可重放和紧急游戏。它在 2009 年的独立游戏节上获得了两个奖项。 它的测试以仅使用安装了 Visual Studio 2013 工具集的 Visual Studio 2017 for