小编Pet*_*Lee的帖子

如何从 16 x 8 位 __m128i 值中提取 32 x 4 位整数

假设我有这行代码,它使用 SSE2 加载 16 x 8 位无符号整数

// ptr is a pointer to uint8_t array
__m128i b = _mm_load_si128((const __m128i*) ptr);
Run Code Online (Sandbox Code Playgroud)

我想将每个 8 位无符号整数b(总共 16 个)分成4 位高和 4 位低部分。我怎样才能做到这一点?

x86 sse bit-manipulation simd

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

如何使用SSE2添加数组中的所有元素?

假设我有一个非常简单的代码,例如:

double array[SIZE_OF_ARRAY];
double sum = 0.0;

for (int i = 0; i < SIZE_OF_ARRAY; ++i)
{
    sum += array[i];
}
Run Code Online (Sandbox Code Playgroud)

我基本上想要使用SSE2进行相同的操作.我怎样才能做到这一点?

c x86 sse simd sse2

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

_mm_shuffle_epi8内在的用法

有人可以解释_mm_shuffle_epi8SSSE3内在吗?我知道它可以将16个8位整数混合在一起__m128i但不确定如何使用它.

我基本上想用来_mm_shuffle_epi8修改下面的函数以获得更好的性能.

while(not done)
    dest[i+0] = (src+j).a;
    dest[i+1] = (src+j).b;
    dest[i+2] = (src+j).c;
    dest[i+3] = (src+j+1).a;
    dest[i+4] = (src+j+1).b;
    dest[i+5] = (src+j+1).c;
    i+=6;
    j+=2;
Run Code Online (Sandbox Code Playgroud)

optimization performance x86 sse simd

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

如何使用SSE2加载16 x 8位整数

假设我有16个8位整数,我想将它们加载到__m128i使用SSE2中:

__m128i v = _mm_set_epi8(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
Run Code Online (Sandbox Code Playgroud)

我可以静态使用,_mm_set_epi8但我想动态地这样做; 值将在运行时决定.

C = userinput;
for(int i=0; i<16; i++)
{
    load C*i on v at position i
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

x86 sse simd sse2

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

标签 统计

simd ×4

sse ×4

x86 ×4

sse2 ×2

bit-manipulation ×1

c ×1

optimization ×1

performance ×1