andruhovski icon

Parallel Demo

andruhovski | PRO | 09/21/18 06:19:35 AM UTC | 0 ⭐ | 793 👁️ | Never ⏰ | []
C# |

1.57 KB

|

None

|

0 👍

/

0 👎

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Prog20180921
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr1 = new int[1000000];
            var rand = new Random();
            for (int i = 0; i < arr1.Length; i++)
            {
               arr1[i]=rand.Next(100,300);
            }
            var time1 = DateTime.Now.Millisecond;
            long res1 = OneThread(arr1);
            var time2 = DateTime.Now.Millisecond;
            long res2 = ParallelThread(arr1);
            var time3 = DateTime.Now.Millisecond;
 
            Console.WriteLine("{0} {1}",
                time2-time1, time3-time2);
        }
 
        private static long ParallelThread(int[] arr)
        {
            int numCores = Environment.ProcessorCount;
            object[] locks = new object[numCores];
            for (int i = 0; i < locks.Length; ++i)
                locks[i] = new object();
            long[] sums = new long[numCores];
            Parallel.For(0, arr.Length, (i) =>
            {
                lock (locks[i % numCores])
                    sums[i % numCores] += arr[i];
            });
 
            long res = 0;
            foreach (var item in sums) res += item;
            return res;
        }
 
        private static long OneThread(int[] arr)
        {
            long res = 0;
            for (int i = 0; i < arr.Length; i++)
            {
                res += arr[i];
            }
            return res;
        }
    }
}

Comments