Engine Settings That Actually Matter

What you’ll learn: The four settings that matter (Hash, Threads, MultiPV, Contempt) and how to configure them. Reading time: 7 minutes

Most engine settings can be ignored. The defaults are fine for casual analysis. But a few settings make a real difference to analysis speed and quality. This guide covers what they do and when to change them. (Chessmate applies sensible defaults but lets you customize all these settings per engine.)

All examples use Stockfish, but most UCI-compliant engines have equivalent options.


Hash

What it does: Sets the size of the transposition table in megabytes. The transposition table stores previously calculated positions so the engine doesn’t repeat work.

Default: Usually 16 MB—far too small for serious analysis.

Recommendation: Set to roughly half your available RAM.

Your RAM Hash setting
8 GB 2048-4096 MB
16 GB 4096-8192 MB
32 GB 8192-16384 MB

Why it matters: With too small a hash, the engine “forgets” positions it’s already analysed and wastes time recalculating them. This especially hurts deep analysis where the same positions appear repeatedly through transpositions.

Too much hash is also bad—it can slow down lookups and waste memory that your operating system needs. Don’t set hash larger than your physical RAM.

Hash RAM allocation

For playing games: 1024-2048 MB is usually enough. You won’t reach depths where larger tables help much at game time controls.


Threads

What it does: Sets how many CPU cores the engine uses for parallel search.

Default: Usually 1—dramatically underutilising modern hardware.

Recommendation: Set to the number of CPU cores you have. If you want your computer responsive for other tasks, use cores minus one.

Your CPU Threads setting
4-core 3-4
8-core 7-8
16-core 14-16

Why it matters: Modern search uses “Lazy SMP”—multiple threads search the same position with slightly different parameters and share results. More threads means faster analysis. On an 8-core CPU, you’ll analyse roughly 6-7x faster than with one thread (not a perfect 8x due to overhead and diminishing returns).

Hyperthreading note: If your CPU has hyperthreading (e.g., 8 cores / 16 threads), you can try setting Threads to the full thread count, but the benefit is modest. Physical cores matter more than logical threads for chess engines.


MultiPV

What it does: Tells the engine to output the top N moves instead of just the best move. For a deeper look at when and how to use this, see Multi-PV Analysis.

Default: 1 (only the best move)

Recommendation:

  • Use 1 for the deepest, most accurate analysis
  • Use 3-4 when comparing alternatives or analysing critical positions
  • Use higher values sparingly (performance degrades significantly)

Why it matters: With MultiPV=1, the engine focuses entirely on finding the absolute best move and achieves maximum depth. With MultiPV=3, it has to track three separate lines, reducing effective depth by several ply.

When to use MultiPV > 1:

  • Opening analysis: You want to see multiple playable options
  • Critical moments: Understanding why the second-best move loses
  • Training: Comparing your candidate moves to the engine’s top choices

When to use MultiPV = 1:

  • Verifying a specific line is sound
  • Maximum-depth analysis of a difficult position
  • Endgame technique where there’s usually one correct path

Contempt

What it does: Adjusts how the engine values draws. Positive contempt makes the engine prefer to play on rather than accept draws; negative contempt makes it more willing to draw.

Default: 24 (Stockfish assumes it’s stronger than the opponent and avoids draws)

Recommendation for analysis: Set to 0. You want objective evaluation, not draw-avoidance.

Recommendation for play:

  • Against weaker opponents: 20-50 (avoid drawn positions)
  • Against equal opponents: 10-24 (mild draw avoidance)
  • Against stronger opponents: 0 or negative (accept safe draws)

Why it matters: With contempt=0, the engine evaluates positions objectively. A drawn position shows 0.00. With contempt=24, that same position might show +0.20 because the engine slightly devalues the draw.

For analysis, you want truth, not optimism. Set contempt to 0.


UCI_LimitStrength and UCI_Elo

What they do: Make the engine play at a specified strength.

Default: Disabled (engine plays at full strength)

How to use:

  1. Set UCI_LimitStrength to true
  2. Set UCI_Elo to your target rating (Stockfish supports 1320-3190)

Why it matters: For training games, playing against a 3500-Elo engine isn’t useful—you’ll just lose. A 1500-Elo engine provides realistic opposition that makes human-like mistakes.

Note: The engine doesn’t just add random blunders. It reduces search depth and adjusts evaluation to produce play characteristic of that level. The result is more natural than you might expect.


SyzygyPath

What it does: Points to Syzygy tablebase files for perfect endgame play. See our Tablebases guide for a full explanation.

Default: Empty (no tablebases)

Recommendation: If you have tablebase files downloaded, set this to their directory path. Otherwise, leave empty—you can use online tablebase lookups instead.

Why it matters: Tablebases contain solved positions for all positions with 7 or fewer pieces. When the engine reaches such a position, it knows the exact result—win, draw, or loss—and the optimal path to achieve it.

Getting tablebases: 6-piece tablebases are about 150 GB; 7-piece are about 140 TB. Most users either use online probes or download 6-piece only.


Ponder

What it does: Lets the engine think during the opponent’s time.

Default: Usually true

Recommendation: Leave enabled for play, disable for analysis.

Why it matters: When playing, pondering lets the engine think ahead while waiting for the opponent’s move. This effectively gives it more time. For analysis, pondering is irrelevant—you’re not playing against the clock.


Settings that rarely matter

Slow Mover: Adjusts time management style. Leave at default unless you have specific issues with time usage.

Move Overhead: Compensates for interface/network lag. Only relevant for online play; leave at default for analysis.

nodestime: Advanced setting for nodes-per-second based time management. Almost never needed.

UCI_Chess960: Enables Fischer Random (Chess960) support. Only needed if you’re analysing Chess960 positions.

UCI_ShowWDL: Displays Win/Draw/Loss probabilities alongside evaluation. Useful for understanding practical chances. Enable it.


Deep analysis

Hash: 8192 (or half your RAM)
Threads: (your core count)
MultiPV: 1
Contempt: 0
UCI_ShowWDL: true

Maximum depth on critical positions.

Comparative analysis

Hash: 4096
Threads: (your core count)
MultiPV: 3
Contempt: 0
UCI_ShowWDL: true

See multiple candidate moves. Good for opening preparation.

Training games

Hash: 1024
Threads: 1-2
MultiPV: 1
UCI_LimitStrength: true
UCI_Elo: (your target)
Contempt: 20

Realistic sparring partner.

Quick blunder check

Hash: 2048
Threads: (your core count)
MultiPV: 1
Contempt: 0

Fast sweep through a game to catch obvious mistakes. Lower depth is fine.


Summary

Most settings don’t matter. These four do:

  1. Hash: Set to half your RAM
  2. Threads: Set to your core count
  3. MultiPV: 1 for depth, 3-4 for comparison
  4. Contempt: 0 for analysis, positive for play

Get these right and you’re getting the most out of your engine.