Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <xmmintrin.h>
- #define N 2
- float* MultiplyMatrices(const float* matrix_1, const float* matrix_2){
- __m128 vector_2;//переменная для хранения значения второй матрицы
- __m128 result_vector;//переменная для записи итоговой марицы
- float* result_matrix = (float*)_mm_malloc(N * N * sizeof(float), 16);//выделение памяти с выравниванием
- for (int i = 0; i < N; ++i) {
- for (int j = 0; j < N; ++j) {
- __m128 element_vector = _mm_set1_ps(matrix_1[i * N + j]);//4 позиции в одно значение
- for (int k = 0; k < N; k += 4) {
- vector_2 = _mm_load_ps(&matrix_2[j * N + k]);//4 значение по адресу
- result_vector = _mm_load_ps((const float*)&result_matrix[i*N+k]);
- result_vector = _mm_add_ps(result_vector, _mm_mul_ps(element_vector, vector_2));
- _mm_store_ps((float*)&result_matrix[i*N+k], result_vector);
- }
- }
- }
- return (float*)result_matrix;
- }
- int main(){
- float* A = malloc(sizeof(float)*2*2);
- A[0] = 1;
- A[1] = 2;
- A[2] = 3;
- A[3] = 4;
- MultiplyMatrices(A, A);
- free(A);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment