Advertisement
Gronos02

Untitled

May 22nd, 2022
985
144 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // PP_Prac1_Zybin.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. //
  3.  
  4. #include <iostream>
  5. #include <omp.h>
  6.  
  7. #define SIZE 10
  8.  
  9. using namespace std;
  10.  
  11. int** Transpose(int** arr)
  12. {
  13.     int** arr_tr = 0;
  14.     arr_tr = new int*[SIZE];
  15.     for (int i = 0; i < SIZE; i++)
  16.     {
  17.         arr_tr[i] = new int[SIZE];
  18.     }
  19.     // Here we have 2d array ready
  20.  
  21.     for (int i = 0; i < SIZE; i++)
  22.     {
  23.         for (int j = 0; j < SIZE; j++)
  24.         {
  25.             arr_tr[j][i] = arr[i][j];
  26.         }
  27.     }
  28.  
  29.     return arr_tr;
  30. }
  31.  
  32. int** Fast_MatMul(int** arr1, int** arr2)
  33. {
  34.     int** arr_res = 0;
  35.     arr_res = new int* [SIZE];
  36.     for (int i = 0; i < SIZE; i++)
  37.     {
  38.         arr_res[i] = new int[SIZE];
  39.     }
  40.     // Here we have 2d array ready
  41.  
  42.     for (int i = 0; i < SIZE; i++)
  43.     {
  44.         for (int j = 0; j < SIZE; j++)
  45.         {
  46.             for (int k = 0; k < SIZE; k++)
  47.             {
  48.                 arr_res[i][j] += arr1[i][k] * arr2[k][j];
  49.             }
  50.         }
  51.     }
  52.  
  53.     for (int i = 0; i < SIZE; i++)
  54.     {
  55.         for (int j = 0; j < SIZE; j++)
  56.         {
  57.             cout << arr_res[i][j] << " ";
  58.         }
  59.         cout << endl;
  60.     }
  61.  
  62.     return arr_res;
  63. }
  64.  
  65. int** MatMul(int** arr1, int** arr2)
  66. {
  67.     int** arr_res = 0;
  68.     arr_res = new int* [SIZE];
  69.     for (int i = 0; i < SIZE; i++)
  70.     {
  71.         arr_res[i] = new int[SIZE];
  72.     }
  73.     // Here we have 2d array ready
  74.  
  75.     //TYPICAL MATRIX MULL
  76.     for (int i = 0; i < SIZE; i++)
  77.     {
  78.         for (int j = 0; j < SIZE; j++)
  79.         {
  80.             for (int k = 0; k < SIZE; k++)
  81.             {
  82.                 arr_res[i][j] += arr1[i][k] * arr2[j][k];
  83.             }
  84.         }
  85.     }
  86.  
  87.     for (int i = 0; i < SIZE; i++)
  88.     {
  89.         for (int j = 0; j < SIZE; j++)
  90.         {
  91.             cout << arr_res[i][j] << " ";
  92.         }
  93.         cout << endl;
  94.     }
  95.  
  96.     return arr_res;
  97. }
  98.  
  99. int main()
  100. {
  101.     int** arr = 0;
  102.     //int** arr_10 = 0;
  103.     arr = new int* [SIZE];
  104.    
  105.     //arr_10 = new int* [SIZE];
  106.     for (int i = 0; i < SIZE; i++)
  107.     {
  108.         arr[i] = new int[SIZE];
  109.         //arr_10[i] = new int[SIZE];
  110.     }
  111.  
  112.     for (int i = 0; i < SIZE; i++)
  113.     {
  114.         for (int j = 0; j < SIZE; j++)
  115.         {
  116.             arr[i][j] = rand() % 10;
  117.             //arr_10[i][j] = 10;
  118.         }
  119.     }
  120.  
  121.     double start, end;
  122.  
  123.     start = omp_get_wtime();
  124.     auto test_1 = MatMul(arr, arr);
  125.     end = omp_get_wtime();
  126.     cout << "Time traditional mul: " << end - start << endl;
  127.  
  128.     cout << "---------------------------------------" << endl;
  129.  
  130.     auto arr_tr = Transpose(arr);
  131.     start = omp_get_wtime();
  132.     auto test_2 = Fast_MatMul(arr, arr_tr);
  133.     end = omp_get_wtime();
  134.     cout << "Time transpose mul:   " << end - start << endl;
  135.  
  136.     for (int i = 0; i < SIZE; i++)
  137.     {
  138.         for (int j = 0; j < SIZE; j++)
  139.         {
  140.             if (test_1[i][j] != test_2[i][j])
  141.             {
  142.                 cout << "Not equal" << endl;
  143.                 cout << test_1[i][j] << " " << test_2[i][j];
  144.                 return 0;
  145.             }
  146.         }
  147.     }
  148.  
  149.     //Transpose(arr);
  150.  
  151.     return 0;
  152. }
  153.  
  154.  
Advertisement
RAW Paste Data Copied
Advertisement