C++ 与AVX相乘
请注意,这是我第一次使用AVX,我正在尝试对双精度数字执行简单的乘法,但我没有得到所有正确的结果 我只得到前4个结果,其他的都是行话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; //
#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绝对有充分的理由)