C 中的英特尔 AVX 乘法错误,
intel AVX multiplication error in C,
当我 运行 使用 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 正确对齐。
当我 运行 使用 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 正确对齐。