Advertisement
Tvor0zhok

ПарПрог C# 3

Nov 8th, 2023
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.03 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. for (int k = 0; k <= N; k++) {
  34. double val = 100 * Math.Cos(1.0 * k);
  35. x1.Add(val);
  36. x2.Push(val);
  37. x3.Enqueue(val);
  38. }
  39.  
  40. // LIST
  41.  
  42. double S = 0;
  43.  
  44. Int64 Tms = (DateTime.Now).Ticks;
  45.  
  46. foreach (double x in x1) S += fun(x);
  47.  
  48. Tms = (DateTime.Now).Ticks - Tms;
  49. TimeSpan Tmss1 = new TimeSpan(Tms);
  50.  
  51. Console.WriteLine("S=" + S.ToString());
  52. Console.WriteLine("List (посл. реализация) "+(Tmss1.TotalSeconds).ToString()+" c");
  53.  
  54. Object obj = new Object();
  55.  
  56. S = 0;
  57. Tms = (DateTime.Now).Ticks;
  58.  
  59. Parallel.ForEach(x1, x => {
  60. double Tmp = fun(x);
  61. lock (obj) { S += Tmp; }
  62. });
  63.  
  64. Tms = (DateTime.Now).Ticks - Tms;
  65. TimeSpan Tmss2 = new TimeSpan(Tms);
  66.  
  67. Console.WriteLine("S=" + S.ToString());
  68. Console.WriteLine("List (пар. реализация) " + (Tmss2.TotalSeconds).ToString() + " c");
  69.  
  70. double a = Tmss1 / Tmss2;
  71.  
  72. Console.WriteLine("List (ускорение): " + a);
  73.  
  74. // STACK
  75.  
  76. S = 0;
  77.  
  78. Tms = (DateTime.Now).Ticks;
  79.  
  80. foreach (double x in x2) S += fun(x);
  81.  
  82. Tms = (DateTime.Now).Ticks - Tms;
  83. Tmss1 = new TimeSpan(Tms);
  84.  
  85. Console.WriteLine("S=" + S.ToString());
  86. Console.WriteLine("Stack (посл. реализация) " + (Tmss1.TotalSeconds).ToString() + " c");
  87.  
  88. obj = new Object();
  89.  
  90. S = 0;
  91. Tms = (DateTime.Now).Ticks;
  92.  
  93. Parallel.ForEach(x2, x => {
  94. double Tmp = fun(x);
  95. lock (obj) { S += Tmp; }
  96. });
  97.  
  98. Tms = (DateTime.Now).Ticks - Tms;
  99. Tmss2 = new TimeSpan(Tms);
  100.  
  101. Console.WriteLine("S=" + S.ToString());
  102. Console.WriteLine("Stack (пар. реализация) " + (Tmss2.TotalSeconds).ToString() + " c");
  103.  
  104. a = Tmss1 / Tmss2;
  105.  
  106. Console.WriteLine("Stack (ускорение): " + a);
  107.  
  108. // QUEUE
  109.  
  110. S = 0;
  111.  
  112. Tms = (DateTime.Now).Ticks;
  113.  
  114. foreach (double x in x3) S += fun(x);
  115.  
  116. Tms = (DateTime.Now).Ticks - Tms;
  117. Tmss1 = new TimeSpan(Tms);
  118.  
  119. Console.WriteLine("S=" + S.ToString());
  120. Console.WriteLine("Queue (посл. реализация) " + (Tmss1.TotalSeconds).ToString() + " c");
  121.  
  122. obj = new Object();
  123.  
  124. S = 0;
  125. Tms = (DateTime.Now).Ticks;
  126.  
  127. Parallel.ForEach(x3, x => {
  128. double Tmp = fun(x);
  129. lock (obj) { S += Tmp; }
  130. });
  131.  
  132. Tms = (DateTime.Now).Ticks - Tms;
  133. Tmss2 = new TimeSpan(Tms);
  134.  
  135. Console.WriteLine("S=" + S.ToString());
  136. Console.WriteLine("Queue (пар. реализация) " + (Tmss2.TotalSeconds).ToString() + " c");
  137.  
  138. a = Tmss1 / Tmss2;
  139.  
  140. Console.WriteLine("Queue (ускорение): " + a);
  141. }
  142. };
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement