您好我試圖編寫一個代碼向量標量乘法使用AVX
桑迪橋處理器i7-3720QM (~2012)
。 該代碼是C
代碼,編號爲GNU gcc
,代碼爲Mac OSX 10.8
。向量在Mac OSX上的標量乘AVX段錯誤
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
雙元素(256 bits)
。謝謝你的幫助。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <immintrin.h>
void matsca(const double* a, double c, double *b)
{
__m256d a0 = _mm256_loadu_pd(a+0);
__m256d a1 = _mm256_set1_pd(c);
__m256d a2 = _mm256_mul_pd(a0,a1);
double* f = (double*)&a2;
printf("%f %f %f %f \n",f[0],f[1],f[2],f[3]);
_mm256_store_pd(b,a2);
}
int main()
{
double m1[11]={1,2,3,4,5,6,7,8,9,10,11};
double *m3;
double m2=3;
int i;
matsca(&m1[0],m2,&m3[0]);
for (i=0; i<3; i=i+1)
{
printf("%d %f \n",i,m3[i]);
}
return 0;
}
'm3'未初始化,有什麼辦法? –
當你爲'm3'分配了一些內存之後,你還需要將'_mm256_store_pd'改爲'_mm256_storeu_pd'。 –
非常感謝你們。有效。有沒有其他辦法可以更有效地做到這一點? – Guddu