使用SSE指令访问非连续的位置内存

时间:2014-10-20 11:14:39

标签: c x86 sse simd

您好,
我正在尝试访问非连续的内存位置并将数据存储在C中的该位置。它工作正常 但是当我做同样的事情时,我无法获得正确的输出:
PFB -

这是C代码:

unsigned char Src_data[8] = {251,193,214,254,232,192,208,191};
float temp[256] = {0.0};
float *out_data;
memset(out_data,0.0f,sizeof(temp));
for(i=0;i<8;i++)
{
    unsigned char d= Src_data[i];
    out_data[d] = out_data[d] + 0.2;
}

这是SSE CODE:

uchar *image_0 = Src_data;
__m128 scale_fact = _mm_set1_ps(0.2);
for(int i=0; i<8; i+=4)
{ 
    __m128i index= _mm_cvtepu8_epi32(_mm_loadu_si128((__m128i*)(image_0+i)));
    __m128 output   = _mm_loadu_ps(((out_data+index.m128i_u32[0])));
           output   = _mm_add_ps(output,scale_fact);
    _mm_storeu_ps((out_data+index.m128i_u32[0]),output);
}

使用_mm_storeu_ps将输出存储在SSE中时,连续的内存位置将被填充而不是索引值。
谁能告诉我如何填写输出的特定索引位置。

0 个答案:

没有答案