![]() |
1
1
成对最小值允许您在2个向量之间进行比较,以找到每个对应单词之间的最小值。例如,如果将8个数据点(可能需要更多的矢量化代码)拆分为2个矢量,则可以使用pairwise min来查找4对之间比较的最小值。 然后,您可以继续将数据拆分为更小的向量对,或者在这个由4个条目组成的新向量上连续迭代以找到最小值。注意找到向量的位置,检查原始向量中的相同位置将得到最小值的位置。或者,也可以使用向量比较来查找此值。 |
![]() |
2
1
在花了一些时间摆弄比特和数学之后,我是这样做的:
其中\uu lzcnt是 clz (\uu gcc中的内置clz)。 下面是它的工作原理。首先,使用成对最小值将uint8x8\u t的所有u8字段设置为最小值:
然后使用“向量比较”将“最小元素”设置为“所有1”,将所有其他元素设置为“0”:
然后使用包含值的掩码执行逻辑“与”:
然后使用成对加法将
然后使用clz计算第一个最小元素的位置。
然后,在实际代码中,我在每个循环迭代和编译器中多次使用VMIN8 is able to perfectly interleave multiple VMIN8 calls 以避免数据暂停。 |
![]() |
3
0
矢量上的无符号最小值。此指令比较源SIMD中的所有矢量元素(&A);FP寄存器,并将最小值作为标量写入目标SIMD&FP寄存器。此指令中的所有值都是无符号整数值。 |