io-chess
UCI chess engine
Loading...
Searching...
No Matches
Writers.hpp
Go to the documentation of this file.
1
5#pragma once
6#include "ExpertRouter.hpp" // For ExpertWeights struct
7#include "FeatureExtractor.hpp" // For ChessInput struct
8#include "WDLNormalizer.hpp" // For WDLOutput struct
9#include <array>
10#include <cstdint>
11#include <fstream>
12#include <iostream>
13#include <memory>
14#include <string>
15#include <vector>
16
17struct alignas(64) PackedChessInput {
18 // Planes 0-29 are categorical (pieces, moves, threats).
19 // Pack each 64-square plane into a SINGLE 64-bit integer.
20 // Size: 30 * 8 bytes = 240 bytes
21 uint64_t bitboards[30];
22
23 // Planes 30-31 are continuous (King distance), keep as uint8_t
24 // Size: 2 * 64 bytes = 128 bytes
25 uint8_t continuous_layers[2][64];
26
27 // Global features
28 // Size: 16 * 4 bytes = 64 bytes
29 float global[16];
30};
31
33private:
34 std::string filename;
35 size_t batch_size;
36
37 // Buffer stores the packed structs to save memory
38 std::vector<PackedChessInput> buffer;
39
40public:
41 DatasetWriter(const std::string &fname, size_t batch_capacity = 1000);
43 void add(const ChessInput &features);
44 void flush();
45};
46
48private:
49 std::string filename;
50 std::vector<float> buffer;
51 size_t batch_size;
52
53public:
54 LabelWriter(const std::string &fname, size_t batch_capacity = 1000);
56 void add(float label);
57 void flush();
58};
59
66class WDLWriter {
67private:
68 std::string filename;
69 std::vector<float> buffer; // Flattened [w, d, l, m, w, d, l, m, ...]
70 size_t batch_size;
71
72public:
73 WDLWriter(const std::string &fname, size_t batch_capacity = 1000);
74 ~WDLWriter();
75
80 void add(const WDLOutput &wdl);
81
82 void flush();
83};
84
92private:
93 std::string filename;
94 std::vector<float> buffer; // Flat buffer of all weights
95 size_t batch_size;
96 static constexpr int NUM_EXPERTS = ExpertRouter::NUM_EXPERTS;
97
98public:
99 ExpertWeightsWriter(const std::string &fname, size_t batch_capacity = 1000);
101
106 void add(const ExpertRouter::ExpertWeights &weights);
107
112 void add(const float *weights);
113
114 void flush();
115};
116
133private:
134 static constexpr int NUM_EXPERTS = 6;
135 static constexpr float AUX_GATE_THRESHOLD = 0.1f;
136
137 std::array<std::unique_ptr<DatasetWriter>, NUM_EXPERTS> feature_writers;
138 std::array<std::unique_ptr<WDLWriter>, NUM_EXPERTS> label_writers;
139 std::array<size_t, NUM_EXPERTS> counts;
140
141public:
142 ExpertDatasetWriter(const std::string &output_dir,
143 size_t batch_capacity = 10000);
145
153 void add(const ChessInput &features, const WDLOutput &wdl,
154 const ExpertRouter::ExpertWeights &weights);
155
159 void flush();
160
164 void print_stats() const;
165};
Computes expert weights for the Residual MoE architecture based on position features.
Standard sparse/dense feature extraction logic for chess positions.
Conversion from raw evaluation strings to WDL (Win/Draw/Loss) probabilities.
void add(const ChessInput &features)
Definition Writers.cpp:22
std::string filename
Definition Writers.hpp:34
~DatasetWriter()
Definition Writers.cpp:20
DatasetWriter(const std::string &fname, size_t batch_capacity=1000)
Definition Writers.cpp:10
size_t batch_size
Definition Writers.hpp:35
std::vector< PackedChessInput > buffer
Definition Writers.hpp:38
void flush()
Definition Writers.cpp:51
void add(const ChessInput &features, const WDLOutput &wdl, const ExpertRouter::ExpertWeights &weights)
Definition Writers.cpp:189
ExpertDatasetWriter(const std::string &output_dir, size_t batch_capacity=10000)
Definition Writers.cpp:171
std::array< std::unique_ptr< DatasetWriter >, NUM_EXPERTS > feature_writers
Definition Writers.hpp:137
static constexpr int NUM_EXPERTS
Definition Writers.hpp:134
std::array< size_t, NUM_EXPERTS > counts
Definition Writers.hpp:139
static constexpr float AUX_GATE_THRESHOLD
Definition Writers.hpp:135
std::array< std::unique_ptr< WDLWriter >, NUM_EXPERTS > label_writers
Definition Writers.hpp:138
void print_stats() const
Definition Writers.cpp:246
void flush()
Definition Writers.cpp:237
~ExpertDatasetWriter()
Definition Writers.cpp:187
static constexpr int NUM_EXPERTS
Definition ExpertRouter.hpp:32
void add(const ExpertRouter::ExpertWeights &weights)
Definition Writers.cpp:139
void flush()
Definition Writers.cpp:154
~ExpertWeightsWriter()
Definition Writers.cpp:137
std::string filename
Definition Writers.hpp:93
size_t batch_size
Definition Writers.hpp:95
ExpertWeightsWriter(const std::string &fname, size_t batch_capacity=1000)
Definition Writers.cpp:127
std::vector< float > buffer
Definition Writers.hpp:94
static constexpr int NUM_EXPERTS
Definition Writers.hpp:96
std::vector< float > buffer
Definition Writers.hpp:50
void flush()
Definition Writers.cpp:82
void add(float label)
Definition Writers.cpp:75
std::string filename
Definition Writers.hpp:49
LabelWriter(const std::string &fname, size_t batch_capacity=1000)
Definition Writers.cpp:67
size_t batch_size
Definition Writers.hpp:51
~LabelWriter()
Definition Writers.cpp:73
std::vector< float > buffer
Definition Writers.hpp:69
~WDLWriter()
Definition Writers.cpp:102
void add(const WDLOutput &wdl)
Definition Writers.cpp:104
WDLWriter(const std::string &fname, size_t batch_capacity=1000)
Definition Writers.cpp:95
size_t batch_size
Definition Writers.hpp:70
void flush()
Definition Writers.cpp:114
std::string filename
Definition Writers.hpp:68
Definition FeatureExtractor.hpp:10
Definition ExpertRouter.hpp:52
Definition Writers.hpp:17
uint8_t continuous_layers[2][64]
Definition Writers.hpp:25
uint64_t bitboards[30]
Definition Writers.hpp:21
float global[16]
Definition Writers.hpp:29
Definition WDLNormalizer.hpp:14