如何使用sse将两个浮点数组相乘

How to multply two float arrays using sse?

本文关键字:两个 数组 sse 何使用      更新时间:2023-10-16
void sse_mul_float(float* a, float* b, int N)                                                                                                                                                                          
{                                                                                                                                                                                                                
  int nb_iters = N / 4;                                                                                                                                                                                         
  __m128* l = (__m128*)a;                                                                                                                                                                                      
  __m128* r = (__m128*)b;                                                                                                                                                                                      
  for (int i = 0; i < nb_iters; ++i, ++l, ++r)                                                                                                                                                                   
    _mm_store_ps(l, _mm_mul_ps (l, r));
}

我想将一个浮点数组中的元素与另一个浮点数组中的元素相乘,并将结果存储在第一个数组

我得到这个错误:参数' 1 '无法将' __m128* {aka __vector(4) float*} '转换为' __m128 {aka __vector(4) float} ' '为' __m128 _mm_mul_ps(__m128, __m128) '

void sse_mul_float(float* a, float* b, int N)                                                                                                                                                                          
{          
  int nb_iters = N / sizeof(float);                                                                                                                                                                                         
  float c;
  __m128* l = (__m128*)a;                                                                                                                                                                                      
  __m128* r = (__m128*)b;

  for (int i = 0; i < nb_iters; ++i, ++l, ++r)
  {
      _mm_store_ps(&a[i*4], _mm_mul_ps(*l, *r));
  }
}