Как выполнить операцию с матрицей 8 x 8 с помощью SSE?

Моя первая попытка выглядела так (предполагалось, что мы хотим умножить)

  __m128 mat[n]; /* rows */
  __m128 vec[n] = {1,1,1,1};
  float outvector[n];
   for (int row=0;row<n;row++) {
       for(int k =3; k < 8; k = k+ 4)
       {
           __m128 mrow = mat[k];
           __m128 v = vec[row];
           __m128 sum = _mm_mul_ps(mrow,v);
           sum= _mm_hadd_ps(sum,sum); /* adds adjacent-two floats */
       }
           _mm_store_ss(&outvector[row],_mm_hadd_ps(sum,sum));
 }

Но это явно не работает. Как мне подойти к этому?

Я должен загружать 4 за раз ....

Другой вопрос: если мой массив очень большой (скажем, n = 1000), как я могу сделать его выровненным по 16 байт? Возможно ли это вообще?

7
задан Chris says Reinstate Monica 27 November 2011 в 15:39
поделиться