【发布时间】:2015-07-15 07:07:21
【问题描述】:
我在这里得到了一个非常简单但很大(n 很大)的循环:
for (i=0; i<n; i++)
{
dst[i] = src[table[i]];
}
我想使用 NEON 对其进行优化,但我不知道如何处理这部分:src[table[i]]。
是否可以优化?如果是,怎么做?
【问题讨论】:
-
这实际上是一个聚集负载,NEON 不支持。见:stackoverflow.com/questions/11502332/…
-
如果这是
uint8_t table[n]或此映射中的实例少于 256 个,则vtbl会派上用场。如果映射table[i]是局部单调的,情况也是如此。对于一般情况,答案是否定的。投票重新开放以获取更多信息;除非这是一个临时加密功能,否则我会倾向于相信映射表中的可利用顺序。 -
@AkiSuihkonen:VTBL 仅处理(最多)输入的五个最低有效位。你有办法打破这个障碍吗?
-
使用链
vtbx.8 d0, {d4,d5,d5,d6}, d1; vadd.8 d1, d2; vtbx.8 d0, {d7, d8, d9, d10}, d1;和 d2 填充 32 可以将表大小增加到 64。不幸的是,要获得 256 字节需要溢出一些寄存器。
标签: c optimization arm simd neon