繁体   English   中英

__m128中的OR元素

[英]OR elements in __m128

我正在写一些SSE代码,我想对__m128中的所有元素进行“或”运算。 我可以单独获取所有值,也可以这样获取它们,但这似乎效率很低。

基本上,我要寻找的是SPU上可用的orx指令。 有点奇怪,所以没有直接的替代方法,但是有没有办法使用SSE2有效地做到这一点?

在代码中我想做:

p = _mm_cmpgt_ps(p, r);
x = p[0] | p[1] | p[2] | p[3]; // spu_orx(p)

我可能会犯错,我只需要重新设计代码,这样就不会遇到这个问题,但是我希望有一个比我更有经验的人知道如何做!

这将OR所有4×32位元件一起:

p = _mm_or_si128(p, _mm_srli_si128(p, 8));
p = _mm_or_si128(p, _mm_srli_si128(p, 4));

元素0将包含最终值-如果需要,您可以将其提取为int:

int result = _mm_cvtsi128_si32(p);

几点警告

每当您发现需要执行这样的水平操作时,特别是如果它是对性能至关重要的内部循环的一部分,那么通常这可能表明您的SIMD实现效率低下,您可能需要重新考虑一下。

还要注意,不看“大图”而试图将Cell SPU代码逐行移植到SSE可能不会为您带来最佳的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM