diff --git a/engine/src/search.rs b/engine/src/search.rs index 51dbf2f..99465fb 100644 --- a/engine/src/search.rs +++ b/engine/src/search.rs @@ -284,6 +284,7 @@ impl<'a, Log: LogLevel> Search<'a, Log> { score: Score, nps: f32, time: u64, + hashfull: u16, pv: &PrincipleVariation, ) { // create UciInfo and print it @@ -294,6 +295,7 @@ impl<'a, Log: LogLevel> Search<'a, Log> { .score(score) .nps(nps.trunc()) .time(time) + .hashfull(hashfull) .pv(pv.iter().map(|m| m.to_long_algebraic())); let message = UciResponse::info(info); let _unused = writeln!(self.output, "{message}"); @@ -406,6 +408,7 @@ impl<'a, Log: LogLevel> Search<'a, Log> { (self.nodes as f32 / self.parameters.start_time.elapsed().as_secs_f32()) .trunc(), self.parameters.start_time.elapsed().as_millis() as u64, + self.transposition_table.hashfull(), &best_result.pv, ); } @@ -427,6 +430,7 @@ impl<'a, Log: LogLevel> Search<'a, Log> { best_result.score, (self.nodes as f32 / self.parameters.start_time.elapsed().as_secs_f32()).trunc(), self.parameters.start_time.elapsed().as_millis() as u64, + self.transposition_table.hashfull(), &best_result.pv, ); } diff --git a/engine/src/ttable.rs b/engine/src/ttable.rs index 5aefca3..59fa71a 100644 --- a/engine/src/ttable.rs +++ b/engine/src/ttable.rs @@ -125,6 +125,12 @@ impl TranspositionTable { * 100_f64 } + pub(crate) fn hashfull(&self) -> u16 { + let sample = self.table.len().min(1000); + let used = self.table[..sample].iter().filter(|e| e.is_some()).count(); + ((used * 1000) / sample) as u16 + } + pub(crate) fn size(&self) -> usize { self.table.len() }