Vectorisation - 从添加两个向量返回单个变量的英特尔指令?

时间:2018-03-11 11:58:46

标签: optimization intrinsics

所以我正在努力优化一些代码,并且在尝试矢量化代码时遇到了一些问题 我基本上有一个嵌套循环:

for(int i = 0; i<N; i++)
{
  for(int j = 0; j<N; j++;)
  {
    //Bunch of calculations
    //array[i] += (x*y);
  }
}

在矢量化内环的过程中,x和y都变为矢量化。所以我在寄存器中有四个值的x_vector,寄存器中有4个值的y_vector 为了将这些添加到array [i],我需要执行x_vector * y_vector的计算,将四个结果与一个变量相加,然后将其添加到array [i]。所以像这样:

__m128 x_vector ....
__m128 y_vector ....

__m128 xy_vector = _mm_mul_ps(x_vector, y_vector);

//now the xy_vector has all 4 multiplication results, need to sum them to a single variable

float result = _mm_someInstruction_ps(xy_vector);
array[i] += result;

intel instrinsics指南中是否有说明这样做?我查看了_mm_add_ps指令,但返回了一个向量。是否有任何加法指令对寄存器的内容求和,然后返回该结果?

0 个答案:

没有答案