Advertisement
Sitisom

Стыренное ТП

Oct 6th, 2020
901
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.69 KB | None | 0 0
  1. using System;
  2. using System.Diagnostics;
  3. using System.Threading;
  4.  
  5. namespace MatrixLab
  6. {
  7.     class Matrix // класс матрицы
  8.     {
  9.         public static int size = 3000;
  10.         public double[,] m = new double[size, size];
  11.         public Matrix() // конструктор заполняющий матрицу случайными числами
  12.         {
  13.             Random random = new Random();
  14.             for (int i = 0; i < size; i++)
  15.                 for (int j = 0; j < size; j++)
  16.                     m[i, j] = random.Next(1000) / 100.0;
  17.         }
  18.     }
  19.  
  20.     class Program
  21.     {
  22.         static void SinM(Matrix matrix1, Matrix matrix2, int thNum, int thCount) // сложная функция от суммы двух матриц
  23.         {
  24.             double[,] matrixSin = new double[Matrix.size, Matrix.size];
  25.             for (int i = Matrix.size / thCount * (thNum - 1); i < Matrix.size / thCount * thNum; i++)
  26.                 for (int j = 0; j < Matrix.size; j++)
  27.                 {
  28.                     //Console.WriteLine(i + ": " + j);
  29.                     matrix1.m[i, j] += matrix2.m[i, j];
  30.                     matrixSin[i, j] = Math.Sin(matrix1.m[i, j]);
  31.                 }
  32.         }
  33.         static void Main(string[] args)
  34.         {
  35.             Matrix matrix1 = new Matrix(); // объявление и заполнение матриц
  36.             Matrix matrix2 = new Matrix();
  37.  
  38.             Stopwatch sWatch = new Stopwatch(); // объект класса, позволяющего измерять затраченное время
  39.  
  40.             sWatch.Start();
  41.             SinM(matrix1, matrix2, 1, 1);
  42.             sWatch.Stop();
  43.  
  44.             Console.WriteLine("Однопоточный метод: " + sWatch.ElapsedMilliseconds);
  45.  
  46.             int thrCount = 8;
  47.             Thread[] threads = new Thread[thrCount];
  48.  
  49.             for (int n = 2; n <= thrCount; n++)
  50.             {
  51.                 matrix1 = new Matrix();
  52.  
  53.                 for(int k = 1; k < n; k++)
  54.                 {
  55.                     threads[k - 1] = new Thread(delegate ()
  56.                     {
  57.                         SinM(matrix1, matrix2, k, n);
  58.                     });
  59.                 }
  60.                 sWatch.Restart();
  61.                 for (int h = 1; h < n; h++)
  62.                 {
  63.                     threads[h - 1].Start();
  64.                 }
  65.                 for (int h = 1; h < n; h++)
  66.                 {
  67.                     threads[h - 1].Join();
  68.                 }
  69.                 sWatch.Stop();
  70.                 Console.WriteLine("Параллельный метод, время при " + n + " потоках: " + sWatch.ElapsedMilliseconds);
  71.             }
  72.         }
  73.     }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement