mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43:09 +00:00
Don't assume the type of Time::point
But instead use the proper definition. Also rewrite chrono functions while there. No functional change.
This commit is contained in:
parent
153fb216a1
commit
0b36ba74fc
6 changed files with 21 additions and 29 deletions
|
@ -144,7 +144,7 @@ void benchmark(const Position& current, istream& is) {
|
||||||
|
|
||||||
uint64_t nodes = 0;
|
uint64_t nodes = 0;
|
||||||
Search::StateStackPtr st;
|
Search::StateStackPtr st;
|
||||||
Time::point elapsed = Time::now();
|
TimePoint elapsed = now();
|
||||||
|
|
||||||
for (size_t i = 0; i < fens.size(); ++i)
|
for (size_t i = 0; i < fens.size(); ++i)
|
||||||
{
|
{
|
||||||
|
@ -163,7 +163,7 @@ void benchmark(const Position& current, istream& is) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
elapsed = Time::now() - elapsed + 1; // Ensure positivity to avoid a 'divide by zero'
|
elapsed = now() - elapsed + 1; // Ensure positivity to avoid a 'divide by zero'
|
||||||
|
|
||||||
dbg_print(); // Just before to exit
|
dbg_print(); // Just before to exit
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <chrono>
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
@ -27,7 +26,6 @@
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
@ -125,13 +123,6 @@ const string engine_info(bool to_uci) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Convert system time to milliseconds. That's all we need.
|
|
||||||
|
|
||||||
Time::point Time::now() {
|
|
||||||
return duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// Debug functions used mainly to collect run-time statistics
|
/// Debug functions used mainly to collect run-time statistics
|
||||||
|
|
||||||
void dbg_hit_on(bool b) { ++hits[0]; if (b) ++hits[1]; }
|
void dbg_hit_on(bool b) { ++hits[0]; if (b) ++hits[1]; }
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#define MISC_H_INCLUDED
|
#define MISC_H_INCLUDED
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
#include <chrono>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -36,13 +37,13 @@ void dbg_hit_on(bool c, bool b);
|
||||||
void dbg_mean_of(int v);
|
void dbg_mean_of(int v);
|
||||||
void dbg_print();
|
void dbg_print();
|
||||||
|
|
||||||
|
typedef std::chrono::milliseconds::rep TimePoint; // A value in milliseconds
|
||||||
|
|
||||||
namespace Time {
|
inline TimePoint now() {
|
||||||
typedef int64_t point;
|
return std::chrono::duration_cast<std::chrono::milliseconds>
|
||||||
point now();
|
(std::chrono::steady_clock::now().time_since_epoch()).count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Entry, int Size>
|
template<class Entry, int Size>
|
||||||
struct HashTable {
|
struct HashTable {
|
||||||
Entry* operator[](Key key) { return &table[(uint32_t)key & (Size - 1)]; }
|
Entry* operator[](Key key) { return &table[(uint32_t)key & (Size - 1)]; }
|
||||||
|
|
|
@ -41,7 +41,7 @@ namespace Search {
|
||||||
LimitsType Limits;
|
LimitsType Limits;
|
||||||
RootMoveVector RootMoves;
|
RootMoveVector RootMoves;
|
||||||
Position RootPos;
|
Position RootPos;
|
||||||
Time::point SearchTime;
|
TimePoint SearchTime;
|
||||||
StateStackPtr SetupStates;
|
StateStackPtr SetupStates;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -355,7 +355,7 @@ namespace {
|
||||||
// the UI) before a re-search.
|
// the UI) before a re-search.
|
||||||
if ( multiPV == 1
|
if ( multiPV == 1
|
||||||
&& (bestValue <= alpha || bestValue >= beta)
|
&& (bestValue <= alpha || bestValue >= beta)
|
||||||
&& Time::now() - SearchTime > 3000)
|
&& now() - SearchTime > 3000)
|
||||||
sync_cout << UCI::pv(pos, depth, alpha, beta) << sync_endl;
|
sync_cout << UCI::pv(pos, depth, alpha, beta) << sync_endl;
|
||||||
|
|
||||||
// In case of failing low/high increase aspiration window and
|
// In case of failing low/high increase aspiration window and
|
||||||
|
@ -386,9 +386,9 @@ namespace {
|
||||||
|
|
||||||
if (Signals.stop)
|
if (Signals.stop)
|
||||||
sync_cout << "info nodes " << RootPos.nodes_searched()
|
sync_cout << "info nodes " << RootPos.nodes_searched()
|
||||||
<< " time " << Time::now() - SearchTime << sync_endl;
|
<< " time " << now() - SearchTime << sync_endl;
|
||||||
|
|
||||||
else if (PVIdx + 1 == multiPV || Time::now() - SearchTime > 3000)
|
else if (PVIdx + 1 == multiPV || now() - SearchTime > 3000)
|
||||||
sync_cout << UCI::pv(pos, depth, alpha, beta) << sync_endl;
|
sync_cout << UCI::pv(pos, depth, alpha, beta) << sync_endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -412,7 +412,7 @@ namespace {
|
||||||
// Stop the search if only one legal move is available or all
|
// Stop the search if only one legal move is available or all
|
||||||
// of the available time has been used.
|
// of the available time has been used.
|
||||||
if ( RootMoves.size() == 1
|
if ( RootMoves.size() == 1
|
||||||
|| Time::now() - SearchTime > TimeMgr.available_time())
|
|| now() - SearchTime > TimeMgr.available_time())
|
||||||
{
|
{
|
||||||
// If we are allowed to ponder do not stop the search now but
|
// If we are allowed to ponder do not stop the search now but
|
||||||
// keep pondering until the GUI sends "ponderhit" or "stop".
|
// keep pondering until the GUI sends "ponderhit" or "stop".
|
||||||
|
@ -774,7 +774,7 @@ moves_loop: // When in check and at SpNode search starts from here
|
||||||
{
|
{
|
||||||
Signals.firstRootMove = (moveCount == 1);
|
Signals.firstRootMove = (moveCount == 1);
|
||||||
|
|
||||||
if (thisThread == Threads.main() && Time::now() - SearchTime > 3000)
|
if (thisThread == Threads.main() && now() - SearchTime > 3000)
|
||||||
sync_cout << "info depth " << depth / ONE_PLY
|
sync_cout << "info depth " << depth / ONE_PLY
|
||||||
<< " currmove " << UCI::move(move, pos.is_chess960())
|
<< " currmove " << UCI::move(move, pos.is_chess960())
|
||||||
<< " currmovenumber " << moveCount + PVIdx << sync_endl;
|
<< " currmovenumber " << moveCount + PVIdx << sync_endl;
|
||||||
|
@ -1373,7 +1373,7 @@ moves_loop: // When in check and at SpNode search starts from here
|
||||||
Move Skill::pick_best(size_t multiPV) {
|
Move Skill::pick_best(size_t multiPV) {
|
||||||
|
|
||||||
// PRNG sequence should be non-deterministic, so we seed it with the time at init
|
// PRNG sequence should be non-deterministic, so we seed it with the time at init
|
||||||
static PRNG rng(Time::now());
|
static PRNG rng(now());
|
||||||
|
|
||||||
// RootMoves are already sorted by score in descending order
|
// RootMoves are already sorted by score in descending order
|
||||||
int variance = std::min(RootMoves[0].score - RootMoves[multiPV - 1].score, PawnValueMg);
|
int variance = std::min(RootMoves[0].score - RootMoves[multiPV - 1].score, PawnValueMg);
|
||||||
|
@ -1407,7 +1407,7 @@ moves_loop: // When in check and at SpNode search starts from here
|
||||||
string UCI::pv(const Position& pos, Depth depth, Value alpha, Value beta) {
|
string UCI::pv(const Position& pos, Depth depth, Value alpha, Value beta) {
|
||||||
|
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
Time::point elapsed = Time::now() - SearchTime + 1;
|
TimePoint elapsed = now() - SearchTime + 1;
|
||||||
size_t multiPV = std::min((size_t)Options["MultiPV"], RootMoves.size());
|
size_t multiPV = std::min((size_t)Options["MultiPV"], RootMoves.size());
|
||||||
int selDepth = 0;
|
int selDepth = 0;
|
||||||
|
|
||||||
|
@ -1659,12 +1659,12 @@ void Thread::idle_loop() {
|
||||||
|
|
||||||
void check_time() {
|
void check_time() {
|
||||||
|
|
||||||
static Time::point lastInfoTime = Time::now();
|
static TimePoint lastInfoTime = now();
|
||||||
Time::point elapsed = Time::now() - SearchTime;
|
TimePoint elapsed = now() - SearchTime;
|
||||||
|
|
||||||
if (Time::now() - lastInfoTime >= 1000)
|
if (now() - lastInfoTime >= 1000)
|
||||||
{
|
{
|
||||||
lastInfoTime = Time::now();
|
lastInfoTime = now();
|
||||||
dbg_print();
|
dbg_print();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,7 @@ extern volatile SignalsType Signals;
|
||||||
extern LimitsType Limits;
|
extern LimitsType Limits;
|
||||||
extern RootMoveVector RootMoves;
|
extern RootMoveVector RootMoves;
|
||||||
extern Position RootPos;
|
extern Position RootPos;
|
||||||
extern Time::point SearchTime;
|
extern TimePoint SearchTime;
|
||||||
extern StateStackPtr SetupStates;
|
extern StateStackPtr SetupStates;
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
|
|
|
@ -353,7 +353,7 @@ void ThreadPool::start_thinking(const Position& pos, const LimitsType& limits,
|
||||||
StateStackPtr& states) {
|
StateStackPtr& states) {
|
||||||
wait_for_think_finished();
|
wait_for_think_finished();
|
||||||
|
|
||||||
SearchTime = Time::now(); // As early as possible
|
SearchTime = now(); // As early as possible
|
||||||
|
|
||||||
Signals.stopOnPonderhit = Signals.firstRootMove = false;
|
Signals.stopOnPonderhit = Signals.firstRootMove = false;
|
||||||
Signals.stop = Signals.failedLowAtRoot = false;
|
Signals.stop = Signals.failedLowAtRoot = false;
|
||||||
|
|
Loading…
Add table
Reference in a new issue