如何编程霓虹灯寄存器索引

Posted

技术标签:

【中文标题】如何编程霓虹灯寄存器索引【英文标题】:how to program neon register index 【发布时间】:2013-02-27 17:17:46 【问题描述】:

我有一个 8x8 的数据。处理后,我想暂时保留生成的 8x8 数据 过程。我的问题是是否可以对 4 个 Q 寄存器进行编程以循环存储它们。但是下面的代码不能编译,我也想将 d12 的 12 递增到 d13

mov r4, #7

1:
.
.
vmul.i16 d12, d12, d1[r4] 
subs r4, r4, #1
bge 1b

有什么方法或有效的方法来处理这些吗?

【问题讨论】:

我不明白你的问题。这个关于矩阵乘法的讨论可能会让你走上解决这类问题的正确轨道:blogs.arm.com/software-enablement/… 我计算矩阵没有问题,我需要将中间结果存储在其他4个Q寄存器中,这意味着我需要更改Q寄存器来循环存储数据。 看了三遍,还是没看懂。 【参考方案1】:

我不相信您可以间接引用寄存器。您可能想为此使用宏。请参阅我发送的矩阵乘法页面以获取您将使用的宏类型的示例。您会为每次计算调用一次,而不是使用循环。这还具有首先避免循环的优点。如果您使用寄存器而不是内存,我假设您担心性能,并且分支对性能不利。

请注意该页面中的“计划”部分。如果你非常关心性能,即使是宏也会引入一些问题。如果您快速读取和写入同一个寄存器(在本例中为 d12),您可能会停止流水线。您经常希望交错迭代,以便避免这种情况。 (...,从 d3 读取,写入 d2,使用 d3 计算,从 d4 读取,写入 d3,使用 d4 计算,...)这意味着更多的手写代码,但速度要快得多。

【讨论】:

以上是关于如何编程霓虹灯寄存器索引的主要内容,如果未能解决你的问题,请参考以下文章

如何清除霓虹灯中除第一个非零车道之外的所有车道?

在霓虹灯寄存器中添加

将一种形式的霓虹灯寄存器转换为另一种可能吗

如何在具有霓虹内在函数的多核处理器中有效地使用所有霓虹灯单元

你如何使用霓虹内在函数加载 3 个浮点数

影响标志的霓虹汇编向量指令