Mac OSX上的矢量标量乘法AVX分段错误

时间:2017-01-30 08:45:11

标签: c gcc vector avx

您好我正在尝试使用Sandy Bridge处理器AVX上的i7-3720QM (~2012)编写Vector-Scalar乘法代码。 代码是在C上使用GNU gcc编译的Mac OSX 10.8代码。

gcc -mavx -Wa,-q -o bb5 code1.c -lm

我得到了Segmentation fault: 11。请帮忙。

输出:

3.000000 6.000000 9.000000 12.000000 
Segmentation fault: 11

那么,看起来store命令无法正常工作?谢谢。最终我想做点什么 A = A + x*B其中x是标量,AB是向量。函数void matsca(const double* a, double c, double *b)将一次又一次地调用以对double大维度向量进行操作,大幅度为8,因为AVX可以采用4双元素{ {1}}。谢谢你的帮助。

(256 bits)

1 个答案:

答案 0 :(得分:0)

以下是原始IWebElement baseTable = driver.FindElement(By.Xpath("(//table[@class='TableText1'])[2]")); 的修复/改进版本:

matsca

但是你可能想考虑使它更通用,以便它可以处理任何大小的矢量,例如。

inline void matsca(const double *a, const double c, double *b)
{
    __m256d a0 = _mm256_loadu_pd(a);
    __m256d a1 = _mm256_set1_pd(c);
    __m256d a2 = _mm256_mul_pd(a0, a1);

 #if DEBUG > 0
    double *f = (double *)&a2;
    printf("%f %f %f %f\n", f[0], f[1], f[2], f[3]);
 #endif

    _mm256_storeu_pd(b, a2);
}

通过这种方式,您可以分摊函数调用的成本,初始化常量向量等等。

相关问题