【发布时间】:2012-09-15 12:58:46
【问题描述】:
是否可以使用 SSE4 在一条指令中比较多个数字?
Intel Reference 说以下关于 PCMPGTQ 的内容
PCMPGTQ - 比较打包数据是否大于
对目标中的压缩四字执行 SIMD 比较 操作数(第一个操作数)和源操作数(第二个操作数)。如果 第一个(目标)操作数中的数据元素大于 第二个(源)操作数中的对应元素, 目的地中对应的数据元素设置为全1; 否则设置为0s。
这并不是我真正想要的,因为我希望能够决定向量中哪些整数更大,哪些更小。
例如,如果我需要比较
32 with 45
13 with 78
44 with 12
99 with 66
我打算将 [32, 13, 44, 99] 放入一个向量中,将 [45, 78, 12, 66] 放入另一个向量中,并在一条指令中使用 SSE4 比较它们,并得到 [0, 0, 1, 1] 作为结果(0 - 更少,1 - 更大)
但这似乎不是 PCMPGTQ 所做的。有关如何在此级别使用并行性来加速此比较的任何建议?
【问题讨论】:
-
您可以将
PCMPGTQ的结果与[1, 1, 1, 1]相加。还是我错过了什么? -
其实我理解错了,PCMPGTQ 确实做了我想做的事。
标签: c algorithm parallel-processing sse sse4