小编use*_*068的帖子

使用AVX指令和-O3编译选项获得错误的结果

我用AVX指令编写了非常简单的程序,但是当我使用-O3选项编译代码和g ++编译器的-O1选项时,我得到的结果不同,这是我的代码:

int main(int argc, char *argv[])
{

    int d = 120;
    __m256i r = _mm256_set1_epi32(d);
    int * p = (int *) &r;

    printf("r[0]: %d, ",p[0]);
    printf("r[1]: %d, ",p[1]);
    printf("r[2]: %d, ",p[2]);
    printf("r[3]: %d, ",p[3]);
    printf("r[4]: %d, ",p[4]);
    printf("r[5]: %d, ",p[5]);
    printf("r[6]: %d, ",p[6]);
    printf("r[7]: %d \n",p[7]);                    

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我使用这些选项编译时的输出(g ++ test1.c -o test1 -m64 -O3 -ffast-math -march = native -mavx):

r [0]:0,r [1]:0,r [2]:4195520,r [3]:0,r [4]: - 1880829792,r [5]:32767,r [6]:0, r [7]:0

这是我用这些选项编译时的输出(g ++ test1.c -o test1 -m64 …

c avx compiler-optimization

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

将Vector加载到SSE寄存器中

我正在尝试将一个向量加载到SSE寄存器中,我的代码编译没有错误,但是当我尝试运行它时,我有分段错误.这是我的代码:

inline int SSEJaccard::calcSSEJaccardDist(unsigned int id1, unsigned int id2) {
  int result;
  __m128i v, v1;
  std::vector<uint32_t> &fv1 = fvs[id1];
  std::vector<uint32_t> &fv2 = fvs[id2];
  v = _mm_load_si128((__m128i const*) (&fv1));
  v1 = _mm_load_si128((__m128i const*) (&fv2));
  v = _mm_and_si128(v,v1);
  result =_mm_extract_epi16(v, 0) + _mm_extract_epi16(v, 4);
 return result;
}
Run Code Online (Sandbox Code Playgroud)

fsv是一个全局变量,定义如下:

std::vector<std::vector<uint32_t> > fvs;
Run Code Online (Sandbox Code Playgroud)

我正在使用英特尔编译器(ICC).谢谢

c++ x86 sse vector vectorization

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

标签 统计

avx ×1

c ×1

c++ ×1

compiler-optimization ×1

sse ×1

vector ×1

vectorization ×1

x86 ×1