3

我正在尝试将一段代码从 SSE 转换为 ARM Neon 以进行优化。对于代码的大多数 SSE 指令,我发现了一些明显等效的 Neon 指令。我对这些有一些问题:

result1_shifted = _mm_srli_si128 (result1, 1);

result=_mm_packus_epi16 (res1,res2);

_mm_storeu_si128 (p_dest, result);

请你帮助我好吗?

4

1 回答 1

2

我同意这样的评论,即回到“C”(或任何真正的)参考设计可能是一个好主意,也许从头开始。特别是您会发现,在某些情况下,NEON 可能有一些更优化的做事方式。但是如果你发现你需要做几乎相同的事情,这里有一些提示:

_mm_srli_si128 (result1, 1);尝试VEXT.S8 Qdst, Qsrc, Qsrc2, #1,其中 src2 已被清除为 0。

_mm_packus_epi16 (res1,res2);试试VQMOVN.S16 Ddst,Qsrc。寻找替代品时的关键词是“狭窄”。您正在缩小范围内。“Q”是 NEON 饱和度的命名法。您可能会遇到问题,因为您正在对未签名进行签名,我不确定 NEON 是否支持,但您的用例可能没问题,但这就是为什么有参考和测试是好的!

_mm_storeu_si128 (__m128i *p, __m128i a);显然有VSTM,这里有很多选择。您可能想详细了解一下。

于 2013-07-29T17:35:56.890 回答