예제 #1
0
        public static List <BenchMarkResult> Method2(int nodesCount, int dimension, bool onlyS1EqualOne = false, int limit = 1000)
        {
            var diam    = float.MaxValue;
            var avgDiam = float.MaxValue;
            //var lockEqual = new object();
            var indexer       = new int[dimension];
            var optimalParams = new List <Tuple <int[], long> >();

            for (var i = 0; i < dimension; i++)
            {
                indexer[i] = i + 1;
            }

            var start = Stopwatch.StartNew();
            var finishedCollection = new ConcurrentQueue <Tuple <int[], float[], long> >();
            var srcMatrix          = Enumerable.Repeat(new byte[nodesCount], nodesCount).ToArray();

            var lim = 0;

            var bench = new List <BenchMarkResult>();

            while (lim < limit && (onlyS1EqualOne && indexer[0] < 2 || !onlyS1EqualOne && indexer[0] + dimension <= nodesCount / 2 + 1))
            {
                BasicCirculantGenerator.SpecialIncrement(nodesCount, ref indexer, onlyS1EqualOne);

                var startT     = Stopwatch.StartNew();
                var tempResult = OptimizedParallelCirculantGenerator.SolveDiamAndAverDiam(nodesCount, indexer);
                var memory     = Process.GetCurrentProcess().WorkingSet64;

                startT.Stop();

                bench.Add(new BenchMarkResult
                {
                    Memory     = memory,
                    NodesCount = nodesCount,
                    Grade      = dimension,
                    Total      = startT.ElapsedTicks,
                    TimeSpans  = new Tuple <string, long>[]
                    {
                        new Tuple <string, long>("Calculation", startT.ElapsedTicks),
                    }
                });

                lim++;
            }
            ;

            return(bench);
        }
예제 #2
0
        private static void Main(string[] args)
        {
            var yourTask           = SuperUtilities.LoadTask(new FileInfo(ConfigurationManager.AppSettings["FirstTaskPath"]).FullName);
            var circulantGenerator = new OptimizedParallelCirculantGenerator();

            Console.WriteLine("The application is started");

            var task = Task.Run(() =>
            {
                circulantGenerator.Start(yourTask);
            });

            var stopped = false;

            do
            {
                if (stopped)
                {
                    continue;
                }

                Console.WriteLine("Type 'stop' for stop operation.");
                var line = Console.ReadLine();

                if (!(line?.Equals("stop", StringComparison.InvariantCultureIgnoreCase) ?? false))
                {
                    continue;
                }

                Console.WriteLine("Program is stopping, please wait.");

                circulantGenerator.Stop();
                stopped = true;
                //thread?.Abort();
            } while (!(task.IsCompleted || task.IsCanceled || task.IsFaulted));
        }