X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fnnue%2Fnnue_architecture.h;h=b4f65364c2e1c4bb727721ab3922550b75685e41;hb=5f781d366e0f4369ec12e36c9978ad63ffa32235;hp=725b40fb43d2e87d9ab484603528f9965a06f59d;hpb=27139dedac14af400f5b18e2ab50aca3f8cf0e33;p=stockfish diff --git a/src/nnue/nnue_architecture.h b/src/nnue/nnue_architecture.h index 725b40fb..b4f65364 100644 --- a/src/nnue/nnue_architecture.h +++ b/src/nnue/nnue_architecture.h @@ -46,7 +46,7 @@ struct Network static constexpr int FC_1_OUTPUTS = 32; Layers::AffineTransform fc_0; - Layers::ClippedReLU ac_0; + Layers::ClippedReLU ac_0; Layers::AffineTransform fc_1; Layers::ClippedReLU ac_1; Layers::AffineTransform fc_2; @@ -97,14 +97,19 @@ struct Network alignas(CacheLineSize) decltype(fc_1)::OutputBuffer fc_1_out; alignas(CacheLineSize) decltype(ac_1)::OutputBuffer ac_1_out; alignas(CacheLineSize) decltype(fc_2)::OutputBuffer fc_2_out; + + Buffer() + { + std::memset(this, 0, sizeof(*this)); + } }; #if defined(ALIGNAS_ON_STACK_VARIABLES_BROKEN) - char bufferRaw[sizeof(Buffer) + alignment]; - char* bufferRawAligned = align_ptr_up(&bufferRaw[0]); - Buffer& buffer = *(new (bufferRawAligned) Buffer); + static thread_local char bufferRaw[sizeof(Buffer) + alignment]; + static thread_local char* bufferRawAligned = align_ptr_up(&bufferRaw[0]); + static thread_local Buffer& buffer = *(new (bufferRawAligned) Buffer); #else - alignas(alignment) Buffer buffer; + alignas(alignment) static thread_local Buffer buffer; #endif fc_0.propagate(transformedFeatures, buffer.fc_0_out); @@ -118,10 +123,6 @@ struct Network std::int32_t fwdOut = int(buffer.fc_0_out[FC_0_OUTPUTS]) * (600*OutputScale) / (127*(1<