您好我正在尝试使用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
是标量,A
和B
是向量。函数void matsca(const double* a, double c, double *b)
将一次又一次地调用以对double
大维度向量进行操作,大幅度为8
,因为AVX
可以采用4
双元素{ {1}}。谢谢你的帮助。
(256 bits)
答案 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);
}
通过这种方式,您可以分摊函数调用的成本,初始化常量向量等等。