问题标签 [spu]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sse - 检查比较结果的多个向量中的每个向量中至少有一个元素为真 - 水平 OR 然后 AND
我正在寻找相同向量的分量之间的 SSE 按位或。(编者注:这可能是一个 XY 问题,请参阅下面的真实比较逻辑。)
我正在从SPU内在函数移植一些 SIMD 逻辑。它有一个指令
根据文档
spu_orx: OR word across d = spu_orx(a) 向量a的四个字元素进行逻辑或。结果在向量 d 的单词元素 0 中返回。d 的所有其他元素 (1,2,3) 都分配为零值。
我如何使用涉及最少指导的 SSE 2 - 4 做到这一点?_mm_or_ps
是我在这里得到的。
更新:
以下是基于 SPU 的代码的场景:
因此,它首先对两个“更大”的比较进行 OR,然后对其结果进行 OR。这些结果中的后几对进行与运算以获得最终的比较值。
这(A||B||C||D||E||F||G||H) && (I||J||K||L||M||N||O||P) && ...
在 A..D 是 4x 32 位元素的情况下有效fcgt(x,y)
,依此类推。
显然,垂直_mm_or_ps
的_mm_cmp_ps
结果是减少到 1 个向量的好方法,但是然后呢?Shuffle + OR,还是别的什么?
更新 1
关于“但是然后呢?” 我表演
在 SPU 上是这样的:
在不同的输入上多次,然后将它们全部合成一个结果,最后将其转换为整数 0 或 1(假/真测试)