C++ 与AVX相乘

C++ 与AVX相乘,c++,avx,C++,Avx,请注意,这是我第一次使用AVX,我正在尝试对双精度数字执行简单的乘法,但我没有得到所有正确的结果 我只得到前4个结果,其他的都是行话 #include <immintrin.h> #include <iostream> #include <math.h> #include <time.h> using namespace std; int main() { double *a, *b; //

请注意,这是我第一次使用AVX,我正在尝试对双精度数字执行简单的乘法,但我没有得到所有正确的结果

我只得到前4个结果,其他的都是行话

#include <immintrin.h>
#include <iostream>
#include <math.h> 
#include <time.h>
using namespace std;

int main() {

    double *a, *b;                      // data pointers
    double *pA,*pB;                     // work pointer
    __m256d rA_AVX, rB_AVX;     // variables for AVX

    const int vector_size = 8;
    a = (double*) _mm_malloc (vector_size*sizeof(double),64);
    b = (double*) _mm_malloc (vector_size*sizeof(double),64);

    for(int i = 0; i < vector_size; i++) {
        a[i] = (rand() % 48);
        b[i] = 0.0f;
        cout << a[i] << endl;
    }

    for (int i = 0; i < vector_size; i += 8)
    {
        pA = a;
        pB = b;
        rA_AVX = _mm256_load_pd(pA);
        rB_AVX = _mm256_mul_pd(rA_AVX,rA_AVX);
        _mm256_store_pd(pB,rB_AVX);
        pA += 8;
        pB += 8;
    }

    for (int i=0; i<vector_size; i++){
        cout << endl << b[i] << endl;
    }
    _mm_free(a);
    _mm_free(b);

    system("PAUSE");
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
双*a,*b;//数据指针
双*pA,*pB;//工作指针
__m256d rA_AVX,rB_AVX;//AVX的变量
const int vector_size=8;
a=(双精度*)\u mm\u malloc(向量大小*大小)(双精度),64);
b=(双精度*)\u mm\u malloc(矢量大小*尺寸(双精度),64);
对于(int i=0;i你的增量不正确。一旦你增加了代码> Pa<代码>和<代码> Pb/COD>,你在下一次迭代中重写它。所以它不会递增。哪一个增量。PLI。我试图注释PA+= 8 BUH,但它仍然不起作用。在尝试做之前,你应该更好地掌握基本C或C++。使用AVX和矢量化进行ng。代码实际上存在多个问题。您可以通过消除
pA+=8
并将
pA=a;
替换为
pA=a+i;
(与
pB
相同)来解决增量问题,但随后您将跳过元素。(我不知道这是否是有意的)否则,将
i+=8
更改为
i+=4
@Grizzly:AVX算术运算在SNB或IVB上不是“模拟”的;只有加载和存储被分解为2µ运算。(提问者的例子恰好是存储限制的,但在当前处理器上一般使用AVX绝对有充分的理由)