C中的intel AVX乘法错误,

时间:2015-06-05 21:25:16

标签: c segmentation-fault avx

当我运行一系列简单的加载,使用AVX内在函数进行减法和乘法时,我不断收到以下错误,

 Process terminating with default action of signal 11 (SIGSEGV)
==2995==  General Protection Fault

来自C代码,

double res[4] = {0.0, 0.0, 0.0, 0.0};
for(int i = 0; i < 10; i++){
            ymm0 = _mm256_loadu_pd(vector_a);
            ymm1 = _mm256_loadu_pd(vector_b);
            ymm2 = _mm256_sub_pd(ymm0, ymm1);
            ymm4 = _mm256_mul_pd(ymm2, ymm2);  <--- Valgrind terminated
            _mm256_store_pd((double*)res, ymm4);
}

任何人都可以帮忙吗?

目前正在使用#include <immintrin.h>

的clang

====编辑====

为了澄清,我正在加载以下值,

double vector_a[4] = {0.145000, 1.145000, 2.145000, 3.145000};
double vector_b[4] = {0.145000, 1.145000, 2.145000, 3.145000};

1 个答案:

答案 0 :(得分:3)

使用_mm256_storeu_pd。就像你的负载一样,需要一个未对齐的存储,因为不能保证数组与AVX正确对齐。