Answers.Body: <p>OK.  Been playing with stockfish on the command line (and also learned from comments and other answers here).</p>
  <ol>
  <li>Does stockfish use calculation from the previously position when you send it a move list?  <strong>YES</strong>  The engine visits more nodes if you haven't done previous calculation.</li>
  </ol>
  <pre><code>ucinewgame
  position startpos moves e2e3 d7d6  
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 275 nodes 31 nps 10333 time 3 pv d1h5 bmc 3
  info depth 2 seldepth 2 multipv 1 score cp 88 nodes 100 nps 25000 time 4 pv d2d4 c7c6 bmc 4.551
  ...
  position startpos moves e2e3 d7d6 d1f3   //make 1 additional move
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 31 nodes 31 nps 10333 time 3 pv b8c6 bmc 2
  info depth 2 seldepth 2 multipv 1 score cp -22 nodes 88 nps 17600 time 5 pv g8h6 d2d4 bmc 2.034
  ...
  ucinewgame  //reset the engine 
  position startpos moves e2e3 d7d6 d1f3  
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 79 nodes 38 nps 12666 time 3 pv g8f6 bmc 5
  info depth 2 seldepth 2 multipv 1 score cp 63 nodes 73 nps 18250 time 4 pv g8f6 b2b3 bmc 2.585
  </code></pre>
  <ol start="2">
  <li>Does it have the same behavior if you send a FEN instead of a move list. <strong>YES</strong> (exception being if repetitions are being evaluated)</li>
  </ol>
  <pre><code>ucinewgame
  position fen rnbqkbnr/ppp1pppp/3p4/8/8/4P3/PPPP1PPP/RNBQKBNR w KQkq - 0 2
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 275 nodes 31 nps 10333 time 3 pv d1h5 bmc 3
  info depth 2 seldepth 2 multipv 1 score cp 88 nodes 100 nps 20000 time 5 pv d2d4 c7c6 bmc 4.551
  ...
  position fen rnbqkbnr/ppp1pppp/3p4/8/8/4PQ2/PPPP1PPP/RNB1KBNR b KQkq - 1 2
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 31 nodes 31 nps 10333 time 3 pv b8c6 bmc 2
  info depth 2 seldepth 2 multipv 1 score cp -22 nodes 88 nps 17600 time 5 pv g8h6 d2d4 bmc 2.034
  ...
  ucinewgame
  position fen rnbqkbnr/ppp1pppp/3p4/8/8/4PQ2/PPPP1PPP/RNB1KBNR b KQkq - 1 2
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 79 nodes 38 nps 19000 time 2 pv g8f6 bmc 5
  info depth 2 seldepth 2 multipv 1 score cp 63 nodes 73 nps 18250 time 4 pv g8f6 b2b3 bmc 2.585
  </code></pre>
  <ol start="3">
  <li>If you tell stock to analyze a shallower then a deeper depth, does it remember the calculations?  <strong>YES</strong></li>
  </ol>
  <pre><code>ucinewgame
  position fen rnbqkbnr/ppp1pppp/3p4/8/8/4PQ2/PPPP1PPP/RNB1KBNR b KQkq - 1 2
  go depth 8
  info depth 1 seldepth 1 multipv 1 score cp 79 nodes 38 nps 12666 time 3 pv g8f6 bmc 5
  info depth 2 seldepth 2 multipv 1 score cp 63 nodes 73 nps 14600 time 5 pv g8f6 b2b3 bmc 2.585
  info depth 3 seldepth 3 multipv 1 score cp 93 nodes 298 nps 42571 time 7 pv e7e5 d2d4 g8f6 bmc 4.33645
  info depth 4 seldepth 4 multipv 1 score cp 41 nodes 503 nps 55888 time 9 pv e7e5 b1c3 g8f6 d2d4 bmc 2.24194
  info depth 5 seldepth 5 multipv 1 score cp 78 nodes 754 nps 75400 time 10 pv g8f6 b1c3 c7c6 bmc 2.15908
  info depth 6 seldepth 6 multipv 1 score cp 105 nodes 894 nps 74500 time 12 pv g8f6 b1c3 c7c6 b2b3 bmc 1.11625
  info depth 7 seldepth 7 multipv 1 score cp 121 nodes 1670 nps 111333 time 15 pv g8f6 d2d4 e7e5 d4e5 d6e5 b1c3 bmc 0.577099
  info depth 8 seldepth 8 multipv 1 score cp 166 nodes 2607 nps 144833 time 18 pv g8f6 b1c3 b8c6 d2d4 e7e5 bmc 0.29836
  bestmove g8f6 ponder b1c3
  
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 166 nodes 33 nps 11000 time 3 pv g8f6 bmc 1
  info depth 2 seldepth 2 multipv 1 score cp 166 nodes 62 nps 15500 time 4 pv g8f6 b1c3 bmc 0.517
  info depth 3 seldepth 3 multipv 1 score cp 166 nodes 92 nps 15333 time 6 pv g8f6 b1c3 b8c6 bmc 0.267289
  info depth 4 seldepth 4 multipv 1 score cp 166 nodes 124 nps 17714 time 7 pv g8f6 b1c3 b8c6 d2d4 bmc 0.138188
  info depth 5 seldepth 5 multipv 1 score cp 166 nodes 159 nps 17666 time 9 pv g8f6 b1c3 b8c6 d2d4 e7e5 bmc 0.0714434
  info depth 6 seldepth 6 multipv 1 score cp 179 nodes 344 nps 31272 time 11 pv g8f6 d2d4 e7e5 d4e5 d6e5 bmc 0.0369362
  ...
  info depth 11 seldepth 14 multipv 1 score cp 130 nodes 40317 nps 356787 time 113 pv e7e5 d2d4 g8f6 b1c3 f8e7 c1d2 b8c6 d4e5 c6e5 bmc 1.51836
  info depth 12 seldepth 17 multipv 1 score cp 88 nodes 110722 nps 435913 time 254 pv b8c6 d2d4 g8f6 b1d2 c6b4 f1d3 e7e5 g1e2 b4d3 c2d3 f8e7 e1g1 e8g8 f3g3 e5d4 e2d4 c7c6 bmc 1.78499
  bestmove b8c6 ponder d2d4
  
  ucinewgame
  position fen rnbqkbnr/ppp1pppp/3p4/8/8/4PQ2/PPPP1PPP/RNB1KBNR b KQkq - 1 2
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 79 nodes 38 nps 19000 time 2 pv g8f6 bmc 5
  info depth 2 seldepth 2 multipv 1 score cp 63 nodes 73 nps 24333 time 3 pv g8f6 b2b3 bmc 2.585
  info depth 3 seldepth 3 multipv 1 score cp 93 nodes 298 nps 59600 time 5 pv e7e5 d2d4 g8f6 bmc 4.33645
  info depth 4 seldepth 4 multipv 1 score cp 41 nodes 503 nps 71857 time 7 pv e7e5 b1c3 g8f6 d2d4 bmc 2.24194
  info depth 5 seldepth 5 multipv 1 score cp 78 nodes 754 nps 83777 time 9 pv g8f6 b1c3 c7c6 bmc 2.15908
  info depth 6 seldepth 6 multipv 1 score cp 105 nodes 894 nps 89400 time 10 pv g8f6 b1c3 c7c6 b2b3 bmc 1.11625
  ...
  info depth 11 seldepth 14 multipv 1 score cp 111 nodes 58685 nps 413274 time 142 pv e7e5 d2d4 g8f6 b1c3 b8c6 c3d5 f8e7 f1b5 f6d5 f3d5 e8g8 b5c6 bmc 0.55823
  info depth 12 seldepth 17 multipv 1 score cp 111 nodes 104872 nps 448170 time 234 pv g8f6 d2d4 e7e5 b1c3 b8c6 c3d5 f6d5 f3d5 d8e7 g1f3 e5e4 f3g5 f7f5 bmc 1.2886
  bestmove g8f6 ponder d2d4
  
  </code></pre>
  <p>Interestingly by depth 12 the calculate all-in-one-go is actually testing fewer nodes.  The inflection point for this particular position is between move 8 and , which makes sense because the shallow calculation only went up to depth 8.  Beyond that depth it would seem stockfish is having to backtrack to broaden the tree.</p>
  <p>This is what I had expected and seems like a logical way for stockfish to operate.  But for a stockfish nube like myself it is nice to have it confirmed.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-01-30T06:02:58.800Z
Answers.LastActivityDate: 2021-01-30T06:02:58.800Z
Answers.UserDisplayName: honkskillet
Answers.Body: <p><strong>UCI protocol</strong></p>
  <p>Based on your answer, it looks like there is a typo and a misunderstanding.</p>
  <p>The typo: It should be <code>position ... moves</code>, not <code>position ... move</code>.</p>
  <p>The misunderstanding: The UCI protocol is stateless in the sense that you need to give the entire list of moves leading to the intended position every time, or the position itself.</p>
  <p>Examples:</p>
  <ul>
  <li><p><code>position startpos moves d1b1</code> is invalid, because <code>d1b1</code> is not a legal move in the starting position.</p>
  </li>
  <li><p><code>position fen 3rr1k1/1b3p1p/6p1/pp1p3B/3N1P2/P3P2P/1p4P1/1R3RK1 b - - 1 28</code> is valid</p>
  </li>
  <li><p><code>position startpos moves e2e3 d7d6 d1f3 b8d7 f1c4 e7e6 d2d4 d6d5 c4d3 g8f6 c2c4 f8b4 c1d2 b4d2 b1d2 d5c4 d2c4 e8g8 c4e5 d7e5 d4e5 f6d5 f3e4 g7g6 g1f3 c7c6 e1g1 b7b5 a1d1 a7a5 a2a3 c8a6 f3d4 c6c5 d4c6 d8c7 e4d5 e6d5 c6d4 c7e5 d4f3 e5h5 h2h3 a6b7 d3e2 c5c4 f3d4 a8d8 e2f3 f8e8 f3h5 c4c3 f2f4 c3b2 d1b1</code> is valid and sets up the same position</p>
  </li>
  <li><p><code>position startpos moves e2e3</code> followed by <code>position startpos moves d7d6</code> is invalid, because <code>d7d6</code> is not a legal move in the starting position.</p>
  </li>
  </ul>
  <p><strong>Differences between fen and moves</strong></p>
  <p>It's up to the engine if it can do something useful with the list of moves. For Stockfish, it's almost the same as not having the list, with no difference in efficiency. But having the list of moves informs Stockfish about possible repetitions, so it can avoid or aim for repeating an earlier position three times.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-01-27T18:01:22.693Z
Answers.Text: But Stockfish is stateful and it doesn't matter if you send it a (properly formatted) 'position moves ...' or 'position fen ...', right?
Answers.UserDisplayName: honkskillet
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-01-30T05:03:14.880Z
Answers.Text: should that be 'position startpos moves ....' ?
Answers.UserDisplayName: honkskillet
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-01-31T02:12:57.467Z
Answers.Text: @honkskillet Yes, fixed.
Answers.UserDisplayName: Niklas
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-01-27T08:59:16.653Z
Answers.LastActivityDate: 2021-01-31T02:12:32.553Z
Answers.LastEditDate: 2021-01-31T02:12:32.553Z
Answers.UserDisplayName: Niklas
Answers.Body: <p><strong>EDIT</strong></p>
  <p>I will leave the below incorrect answer in case others make the same mistake I did.  When using <code>position moves</code> (not position move), you have to provide the entire move list, not just the most recent move.</p>
  <hr />
  <p>To try to answer the first part of my question, I analyze a game where first time through I used <code>position move the-move</code> and the second time through I used 'position fen the-fen-after-the-move'.</p>
  <p>Here is what I got, through depth of 4...</p>
  <pre><code>||Move #55 : 1. e3 d6 2. Qf3 Nd7 3. Bc4 e6 4. d4 d5 5. Bd3 Ngf6 6. c4 Bb4+ 7. Bd2 Bxd2+ 8. Nxd2 dxc4 9. Nxc4 O-O 10. Ne5 Nxe5 11. dxe5 Nd5 12. Qe4 g6 13. Nf3 c6 14. O-O b5 15. Rad1 a5 16. a3 Ba6 17. Nd4 c5 18. Nc6 Qc7 19. Qxd5 exd5 20. Nd4 Qxe5 21. Nf3 Qh5 22. h3 Bb7 23. Be2 c4 24. Nd4 Rad8 25. Bf3 Rfe8 26. Bxh5 c3 27. f4 cxb2 28. Rb1
  Sending to Stockfish: position move d1b1
  Sending to Stockfish: go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 56 nodes 63 nps 63000 time 1 pv g1f3
  info depth 1 seldepth 1 multipv 2 score cp 44 nodes 63 nps 63000 time 1 pv d2d4
  info depth 1 seldepth 1 multipv 3 score cp 36 nodes 63 nps 63000 time 1 pv e2e4
  info depth 2 seldepth 2 multipv 1 score cp 56 nodes 130 nps 130000 time 1 pv g1f3 g8f6
  info depth 2 seldepth 2 multipv 2 score cp 44 nodes 130 nps 130000 time 1 pv d2d4 d7d5
  info depth 2 seldepth 2 multipv 3 score cp 36 nodes 130 nps 130000 time 1 pv e2e4 e7e5
  info depth 3 seldepth 3 multipv 1 score cp 56 nodes 205 nps 205000 time 1 pv g1f3 g8f6 e2e3
  info depth 3 seldepth 3 multipv 2 score cp 44 nodes 205 nps 205000 time 1 pv d2d4 d7d5 e2e3
  info depth 3 seldepth 3 multipv 3 score cp 36 nodes 205 nps 205000 time 1 pv e2e4 e7e5 b1c3
  info depth 4 seldepth 4 multipv 1 score cp 56 nodes 291 nps 291000 time 1 pv g1f3 g8f6 e2e3 e7e6
  info depth 4 seldepth 4 multipv 2 score cp 44 nodes 291 nps 291000 time 1 pv d2d4 d7d5 e2e3 e7e6
  info depth 4 seldepth 4 multipv 3 score cp 36 nodes 291 nps 291000 time 1 pv e2e4 e7e5 b1c3 b8c6
  
  
  ||Move #55 : 1. e3 d6 2. Qf3 Nd7 3. Bc4 e6 4. d4 d5 5. Bd3 Ngf6 6. c4 Bb4+ 7. Bd2 Bxd2+ 8. Nxd2 dxc4 9. Nxc4 O-O 10. Ne5 Nxe5 11. dxe5 Nd5 12. Qe4 g6 13. Nf3 c6 14. O-O b5 15. Rad1 a5 16. a3 Ba6 17. Nd4 c5 18. Nc6 Qc7 19. Qxd5 exd5 20. Nd4 Qxe5 21. Nf3 Qh5 22. h3 Bb7 23. Be2 c4 24. Nd4 Rad8 25. Bf3 Rfe8 26. Bxh5 c3 27. f4 cxb2 28. Rb1
  Sending to Stockfish: position fen 3rr1k1/1b3p1p/6p1/pp1p3B/3N1P2/P3P2P/1p4P1/1R3RK1 b - - 1 28
  Sending to Stockfish: go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 44 nodes 122 nps 122000 time 1 pv g6h5 b1b2
  info depth 1 seldepth 1 multipv 2 score cp 40 nodes 122 nps 122000 time 1 pv e8e3 b1b2 g6h5 b2b5 b7a6
  info depth 1 seldepth 1 multipv 3 score cp 9 nodes 122 nps 122000 time 1 pv b7a6
  info depth 2 seldepth 2 multipv 1 score cp 44 nodes 234 nps 234000 time 1 pv g6h5 b1b2
  info depth 2 seldepth 2 multipv 2 score cp 40 nodes 234 nps 234000 time 1 pv e8e3 b1b2 g6h5
  info depth 2 seldepth 2 multipv 3 score cp 13 nodes 234 nps 234000 time 1 pv b7a6 d4c6
  info depth 3 seldepth 3 multipv 1 score cp 48 nodes 444 nps 444000 time 1 pv g6h5 b1b2 b7a6
  info depth 3 seldepth 3 multipv 2 score cp 40 nodes 444 nps 444000 time 1 pv e8e3 b1b2 g6h5
  info depth 3 seldepth 3 multipv 3 score cp -56 nodes 444 nps 444000 time 1 pv b5b4 b1b2 g6h5
  info depth 4 seldepth 4 multipv 1 score cp 44 nodes 691 nps 345500 time 2 pv g6h5 b1b2 b7a6 d4c6
  info depth 4 seldepth 4 multipv 2 score cp 5 nodes 691 nps 345500 time 2 pv e8e3 h5f3 e3d3 b1b2
  info depth 4 seldepth 4 multipv 3 score cp -56 nodes 691 nps 345500 time 2 pv b5b4 b1b2 g6h5 g1f2
  </code></pre>
  <p>Somewhat surprising to me it looks like when you send stockfish a move, the engine examines fewer nodes and the nps (nodes per second?) is less as well.  The centipawn eval is different too indicating that (probably) 'position move ...' already has some knowledge of the position.  BTW, I'm using this javascript WASM implementation of stockfish  <a href="https://github.com/niklasf/stockfish.wasm" rel="nofollow noreferrer">https://github.com/niklasf/stockfish.wasm</a></p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-01-27T11:13:42.517Z
Answers.Text: Take a hard look at the moves it's suggesting in that first batch. `g1f3`, `d2d4`, `e2e4`. Looks like it's looking at the starting position, and not the position you set.
Answers.UserDisplayName: D M
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-01-27T06:55:49.927Z
Answers.LastActivityDate: 2021-01-28T06:03:53.437Z
Answers.LastEditDate: 2021-01-28T06:03:53.437Z
Answers.UserDisplayName: honkskillet
Body: <p>I'm using Stockfish to analyze my blunder filled games for blunders.</p>
  <p>Let's say you send stockfish a FEN for a position and then calculate to a given depth ...</p>
  <pre><code>position fen the-starting-position
  go depth 15
  </code></pre>
  <p>Now let's say a move has been made. I can either send stockfish the move...</p>
  <pre><code>position move the-move
  </code></pre>
  <p>or send it the fen that results from the new move.</p>
  <pre><code>position fen the-postition-after-the-move
  </code></pre>
  <p>Is Stockfish more efficient when you send it to the former?  That is, does it remember the evaluation from the starting position and use it as a starting point for analyzing the new position after you give it a 'position move ...' command?  And does it not remember the prior calculations if you just send it the next FEN in the sequences?</p>
  <hr />
  <p>And a similar question.  If you tell Stockfish to analyze to a depth on a position, and then tell it to analyze to a deeper depth, does it start that second analysis from where the prior analysis stopped?</p>
  <pre><code>position fen the-starting-position
  go depth 15
  go depth 20   
  </code></pre>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-01-27T00:21:53.597Z
Comments.Text: Not an expert so I'm not going to post this as an answer, but I'm pretty certain the answer is yes: that's exactly what hash tables do. Stockfish uses the previous move's principal variation to guide its move ordering (i.e. which move to search first) for this move as well.
Comments.UserDisplayName: Allure
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-01-27T00:32:05.460Z
Comments.Text: Yeah, I'm thinking this is true, both for the subsequent move and for going deeper on the same move.  I also *think* that it doesn't matter if you just send a "position fen fen-after-next-move" vs "position move next-move" but I'd like to be sure.
Comments.UserDisplayName: honkskillet
Tags: <analysis><stockfish><depth>
Title: Stockfish depth calculations
ThreadText: # Stockfish depth calculations
  
  (Asked by: username_0 on 2021-01-26)
  
  I'm using Stockfish to analyze my blunder filled games for blunders.
  Let's say you send stockfish a FEN for a position and then calculate to a given depth ...
  position fen the-starting-position
  go depth 15
  
  Now let's say a move has been made. I can either send stockfish the move...
  position move the-move
  
  or send it the fen that results from the new move.
  position fen the-postition-after-the-move
  
  Is Stockfish more efficient when you send it to the former?  That is, does it remember the evaluation from the starting position and use it as a starting point for analyzing the new position after you give it a 'position move ...' command?  And does it not remember the prior calculations if you just send it the next FEN in the sequences?
  
  And a similar question.  If you tell Stockfish to analyze to a depth on a position, and then tell it to analyze to a deeper depth, does it start that second analysis from where the prior analysis stopped?
  position fen the-starting-position
  go depth 15
  go depth 20
  
  **Tags:** analysis, stockfish, depth
  
  > **Comments:**
  > **username_1**: Not an expert so I'm not going to post this as an answer, but I'm pretty certain the answer is yes: that's exactly what hash tables do. Stockfish uses the previous move's principal variation to guide its move ordering (i.e. which move to search first) for this move as well.  
  > **username_0**: Yeah, I'm thinking this is true, both for the subsequent move and for going deeper on the same move.  I also *think* that it doesn't matter if you just send a "position fen fen-after-next-move" vs "position move next-move" but I'd like to be sure.  
  
  ---
  
  ## 3 answers
  
  ### Answer by username_0 on 2021-01-30. Score: 0 | Accepted answer
  
  OK.  Been playing with stockfish on the command line (and also learned from comments and other answers here).
  
  Does stockfish use calculation from the previously position when you send it a move list?  YES  The engine visits more nodes if you haven't done previous calculation.
  
  ucinewgame
  position startpos moves e2e3 d7d6  
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 275 nodes 31 nps 10333 time 3 pv d1h5 bmc 3
  info depth 2 seldepth 2 multipv 1 score cp 88 nodes 100 nps 25000 time 4 pv d2d4 c7c6 bmc 4.551
  ...
  position startpos moves e2e3 d7d6 d1f3   //make 1 additional move
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 31 nodes 31 nps 10333 time 3 pv b8c6 bmc 2
  info depth 2 seldepth 2 multipv 1 score cp -22 nodes 88 nps 17600 time 5 pv g8h6 d2d4 bmc 2.034
  ...
  ucinewgame  //reset the engine 
  position startpos moves e2e3 d7d6 d1f3  
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 79 nodes 38 nps 12666 time 3 pv g8f6 bmc 5
  info depth 2 seldepth 2 multipv 1 score cp 63 nodes 73 nps 18250 time 4 pv g8f6 b2b3 bmc 2.585
  
  
  Does it have the same behavior if you send a FEN instead of a move list. YES (exception being if repetitions are being evaluated)
  
  ucinewgame
  position fen rnbqkbnr/ppp1pppp/3p4/8/8/4P3/PPPP1PPP/RNBQKBNR w KQkq - 0 2
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 275 nodes 31 nps 10333 time 3 pv d1h5 bmc 3
  info depth 2 seldepth 2 multipv 1 score cp 88 nodes 100 nps 20000 time 5 pv d2d4 c7c6 bmc 4.551
  ...
  position fen rnbqkbnr/ppp1pppp/3p4/8/8/4PQ2/PPPP1PPP/RNB1KBNR b KQkq - 1 2
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 31 nodes 31 nps 10333 time 3 pv b8c6 bmc 2
  info depth 2 seldepth 2 multipv 1 score cp -22 nodes 88 nps 17600 time 5 pv g8h6 d2d4 bmc 2.034
  ...
  ucinewgame
  position fen rnbqkbnr/ppp1pppp/3p4/8/8/4PQ2/PPPP1PPP/RNB1KBNR b KQkq - 1 2
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 79 nodes 38 nps 19000 time 2 pv g8f6 bmc 5
  info depth 2 seldepth 2 multipv 1 score cp 63 nodes 73 nps 18250 time 4 pv g8f6 b2b3 bmc 2.585
  
  
  If you tell stock to analyze a shallower then a deeper depth, does it remember the calculations?  YES
  
  ucinewgame
  position fen rnbqkbnr/ppp1pppp/3p4/8/8/4PQ2/PPPP1PPP/RNB1KBNR b KQkq - 1 2
  go depth 8
  info depth 1 seldepth 1 multipv 1 score cp 79 nodes 38 nps 12666 time 3 pv g8f6 bmc 5
  info depth 2 seldepth 2 multipv 1 score cp 63 nodes 73 nps 14600 time 5 pv g8f6 b2b3 bmc 2.585
  info depth 3 seldepth 3 multipv 1 score cp 93 nodes 298 nps 42571 time 7 pv e7e5 d2d4 g8f6 bmc 4.33645
  info depth 4 seldepth 4 multipv 1 score cp 41 nodes 503 nps 55888 time 9 pv e7e5 b1c3 g8f6 d2d4 bmc 2.24194
  info depth 5 seldepth 5 multipv 1 score cp 78 nodes 754 nps 75400 time 10 pv g8f6 b1c3 c7c6 bmc 2.15908
  info depth 6 seldepth 6 multipv 1 score cp 105 nodes 894 nps 74500 time 12 pv g8f6 b1c3 c7c6 b2b3 bmc 1.11625
  info depth 7 seldepth 7 multipv 1 score cp 121 nodes 1670 nps 111333 time 15 pv g8f6 d2d4 e7e5 d4e5 d6e5 b1c3 bmc 0.577099
  info depth 8 seldepth 8 multipv 1 score cp 166 nodes 2607 nps 144833 time 18 pv g8f6 b1c3 b8c6 d2d4 e7e5 bmc 0.29836
  bestmove g8f6 ponder b1c3
  
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 166 nodes 33 nps 11000 time 3 pv g8f6 bmc 1
  info depth 2 seldepth 2 multipv 1 score cp 166 nodes 62 nps 15500 time 4 pv g8f6 b1c3 bmc 0.517
  info depth 3 seldepth 3 multipv 1 score cp 166 nodes 92 nps 15333 time 6 pv g8f6 b1c3 b8c6 bmc 0.267289
  info depth 4 seldepth 4 multipv 1 score cp 166 nodes 124 nps 17714 time 7 pv g8f6 b1c3 b8c6 d2d4 bmc 0.138188
  info depth 5 seldepth 5 multipv 1 score cp 166 nodes 159 nps 17666 time 9 pv g8f6 b1c3 b8c6 d2d4 e7e5 bmc 0.0714434
  info depth 6 seldepth 6 multipv 1 score cp 179 nodes 344 nps 31272 time 11 pv g8f6 d2d4 e7e5 d4e5 d6e5 bmc 0.0369362
  ...
  info depth 11 seldepth 14 multipv 1 score cp 130 nodes 40317 nps 356787 time 113 pv e7e5 d2d4 g8f6 b1c3 f8e7 c1d2 b8c6 d4e5 c6e5 bmc 1.51836
  info depth 12 seldepth 17 multipv 1 score cp 88 nodes 110722 nps 435913 time 254 pv b8c6 d2d4 g8f6 b1d2 c6b4 f1d3 e7e5 g1e2 b4d3 c2d3 f8e7 e1g1 e8g8 f3g3 e5d4 e2d4 c7c6 bmc 1.78499
  bestmove b8c6 ponder d2d4
  
  ucinewgame
  position fen rnbqkbnr/ppp1pppp/3p4/8/8/4PQ2/PPPP1PPP/RNB1KBNR b KQkq - 1 2
  go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 79 nodes 38 nps 19000 time 2 pv g8f6 bmc 5
  info depth 2 seldepth 2 multipv 1 score cp 63 nodes 73 nps 24333 time 3 pv g8f6 b2b3 bmc 2.585
  info depth 3 seldepth 3 multipv 1 score cp 93 nodes 298 nps 59600 time 5 pv e7e5 d2d4 g8f6 bmc 4.33645
  info depth 4 seldepth 4 multipv 1 score cp 41 nodes 503 nps 71857 time 7 pv e7e5 b1c3 g8f6 d2d4 bmc 2.24194
  info depth 5 seldepth 5 multipv 1 score cp 78 nodes 754 nps 83777 time 9 pv g8f6 b1c3 c7c6 bmc 2.15908
  info depth 6 seldepth 6 multipv 1 score cp 105 nodes 894 nps 89400 time 10 pv g8f6 b1c3 c7c6 b2b3 bmc 1.11625
  ...
  info depth 11 seldepth 14 multipv 1 score cp 111 nodes 58685 nps 413274 time 142 pv e7e5 d2d4 g8f6 b1c3 b8c6 c3d5 f8e7 f1b5 f6d5 f3d5 e8g8 b5c6 bmc 0.55823
  info depth 12 seldepth 17 multipv 1 score cp 111 nodes 104872 nps 448170 time 234 pv g8f6 d2d4 e7e5 b1c3 b8c6 c3d5 f6d5 f3d5 d8e7 g1f3 e5e4 f3g5 f7f5 bmc 1.2886
  bestmove g8f6 ponder d2d4
  
  
  Interestingly by depth 12 the calculate all-in-one-go is actually testing fewer nodes.  The inflection point for this particular position is between move 8 and , which makes sense because the shallow calculation only went up to depth 8.  Beyond that depth it would seem stockfish is having to backtrack to broaden the tree.
  This is what I had expected and seems like a logical way for stockfish to operate.  But for a stockfish nube like myself it is nice to have it confirmed.
  
  
  ---
  
  ### Answer by username_2 on 2021-01-27. Score: 4
  
  **UCI protocol**
  
  Based on your answer, it looks like there is a typo and a misunderstanding.
  
  The typo: It should be `position ... moves`, not `position ... move`.
  
  The misunderstanding: The UCI protocol is stateless in the sense that you need to give the entire list of moves leading to the intended position every time, or the position itself.
  
  Examples:
  
  * `position startpos moves d1b1` is invalid, because `d1b1` is not a legal move in the starting position.
  * `position fen 3rr1k1/1b3p1p/6p1/pp1p3B/3N1P2/P3P2P/1p4P1/1R3RK1 b - - 1 28` is valid
  * `position startpos moves e2e3 d7d6 d1f3 b8d7 f1c4 e7e6 d2d4 d6d5 c4d3 g8f6 c2c4 f8b4 c1d2 b4d2 b1d2 d5c4 d2c4 e8g8 c4e5 d7e5 d4e5 f6d5 f3e4 g7g6 g1f3 c7c6 e1g1 b7b5 a1d1 a7a5 a2a3 c8a6 f3d4 c6c5 d4c6 d8c7 e4d5 e6d5 c6d4 c7e5 d4f3 e5h5 h2h3 a6b7 d3e2 c5c4 f3d4 a8d8 e2f3 f8e8 f3h5 c4c3 f2f4 c3b2 d1b1` is valid and sets up the same position
  * `position startpos moves e2e3` followed by `position startpos moves d7d6` is invalid, because `d7d6` is not a legal move in the starting position.
  
  **Differences between fen and moves**
  
  It's up to the engine if it can do something useful with the list of moves. For Stockfish, it's almost the same as not having the list, with no difference in efficiency. But having the list of moves informs Stockfish about possible repetitions, so it can avoid or aim for repeating an earlier position three times.
  
  > **Comments:**
  > **username_0**: But Stockfish is stateful and it doesn't matter if you send it a (properly formatted) 'position moves ...' or 'position fen ...', right?  
  > **username_0**: should that be 'position startpos moves ....' ?  
  > **username_2**: @username_0 Yes, fixed.  
  
  ---
  
  ### Answer by username_0 on 2021-01-27. Score: 1
  
  EDIT
  I will leave the below incorrect answer in case others make the same mistake I did.  When using position moves (not position move), you have to provide the entire move list, not just the most recent move.
  
  To try to answer the first part of my question, I analyze a game where first time through I used position move the-move and the second time through I used 'position fen the-fen-after-the-move'.
  Here is what I got, through depth of 4...
  ||Move #55 : 1. e3 d6 2. Qf3 Nd7 3. Bc4 e6 4. d4 d5 5. Bd3 Ngf6 6. c4 Bb4+ 7. Bd2 Bxd2+ 8. Nxd2 dxc4 9. Nxc4 O-O 10. Ne5 Nxe5 11. dxe5 Nd5 12. Qe4 g6 13. Nf3 c6 14. O-O b5 15. Rad1 a5 16. a3 Ba6 17. Nd4 c5 18. Nc6 Qc7 19. Qxd5 exd5 20. Nd4 Qxe5 21. Nf3 Qh5 22. h3 Bb7 23. Be2 c4 24. Nd4 Rad8 25. Bf3 Rfe8 26. Bxh5 c3 27. f4 cxb2 28. Rb1
  Sending to Stockfish: position move d1b1
  Sending to Stockfish: go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 56 nodes 63 nps 63000 time 1 pv g1f3
  info depth 1 seldepth 1 multipv 2 score cp 44 nodes 63 nps 63000 time 1 pv d2d4
  info depth 1 seldepth 1 multipv 3 score cp 36 nodes 63 nps 63000 time 1 pv e2e4
  info depth 2 seldepth 2 multipv 1 score cp 56 nodes 130 nps 130000 time 1 pv g1f3 g8f6
  info depth 2 seldepth 2 multipv 2 score cp 44 nodes 130 nps 130000 time 1 pv d2d4 d7d5
  info depth 2 seldepth 2 multipv 3 score cp 36 nodes 130 nps 130000 time 1 pv e2e4 e7e5
  info depth 3 seldepth 3 multipv 1 score cp 56 nodes 205 nps 205000 time 1 pv g1f3 g8f6 e2e3
  info depth 3 seldepth 3 multipv 2 score cp 44 nodes 205 nps 205000 time 1 pv d2d4 d7d5 e2e3
  info depth 3 seldepth 3 multipv 3 score cp 36 nodes 205 nps 205000 time 1 pv e2e4 e7e5 b1c3
  info depth 4 seldepth 4 multipv 1 score cp 56 nodes 291 nps 291000 time 1 pv g1f3 g8f6 e2e3 e7e6
  info depth 4 seldepth 4 multipv 2 score cp 44 nodes 291 nps 291000 time 1 pv d2d4 d7d5 e2e3 e7e6
  info depth 4 seldepth 4 multipv 3 score cp 36 nodes 291 nps 291000 time 1 pv e2e4 e7e5 b1c3 b8c6
  
  
  ||Move #55 : 1. e3 d6 2. Qf3 Nd7 3. Bc4 e6 4. d4 d5 5. Bd3 Ngf6 6. c4 Bb4+ 7. Bd2 Bxd2+ 8. Nxd2 dxc4 9. Nxc4 O-O 10. Ne5 Nxe5 11. dxe5 Nd5 12. Qe4 g6 13. Nf3 c6 14. O-O b5 15. Rad1 a5 16. a3 Ba6 17. Nd4 c5 18. Nc6 Qc7 19. Qxd5 exd5 20. Nd4 Qxe5 21. Nf3 Qh5 22. h3 Bb7 23. Be2 c4 24. Nd4 Rad8 25. Bf3 Rfe8 26. Bxh5 c3 27. f4 cxb2 28. Rb1
  Sending to Stockfish: position fen 3rr1k1/1b3p1p/6p1/pp1p3B/3N1P2/P3P2P/1p4P1/1R3RK1 b - - 1 28
  Sending to Stockfish: go depth 12
  info depth 1 seldepth 1 multipv 1 score cp 44 nodes 122 nps 122000 time 1 pv g6h5 b1b2
  info depth 1 seldepth 1 multipv 2 score cp 40 nodes 122 nps 122000 time 1 pv e8e3 b1b2 g6h5 b2b5 b7a6
  info depth 1 seldepth 1 multipv 3 score cp 9 nodes 122 nps 122000 time 1 pv b7a6
  info depth 2 seldepth 2 multipv 1 score cp 44 nodes 234 nps 234000 time 1 pv g6h5 b1b2
  info depth 2 seldepth 2 multipv 2 score cp 40 nodes 234 nps 234000 time 1 pv e8e3 b1b2 g6h5
  info depth 2 seldepth 2 multipv 3 score cp 13 nodes 234 nps 234000 time 1 pv b7a6 d4c6
  info depth 3 seldepth 3 multipv 1 score cp 48 nodes 444 nps 444000 time 1 pv g6h5 b1b2 b7a6
  info depth 3 seldepth 3 multipv 2 score cp 40 nodes 444 nps 444000 time 1 pv e8e3 b1b2 g6h5
  info depth 3 seldepth 3 multipv 3 score cp -56 nodes 444 nps 444000 time 1 pv b5b4 b1b2 g6h5
  info depth 4 seldepth 4 multipv 1 score cp 44 nodes 691 nps 345500 time 2 pv g6h5 b1b2 b7a6 d4c6
  info depth 4 seldepth 4 multipv 2 score cp 5 nodes 691 nps 345500 time 2 pv e8e3 h5f3 e3d3 b1b2
  info depth 4 seldepth 4 multipv 3 score cp -56 nodes 691 nps 345500 time 2 pv b5b4 b1b2 g6h5 g1f2
  
  Somewhat surprising to me it looks like when you send stockfish a move, the engine examines fewer nodes and the nps (nodes per second?) is less as well.  The centipawn eval is different too indicating that (probably) 'position move ...' already has some knowledge of the position.  BTW, I'm using this javascript WASM implementation of stockfish  https://github.com/niklasf/stockfish.wasm
  
  > **Comments:**
  > **username_3**: Take a hard look at the moves it's suggesting in that first batch. `g1f3`, `d2d4`, `e2e4`. Looks like it's looking at the starting position, and not the position you set.  
  
  ---
  
  