Advertisement
GreenMap

Untitled

Oct 24th, 2024
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.09 KB | None | 0 0
  1. using ConsoleApp1;
  2.  
  3. class Program
  4. {
  5.     static int repeat = 1000;
  6.  
  7.     class TableRecord
  8.     {
  9.         public int N;
  10.         public int M;
  11.         public float time;
  12.         public float effect = 0f;
  13.         public TableRecord(int N, int M, float time)
  14.         {
  15.             this.N = N;
  16.             this.M = M;
  17.             this.time = time;
  18.         }
  19.     }
  20.     static void Main(string[] args)
  21.     {
  22.         int[] N = { 100, 2000, 10000, 30000 };
  23.         int[] M = { 2, 3, 4, 5, 10 };
  24.  
  25.         Measure(new float[] { 0, 0, 0, 0 }, N, SimpleNumbersСalculatorSeq.Calculate);
  26.  
  27.         Console.WriteLine("Последовательно");
  28.         List<TableRecord> seqTable = Measure(new float[] { 0, 0, 0, 0 }, N, SimpleNumbersСalculatorSeq.Calculate);
  29.         PrintTable(seqTable);
  30.         float[] seqTime = GetSeqTime(seqTable);
  31.         Console.WriteLine();
  32.  
  33.         Console.WriteLine("Метод 1");
  34.         PrintTable(Measure(seqTime, N, M, SimpleNumbersCalculatorDataParallel.Calculate));
  35.         Console.WriteLine();
  36.  
  37.         Console.WriteLine("Метод 2");
  38.         PrintTable(Measure(seqTime, N, M, SimpleNumbersCalculatorBaseParallel.Calculate));
  39.         Console.WriteLine();
  40.  
  41.         Console.WriteLine("Метод 3");
  42.         PrintTable(Measure(seqTime, N, SimpleNumbersCalculatorPoolParallel.Calculate));
  43.         Console.WriteLine();
  44.  
  45.         Console.WriteLine("Метод 4");
  46.         PrintTable(Measure(seqTime, N, M, SimpleNumbersCalculatorPluckParallel.Calculate));
  47.         Console.WriteLine();
  48.  
  49.  
  50.         //numbers.ToList().ForEach(x => Console.Write(x + " "));
  51.     }
  52.     static List<TableRecord> Measure(float[] seqTime, int[] N, int[] M, Func<int, int, float> f)
  53.     {
  54.         List<TableRecord> table = new List<TableRecord>();
  55.  
  56.         for (int i = 0; i < N.Length; i++)
  57.         {
  58.             foreach(int m in M)
  59.             {
  60.                 List<float> time = new List<float>();
  61.                
  62.                 for(int j = 0; j < repeat; j++)
  63.                 {
  64.                     time.Add(f(N[i], m));
  65.                 }
  66.  
  67.                 TableRecord t = new TableRecord(N[i], m, time.Average());
  68.  
  69.                 t.effect = seqTime[i] / t.time;
  70.  
  71.                 table.Add(t);
  72.             }
  73.         }
  74.         return table;
  75.     }
  76.     static List<TableRecord> Measure(float[] seqTime, int[] N, Func<int, float> f)
  77.     {
  78.         List<TableRecord> table = new List<TableRecord>();
  79.  
  80.         for (int i = 0; i < N.Length; i++)
  81.         {
  82.             List<float> time = new List<float>();
  83.  
  84.             for (int j = 0; j < repeat; j++)
  85.             {
  86.                 time.Add(f(N[i]));
  87.             }
  88.  
  89.             TableRecord t = new TableRecord(N[i], 1, time.Average());
  90.  
  91.             t.effect = seqTime[i] / t.time;
  92.  
  93.             table.Add(t);
  94.         }
  95.         return table;
  96.     }
  97.     static void PrintTable(List<TableRecord> t)
  98.     {
  99.         t.ForEach(x => { Console.WriteLine(x.N + " " + x.M + " " + x.time + " " + x.effect); });
  100.     }
  101.  
  102.     static float[] GetSeqTime(List<TableRecord> t)
  103.     {
  104.         return t.Select((t) => t.time).ToArray();
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement