public void PerformanceMeasurementsCtor() { const int logCount = 16; string configString = $"{{\"perf\":{{\"LogCount\":{logCount}}}}}"; var config = Configuration.ConfigurationFromString(configString); const float duration = 48.0f; var perfConfig = new PerformanceMeasurementConfigurationParameters(config, duration); var perf = new PerformanceMeasurements(VersionInfo.Version, VersionInfo.Description, perfConfig); const int defaultBinCount = 16; Assert.AreEqual("1.0", perf.FormatVersion); Assert.AreEqual(VersionInfo.Version, perf.FrameworkVersion); Assert.AreEqual(VersionInfo.Description, perf.FrameworkDescription); Assert.AreEqual(duration, perf.SimulationDuration); Assert.AreEqual(logCount, perf.FrameCount); Assert.AreEqual(defaultBinCount, perf.HistogramBins); Assert.AreEqual(defaultBinCount, perf.RealizationTimes.BinCount); Assert.AreEqual(logCount, perf.SolverSteps.Length); foreach (var histogram in perf.SolverSteps) { Assert.AreEqual(defaultBinCount, histogram.BinCount); } Assert.AreEqual(logCount, perf.StepTicks.Length); foreach (var histogram in perf.StepTicks) { Assert.AreEqual(defaultBinCount, histogram.BinCount); } Assert.AreEqual(logCount, perf.ReactionFirings.Length); foreach (var histogram in perf.ReactionFirings) { Assert.AreEqual(defaultBinCount, histogram.BinCount); } }
public void PerfMeasurementConfigParamsCtorFromConfig() { const int logCount = 42; const int histogramBins = 20; const PerformanceMeasurementConfigurationParameters.LoggingFileFormat logFileFormat = PerformanceMeasurementConfigurationParameters.LoggingFileFormat.CSV; const string logFilenamePrefix = "logfile"; var configString = BuildPerformanceMeasurementConfigurationString(enabled: true, simulationDuration: TestDuration, logCount: logCount, histogramBins: histogramBins, recordRealizationCpuTime: false, recordSolverStepTicks: false, recordSolverSteps: false, recordReactionFirings: false, logFileFormat: logFileFormat, logFilenamePrefix: logFilenamePrefix, compressOutput: true); var config = Configuration.ConfigurationFromString(configString); var configParams = new PerformanceMeasurementConfigurationParameters(config, TestDuration); Assert.IsTrue(configParams.Enabled); Assert.AreEqual(TestDuration, configParams.SimulationDuration); Assert.AreEqual(logCount, configParams.LogCount); Assert.AreEqual(histogramBins, configParams.HistogramBins); Assert.IsFalse(configParams.RecordRealizationCpuTime); Assert.IsFalse(configParams.RecordSolverStepTicks); Assert.IsFalse(configParams.RecordSolverSteps); Assert.IsFalse(configParams.RecordReactionFirings); Assert.AreEqual(logFileFormat, configParams.LogFileFormat); Assert.AreEqual(logFilenamePrefix, configParams.LogFilenamePrefix); Assert.IsTrue(configParams.CompressOutput); Assert.AreEqual(logFilenamePrefix + ".csv.gz", configParams.WorkingFilename); }
public void PerfMeasurementConfigParamsBadDurationArgument() { var config = Configuration.ConfigurationFromString("{}"); #pragma warning disable 168 var unused = new PerformanceMeasurementConfigurationParameters(config, -2.0f); #pragma warning restore 168 }
/* * [Test] * public void PerfLogging() * { * var configuration = BuildPerformanceMeasurementConfiguration(); * var perf = new PerformanceMeasurements(VersionInfo.Version, VersionInfo.Description, configuration); * const int realizationCount = 16; * * perf.StartMeasurement(); * for (int realization = 0; realization < realizationCount; realization++) * { * perf.StartRealization(); * for (int step = 0; step < perf.FrameCount; step++) * { * // Log 3/4 of the way through each interval so there is one step and one reaction * // per logging bin. * Thread.Sleep(10); * float tau = Math.Min((step+0.75f)*perf.SimulationDuration/perf.FrameCount, perf.SimulationDuration); * // Console.WriteLine("LogStep(1, {0})", tau); * perf.LogStep(1, tau); * // Assert.GreaterOrEqual(perf.SolverSteps[step].Sum(), 0, "SolverSteps should be >= 0."); * // Assert.GreaterOrEqual(perf.ReactionFirings[step].Sum(), 0, "ReactionFirings should be > 0."); * // Assert.Greater(perf.StepTicks[step].Sum(), 0, "StepTimes should be > 0."); * } * perf.EndRealization(); * // Assert.Greater(perf.RealizationTimes.SampleCount, 0, "RealizationTimes should be > 0."); * } * perf.EndMeasurement(); * * // Assert.Greater(perf.TotalTimeTicks, 0.0f, "TotalTime should be > 0."); * // Assert.GreaterOrEqual(perf.TotalTimeTicks, perf.RealizationTimes.Sum()); * * WriteMeasurementsToConsole(perf); * } */ /* * private static void WriteMeasurementsToConsole(PerformanceMeasurements perf) * { * Console.WriteLine(); * Console.Write("SolverSteps: "); * foreach (var vector in perf.SolverSteps) * foreach (var count in vector) * { * Console.Write("{0} ", count); * } * * Console.WriteLine(); * Console.Write("ReactionFirings: "); * foreach (var vector in perf.ReactionFirings) * foreach (var count in vector) * { * Console.Write("{0} ", count); * } * * Console.WriteLine(); * Console.Write("StepTimes: "); * foreach (var vector in perf.StepTicks) * foreach (var count in vector) * { * Console.Write("{0} ", count); * } * * Console.WriteLine(); * Console.Write("RealizationTimes: "); * foreach (var count in perf.RealizationTimes) * { * Console.Write("{0} ", count); * } * * Console.WriteLine(); * Console.WriteLine("Tick frequency: {0}", perf.TickFrequency); * } */ /* * [Test] * public void PerfLoggingToo() * { * var configuration = BuildPerformanceMeasurementConfiguration(); * var perf = GeneratePerformanceMeasurements(configuration); * * Assert.Greater(perf.TotalTimeTicks, 0.0f, "TotalTime should be > 0."); * * Assert.GreaterOrEqual(perf.TotalTimeTicks, perf.RealizationTimes[0]); * Assert.GreaterOrEqual(perf.RealizationTimes[0], perf.StepTicks[0].Sum()); * Assert.AreEqual(16, perf.SolverSteps[0].Sum()); * Assert.AreEqual(816, perf.ReactionFirings[0].Sum()); * * WriteMeasurementsToConsole(perf); * } */ private static PerformanceMeasurementConfigurationParameters BuildPerformanceMeasurementConfiguration(bool enabled = true, int logCount = 16, int histogramBins = 16, PerformanceMeasurementConfigurationParameters.LoggingFileFormat logFileFormat = PerformanceMeasurementConfigurationParameters.LoggingFileFormat.JSON, String logFilenamePrefix = "perflog", bool compressOutput = false, float duration = 48.0f) { var configString = BuildPerformanceMeasurementConfigurationString(enabled: enabled, logCount: logCount, histogramBins: histogramBins, logFileFormat: logFileFormat, logFilenamePrefix: logFilenamePrefix, compressOutput: compressOutput); var config = Configuration.ConfigurationFromString(configString); var perfConfig = new PerformanceMeasurementConfigurationParameters(config, duration); return(perfConfig); }
private void InitializePerformanceMeasurements() { perfConfig = new PerformanceMeasurementConfigurationParameters(Configuration.CurrentConfiguration, duration); if (perfConfig.Enabled) { perfMeasurements = new PerformanceMeasurements(VersionInfo.Version, VersionInfo.Description, perfConfig); } }
public void PerfMeasurementConfigParamsBadLogCountInConfig() { string configString = BuildPerformanceMeasurementConfigurationString(logCount: -10); var config = Configuration.ConfigurationFromString(configString); #pragma warning disable 168 var unused = new PerformanceMeasurementConfigurationParameters(config, TestDuration); #pragma warning restore 168 }
public void PerfMeasurementConfigParamsCtorDefaults() { var config = Configuration.ConfigurationFromString("{}"); var configParams = new PerformanceMeasurementConfigurationParameters(config, TestDuration); Assert.IsFalse(configParams.Enabled); Assert.AreEqual(TestDuration, configParams.SimulationDuration); Assert.AreEqual(1, configParams.LogCount); Assert.AreEqual(16, configParams.HistogramBins); Assert.IsTrue(configParams.RecordRealizationCpuTime); Assert.IsTrue(configParams.RecordSolverStepTicks); Assert.IsTrue(configParams.RecordSolverSteps); Assert.IsTrue(configParams.RecordReactionFirings); Assert.AreEqual(PerformanceMeasurementConfigurationParameters.LoggingFileFormat.JSON, configParams.LogFileFormat); Assert.AreEqual("perflog", configParams.LogFilenamePrefix); Assert.IsFalse(configParams.CompressOutput); Assert.AreEqual("perflog.json", configParams.WorkingFilename); }
public void PerfMeasurementConfigParamsBadLogFileNameInConfig() { string tempFileNameAndPath = Path.GetTempFileName(); try { // ReSharper disable AssignNullToNotNullAttribute string badPath = Path.Combine(tempFileNameAndPath, Path.GetFileName(tempFileNameAndPath)).Replace(@"\", @"\\"); // ReSharper restore AssignNullToNotNullAttribute string configString = BuildPerformanceMeasurementConfigurationString(logFilenamePrefix: badPath); var config = Configuration.ConfigurationFromString(configString); #pragma warning disable 168 var unused = new PerformanceMeasurementConfigurationParameters(config, TestDuration); #pragma warning restore 168 } finally { File.Delete(tempFileNameAndPath); } }
private static PerformanceMeasurements GeneratePerformanceMeasurements(PerformanceMeasurementConfigurationParameters configuration, int realizationCount) { var perf = new PerformanceMeasurements(VersionInfo.Version, VersionInfo.Description, configuration); const int stepCount = 16; perf.StartMeasurement(); for (int realization = 0; realization < realizationCount; realization++) { float simulationTime = 0.0f; perf.StartRealization(); for (int step = 0; step < stepCount; step++) { Thread.Sleep(10); int reactionFiringsThisStep = (step + 1) * (stepCount - step); simulationTime += perf.SimulationDuration * reactionFiringsThisStep / 816; simulationTime = Math.Min(simulationTime, perf.SimulationDuration); Console.WriteLine("LogStep({0}, {1})", reactionFiringsThisStep, simulationTime); perf.LogStep(reactionFiringsThisStep, simulationTime); } perf.EndRealization(); } perf.EndMeasurement(); return(perf); }