From 94c4240d635279bbaf30e7bf03cf92c54ad14efa Mon Sep 17 00:00:00 2001 From: Joseph Montanaro Date: Mon, 19 Jul 2021 11:08:13 -0700 Subject: [PATCH] some improvements to benchmark script --- test.nim | 70 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/test.nim b/test.nim index 09d342e..9d47963 100644 --- a/test.nim +++ b/test.nim @@ -1,7 +1,32 @@ -import math, random, strformat, times +import math, random, strformat, times, std/monotimes import fixedseq, game, simulation, ui +type + TestResults = object + ops: int + time: Duration + + +proc summarize(tr: TestResults) = + let secs = tr.time.inMilliseconds.float / 1000 + stdout.write("Test completed:\n") + stdout.write(" " & $tr.ops, " operations in " & $round(secs, 2) & " seconds\n") + stdout.write(" " & $round(tr.ops.float / secs, 2) & " operations per second") + stdout.flushFile() + + +template executionTime(body: untyped): Duration = + let start = getMonoTime() + body + getMonoTime() - start + + +proc getRand(): Rand = + randomize() + result = initRand(rand(int64)) + + proc randomDice(r: var Rand): seq[tuple[c: Color, p: int]] = for c in Color: let v = r.rand(1..3) @@ -18,18 +43,15 @@ proc newRandomGame(r: var Rand): Board = result.setState(dice, []) -proc testGames(n: SomeInteger = 100): auto = - var r = initRand(rand(int64)) - let dice = randomDice(r) - var b: Board - b.init - b.setState(dice, []) - b.display(1, 5) - - let startTime = cpuTime() - let scores = b.randomGames(n) - result = cpuTime() - startTime - scores.display() +proc games(nTests, nSamples: SomeInteger, parallel = true): TestResults = + var r = getRand() + var scores: ScoreSet + for i in 1 .. nTests: + let b = newRandomGame(r) + let dur = executionTime: + let s = b.randomGames(nSamples, parallel = parallel) + result.ops += s.sum() + result.time += dur proc testLegs(n: Natural = 100): auto = @@ -72,24 +94,4 @@ proc testSpread(nTests, nSamples: Natural) = when isMainModule: - randomize() - var r = initRand(rand(int64)) - let b = newRandomGame(r) - b.display(1, 5) - echo b.showSpaces(1, 16) - - let scores = b.getLegScores - echo scores.showPercents - # let start_states = 2_000 - # let executionTime = testLegs(start_states) - # echo "Execution time: ", executionTime - # echo "Leg simulations per second: ", float(start_states * 29_160) / executionTime - - # for i in 1 .. 1: - # let num_games = 100_000_005 - # let executionTime = testGames(num_games) - # echo "Execution time: ", executionTime - # echo "Full-game simulations per second: ", float(num_games) / executionTime - # echo "" - - # testSpread(100, 1_000_000) + games(10, 10_000_000).summarize()