c/c++语言开发共享如何并行比较两个以上的数字?

是否可以使用SSE4在一条指令中比较一对以上的数字?

英特尔参考咨询有关PCMPGTQ的内容如下

PCMPGTQ – 比较大于的打包数据

对目标操作数(第一个操作数)和源操作数(第二个操作数)中的压缩四字进行SIMD比较。 如果第一个(目标)操作数中的数据元素大于第二个(源)操作数中的相应元素,则目标中的相应数据元素将设置为全1; 否则,设置为0。

这不是我想要的,因为我希望能够决定哪个整数更大,哪个整数更小。

例如,如果我需要比较

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,0,1,1 [0, 0, 1, 1]结果(0 – 少,1 – 更大)

但似乎这不是PCMPGTQ所做的。 有关如何在此级别使用并行性来加速此比较的任何建议?

    我相信这实际上是PCMPGT系列运营商所做的。 后缀指定元素的大小 – 对于8位元素为B ,对于16位元素为W ,对于32位元素为D ,对于64位元素为Q 因此,如果要一次比较4个32位数字,请使用带有128位向量参数的PCMPGTD 。 有关这些操作码的伪代码描述,请参阅此页面 。

    但他们不会只写10 ; 他们为每个元素写入全1或全0,因此使用PCMPGTB0x12345678876543210x8765432112345678进行PCMPGTB应该给出0x0000FFFFFFFF0000

    这篇英特尔白皮书提供了一个简单的例子来执行a[i] = (a[i] > b[i]) ? a[i] : b[i] a[i] = (a[i] > b[i]) ? a[i] : b[i] (即a[i] = max(a[i], b[i]) )使用向量运算。

      以上就是c/c++开发分享如何并行比较两个以上的数字?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560458.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐