繁体   English   中英

如何检查256i(16位)向量以了解其是否包含大于零的任何元素?

[英]How to examine a 256i (16-bit) vector to know if it contains any element greater than zero?

我正在将向量化的代码从SSE2内部函数转换为AVX2内部函数,并想知道如何检查256i(16位)向量是否包含大于零的任何元素。 以下是SSE2中使用的代码:

int check2(__m128i vector1, __m128i vector2)
{
  __m128i vcmp =  _mm_cmplt_epi16(vector2, vector1);
  int cmp = _mm_movemask_epi8(vcmp);
  return ((cmp>0) ? 1 : 0) ;
}

我以为下面的代码可以用,但是没有用。

int check2(__m256i vector1, __m256i vector2)
{
  __m256i vcmp = _mm256_cmpgt_epi16(vector1, vector2);
  int cmp = _mm256_movemask_epi8(vcmp);
  return ((cmp>0) ? 1 : 0) ;
}

如果有人可以建议我会很感激

我认为您只是一个琐碎的错误-您的功能应该是:

int check2(__m256i vector1, __m256i vector2)
{
    __m256i vcmp = _mm256_cmpgt_epi16(vector1, vector2);
    int cmp = _mm256_movemask_epi8(vcmp);
    return cmp != 0;
}

问题是_mm256_movemask_epi8返回32位标志作为有符号整数,并且您正在对此进行大于0的测试。显然,如果MS位为1,则该测试将失败(因为结果将小于0)。 SSE版本没有看到此问题,因为它仅返回16位。

暂无
暂无

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

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