标签: sse

SSE/AVX 向量类型的差异

是什么区别_m256i,并_m256d_m256?和
之间有什么区别_m128i_m128d_m128

c x86 sse simd avx

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

SSE指令需要对齐数据

数据必须是16字节对齐的,以便SSE指令可以处理它而不会出现分段错误吗?我试过的编译器是带有选项的gcc -msse2.我想_mm_cmpgt_epi32用来比较一个大的int数组.我发现它不能在数组的任何位置执行,除了下标为4的倍数的位置.

x86 sse simd

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

_mm_load_ps 导致段错误

我有一个代码片段。该代码段仅加载 2 个数组并使用 SSE 计算它们之间的点积。

代码在这里:

using namespace std;

long long size = 3200000;

float* _random()
{
    unsigned int seed = 123;
    //    float *t = malloc(size*sizeof(float));
    float *t = new float[size];
    int i;
    float num = 0.0;
    for(i=0; i < size; i++) {
        num = rand()/(RAND_MAX+1.0);
        t[i] = num;
    }
    return t;
}

float _dotProductVectorSSE(float *s1, float *s2)
{
    float prod;
    int i;
    __m128 X, Y, Z;

    for(i=0; i<size; i+=4)
    {
        X = _mm_load_ps(&s1[i]);
        Y = _mm_load_ps(&s2[i]);
        X = …
Run Code Online (Sandbox Code Playgroud)

c++ x86 sse simd memory-alignment

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

解包位域(反转movmskb)

MOVMSKB将字节字段打包成位是一件非常好的工作.
但是我想反过来.
我有一个16位的字段,我想放入XMM寄存器.
每位1字节字段.
优选地,设置位应该设置每个字节字段的MSB(0x80),但是我可以使用设置位,从而在字节字段中产生0xFF结果.

我在https://software.intel.com/en-us/forums/intel-isa-extensions/topic/298374上看到了以下选项:

movd mm0, eax
punpcklbw mm0, mm0
pshufw mm0, mm0, 0x00
pand mm0, [mask8040201008040201h]
pcmpeb mm0, [mask8040201008040201h]
Run Code Online (Sandbox Code Playgroud)

但是,此代码仅适用于MMX寄存器,不能与XMM regs一起使用,因为pshufw不允许这样做.

我知道我可以使用PSHUFB,但是那是SSSE3而我想拥有SSE2代码,因为它需要在任何AMD64系统上运行.

有没有办法做到这一点是纯SSE2代码?
请不要内在,只需简单的intel x64代码.

assembly sse bit-manipulation sse2

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

SSE的条件语句

我正在尝试为我的游戏做一些计算,我正在尝试计算两点之间的距离.基本上,我正在使用圆的方程来查看这些点是否在我定义的半径范围内.

(x - x1)^2 + (y - y1)^2 <= r^2
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何用SSE评估条件语句并解释结果?到目前为止我有这个:

float distSqr4 = (pow(x4 - k->getPosition().x, 2) + pow(y4 - k->getPosition().y, 2));
float distSqr3 = (pow(x3 - k->getPosition().x, 2) + pow(y3 - k->getPosition().y, 2));
float distSqr2 = (pow(x2 - k->getPosition().x, 2) + pow(y2 - k->getPosition().y, 2));
float distSqr1 = (pow(x1 - k->getPosition().x, 2) + pow(y1 - k->getPosition().y, 2));

__m128 distances  = _mm_set_ps(distSqr1, distSqr2, distSqr3, distSqr4);
__m128 maxDistSqr = _mm_set1_ps(k->getMaxDistance() * k->getMaxDistance());
__m128 result     = _mm_cmple_ps(distances, maxDistSqr);
Run Code Online (Sandbox Code Playgroud)

一旦我得到结果变量,我就迷路了.我如何使用刚刚得到的结果变量?我的计划是,如果评估的条件证明是真的,做一些光照计算,然后在屏幕上绘制像素.在这种情况下,我如何解释真实与虚假?

任何有关正确方向的帮助都非常感谢!

c++ conditional sse simd intrinsics

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

如何在SSE中使用imm8?

我有一个__m128i充满32位整数的寄存器。我想从寄存器中提取第4个元素。

例如,如果

int extract;
__m128i register = _mm_set_epi32(3,2,1,0);
Run Code Online (Sandbox Code Playgroud)

然后我想“提取”值为3。

似乎_mm_extract_epi32()应该可以完成工作。但是,它有一个imm8参数。


图: 在英特尔网站上的描述


我只是不了解imm8工作方式(或者在这种情况下会工作)。有人可以详细说明如何使用imm8作为参数吗?

c++ x86 sse simd visual-studio

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

如何在使用 x86 SSE 汇编指令之前定义向量的长度?

是否有一个寄存器包含向量/数组中的元素数量,我必须在使用mulssor 之类的操作之前加载它addss,或者我是否必须将该数字压入堆栈?SSE 指令如何在不超过末尾的情况下知道向量的长度?

x86 assembly sse instruction-set

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

使用SIMD右移32位打包负数

我正在编写一些SSE/AVX代码,并且有一项任务是将打包的带符号32位整数除以2的补码.当值为正时,此移位工作正常,但由于移位符号位,因此会产生错误的负值结果.
是否有任何SIMD操作可以让我移位保留符号位的位置?谢谢

c sse avx mmx

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

什么是内在函数的SSE2程序集?

我正在使用Fasm(程序集),我正在寻找这些内在指令的SSE2汇编指令:

_mm_set1_epi8
_mm_cmpeq_epi8
_mm_movemask_epi8
Run Code Online (Sandbox Code Playgroud)

我从哪里得到它们(网站,pdf ......)?

assembly sse simd intrinsics sse2

1
推荐指数
2
解决办法
198
查看次数

我怎样才能让clang向量化一个简单的循环?

我有以下循环:

float* s;
float* ap;
float* bp;

... // initialize s, ap, bp

for(size_t i=0;i<64;++i) {
   s[i] = ap[i]+bp[i];
}
Run Code Online (Sandbox Code Playgroud)

似乎是矢量化的良好候选者。尽管我打开了优化功能,但是当我查看程序集输出时,clang(我正在使用Xcode)似乎没有向量化循环:

LBB33_1:                                ## =>This Inner Loop Header: Depth=1
    movss   (%rax,%rsi,4), %xmm0    ## xmm0 = mem[0],zero,zero,zero
    addss   (%rcx,%rsi,4), %xmm0
    movss   %xmm0, (%rdx,%rsi,4)
Ltmp353:
    incq    %rsi
Ltmp354:
    cmpq    $64, %rsi
Ltmp355:
    jne LBB33_1
Run Code Online (Sandbox Code Playgroud)

如何获得clang / Xcode来向量化此简单循环?

c sse vectorization clang compiler-optimization

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