private async ValueTask WriteOutput(IPerftResult result, string baseFileName, CancellationToken cancellationToken) { // ReSharper disable once MethodHasAsyncOverload var contents = JsonConvert.SerializeObject(result, _outputSettings); var outputFileName = $"{baseFileName}{result.Depth}].json"; await System.IO.File.WriteAllTextAsync(outputFileName, contents, cancellationToken).ConfigureAwait(false); }
public PerftRunner(IEpdParser parser, ILogger log, IBuildTimeStamp buildTimeStamp, IPerft perft, IPerftResult result, IConfiguration configuration) { _epdParser = parser; _log = log; _buildTimeStamp = buildTimeStamp; _perft = perft; _perft.BoardPrintCallback = PrintBoard; _result = result; _configuration = configuration; _runners = new Func <CancellationToken, IAsyncEnumerable <IPerftPosition> >[] { ParseEpd, ParseFen }; TranspositionTableOptions = Framework.IoC.Resolve <IOptions>(serviceKey: OptionType.TTOptions) as TTOptions; TranspositionTableOptions.Use = configuration.GetValue <bool>("TranspositionTable:Use"); TranspositionTableOptions.Size = configuration.GetValue <int>("TranspositionTable:Size"); }
private Task <int> LogResults(IPerftResult result) { return(Task.Run(() => { _log.Information("Time passed : {0}", result.Elapsed); _log.Information("Nps : {0}", result.Nps); if (_usingEpd) { _log.Information("Result : {0} - should be {1}", result.Result, result.CorrectResult); if (result.Result != result.CorrectResult) { var difference = (long)(result.CorrectResult - result.Result); _log.Information("Difference : {0}", difference < 0 ? -difference : difference); } } else { _log.Information("Result : {0}", result.Result); } _log.Information("TT hits : {0}", Game.Table.Hits); var error = 0; if (!_usingEpd) { return error; } if (result.CorrectResult == result.Result) { _log.Information("Move count matches!"); } else { _log.Error("Failed for position: {0}", _perft.CurrentGame.Pos.GenerateFen()); error = 1; } return error; })); }
private Task <int> LogResults(IPerftResult result) { return(Task.Run(() => { _log.Information("Time passed : {0}", result.ElapsedMs); _log.Information("Nps : {0}", result.Nps); if (_usingEpd) { _log.Information("Result : {0} - should be {1}", result.Result, result.CorrectResult); } else { _log.Information("Result : {0}", result.Result); } _log.Information("TT hits : {0}", Game.Table.Hits); int error = 0; if (!_usingEpd) { return error; } if (result.CorrectResult == result.Result) { _log.Information("Move count matches!"); } else { _log.Error("Move count failed!"); error = 1; } return error; })); }
private void ComputeResultsAsync(ulong result, int depth, ulong expected, long elapsedMs, IPerftResult results) { // compute results results.Result = result; results.Depth = depth; // add 1 to avoid potential dbz results.Elapsed = TimeSpan.FromMilliseconds(elapsedMs + 1); results.Nps = (ulong)_uci.Nps(result, results.Elapsed); results.CorrectResult = expected; results.Passed = expected == result; results.TableHits = Game.Table.Hits; }
private static Task ComputeResults(ulong result, int depth, ulong expected, long elapsedMs, IPerftResult results) { return(Task.Run(() => { // compute results results.Result = result; results.Depth = depth; // add 1 to avoid potential dbz results.ElapsedMs = elapsedMs + 1; results.Nps = 1000 * result / (ulong)results.ElapsedMs; results.CorrectResult = expected; results.Passed = expected == result; results.TableHits = Game.Table.Hits; })); }