From cb61dc9c9b92c4bfab5f5d3f82d021f4d94b69a2 Mon Sep 17 00:00:00 2001 From: Tomasz Sobczyk Date: Sat, 24 Oct 2020 22:00:52 +0200 Subject: [PATCH] Make sfen writer a part of gensfen. --- src/learn/gensfen.cpp | 51 +++++++++++++++---------------------------- 1 file changed, 17 insertions(+), 34 deletions(-) diff --git a/src/learn/gensfen.cpp b/src/learn/gensfen.cpp index 08b9c3d9..6f759db3 100644 --- a/src/learn/gensfen.cpp +++ b/src/learn/gensfen.cpp @@ -49,20 +49,19 @@ namespace Learner // Amount of sfens required to flush the buffer. static constexpr size_t SFEN_WRITE_SIZE = 5000; - // Current status is output after - // each (SFEN_WRITE_SIZE * STATUS_OUTPUT_PERIOD) sfens - static constexpr uint64_t STATUS_OUTPUT_PERIOD = 40; - // File name to write and number of threads to create - SfenWriter(string filename_, int thread_num) + SfenWriter(string filename_, int thread_num, uint64_t save_count) { sfen_buffers_pool.reserve((size_t)thread_num * 10); sfen_buffers.resize(thread_num); output_file_stream = create_new_sfen_output(filename_, sfen_output_type); filename = filename_; + save_every = save_count; finished = false; + + file_worker_thread = std::thread([&] { this->file_write_worker(); }); } ~SfenWriter() @@ -125,12 +124,6 @@ namespace Learner } } - // Start the write_worker thread. - void start_file_write_worker() - { - file_worker_thread = std::thread([&] { this->file_write_worker(); }); - } - // Dedicated thread to write to file void file_write_worker() { @@ -181,11 +174,6 @@ namespace Learner } } - void set_save_interval(uint64_t v) - { - save_every = v; - } - private: std::unique_ptr output_file_stream; @@ -202,9 +190,6 @@ namespace Learner // Flag that all threads have finished atomic finished; - // Counter for time stamp output - uint64_t batch_counter = 0; - // buffer before writing to file // sfen_buffers is the buffer for each thread // sfen_buffers_pool is a buffer for writing. @@ -238,11 +223,18 @@ namespace Learner static constexpr uint64_t REPORT_STATS_EVERY = 200000; static_assert(REPORT_STATS_EVERY % REPORT_DOT_EVERY == 0); - MultiThinkGenSfen(int search_depth_min_, int search_depth_max_, SfenWriter& sw_, const std::string& seed) : - prng(seed), + MultiThinkGenSfen( + int search_depth_min_, + int search_depth_max_, + std::string output_file_name, + int thread_num, + uint64_t save_every, + const std::string& seed + ) : search_depth_min(search_depth_min_), search_depth_max(search_depth_max_), - sfen_writer(sw_) + prng(seed), + sfen_writer(output_file_name, thread_num, save_every) { hash.resize(GENSFEN_HASH_SIZE); @@ -250,11 +242,6 @@ namespace Learner std::cout << prng << std::endl; } - void start_file_write_worker() - { - sfen_writer.start_file_write_worker(); - } - void gensfen(uint64_t limit); // Min and max depths for search during gensfen @@ -304,7 +291,7 @@ namespace Learner TimePoint last_stats_report_time; // sfen exporter - SfenWriter& sfen_writer; + SfenWriter sfen_writer; vector hash; // 64MB*sizeof(HASH_KEY) = 512MB @@ -345,7 +332,7 @@ namespace Learner std::atomic counter{0}; Threads.execute_with_workers([&counter, limit, this](Thread& th) { - thread_worker(th, counter, limit); + gensfen_worker(th, counter, limit); }); Threads.wait_for_workers_finished(); @@ -1047,10 +1034,7 @@ namespace Learner // Create and execute threads as many as Options["Threads"]. { - SfenWriter sfen_writer(output_file_name, thread_num); - sfen_writer.set_save_interval(save_every); - - MultiThinkGenSfen multi_think(search_depth_min, search_depth_max, sfen_writer, seed); + MultiThinkGenSfen multi_think(search_depth_min, search_depth_max, output_file_name, thread_num, save_every, seed); multi_think.nodes = nodes; multi_think.eval_limit = eval_limit; multi_think.random_move_minply = random_move_minply; @@ -1062,7 +1046,6 @@ namespace Learner multi_think.random_multi_pv_depth = random_multi_pv_depth; multi_think.write_minply = write_minply; multi_think.write_maxply = write_maxply; - multi_think.start_file_write_worker(); multi_think.gensfen(loop_max); // Since we are joining with the destructor of SfenWriter, please give a message that it has finished after the join