diff --git a/src/berserk.c b/src/berserk.c index 53af2de..3bcbac7 100644 --- a/src/berserk.c +++ b/src/berserk.c @@ -49,7 +49,10 @@ int main(int argc, char** argv) { if (argc > 2) depth = Max(1, atoi(argv[2])); - Bench(depth); + if (NETWORK_LOADED) + Bench(depth); + else + printf("info string ERROR: no network loaded (built without an embedded net)\n"); } else { UCILoop(); } diff --git a/src/nn/evaluate.c b/src/nn/evaluate.c index 35a2d7e..0802512 100644 --- a/src/nn/evaluate.c +++ b/src/nn/evaluate.c @@ -29,11 +29,16 @@ #include "../util.h" #include "accumulator.h" +#ifndef NO_EMBED_NET #define INCBIN_PREFIX #define INCBIN_STYLE INCBIN_STYLE_CAMEL #include "../incbin.h" INCBIN(Embed, EVALFILE); +#endif + +// 1 once a network is in memory (embedded or loaded via EvalFile) +int NETWORK_LOADED = 0; #define QUANT1_BITS 5 #define QUANT2_BITS 12 @@ -960,7 +965,10 @@ INLINE void InitLookupIndices() { void LoadDefaultNN() { InitLookupIndices(); +#ifndef NO_EMBED_NET CopyData(EmbedData); + NETWORK_LOADED = 1; +#endif } int LoadNetwork(char* path) { @@ -973,10 +981,13 @@ int LoadNetwork(char* path) { uint8_t* data = malloc(NETWORK_SIZE); if (fread(data, sizeof(uint8_t), NETWORK_SIZE, fin) != NETWORK_SIZE) { printf("info string Error reading file at %s\n", path); + fclose(fin); + free(data); return 0; } CopyData(data); + NETWORK_LOADED = 1; for (int i = 0; i < Threads.count; i++) ResetRefreshTable(Threads.threads[i]->refreshTable); diff --git a/src/nn/evaluate.h b/src/nn/evaluate.h index feaa07d..e72d1f5 100644 --- a/src/nn/evaluate.h +++ b/src/nn/evaluate.h @@ -24,6 +24,7 @@ int Predict(Board* board); int Propagate(Accumulator* accumulator, const int stm); +extern int NETWORK_LOADED; void LoadDefaultNN(); int LoadNetwork(char* path); diff --git a/src/uci.c b/src/uci.c index 8d254f1..94fc0bc 100644 --- a/src/uci.c +++ b/src/uci.c @@ -300,6 +300,11 @@ void UCILoop() { TTClear(); SearchClear(); } else if (!strncmp(in, "go", 2)) { + if (!NETWORK_LOADED) { + printf("info string ERROR: no network loaded, send setoption name EvalFile value \n"); + printf("bestmove 0000\n"); + continue; + } ParseGo(in, &board); } else if (!strncmp(in, "stop", 4)) { if (Threads.searching) { @@ -352,7 +357,10 @@ void UCILoop() { char* d = strtok(NULL, " ") ?: "13"; int depth = atoi(d); - Bench(depth); + if (!NETWORK_LOADED) + printf("info string ERROR: no network loaded, send setoption name EvalFile value \n"); + else + Bench(depth); } else if (!strncmp(in, "threats", 7)) { PrintBB(board.threatened); } else if (!strncmp(in, "eval", 4)) {