如何使用 neon 访问超过 256 字节的查找表?

Posted

技术标签:

【中文标题】如何使用 neon 访问超过 256 字节的查找表?【英文标题】:How a more than 256bytes Look Up table can be accessed using neon? 【发布时间】:2014-09-26 05:20:39 【问题描述】:

我需要使用 neon 访问整数类型的 256 值查找表。 有没有可能这样访问?

如果我的向量中的索引以顺序方式进行,我将使用 VTBL,或者最多 256 位。 这里我的索引向量索引 0 - 255 范围内的任何一个。所以,我做不到。

如果有人知道这件事 请帮帮我。

问候, 笑脸

【问题讨论】:

【参考方案1】:

看看VTBX指令,它可以用来扩展NEON查表。例如:

// indices in d30, result to d31

VMOV.8 d29, #16
VTBL.8 d31, q0, q1, d30
VSUB.8 d30, d30, d29
VTBX.8 d31, q2, q3, d30
VSUB.8 d30, d30, d29
VTBX.8 d31, q4, q5, d30

但是,一个 256 字节的表将需要整个 NEON 寄存器文件,因此您必须为每个向量查找重新加载(部分)表。

【讨论】:

【参考方案2】:

NEON 不可能。

您首先应该考虑一下为什么要使用 LUT。大多数情况下,LUT 用于节省复杂数学运算的周期,但 NEON 功能强大,可以轻松处理此类数学运算。

蛮力算术是 NEON 游戏的名称。您应该先查看 LUT 是如何生成的,然后使用 NEON 即时进行数学运算。

【讨论】:

以上是关于如何使用 neon 访问超过 256 字节的查找表?的主要内容,如果未能解决你的问题,请参考以下文章

有效计算 arm neon 中 16 字节缓冲区中不同值的数量

c++ isalpha 查找表

使用NEON优化ARM的卷积运算

VB DIR 提取长度超过256字节的文件名

SSE/NEON 查表优化

如何访问 NEON 指令中的完整 128 位?