相关疑难解决方法(0)

使用SSE获取__m128i向量中的最大值?

我刚刚开始使用SSE,我很困惑如何获得a的最大整数值(max)__m128i.例如:

__m128i t = _mm_setr_ps(0,1,2,3);
// max(t) = 3;
Run Code Online (Sandbox Code Playgroud)

搜索引导我去MAXPS指导,但我似乎无法找到如何使用它"xmmintrin.h".

此外,是否有任何"xmmintrin.h"您建议的文档,而不是查看头文件本身?

c x86 assembly sse

12
推荐指数
4
解决办法
1万
查看次数

查找SSE寄存器中最常出现的元素

有没有人想过如何计算SSE4.x中8位整数向量的模式(统计量)?为了澄清,这将是128位寄存器中的16x8位值.

我希望结果作为矢量掩码选择模值元素.即结果_mm_cmpeq_epi8(v, set1(mode(v))),以及标量值.


提供一些额外的背景; 虽然上面的问题本身就是一个有趣的问题,但我已经通过线性复杂度可以想到的大多数算法.这个课程将消除我从计算这个数字中获得的任何收益.

我希望在这里与大家一起寻找一些深刻的魔法.这有可能是一个近似值可能需要打破这种结合,例如"选择一个频繁出现的元素"例如(NB差针对),这将是值得的.概率答案也是可用的.

SSE和x86有一些非常有趣的语义.可能值得探索超优化传递.

algorithm x86 assembly sse

8
推荐指数
2
解决办法
343
查看次数

从__m128i中查找最小/最大值

我想使用SIMD操作在字节数组中找到最小/最大值.到目前为止,我能够通过数组并将最小/最大值存储到__m128i变量中,但这意味着我正在寻找的值与其他值混合在一起(确切地说是15个其他值).

我在这里这里找到了这些讨论的整数,这个页面用于浮点数,但我不明白如何工作_mm_shuffle*.所以我的问题是:

  1. 为了从__m128i变量中提取最小/最大字节(或无符号字节)值,我必须执行哪些SIMD操作?
  2. _mm_shuffle*如何工作?当我在网上查看"最小"文档时,我不明白.我知道它与_MM_SHUFFLE宏有关,但我没有得到这个例子.

c++ x86 sse simd

5
推荐指数
1
解决办法
1987
查看次数

使用SIMD找出两个元素的最大差异

我编写了一个算法来获得 std::vector 中两个元素之间的最大差异,其中两个值中较大的值必须比较低的值在更高的索引处。

    unsigned short int min = input.front();
    unsigned short res = 0;

    for (size_t i = 1; i < input.size(); ++i)
    {
        if (input[i] <= min)
        {
            min = input[i];
            continue;
        }

        int dif = input[i] - min;
        res = dif > res ? dif : res;
    }

    return res != 0 ? res : -1;
Run Code Online (Sandbox Code Playgroud)

是否可以使用 SIMD 优化此算法?我是 SIMD 的新手,到目前为止我没有成功

algorithm optimization simd

3
推荐指数
1
解决办法
374
查看次数

标签 统计

sse ×3

x86 ×3

algorithm ×2

assembly ×2

simd ×2

c ×1

c++ ×1

optimization ×1