【发布时间】:2013-07-23 13:58:58
【问题描述】:
我正在尝试将一段代码从 SSE 转换为 ARM Neon 以进行优化。对于代码的大多数 SSE 指令,我发现了一些明显等效的 Neon 指令。不过,我遇到了一些问题:
result1_shifted = _mm_srli_si128 (result1, 1);
result=_mm_packus_epi16 (res1,res2);
_mm_storeu_si128 (p_dest, result);
你能帮帮我吗?
【问题讨论】:
-
这种 SIMD 内在函数的 1:1 转换不适用于 SSE -> Neon - 您确实需要回到标量参考实现,然后在 Neon 中从头开始实现它。通常有更好的方法更适合可用的指令/内在函数。
-
你能给我一些更具体的信息吗?我从来没有这样做过,我只需要转换几个指令,但我真的很挣扎。谢谢。
-
分两个阶段进行:(1) 将 SSE 代码反向工程为标量形式(即直接 C 代码),然后对其进行测试/基准测试/配置文件以 (a) 确保其正常工作并且(b) 确定是否确实存在需要优化的性能热点;那么 (2) 如果 (1b) 表明代码需要优化,那么您将需要通过 Neon 学习曲线并使用 Neon SIMD 内部函数或汇编程序来实现代码。理想情况下,您希望尽可能避免 (2)。
标签: arm sse neon intrinsics