Exemple #1
0
 public DependencyNode(ComputationTarget target, IEnumerable<ValueSpecification> inputValues, IEnumerable<ValueSpecification> outputValues, IEnumerable<ValueSpecification> terminalOutputValues, ParameterizedFunction function)
 {
     _target = target;
     _inputValues = inputValues;
     _outputValues = outputValues;
     _terminalOutputValues = terminalOutputValues;
     _function = function;
 }
Exemple #2
0
 public DependencyNode(ComputationTarget target, IEnumerable <ValueSpecification> inputValues, IEnumerable <ValueSpecification> outputValues, IEnumerable <ValueSpecification> terminalOutputValues, ParameterizedFunction function)
 {
     _target               = target;
     _inputValues          = inputValues;
     _outputValues         = outputValues;
     _terminalOutputValues = terminalOutputValues;
     _function             = function;
 }
        /// <summary>
        /// This is the function that is ran in the background by <see cref="BackgroundWorker"/>.
        /// </summary>
        private void RunKpz(BackgroundWorker bw)
        {
            AsyncLogIt("Creating KPZ data structure...");
            _kpz = new Kpz(_kpzWidth, _kpzHeight, 0.5, 0.5, _showInspector, ComputationTarget);
            AsyncLogIt("Filling grid with initial data...");
            _kpz.InitializeGrid();

            IHastlayer hastlayer = null;

            if (ComputationTarget != KpzTarget.Cpu)
            {
                AsyncLogIt("Initializing Hastlayer...");
                _kpz.LogItFunction = AsyncLogIt;
                var hastlayerInitializationTask = _kpz.InitializeHastlayer(_verifyOutput, _randomSeedEnable);
                hastlayer = hastlayerInitializationTask.Result;
            }

            try
            {
                if (ComputationTarget == KpzTarget.PrngTest)
                {
                    return;                                          // Already done test inside InitializeHastlayer
                }
                var sw = System.Diagnostics.Stopwatch.StartNew();
                AsyncLogIt("Starting KPZ iterations...");

                if (!ComputationTarget.HastlayerParallelizedAlgorithm())
                {
                    for (int currentIteration = 0; currentIteration < _numKpzIterations; currentIteration++)
                    {
                        if (ComputationTarget == KpzTarget.Cpu)
                        {
                            _kpz.DoIteration();
                        }
                        else
                        {
                            if (_stepByStep)
                            {
                                _kpz.DoHastIterationDebug();
                            }
                            else
                            {
                                _kpz.DoHastIterations((uint)_numKpzIterations); break;
                            }
                        }
                        AsyncUpdateProgressBar(currentIteration);
                        AsyncUpdateChart(currentIteration);
                        if (bw.CancellationPending)
                        {
                            return;
                        }
                    }
                }
                else
                {
                    int currentIteration = 1;
                    int lastIteration    = 0;
                    for (; ;)
                    {
                        int iterationsToDo = currentIteration - lastIteration;
                        AsyncLogIt(String.Format("Doing {0} iterations at once...", iterationsToDo));
                        _kpz.DoHastIterations((uint)iterationsToDo);
                        AsyncUpdateProgressBar(currentIteration);
                        // Force update if current iteration is the last:
                        AsyncUpdateChart(currentIteration - 1, currentIteration == _numKpzIterations);
                        if (currentIteration >= _numKpzIterations)
                        {
                            break;
                        }
                        lastIteration     = currentIteration;
                        currentIteration *= 10;
                        if (currentIteration > _numKpzIterations)
                        {
                            currentIteration = _numKpzIterations;
                        }
                    }
                }
                sw.Stop();
                AsyncLogIt("Done. Total time measured: " + sw.ElapsedMilliseconds + " ms");
            }
            finally
            {
                hastlayer?.Dispose();
            }
        }