Skip to content

Commit

Permalink
simplify types
Browse files Browse the repository at this point in the history
  • Loading branch information
Disservin committed Apr 23, 2024
1 parent 6026db5 commit 2c54a7b
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 35 deletions.
43 changes: 21 additions & 22 deletions src/nnue/network.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -186,27 +186,26 @@ bool Network<Arch, Transformer>::save(const std::optional<std::string>& filename


template<typename Arch, typename Transformer>
Value Network<Arch, Transformer>::evaluate(
const Position& pos,
AccumulatorCaches::Cache<Transformer::HalfDimensions>* cache,
bool adjusted,
int* complexity,
bool psqtOnly) const {
Value Network<Arch, Transformer>::evaluate(const Position& pos,
AccumulatorCaches::Cache<FTDimensions>* cache,
bool adjusted,
int* complexity,
bool psqtOnly) const {
// We manually align the arrays on the stack because with gcc < 9.3
// overaligning stack variables with alignas() doesn't work correctly.

constexpr uint64_t alignment = CacheLineSize;
constexpr int delta = 24;

#if defined(ALIGNAS_ON_STACK_VARIABLES_BROKEN)
TransformedFeatureType transformedFeaturesUnaligned
[FeatureTransformer<Arch::TransformedFeatureDimensions, nullptr>::BufferSize
+ alignment / sizeof(TransformedFeatureType)];
TransformedFeatureType
transformedFeaturesUnaligned[FeatureTransformer<FTDimensions, nullptr>::BufferSize
+ alignment / sizeof(TransformedFeatureType)];

auto* transformedFeatures = align_ptr_up<alignment>(&transformedFeaturesUnaligned[0]);
#else
alignas(alignment) TransformedFeatureType transformedFeatures
[FeatureTransformer<Arch::TransformedFeatureDimensions, nullptr>::BufferSize];
alignas(alignment) TransformedFeatureType
transformedFeatures[FeatureTransformer<FTDimensions, nullptr>::BufferSize];
#endif

ASSERT_ALIGNED(transformedFeatures, alignment);
Expand Down Expand Up @@ -258,29 +257,29 @@ void Network<Arch, Transformer>::verify(std::string evalfilePath) const {


template<typename Arch, typename Transformer>
void Network<Arch, Transformer>::hint_common_access(
const Position& pos,
AccumulatorCaches::Cache<Transformer::HalfDimensions>* cache,
bool psqtOnl) const {
void Network<Arch, Transformer>::hint_common_access(const Position& pos,
AccumulatorCaches::Cache<FTDimensions>* cache,
bool psqtOnl) const {
featureTransformer->hint_common_access(pos, cache, psqtOnl);
}

template<typename Arch, typename Transformer>
NnueEvalTrace Network<Arch, Transformer>::trace_evaluate(
const Position& pos, AccumulatorCaches::Cache<Transformer::HalfDimensions>* cache) const {
NnueEvalTrace
Network<Arch, Transformer>::trace_evaluate(const Position& pos,
AccumulatorCaches::Cache<FTDimensions>* cache) const {
// We manually align the arrays on the stack because with gcc < 9.3
// overaligning stack variables with alignas() doesn't work correctly.
constexpr uint64_t alignment = CacheLineSize;

#if defined(ALIGNAS_ON_STACK_VARIABLES_BROKEN)
TransformedFeatureType transformedFeaturesUnaligned
[FeatureTransformer<Arch::TransformedFeatureDimensions, nullptr>::BufferSize
+ alignment / sizeof(TransformedFeatureType)];
TransformedFeatureType
transformedFeaturesUnaligned[FeatureTransformer<FTDimensions, nullptr>::BufferSize
+ alignment / sizeof(TransformedFeatureType)];

auto* transformedFeatures = align_ptr_up<alignment>(&transformedFeaturesUnaligned[0]);
#else
alignas(alignment) TransformedFeatureType transformedFeatures
[FeatureTransformer<Arch::TransformedFeatureDimensions, nullptr>::BufferSize];
alignas(alignment) TransformedFeatureType
transformedFeatures[FeatureTransformer<FTDimensions, nullptr>::BufferSize];
#endif

ASSERT_ALIGNED(transformedFeatures, alignment);
Expand Down
25 changes: 13 additions & 12 deletions src/nnue/network.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ enum class EmbeddedNNUEType {

template<typename Arch, typename Transformer>
class Network {
static constexpr IndexType FTDimensions = Arch::TransformedFeatureDimensions;

public:
Network(EvalFile file, EmbeddedNNUEType type) :
evalFile(file),
Expand All @@ -51,21 +53,20 @@ class Network {
void load(const std::string& rootDirectory, std::string evalfilePath);
bool save(const std::optional<std::string>& filename) const;

Value evaluate(const Position& pos,
AccumulatorCaches::Cache<Transformer::HalfDimensions>* cache,
bool adjusted = false,
int* complexity = nullptr,
bool psqtOnly = false) const;
Value evaluate(const Position& pos,
AccumulatorCaches::Cache<FTDimensions>* cache,
bool adjusted = false,
int* complexity = nullptr,
bool psqtOnly = false) const;


void hint_common_access(const Position& pos,
AccumulatorCaches::Cache<Transformer::HalfDimensions>* cache,
bool psqtOnl) const;
void hint_common_access(const Position& pos,
AccumulatorCaches::Cache<FTDimensions>* cache,
bool psqtOnl) const;

void verify(std::string evalfilePath) const;
NnueEvalTrace
trace_evaluate(const Position& pos,
AccumulatorCaches::Cache<Transformer::HalfDimensions>* cache) const;
void verify(std::string evalfilePath) const;
NnueEvalTrace trace_evaluate(const Position& pos,
AccumulatorCaches::Cache<FTDimensions>* cache) const;

private:
void load_user_net(const std::string&, const std::string&);
Expand Down
2 changes: 1 addition & 1 deletion src/nnue/nnue_feature_transformer.h
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ static constexpr int BestRegisterCount() {
template<IndexType TransformedFeatureDimensions,
Accumulator<TransformedFeatureDimensions> StateInfo::*accPtr>
class FeatureTransformer {
public:

// Number of output dimensions for one side
static constexpr IndexType HalfDimensions = TransformedFeatureDimensions;

Expand Down

0 comments on commit 2c54a7b

Please sign in to comment.