@@ -33,17 +33,20 @@ pub struct CachedExpensiveCount {
3333 pub micro_seconds : MicroSeconds ,
3434 pub cache_pointer : Arc < RwLock < LruCache < GenesHash , FitnessValue > > > ,
3535 pub cache_counter_pointer : Arc < RwLock < ( usize , usize ) > > ,
36+ pub cache_hit_fitness_score : Arc < RwLock < isize > > ,
3637}
3738impl CachedExpensiveCount {
3839 pub fn new (
3940 micro_seconds : MicroSeconds ,
4041 cache_pointer : Arc < RwLock < LruCache < GenesHash , FitnessValue > > > ,
4142 cache_counter_pointer : Arc < RwLock < ( usize , usize ) > > ,
43+ cache_hit_fitness_score : Arc < RwLock < isize > > ,
4244 ) -> Self {
4345 Self {
4446 micro_seconds,
4547 cache_pointer,
4648 cache_counter_pointer,
49+ cache_hit_fitness_score,
4750 }
4851 }
4952}
@@ -64,6 +67,7 @@ impl Fitness for CachedExpensiveCount {
6467
6568 if let Some ( value) = maybe_value {
6669 self . cache_counter_pointer . write ( ) . unwrap ( ) . 0 += 1 ;
70+ * self . cache_hit_fitness_score . write ( ) . unwrap ( ) += value;
6771 // println!("cache-hit");
6872 Some ( value)
6973 } else {
@@ -100,18 +104,20 @@ fn main() {
100104 // println!("{}", evolve);
101105
102106 for repeats in [ 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 ] {
103- for cache_size in [ 1000 , 10_000 , 100_000 , 1_000_000 ] {
107+ for cache_size in [ 10 , 100 , 1000 , 10_000 , 100_000 , 1_000_000 ] {
104108 let cache: LruCache < GenesHash , FitnessValue > =
105- LruCache :: new ( NonZeroUsize :: new ( 100_000_000 ) . unwrap ( ) ) ;
109+ LruCache :: new ( NonZeroUsize :: new ( cache_size ) . unwrap ( ) ) ;
106110 let cache_pointer = Arc :: new ( RwLock :: new ( cache) ) ;
107111 let cache_counter_pointer = Arc :: new ( RwLock :: new ( ( 0 , 0 ) ) ) ;
112+ let cache_hit_fitness_score = Arc :: new ( RwLock :: new ( 0 ) ) ;
108113
109114 let _ = evolve_builder
110115 . clone ( )
111116 . with_fitness ( CachedExpensiveCount :: new (
112117 0 ,
113118 cache_pointer,
114119 cache_counter_pointer. clone ( ) ,
120+ cache_hit_fitness_score. clone ( ) ,
115121 ) )
116122 // .with_par_fitness(true)
117123 // .with_reporter(EvolveReporterSimple::new(100))
@@ -121,7 +127,10 @@ fn main() {
121127 let cache_misses = cache_counter_pointer. read ( ) . unwrap ( ) . 1 ;
122128 let ratio = cache_hits as f32 / cache_misses as f32 ;
123129
124- println ! { "repeats: {}, cache_size: {}, cache_hits: {}, cache_misses: {}, ratio: {}" , repeats, cache_size, cache_hits, cache_misses, ratio} ;
130+ let hit_fitness_score = * cache_hit_fitness_score. read ( ) . unwrap ( ) ;
131+ let avg_hit_fitness_score = hit_fitness_score as f32 / cache_hits as f32 ;
132+
133+ println ! { "repeats: {}, cache_size: {}, cache_hits: {}, cache_misses: {}, ratio: {}, avg_hit_fitness_score: {}" , repeats, cache_size, cache_hits, cache_misses, ratio, avg_hit_fitness_score} ;
125134 }
126135 }
127136}
0 commit comments