Advertisement
Tvor0zhok

ПарПрог C# 4

Nov 8th, 2023
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.78 KB | None | 0 0
  1. using System;
  2. using System.Dynamic;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5.  
  6. namespace ConsoleApp1
  7. {
  8. class Program
  9. {
  10. static double fun(double x)
  11. {
  12. double ans = 0;
  13.  
  14. for (int k = 1; k <= Math.Max(20, (int)20 * Math.Abs(x)); ++k)
  15. for (int j = 1; j <= Math.Max(20, (int)20 * Math.Abs(x)); ++j)
  16. {
  17. double x_2 = x * x;
  18.  
  19. ans += x_2 * (k + j) / (x_2 + k * k * k + j * j * j) * Math.Cos(k * x) * Math.Sin(j * x);
  20. }
  21.  
  22. return ans;
  23. }
  24.  
  25. static void Main()
  26. {
  27. const int N = 200;
  28.  
  29. List<double> x1 = new List<double>();
  30. Stack<double> x2 = new Stack<double>();
  31. Queue<double> x3 = new Queue<double>();
  32.  
  33. List<double> y1 = new List<double>();
  34. Stack<double> y2 = new Stack<double>();
  35. Queue<double> y3 = new Queue<double>();
  36.  
  37. for (int k = 0; k <= N; k++) {
  38. double val = 100 * Math.Cos(1.0 * k);
  39. x1.Add(val);
  40. x2.Push(val);
  41. x3.Enqueue(val);
  42. }
  43.  
  44. // LIST
  45.  
  46. Int64 Tms = (DateTime.Now).Ticks;
  47.  
  48. foreach (double x in x1) y1.Add(fun(x));
  49.  
  50. Tms = (DateTime.Now).Ticks - Tms;
  51. TimeSpan Tmss1 = new TimeSpan(Tms);
  52.  
  53. Console.WriteLine("List (посл. реализация) "+(Tmss1.TotalSeconds).ToString()+" c");
  54.  
  55. Object obj = new Object();
  56.  
  57. Tms = (DateTime.Now).Ticks;
  58.  
  59. Parallel.ForEach(x1, x => {
  60. double Tmp = fun(x);
  61. lock (obj) { y1.Add(Tmp); }
  62. });
  63.  
  64. Tms = (DateTime.Now).Ticks - Tms;
  65. TimeSpan Tmss2 = new TimeSpan(Tms);
  66.  
  67. Console.WriteLine("List (пар. реализация) " + (Tmss2.TotalSeconds).ToString() + " c");
  68.  
  69. double a = Tmss1 / Tmss2;
  70.  
  71. Console.WriteLine("List (ускорение): " + a);
  72.  
  73. // STACK
  74.  
  75. Tms = (DateTime.Now).Ticks;
  76.  
  77. foreach (double x in x2) y2.Push(fun(x));
  78.  
  79. Tms = (DateTime.Now).Ticks - Tms;
  80. Tmss1 = new TimeSpan(Tms);
  81.  
  82. Console.WriteLine("Stack (посл. реализация) " + (Tmss1.TotalSeconds).ToString() + " c");
  83.  
  84. obj = new Object();
  85.  
  86. Tms = (DateTime.Now).Ticks;
  87.  
  88. Parallel.ForEach(x2, x => {
  89. double Tmp = fun(x);
  90. lock (obj) { y2.Push(Tmp); }
  91. });
  92.  
  93. Tms = (DateTime.Now).Ticks - Tms;
  94. Tmss2 = new TimeSpan(Tms);
  95.  
  96. Console.WriteLine("Stack (пар. реализация) " + (Tmss2.TotalSeconds).ToString() + " c");
  97.  
  98. a = Tmss1 / Tmss2;
  99.  
  100. Console.WriteLine("Stack (ускорение): " + a);
  101.  
  102. // QUEUE
  103.  
  104. Tms = (DateTime.Now).Ticks;
  105.  
  106. foreach (double x in x3) y3.Enqueue(fun(x));
  107.  
  108. Tms = (DateTime.Now).Ticks - Tms;
  109. Tmss1 = new TimeSpan(Tms);
  110.  
  111. Console.WriteLine("Queue (посл. реализация) " + (Tmss1.TotalSeconds).ToString() + " c");
  112.  
  113. obj = new Object();
  114.  
  115. Tms = (DateTime.Now).Ticks;
  116.  
  117. Parallel.ForEach(x3, x => {
  118. double Tmp = fun(x);
  119. lock (obj) { y3.Enqueue(Tmp); }
  120. });
  121.  
  122. Tms = (DateTime.Now).Ticks - Tms;
  123. Tmss2 = new TimeSpan(Tms);
  124.  
  125. Console.WriteLine("Queue (пар. реализация) " + (Tmss2.TotalSeconds).ToString() + " c");
  126.  
  127. a = Tmss1 / Tmss2;
  128.  
  129. Console.WriteLine("Queue (ускорение): " + a);
  130. }
  131. };
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement