ARM Neon是否有等价于Intel _mm_i32gather_ps的SIMD Gather指令?
ARM Neon 对应 Intel
_mm_i32gather_ps 的Gather加载支持 ARM Neon 在 ARMv8.2-A 及更高版本 中提供了与 Intel _mm_i32gather_ps(blob, index, 4) 功能完全等价的硬件gather指令,对应的intrinsic是 vld1q_gather_index_f32。
功能匹配说明
Intel 的 _mm_i32gather_ps(blob, index, 4) 实现的是:以blob为基地址,将index向量中的每个32位整数作为单精度浮点数数组的元素索引(通过scale=4自动转换为字节偏移),最终加载4个float值到128位向量中。
ARM Neon 的 vld1q_gather_index_f32 直接对应这一逻辑:
- 输入参数为基地址指针和32位整数向量(对应
index) - 指令内部自动将每个索引值乘以单精度浮点数的4字节大小,计算出目标地址,完成4个元素的gather加载,结果存储为
float32x4_t类型的向量
关键注意点
- 你提到的
svld1_gather是SVE(可扩展向量扩展)的指令,不属于Neon扩展范畴,SVE是ARM独立于Neon的SIMD架构,两者不互通。 - 若需兼容ARMv8.2-A以下的旧架构,Neon没有硬件级gather支持,只能通过循环逐个加载元素,或借助Google Highway的GatherIndex这类跨平台库的模拟实现来达成类似效果。
内容的提问来源于stack exchange,提问作者fabian
相关产品推荐
相关产品推荐

