Skip to content

Commit

Permalink
Suppress info strings before 'uci'
Browse files Browse the repository at this point in the history
On Windows, Stockfish wouldn't launch in some GUI because we output some
info strings (about the use of large pages) before sending the 'uci'
command. It seems more robust to suppress these info strings, and instead
to add a proper section section in the Readme about large pages use.

fixes #3052
closes #3147

No functional change
  • Loading branch information
snicolet authored and vondele committed Sep 25, 2020
1 parent 3d5b2c8 commit 5e6a5e4
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 23 deletions.
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,8 @@ the 50-move rule.

Stockfish supports large pages on Linux and Windows. Large pages make
the hash access more efficient, improving the engine speed, especially
on large hash sizes. Typical increases are 5..10% in terms of nps, but
speed increases up to 30% have been measured. The support is
on large hash sizes. Typical increases are 5..10% in terms of nodes per
second, but speed increases up to 30% have been measured. The support is
automatic. Stockfish attempts to use large pages when available and
will fall back to regular memory allocation when this is not the case.

Expand All @@ -213,11 +213,11 @@ are already enabled and no configuration is needed.

The use of large pages requires "Lock Pages in Memory" privilege. See
[Enable the Lock Pages in Memory Option (Windows)](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows)
on how to enable this privilege. Logout/login may be needed
afterwards. Due to memory fragmentation, it may not always be
possible to allocate large pages even when enabled. A reboot
might alleviate this problem. To determine whether large pages
are in use, see the engine log.
on how to enable this privilege, then run [RAMMap](https://docs.microsoft.com/en-us/sysinternals/downloads/rammap)
to double-check that large pages are used. We suggest that you reboot
your computer after you have enabled large pages, because long Windows
sessions suffer from memory fragmentation which may prevent Stockfish
from getting large pages: a fresh session is better in this regard.

## Compiling Stockfish yourself from the sources

Expand All @@ -232,8 +232,8 @@ targets with corresponding descriptions.
```
cd src
make help
make build ARCH=x86-64-modern
make net
make build ARCH=x86-64-modern
```

When not using the Makefile to compile (for instance with Microsoft MSVC) you
Expand Down
16 changes: 1 addition & 15 deletions src/misc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -408,22 +408,8 @@ static void* aligned_large_pages_alloc_win(size_t allocSize) {

void* aligned_large_pages_alloc(size_t allocSize) {

static bool firstCall = true;
void* mem;

// Try to allocate large pages
mem = aligned_large_pages_alloc_win(allocSize);

// Suppress info strings on the first call. The first call occurs before 'uci'
// is received and in that case this output confuses some GUIs.
if (!firstCall)
{
if (mem)
sync_cout << "info string Hash table allocation: Windows large pages used." << sync_endl;
else
sync_cout << "info string Hash table allocation: Windows large pages not used." << sync_endl;
}
firstCall = false;
void* mem = aligned_large_pages_alloc_win(allocSize);

// Fall back to regular, page aligned, allocation if necessary
if (!mem)
Expand Down

0 comments on commit 5e6a5e4

Please sign in to comment.