如何检查 16 的对齐块是否u32
连续(并且递增)?
例如:[100, 101, 102, ..., 115]
是。并且,[100, 99, 3 ...]
不是。
我使用的是 AVX512f。这是我到目前为止所拥有的:
算法A:
* predefine DECREASE_U32, a u32x16 of [15,14,13,...0]
* let a = input + DECREASE_32 // wrapping is OK
* compare a to u32x16::splat(first_item(a))
* Return whether all true
替代方案(算法 B)
* let b = copy of A
* permute the elements of b by one position
* let b = a-b
* Is b all 1's (except for 1st position)
我在 Rust 中使用packed_simd
板条箱执行此操作,但任何语言/伪代码都可以。(我希望有一个 SIMD 操作来减去相邻项。)