qsadfasdgfgads

Untitled

Nov 14th, 2022
781
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.18 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <xmmintrin.h>
  3.  
  4. #define N 2
  5.  
  6. float* MultiplyMatrices(const float* matrix_1, const float* matrix_2){
  7.     __m128 vector_2;//переменная для хранения значения второй матрицы
  8.     __m128 result_vector;//переменная для записи итоговой марицы
  9.  
  10.     float* result_matrix = (float*)_mm_malloc(N * N * sizeof(float), 16);//выделение памяти с выравниванием
  11.     for (int i = 0; i < N; ++i) {
  12.         for (int j = 0; j < N; ++j) {
  13.             __m128 element_vector = _mm_set1_ps(matrix_1[i * N + j]);//4 позиции в одно значение
  14.             for (int k = 0; k < N; k += 4) {
  15.                 vector_2 = _mm_load_ps(&matrix_2[j * N + k]);//4 значение по адресу
  16.                 result_vector = _mm_load_ps((const float*)&result_matrix[i*N+k]);
  17.                 result_vector = _mm_add_ps(result_vector, _mm_mul_ps(element_vector, vector_2));
  18.                 _mm_store_ps((float*)&result_matrix[i*N+k], result_vector);
  19.             }
  20.         }
  21.     }
  22.     return (float*)result_matrix;
  23. }
  24.  
  25. int main(){
  26.     float* A = malloc(sizeof(float)*2*2);
  27.     A[0] = 1;
  28.     A[1] = 2;
  29.     A[2] = 3;
  30.     A[3] = 4;
  31.  
  32.     MultiplyMatrices(A, A);
  33.     free(A);
  34.     return 0;
  35. }
  36.  
Advertisement
Add Comment
Please, Sign In to add comment