Advertisement
Tvor0zhok

ПарПрог C# 2

Nov 8th, 2023 (edited)
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 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. double[] X = new double[N + 1];
  30.  
  31. for (int k = 0; k <= N; k++)
  32. {
  33. X[k] = 100 * Math.Cos(1.0 * k);
  34. }
  35.  
  36. double S = 0;
  37.  
  38. Int64 Tms = (DateTime.Now).Ticks;
  39.  
  40. foreach (double x in X) S += fun(x);
  41.  
  42. Tms = (DateTime.Now).Ticks - Tms;
  43. TimeSpan Tmss1 = new TimeSpan(Tms);
  44.  
  45. Console.WriteLine("S=" + S.ToString());
  46. Console.WriteLine("Время выполнения последовательной операции foreach "+(Tmss1.TotalSeconds).ToString()+" c");
  47.  
  48. Object obj = new Object();
  49.  
  50. S = 0;
  51. Tms = (DateTime.Now).Ticks;
  52.  
  53. Parallel.ForEach(X, x => {
  54. double Tmp = fun(x);
  55. lock (obj) { S += Tmp; }});
  56.  
  57. Tms = (DateTime.Now).Ticks - Tms;
  58. TimeSpan Tmss2 = new TimeSpan(Tms);
  59.  
  60. Console.WriteLine("S=" + S.ToString());
  61. Console.WriteLine("Время выполнения параллельного метода ForEach " + (Tmss2.TotalSeconds).ToString() + " c");
  62.  
  63. double a = Tmss1 / Tmss2;
  64.  
  65. Console.WriteLine("Ускорение: " + a);
  66. }
  67. };
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement