Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Dynamic;
- using System.Threading;
- using System.Threading.Tasks;
- namespace ConsoleApp1
- {
- class Program
- {
- static double fun(double x)
- {
- double ans = 0;
- for (int k = 1; k <= Math.Max(20, (int)20 * Math.Abs(x)); ++k)
- for (int j = 1; j <= Math.Max(20, (int)20 * Math.Abs(x)); ++j)
- {
- double x_2 = x * x;
- ans += x_2 * (k + j) / (x_2 + k * k * k + j * j * j) * Math.Cos(k * x) * Math.Sin(j * x);
- }
- return ans;
- }
- static void Main()
- {
- const int N = 200;
- double[] X = new double[N + 1];
- for (int k = 0; k <= N; k++)
- {
- X[k] = 100 * Math.Cos(1.0 * k);
- }
- double S = 0;
- Int64 Tms = (DateTime.Now).Ticks;
- foreach (double x in X) S += fun(x);
- Tms = (DateTime.Now).Ticks - Tms;
- TimeSpan Tmss1 = new TimeSpan(Tms);
- Console.WriteLine("S=" + S.ToString());
- Console.WriteLine("Время выполнения последовательной операции foreach "+(Tmss1.TotalSeconds).ToString()+" c");
- Object obj = new Object();
- S = 0;
- Tms = (DateTime.Now).Ticks;
- Parallel.ForEach(X, x => {
- double Tmp = fun(x);
- lock (obj) { S += Tmp; }});
- Tms = (DateTime.Now).Ticks - Tms;
- TimeSpan Tmss2 = new TimeSpan(Tms);
- Console.WriteLine("S=" + S.ToString());
- Console.WriteLine("Время выполнения параллельного метода ForEach " + (Tmss2.TotalSeconds).ToString() + " c");
- double a = Tmss1 / Tmss2;
- Console.WriteLine("Ускорение: " + a);
- }
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement