From 2b32571de88837ef5739348b8a3c951590a94205 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 4 Jul 2009 10:32:51 +0100 Subject: [PATCH] Add support for saving timing file during benchmark Add a new argument to bench to specify the name of the file where timing information will be saved for each benchmark session. This argument is optional, if not specified file will not be created. Original patch by Heinz van Saanen Signed-off-by: Marco Costalba --- src/benchmark.cpp | 36 ++++++++++++++++++++++++++++-------- src/main.cpp | 8 +++++--- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/benchmark.cpp b/src/benchmark.cpp index 590299d9..b90d3fcb 100644 --- a/src/benchmark.cpp +++ b/src/benchmark.cpp @@ -72,7 +72,7 @@ void benchmark(const string& commandLine) { istringstream csVal(commandLine); istringstream csStr(commandLine); - string ttSize, threads, fileName, limitType; + string ttSize, threads, fileName, limitType, timFile; int val, secsPerPos, maxDepth, maxNodes; csStr >> ttSize; @@ -98,6 +98,7 @@ void benchmark(const string& commandLine) { csVal >> val; csVal >> fileName; csVal >> limitType; + csVal >> timFile; secsPerPos = maxDepth = maxNodes = 0; @@ -130,30 +131,49 @@ void benchmark(const string& commandLine) { for (int i = 0; i < 16; i++) positions.push_back(string(BenchmarkPositions[i])); - int startTime = get_system_time(); + ofstream timingFile; + if (!timFile.empty()) + { + timingFile.open(timFile.c_str(), ios::out | ios::app); + if (!timingFile.is_open()) + { + cerr << "Unable to open timing file " << timFile << endl; + Application::exit_with_failure(); + } + } + vector::iterator it; int cnt = 1; int64_t totalNodes = 0; + int startTime = get_system_time(); + for (it = positions.begin(); it != positions.end(); ++it, ++cnt) { Move moves[1] = {MOVE_NONE}; int dummy[2] = {0, 0}; Position pos(*it); - cout << "\nProcessing position " << cnt << '/' << positions.size() << endl << endl; + cerr << "\nBench position: " << cnt << '/' << positions.size() << endl << endl; if (!think(pos, true, false, 0, dummy, dummy, 0, maxDepth, maxNodes, secsPerPos, moves)) break; totalNodes += nodes_searched(); } + cnt = get_system_time() - startTime; - cout << "\nProcessing time (ms) " << cnt - << "\nNodes searched " << totalNodes - << "\nNodes/second " << (int)(totalNodes/(cnt/1000.0)) - << endl; + cerr << "===============================" + << "\nTotal time (ms) : " << cnt + << "\nNodes searched : " << totalNodes + << "\nNodes/second : " << (int)(totalNodes/(cnt/1000.0)) << endl << endl; + + if (!timFile.empty()) + { + timingFile << cnt << endl << endl; + timingFile.close(); + } // Under MS Visual C++ debug window always unconditionally closes // when program exits, this is bad because we want to read results before. #if (defined(WINDOWS) || defined(WIN32) || defined(WIN64)) - cout << "Press any key to exit" << endl; + cerr << "Press any key to exit" << endl; cin >> fileName; #endif } diff --git a/src/main.cpp b/src/main.cpp index 94ee076b..c57b1f41 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -60,16 +60,18 @@ int main(int argc, char *argv[]) { // Process command line arguments if any if (argc > 1) { - if (string(argv[1]) != "bench" || argc < 4 || argc > 7) + if (string(argv[1]) != "bench" || argc < 4 || argc > 8) cout << "Usage: stockfish bench " << "[time = 60s] [fen positions file = default] " - << "[time, depth or node limited = time]" << endl; + << "[time, depth or node limited = time] " + << "[timing file name = none]" << endl; else { string time = argc > 4 ? argv[4] : "60"; string fen = argc > 5 ? argv[5] : "default"; string lim = argc > 6 ? argv[6] : "time"; - benchmark(string(argv[2]) + " " + string(argv[3]) + " " + time + " " + fen + " " + lim); + string tim = argc > 7 ? argv[7] : ""; + benchmark(string(argv[2]) + " " + string(argv[3]) + " " + time + " " + fen + " " + lim + " " + tim); } return 0; } -- 2.39.2