c - C 中的英特尔 AVX 乘法错误,

标签 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);
}

有人可以帮忙吗?

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

====编辑====

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

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

最佳答案

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

关于c - C 中的英特尔 AVX 乘法错误,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30676065/

相关文章:

c++ - 调用第三方可执行文件时调试段错误

c++ - AVX2 赢家通吃差异搜索

c - 使用 gcc 优化 -mavx 失败?

c - 将整数数组加载到 AVX 寄存器中

c - scandir 按子串过滤

c - 为什么 C 中的空指针等于 C 中的另一个空指针?

c - 使用 fscanf 将固定长度的整数扫描到数组中

大周期的 C 函数速度优化

c++ - 字符串分配的段错误

c - 返回字符串的函数不工作 - 段错误