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; }
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(); } }