mstembera and Joost VandeVondele
29295ecfd3
Simplify EVASIONS scoring
...
remove some multipliers & adjust, doesn't change the move ordering
STC https://tests.stockfishchess.org/tests/view/6325c1c9b9c0caa5f4a759ae
LLR: 2.94 (-2.94,2.94) <-1.75,0.25>
Total: 192760 W: 51528 L: 51482 D: 89750
Ptnml(0-2): 642, 20490, 54148, 20380, 720
Credit to locutus2
closes https://github.com/official-stockfish/Stockfish/pull/4171
No functional change
2022-09-27 07:44:46 +02:00
mstembera and Joost VandeVondele
dc0c441b7c
Prioritize checks in movepicker
...
give a little bonus for moving pieces to squares where they give check
STC: https://tests.stockfishchess.org/tests/view/631da742162491686d2e40b5
LLR: 2.95 (-2.94,2.94) <0.00,2.00>
Total: 80072 W: 21753 L: 21368 D: 36951
Ptnml(0-2): 421, 8876, 21075, 9225, 439
LTC: https://tests.stockfishchess.org/tests/view/631dd9e6b85daa436625de1d
LLR: 2.95 (-2.94,2.94) <0.50,2.50>
Total: 263480 W: 70916 L: 70158 D: 122406
Ptnml(0-2): 322, 26156, 78029, 26908, 325
similar ideas have been tested by Viz and Guenther
closes https://github.com/official-stockfish/Stockfish/pull/4165
bench: 4326572
2022-09-17 09:30:52 +02:00
mstembera and Joost VandeVondele
82bb21dc7a
Optimize AVX2 path in NNUE evaluation
...
always selecting AffineTransform specialization for small inputs.
A related patch was tested as
Initially tested as a simplification
STC https://tests.stockfishchess.org/tests/view/6317c3f437f41b13973d6dff
LLR: 2.95 (-2.94,2.94) <-1.75,0.25>
Total: 58072 W: 15619 L: 15425 D: 27028
Ptnml(0-2): 241, 6191, 15992, 6357, 255
Elo gain speedup test
STC https://tests.stockfishchess.org/tests/view/63181c1b37f41b13973d79dc
LLR: 2.94 (-2.94,2.94) <0.00,2.00>
Total: 184496 W: 49922 L: 49401 D: 85173
Ptnml(0-2): 851, 19397, 51208, 19964, 828
and this patch gained in testing
speedup = +0.0071
P(speedup > 0) = 1.0000
on CPU: 16 x AMD Ryzen 9 3950X
closes https://github.com/official-stockfish/Stockfish/pull/4158
No functional change
2022-09-11 14:19:57 +02:00
mstembera and Joost VandeVondele
02ef1f4496
Make key_after() more consistent with key()
...
STC: https://tests.stockfishchess.org/tests/view/62f8547123d42b50a8dac674
LLR: 2.95 (-2.94,2.94) <0.00,2.00>
Total: 176640 W: 47699 L: 47189 D: 81752
Ptnml(0-2): 776, 18599, 49129, 18971, 845
A bug fix plus non functional speed optimization. Position::key_after(Move m) is now
consistent with Position::key() thus prefetching correct TT entries which speeds things up.
Related PR #3759
closes https://github.com/official-stockfish/Stockfish/pull/4130
No functional change
2022-08-17 19:56:15 +02:00
mstembera and Joost VandeVondele
4568f6369b
Report longest PV lines for multithreaded search
...
In case several threads find the same bestmove,
report the longest PV line found.
closes https://github.com/official-stockfish/Stockfish/pull/4126
No functional change.
2022-08-15 17:46:27 +02:00
mstembera and Joost VandeVondele
2d5dcf3d18
Minor simplifications and cleanup in search
...
STC: https://tests.stockfishchess.org/tests/view/629d6775593a4a9b6482c1ec
LLR: 2.93 (-2.94,2.94) <-2.25,0.25>
Total: 77416 W: 20683 L: 20589 D: 36144
Ptnml(0-2): 317, 8690, 20620, 8744, 337
LTC: https://tests.stockfishchess.org/tests/view/629db4be593a4a9b6482ceef
LLR: 2.95 (-2.94,2.94) <-2.25,0.25>
Total: 106544 W: 28752 L: 28705 D: 49087
Ptnml(0-2): 97, 10692, 31641, 10751, 91
closes https://github.com/official-stockfish/Stockfish/pull/4059
Bench: 5913510
2022-06-16 07:06:43 +02:00
mstembera and Joost VandeVondele
9f6bcb38c0
Minor cleanups
...
simplify and relocate to position.cpp some of the recent threat calculations used in the movepicker.
passed STC:
https://tests.stockfishchess.org/tests/view/62468c301f682ea45ce3b3b9
LLR: 2.96 (-2.94,2.94) <-2.25,0.25>
Total: 76544 W: 20247 L: 20152 D: 36145
Ptnml(0-2): 327, 8113, 21317, 8168, 347
closes https://github.com/official-stockfish/Stockfish/pull/3972
No functional change
2022-04-01 10:55:11 +02:00
mstembera and Stéphane Nicolet
f3a2296e59
Small cleanups (2)
...
- fix a small compile error under MSVC
- improve sigmoid comment and assert
- fix formatting in README.md
closes https://github.com/official-stockfish/Stockfish/pull/3960
No functional change
2022-03-13 08:17:02 +01:00
mstembera and Joost VandeVondele
5f781d366e
Clean up and simplify some nnue code.
...
Remove some unnecessary code and it's execution during inference. Also the change on line 49 in nnue_architecture.h results in a more efficient SIMD code path through ClippedReLU::propagate().
passed STC:
https://tests.stockfishchess.org/tests/view/6217d3bfda649bba32ef25d5
LLR: 2.94 (-2.94,2.94) <-2.25,0.25>
Total: 12056 W: 3281 L: 3092 D: 5683
Ptnml(0-2): 55, 1213, 3312, 1384, 64
passed STC SMP:
https://tests.stockfishchess.org/tests/view/6217f344da649bba32ef295e
LLR: 2.94 (-2.94,2.94) <-2.25,0.25>
Total: 27376 W: 7295 L: 7137 D: 12944
Ptnml(0-2): 52, 2859, 7715, 3003, 59
closes https://github.com/official-stockfish/Stockfish/pull/3944
No functional change
bench: 6820724
2022-02-25 08:37:57 +01:00
mstembera and Stéphane Nicolet
385deefd80
Fix sometimes incorrect key for prefetches
...
STC
https://tests.stockfishchess.org/tests/view/61737b4f6ce927be32558401
LLR: 2.95 (-2.94,2.94) <-2.50,0.50>
Total: 138712 W: 34914 L: 34942 D: 68856
Ptnml(0-2): 421, 14817, 38894, 14817, 407
Very minor tweak since Position::key() depends on the 50 move rule counter.
Comments: https://github.com/mstembera/Stockfish/commit/cddde31eed505cdf0c4fc8ff96b89f6e39c797e1
closes https://github.com/official-stockfish/Stockfish/pull/3759
No functional change
2021-10-25 12:26:44 +02:00
mstembera and Joost VandeVondele
644f6d4790
Simplify away ValueListInserter
...
plus minor cleanups
STC: https://tests.stockfishchess.org/tests/view/616f059b40f619782fd4f73f
LLR: 2.94 (-2.94,2.94) <-2.50,0.50>
Total: 84992 W: 21244 L: 21197 D: 42551
Ptnml(0-2): 279, 9005, 23868, 9078, 266
closes https://github.com/official-stockfish/Stockfish/pull/3749
No functional change
2021-10-23 12:21:17 +02:00
mstembera and Joost VandeVondele
62a0b65ff8
Simplify and unify FRC cornered bishop.
...
tested locally as fishtest doesn't support FRC:
STC NNUE
9646 - 9647 - 20707 [0.500] 40000 -0.0 +/- 2.4, LOS: 49.7 %, DrawRatio: 51.8 %
STC classical
9678 - 9609 - 20713 [0.501] 40000 0.6 +/- 2.4, LOS: 69.0 %, DrawRatio: 51.8 %
and verified independently:
Score of master vs patch: 6463 - 6580 - 34957 [0.499] 48000
closes https://github.com/official-stockfish/Stockfish/pull/3413
bench: 4321677
2021-03-27 17:03:10 +01:00
mstembera and Joost VandeVondele
d862ba4069
AVX512, AVX2 and SSSE3 speedups
...
Improves throughput by summing 2 intermediate dot products using 16 bit addition before upconverting to 32 bit.
Potential saturation is detected and the code-path is avoided in this case.
The saturation can't happen with the current nets,
but nets can be constructed that trigger this check.
STC https://tests.stockfishchess.org/tests/view/5fd40a861ac1691201888479
LLR: 2.94 (-2.94,2.94) {-0.25,1.25}
Total: 25544 W: 2451 L: 2296 D: 20797
Ptnml(0-2): 92, 1761, 8925, 1888, 106
about 5% speedup
closes https://github.com/official-stockfish/Stockfish/pull/3261
No functional change
2020-12-14 07:46:15 +01:00
mstembera and Joost VandeVondele
9b7983a452
Cleaned up MakeIndex()
...
The index order in kpp_board_index[][] is reversed to be more optimal for the access pattern
STC https://tests.stockfishchess.org/tests/view/5fbd74f967cbf42301d6b24f
LLR: 2.93 (-2.94,2.94) {-1.25,0.25}
Total: 27504 W: 2686 L: 2607 D: 22211
Ptnml(0-2): 84, 2001, 9526, 2034, 107
closes https://github.com/official-stockfish/Stockfish/pull/3233
No functional change
2020-11-29 16:36:49 +01:00
mstembera and Stéphane Nicolet
dfc7f88650
Update default net to nn-cb26f10b1fd9.nnue
...
Result of https://tests.stockfishchess.org/tests/view/5f9a06796a2c112b60691c0f tuning.
STC
LLR: 2.94 (-2.94,2.94) {-0.25,1.25}
Total: 53712 W: 5776 L: 5561 D: 42375
Ptnml(0-2): 253, 4282, 17604, 4431, 286
https://tests.stockfishchess.org/tests/view/5f9c7bbc6a2c112b60691d4d
LTC
LLR: 2.97 (-2.94,2.94) {0.25,1.25}
Total: 80184 W: 4007 L: 3739 D: 72438
Ptnml(0-2): 58, 3302, 33130, 3518, 84
https://tests.stockfishchess.org/tests/view/5f9d01f06a2c112b60691d87
closes https://github.com/official-stockfish/Stockfish/pull/3209
bench: 3517795
2020-11-01 08:02:40 +01:00
mstembera and Stéphane Nicolet
281d520cc2
Update default net to nn-eba324f53044.nnue
...
The new net is based on the previous net 04cf2b4ed1da but with the biases
for the 1st hidden layer tuned SPSA, see the SPSA session on fishtest there:
https://tests.stockfishchess.org/tests/view/5f875213dcdad978fe8c5211
Thanks to @vondele for writing out the net, see discussion in this thread:
https://github.com/mstembera/Stockfish/commit/432da86721647dff1d9426a7cdcfd2dbada8155e
Passed STC:
LLR: 2.94 (-2.94,2.94) {-0.25,1.25}
Total: 15000 W: 1640 L: 1483 D: 11877
Ptnml(0-2): 50, 1183, 4908, 1278, 81
https://tests.stockfishchess.org/tests/view/5f8955e20fea1a44ec4f0a5d
Passed LTC:
LLR: 2.96 (-2.94,2.94) {0.25,1.25}
Total: 81272 W: 3948 L: 3682 D: 73642
Ptnml(0-2): 64, 3194, 33856, 3456, 66
https://tests.stockfishchess.org/tests/view/5f89e8efeae8a6e60644d6e7
closes https://github.com/official-stockfish/Stockfish/pull/3187
Bench: 3762411
2020-10-18 13:43:26 +02:00
mstembera and Joost VandeVondele
a057f170c6
Use llvm linker with clang on windows for LTO.
...
other linkers might fail to link during the LTO phase.
The linker might have to be installed using
`pacman -Syu mingw-w64-x86_64-lld`
closes https://github.com/official-stockfish/Stockfish/pull/3084
No functional change.
2020-09-01 09:26:08 +02:00
mstembera and Joost VandeVondele
a0afe32d16
Use stable sort to make sure bench with TB yields same results everywhere.
...
std::sort() is not stable so different implementations can produce different results:
use the stable version instead.
Observed for '8/6k1/5r2/8/8/8/1K6/Q7 w - - 0 1' yielding different bench results for gcc and MSVC
and 3-4-5 syzygy TB prior to this patch.
closes https://github.com/official-stockfish/Stockfish/pull/3083
No functional change.
2020-09-01 09:25:44 +02:00
mstembera and Joost VandeVondele
530fccbf27
Allow for VNNI256 compilation with g++-8
...
explicitly pass needed -mavx512f -mavx512bw flags
closes https://github.com/official-stockfish/Stockfish/pull/3061
No functional change
2020-08-24 12:43:39 +02:00
mstembera and Joost VandeVondele
701b2427bd
Support VNNI on 256bit vectors
...
due to downclocking on current chips (tested up to cascade lake)
supporting avx512 and vnni512, it is better to use avx2 or vnni256
in multithreaded (in particular hyperthreaded) engine use.
In single threaded use, the picture is different.
gcc compilation for vnni256 requires a toolchain for gcc >= 9.
closes https://github.com/official-stockfish/Stockfish/pull/3038
No functional change
2020-08-24 12:03:04 +02:00
mstembera and Joost VandeVondele
1bcc981a5a
Fallback to NNUE
...
If the classical eval ends up much smaller than estimated fall back to NNUE.
Also use multiply instead of divide for the threshold comparison for smoother transitions without rounding.
STC https://tests.stockfishchess.org/tests/view/5f3a5011b38d442594aabdfe
LLR: 2.96 (-2.94,2.94) {-0.50,1.50}
Total: 57352 W: 6325 L: 6135 D: 44892
Ptnml(0-2): 277, 4748, 18482, 4846, 323
LTC https://tests.stockfishchess.org/tests/view/5f3aee9db38d442594aabe82
LLR: 2.95 (-2.94,2.94) {0.25,1.75}
Total: 16232 W: 897 L: 781 D: 14554
Ptnml(0-2): 19, 679, 6616, 771, 31
closes https://github.com/official-stockfish/Stockfish/pull/3023
bench: 4026216
-----
Recommended net: https://tests.stockfishchess.org/api/nn/nn-82215d0fd0df.nnue
2020-08-18 08:36:57 +02:00
mstembera and Joost VandeVondele
6eb186c97e
Try to match relative magnitude of NNUE eval to classical
...
The idea is that since we are mixing NNUE and classical evals matching their magnitudes closer allows for better comparisons.
STC https://tests.stockfishchess.org/tests/view/5f35a65411a9b1a1dbf18e2b
LLR: 2.94 (-2.94,2.94) {-0.50,1.50}
Total: 9840 W: 1150 L: 1027 D: 7663
Ptnml(0-2): 49, 772, 3175, 855, 69
LTC https://tests.stockfishchess.org/tests/view/5f35bcbe11a9b1a1dbf18e47
LLR: 2.93 (-2.94,2.94) {0.25,1.75}
Total: 44424 W: 2492 L: 2294 D: 39638
Ptnml(0-2): 42, 2015, 17915, 2183, 57
also corrects the location to clamp the evaluation (non-function on bench).
closes https://github.com/official-stockfish/Stockfish/pull/3003
bench: 3905447
2020-08-14 16:39:52 +02:00
mstembera and Joost VandeVondele
dd63b98fb0
Add support for VNNI
...
Adds support for Vector Neural Network Instructions (avx512), as available on Intel Cascade Lake
The _mm512_dpbusd_epi32() intrinsic (vpdpbusd instruction) is taylor made for NNUE.
on a cascade lake CPU (AWS C5.24x.large, gcc 10) NNUE eval is at roughly 78% nps of classical
(single core test)
bench 1024 1 24 default depth:
target classical NNUE ratio
vnni 2207232 1725987 78.20
avx512 2216789 1671734 75.41
avx2 2194006 1611263 73.44
modern 2185001 1352469 61.90
closes https://github.com/official-stockfish/Stockfish/pull/2987
No functional change
2020-08-13 07:39:52 +02:00
mstembera and Joost VandeVondele
f46c73040c
Fix AVX512 build with older compilers
...
avoids an intrinsic that is missing in gcc < 10.
For this target, might trigger another gcc bug on windows that
requires up-to-date gcc 8, 9, or 10, or usage of clang.
Fixes https://github.com/official-stockfish/Stockfish/issues/2975
closes https://github.com/official-stockfish/Stockfish/pull/2976
No functional change
2020-08-11 08:17:03 +02:00
mstembera and Joost VandeVondele
f948cd008d
Cleanup and optimize SSE/AVX code
...
AVX512 +4% faster
AVX2 +1% faster
SSSE3 +5% faster
passed non-regression STC:
STC https://tests.stockfishchess.org/tests/view/5f31249f90816720665374f6
LLR: 2.96 (-2.94,2.94) {-1.50,0.50}
Total: 17576 W: 2344 L: 2245 D: 12987
Ptnml(0-2): 127, 1570, 5292, 1675, 124
closes https://github.com/official-stockfish/Stockfish/pull/2962
No functional change
2020-08-10 14:38:17 +02:00
mstembera and Joost VandeVondele
875183b310
Workaround using unaligned loads for gcc < 9
...
despite usage of alignas, the generated (avx2/avx512) code with older compilers needs to use
unaligned loads with older gcc (e.g. confirmed crash with gcc 7.3/mingw on abrok).
Better performance thus requires gcc >= 9 on hardware supporting avx2/avx512
closes https://github.com/official-stockfish/Stockfish/pull/2969
No functional change
2020-08-10 11:12:35 +02:00
mstembera and Joost VandeVondele
c3092c54bc
Multiple lazy stages.
...
An extension of the lazy eval idea: when the score is sufficiently large
we now skip more granular parts of the eval.
Inspired by an original patch by Moez Jellouli
https://tests.stockfishchess.org/tests/view/5f03b2a159f6f03532894529
Credit to him!
STC https://tests.stockfishchess.org/tests/view/5f0a862c59f6f03532894924
LLR: 2.95 (-2.94,2.94) {-0.50,1.50}
Total: 13504 W: 2684 L: 2472 D: 8348
Ptnml(0-2): 229, 1496, 3111, 1666, 250
LTC https://tests.stockfishchess.org/tests/view/5f0ac0e159f6f0353289495b
LLR: 2.94 (-2.94,2.94) {0.25,1.75}
Total: 31312 W: 3926 L: 3677 D: 23709
Ptnml(0-2): 185, 2773, 9509, 2986, 203
closes https://github.com/official-stockfish/Stockfish/pull/2814
bench: 4541608
2020-07-17 20:24:02 +02:00
mstembera and Joost VandeVondele
bf5ce1c214
Simplify make_promotions()
...
Remove special case handling of QUIET_CHECKS in make_promotions()
STC https://tests.stockfishchess.org/tests/view/5f055dbb59f6f035328945fb
LLR: 2.98 (-2.94,2.94) {-1.50,0.50}
Total: 42808 W: 8177 L: 8054 D: 26577
Ptnml(0-2): 665, 4890, 10201, 4953, 695
LTC https://tests.stockfishchess.org/tests/view/5f06231a59f6f03532894661
LLR: 2.96 (-2.94,2.94) {-1.50,0.50}
Total: 9616 W: 1214 L: 1111 D: 7291
Ptnml(0-2): 53, 821, 2965, 908, 61
closes https://github.com/official-stockfish/Stockfish/pull/2800
Bench: 4576410
2020-07-09 21:59:32 +02:00
mstembera and Joost VandeVondele
547c4a216a
Remove old zobrist trick for castling rights
...
Removes an 8 year old micro optimization aimed at 32-bit architectures
because back then doing an xor of a Key could not be done in one instruction.
See original commit here 821e1c7
STC https://tests.stockfishchess.org/tests/view/5ef5833dde213bf647527d0c
LLR: 2.94 (-2.94,2.94) {-1.50,0.50}
Total: 162648 W: 31053 L: 31097 D: 100498
Ptnml(0-2): 2841, 18966, 37715, 19000, 2802
LTC https://tests.stockfishchess.org/tests/view/5ef7b1bbf993893290cc1489
LLR: 2.93 (-2.94,2.94) {-1.50,0.50}
Total: 62360 W: 7617 L: 7586 D: 47157
Ptnml(0-2): 423, 5662, 18994, 5663, 438
closes https://github.com/official-stockfish/Stockfish/pull/2775
bench: 4591425
2020-06-28 22:00:19 +02:00
mstembera and Joost VandeVondele
de24fcebc8
Fix fragile code to use proper random 64 bit keys.
...
This fixes an old issue where we want to make a position unique but only
change a small number of bits in the key instead of all 64 of them randomly.
This is fragile and can lead to non uniqueness issues in the TT.
Key make_key(uint64_t seed) takes any integer and produces a unique random 64 bit key.
It is computationally efficient and is based on a congruential pseudo random number
generator using well tested constants by Donald Knuth
(see https://en.wikipedia.org/wiki/Linear_congruential_generator )
STC https://tests.stockfishchess.org/tests/view/5ef6c78f761b685b4c724bb6
LLR: 2.95 (-2.94,2.94) {-1.50,0.50}
Total: 154320 W: 29343 L: 29376 D: 95601
Ptnml(0-2): 2543, 18170, 35891, 17889, 2667
LTC https://tests.stockfishchess.org/tests/view/5ef7d1a9020eec13834a940e
LLR: 2.95 (-2.94,2.94) {-1.50,0.50}
Total: 53488 W: 6629 L: 6584 D: 40275
Ptnml(0-2): 372, 4878, 16183, 4955, 356
closes https://github.com/official-stockfish/Stockfish/pull/2773
bench: 4626776
2020-06-28 21:57:37 +02:00
mstembera and Joost VandeVondele
1ea488d34c
Use 128 bit multiply for TT index
...
Remove super cluster stuff from TT and just use a 128 bit multiply.
STC https://tests.stockfishchess.org/tests/view/5ee719b3aae8aec816ab7548
LLR: 2.94 (-2.94,2.94) {-1.50,0.50}
Total: 12736 W: 2502 L: 2333 D: 7901
Ptnml(0-2): 191, 1452, 2944, 1559, 222
LTC https://tests.stockfishchess.org/tests/view/5ee732d1aae8aec816ab7556
LLR: 2.93 (-2.94,2.94) {-1.50,0.50}
Total: 27584 W: 3431 L: 3350 D: 20803
Ptnml(0-2): 173, 2500, 8400, 2511, 208
Scheme back to being derived from https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/
Also the default optimized version of the index calculation now uses fewer instructions.
https://godbolt.org/z/Tktxbv
Might benefit from mulx (requires -mbmi2)
closes https://github.com/official-stockfish/Stockfish/pull/2744
bench: 4320954
2020-06-17 07:32:16 +02:00
mstembera and Joost VandeVondele
84f3bf594d
No voting for TB loss / mate.
...
Just as we pick the shortest mate also make sure we stave off mate as long as possible.
https://github.com/official-stockfish/Stockfish/pull/2603
bench: 5138771
2020-04-02 14:54:47 +02:00
mstembera and Stéphane Nicolet
5d1568632c
Remove temporary shelter array
...
Remove temporary array of shelters and avoid iterating over it each time to find
if the shelter values after castling are better than the current value.
Work done on top of https://github.com/official-stockfish/Stockfish/pull/2277
Speed benchmark did not measure any difference.
No functional change
2019-10-05 10:45:37 +02:00
mstembera and Stéphane Nicolet
9d3a2ecaa2
Bug fix: always choose shortest mate in multithread mode
...
In current master, with the voting scheme the best thread selection may
pick a non mate or not the shortest mate thread. This patch fixes this bug.
Formatting suggestion by Jörg Oster.
Related past pull requests:
https://github.com/official-stockfish/Stockfish/pull/1074
https://github.com/official-stockfish/Stockfish/pull/1215
Passed a [-4..0] verification test with 3 threads:
LLR: 2.95 (-2.94,2.94) [-4.00,0.00]
Total: 57158 W: 11374 L: 11424 D: 34360
http://tests.stockfishchess.org/tests/view/5d22deb30ebc5925cf0caefd
Closes https://github.com/official-stockfish/Stockfish/pull/2226
No functional change (in single threaded mode)
----------------------------------------------------
Comment by Jörg Oster
Just one sample output to demonstrate the effect of this patch.
5 Threads, 1 GB Hash
+---+---+---+---+---+---+---+---+
| r | | b | | | r | k | |
+---+---+---+---+---+---+---+---+
| | | | n | | p | b | |
+---+---+---+---+---+---+---+---+
| | | p | | p | | p | |
+---+---+---+---+---+---+---+---+
| p | | | | | | P | |
+---+---+---+---+---+---+---+---+
| P | p | | | B | | N | Q |
+---+---+---+---+---+---+---+---+
| | q | | | | | P | |
+---+---+---+---+---+---+---+---+
| | | R | | | P | | |
+---+---+---+---+---+---+---+---+
| | | | R | | | K | |
+---+---+---+---+---+---+---+---+
Fen: r1b2rk1/3n1pb1/2p1p1p1/p5P1/Pp2B1NQ/1q4P1/2R2P2/3R2K1 w - - 8 34
Key: 38B4CA1067D4F477
Checkers:
ucinewgame
isready
readyok
go mate 17 searchmoves d1d7
info depth 65 seldepth 36 multipv 1 score mate 18 nodes 785875935 nps 8650448 hashfull 1000 tbhits 0 time 90848 pv d1d7 c8d7 g4f6 g7f6 g5f6 b3a3 g1g2 a3a1 h4g5 a1f6 g5f6 e6e5 c2c1 d7h3 g2h3 a8a6 h3g2 c6c5 f6a6 g8g7 c1c5 f7f6 a6e6 f8f7 c5c8 f6f5 e4d5 g7h6 e6f7 f5f4 f7e7 f4f3 d5f3 b4b3 c8h8
info depth 63 seldepth 36 multipv 1 score mate 17 nodes 785875935 nps 8650448 hashfull 1000 tbhits 0 time 90848 pv d1d7 c8d7 g4f6 g7f6 g5f6 b3a3 g1g2 a3a1 h4g5 a1f6 g5f6 e6e5 c2c1 d7h3 g2h3 a8a6 c1d1 b4b3 h3g2 c6c5 f6a6 g8g7 d1d7 g7g8 a6f6 b3b2 e4g6 b2b1q g6f7 f8f7 f6f7 g8h8 f7g7
bestmove d1d7 ponder c8d7
2019-07-26 03:33:32 +02:00
mstembera and Stéphane Nicolet
d07e782e22
Minor cleanup to recent 'Flag critical search tree in hash table' patch
...
No functional change
2019-01-10 16:36:59 +01:00
mstembera and Stéphane Nicolet
67ae53b020
New voting formula for threads
...
We now use a quadratic formula during the vote for threads
when deciding on which thread to pick a move from.
time control 5+0.05, with 8 threads:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 20202 W: 4031 L: 3813 D: 12358
http://tests.stockfishchess.org/tests/view/5c16c8e60ebc5902ba1223e2
time control 20+0.2, with 8 threads:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 14330 W: 2290 L: 2115 D: 9925
http://tests.stockfishchess.org/tests/view/5c16efca0ebc5902ba122993
20000 games match at time control 5+0.05, with 31 threads:
ELO: 5.63 +-2.8 (95%) LOS: 100.0%
Total: 20000 W: 3539 L: 3215 D: 13246
http://tests.stockfishchess.org/tests/view/5c16f07a0ebc5902ba122a20
Closes https://github.com/official-stockfish/Stockfish/pull/1876
No functional change (in simple thread mode)
2018-12-18 08:51:25 +01:00
mstembera and Stéphane Nicolet
68209c9121
Remove redundant king square parameter
...
We don't need to pass the king square as an explicit parameter to the functions
king_safety() and do_king_safety() since we already pass in the position.
STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 69686 W: 14894 L: 14866 D: 39926
http://tests.stockfishchess.org/tests/view/5be84ac20ebc595e0ae3283c
No functional change.
2018-11-12 19:45:05 +01:00
mstembera and Marco Costalba
542a2b39ed
Small simplification in castling rights
...
There is no need for a special struct with a static member
to generate castling rights.
No functional change.
2018-10-21 08:15:04 +02:00
mstembera and Stéphane Nicolet
745160572f
Fix MSVC error
...
Compiling the current master with MSVC gives the following error:
```
search.cpp(956): error C2660: 'operator *': function does not take 1 arguments
types.h(303): note: see declaration of 'operator *'
```
This was introduced in commit:
https://github.com/official-stockfish/Stockfish/commit/88de112b84a5285c2afb3e075a05c2ab8ad3fd33
We use a suggestion by @vondele to fix the error, thanks!
No functional change.
2018-06-20 05:43:00 +02:00
mstembera and Stéphane Nicolet
e8005ebe56
Fix MSVC errors in tbprobe.cpp
...
Default template parameters values and recursive functions do not play well
together. Fix for below errors that showed up after updating to latest MSVC.
````
tbprobe.cpp(1156): error C2672:
'search': no matching overloaded function found
tbprobe.cpp(1198): error C2783:
'Tablebases::WDLScore `anonymous-namespace'::search(Position &,Tablebases::ProbeState *)':
could not deduce template argument for 'CheckZeroingMoves'
````
Closes https://github.com/official-stockfish/Stockfish/pull/1594
No functional change.
2018-05-16 23:40:23 +02:00
mstembera and Stéphane Nicolet
c163c2fcb0
Include all blockers in king danger
...
Simplification: in king danger, include all blockers and not only pinned
pieces, since blockers enemy pieces can result in discovered checks which
are also bad.
STC http://tests.stockfishchess.org/tests/view/5af35f9f0ebc5968e6523fe9
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 145781 W: 29368 L: 29478 D: 86935
LTC http://tests.stockfishchess.org/tests/view/5af3cb430ebc5968e652401f
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 76398 W: 11272 L: 11232 D: 53894
I also incorrectly scheduled STC with [0,5] which it failed.
http://tests.stockfishchess.org/tests/view/5af283c00ebc5968e6523f33
LLR: -2.94 (-2.94,2.94) [0.00,5.00]
Total: 12338 W: 2451 L: 2522 D: 7365
Closes https://github.com/official-stockfish/Stockfish/pull/1593
bench: 4698290
----------------------------------------
Thanks to @vondele and @Rocky640 for a cleaner version of the patch,
and the following comments!
> Most of the pinned, (or for this pull request, blocking) squares were
> already computed in the unsafeChecks, the only missing squares being:
>
> a) squares attacked by a Queen which are occupied by friendly piece
> or "unsafe". Note that adding such squares never passed SPRT[0,5].
>
> b) squares not in mobilityArea[Us].
>
> There is a strong relationship between the blockers and the unsafeChecks,
> but the bitboard unsafeChecks is still useful when the checker is not
> aligned with the king, and the checking square is occupied by friendly
> piece or is "unsafe". This is always the case for the Knight.
2018-05-10 23:36:16 +02:00
mstembera and Stéphane Nicolet
76f9cd4df1
Some small changes
...
1) Use make_bitboard() in Bitboards::init()
2) Fix MSVC warning: search.h(85): warning C4244: '=': conversion from
'TimePoint' to 'int', possible loss of data.
Closes https://github.com/official-stockfish/Stockfish/pull/1524
No functional change.
2018-04-01 02:32:55 +02:00
mstembera and Stéphane Nicolet
350dff4464
Fix an MSVC 2017 error and warnings.
...
Improved version by @mcostalba.
No functional change.
2018-03-16 22:37:03 +01:00
mstembera and Joona Kiiski
973ede008a
Tuned PSQT using a custom tuner.
...
bench: 5878420
Closes #1177
2017-07-23 17:35:44 -07:00
mstembera and Joona Kiiski
69eb391cd7
Magic::index()
...
Make magic_index() a member of Magic since it uses all it's members
and keep us from having to pass the function pointer around to
init_magics().
No functional change
Closes #1146
2017-06-28 17:11:17 -07:00
mstembera and Joona Kiiski
659990b43f
Reordering magic data
...
Gather all magic relevant data into a struct.
This changes memory layout putting everything necessary for processing a single square
in the same memory location thus speeding up access.
Original patch by @snicolet
No functional change.
Closes #1127
Closes #1128
2017-06-06 10:22:12 -07:00
mstembera and Joona Kiiski
321a27fbe3
Avoid *begin always being included in the sorted list regardless of its value.
...
This was a minor criticism by @zamar in the original pull request
https://github.com/official-stockfish/Stockfish/pull/1065
necessitating a comment explanation.
No functional change.
Closes #1091
2017-05-07 20:15:56 -07:00
mstembera and Joona Kiiski
d01b66ae8f
Fix pawn entry prefetch
...
No functional change
Closes #1026
2017-03-14 20:56:26 -07:00
mstembera and Joona Kiiski
f1e3dfea74
Reorder members of Material::Entry
...
This eliminates alignment padding and reduces size from 48 to 40 bytes.
This makes the material HashTable smaller and more cache friendly.
No functional change
Closes #1013
2017-02-23 21:33:03 -08:00
mstembera and Marco Costalba
0c076f1136
Avoid some redundant scaling function calls
...
Posted by Mohammed Li here:
https://groups.google.com/forum/?fromgroups=#!topic/fishcooking/N-PHfN0O79o
No functional change.
2016-06-10 06:43:37 +02:00
mstembera and Marco Costalba
0784bd542b
Fix a multiPV bug in lazy SMP
...
Where the helper threads were not doing multiPV at all.
Regression tested sprt @ 5+0.05 th 7
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 73918 W: 11891 L: 11853 D: 50174
bench: 8716243
2016-05-14 21:34:55 +02:00
mstembera and Joona Kiiski
8fb45caade
Simplify popcnt
...
Also a speedup(about 1%) on 64-bit w/o hardware popcnt
Retire Max15 and Full template parameters
(Contributed by Marco Costalba)
Now that we have just SW and HW versions, use
template default parameter to get rid of explicit
template parameters.
Retire bitcount.h and move the only defined
function to bitboard.h
No functional change
Resolves #620
2016-04-08 18:52:15 +01:00
mstembera and Joona Kiiski
04be84e0e2
Simplify Safe Checks
...
STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 11796 W: 2211 L: 2074 D: 7511
LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 14324 W: 1935 L: 1806 D: 10583
Bench: 8075202
Resolves #600
2016-03-14 20:51:16 -07:00
mstembera and Joona Kiiski
2c1797ab81
Fix easy move bug in SMP mode
...
Fix a bug where we could stop the search after only 10% of time used due to a matching easy move but later switch to a different move that was never pre-screened as easy due to SMP thread select.
STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 27227 W: 4910 L: 4800 D: 17517
LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 40368 W: 5826 L: 5733 D: 28809
Resolves #521
2015-12-14 18:47:12 +00:00
mstembera and Joona Kiiski
7904a7d930
Fix MultiPv and Skill in SMP.
...
7 threads, 5+0.1:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 55460 W: 9665 L: 9601 D: 36194
No functional change in normal playing mode
2015-12-12 10:32:28 +00:00
mstembera and Joona Kiiski
5d077bb482
Proper Makefile for cross compiling 64 or 32 bit PGO + LTO + static Windows binaries under Linux.
...
No functional change
Resolves #511
2015-12-03 14:01:38 +00:00
mstembera and Joona Kiiski
388630ae28
Allow cross compilation of Windows binaries on a Linux system
...
that are PGO, LTO, and statically linked.
Credit: pasquale....@gmail.com
No functional change
Resolves #505
2015-11-23 17:06:14 -08:00
mstembera and Joona Kiiski
79f393084a
Clean up RootMove less operator
...
This is used by std::stable_sort() to sort moves from highest score to lowest score.
1) The comment is incorrect since highest to lowest means descending.
2) It's more natural to implement a less operator using another less operator rather than a greater operator.
No functional change.
Resolves #504
2015-11-20 23:30:07 -08:00
mstembera and Joona Kiiski
68fbb1e052
Reduce writes in TT::probe().
...
Only refresh TT entry when it's really necessary.
This should give a small speed boost for some machines.
And it's a risk-free change.
No functional change.
Resolves #429
2015-09-17 17:33:40 -07:00
mstembera and Joona Kiiski
01fab4d432
Remove unnecessary generation check in TT save
...
Checking for generation is unnecessary because if the key matches then the entry was probed and refreshed earlier.
STC 2MB
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 57391 W: 10671 L: 10613 D: 36107
http://tests.stockfishchess.org/tests/view/55ef59fa0ebc5976a2d6da5d
LTC 8MB
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 60732 W: 9260 L: 9199 D: 42273
http://tests.stockfishchess.org/tests/view/55ef8fe60ebc5976a2d6da6b
STC 16MB
LLR: 2.95 (-2.94,2.94) [-4.00,0.00]
Total: 23443 W: 4369 L: 4293 D: 14781
http://tests.stockfishchess.org/tests/view/55ef8fe60ebc5976a2d6da6b
No functional change
Resolves #427
2015-09-17 17:13:45 -07:00
mstembera and Joona Kiiski
3e2591d83c
Minor clean up of some function parameters
...
No function change
Resolves #416
2015-09-07 20:17:39 +01:00
mstembera and Joona Kiiski
46b5a5f0db
Fix syzygy en passant issue
...
v = value without ep capture being considered
v1 = value of the ep capture
The correct logic is:
if without e.p. capture we are losing, and the value of e.p is either draw, or win or "loss, but 50 move rule saves us", then we should use the value of ep capture.
Credit and thanks to syzygy1 and lantonov !
No functional change (except with syzygy bases)
Resolves #415
Resolves #394
2015-09-06 22:19:33 +01:00
mstembera and Joona Kiiski
bf6bc1b37b
Better document entry age calculation used in TT replace.
...
No functional change.
Resolves #401
Resolves #400
2015-08-20 20:27:06 +01:00
mstembera and Joona Kiiski
9dbb3ae8b2
TT entry value based on depth and relative age
...
Calculate TT replace value as depth minus eight times relative age.
STC 2MB
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 45258 W: 8595 L: 8279 D: 28384
LTC 8MB
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 56401 W: 8809 L: 8489 D: 39103
STC 16MB
LLR: 2.96 (-2.94,2.94) [-4.00,0.00]
Total: 34764 W: 6565 L: 6529 D: 21670
Bench: 9069474
Resolves #395
2015-08-15 12:24:48 +01:00
mstembera and Joona Kiiski
1aae35b8b7
Revert TT replacement strategy changes ( #380 )
...
It could cause problems with high depths and long time controls
Bench: 8626315
Resolves #390
2015-08-08 17:49:53 +01:00
mstembera and Gary Linscott
51330414c4
Tuned version of TT replacement policy
...
If the used multiplier of 8 was any number larger than DEPTH_MAX
this would be a non functional patch.
STC 2MB
LLR: 2.96 (-2.94,2.94) [-1.50,4.50]
Total: 16353 W: 3216 L: 3066 D: 10071
http://tests.stockfishchess.org/tests/view/55a6d0630ebc590abbe1babd
LTC 8MB
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 134618 W: 21276 L: 20716 D: 92626
http://tests.stockfishchess.org/tests/view/55a74d760ebc590abbe1bad6
STC 16MB
LLR: 2.96 (-2.94,2.94) [-4.00,0.00]
Total: 22549 W: 4257 L: 4178 D: 14114
http://tests.stockfishchess.org/tests/view/55a9a2f90ebc590abbe1bb16
Bench: 7372460
Resolves #380
2015-07-25 00:33:53 +08:00
mstembera and Joona Kiiski
d8aeaab79c
Consistent TT replace policy
...
This fixes an inconsistency bug where TT entries were valued differently
depending on which pointer they were accessed through.
STC 2MB
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 11301 W: 2176 L: 2038 D: 7087
LTC 8MB
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 17732 W: 2870 L: 2745 D: 12117
STC 16MB
LLR: 2.96 (-2.94,2.94) [-4.00,0.00]
Total: 17401 W: 3324 L: 3227 D: 10850
Bench: 8248164
Resolves #377
2015-07-15 20:17:16 +01:00
mstembera and Joona Kiiski
eaeb63f1d0
Smart TT save
...
Don't overwrite more valuable data with less valuable data
STC 2MB
LLR: 2.96 (-2.94,2.94) [-1.50,4.50]
Total: 21132 W: 4108 L: 3946 D: 13078
http://tests.stockfishchess.org/tests/view/5547d59f0ebc5940ca5d6883
LTC 8MB
LLR: 2.97 (-2.94,2.94) [0.00,6.00]
Total: 13381 W: 2149 L: 1987 D: 9245
http://tests.stockfishchess.org/tests/view/5549b5a80ebc5940ca5d68b9
STC 16MB regression w/ zero effective hash pressure
LLR: 2.96 (-2.94,2.94) [-5.00,0.00]
Total: 18944 W: 3607 L: 3564 D: 11773
http://tests.stockfishchess.org/tests/view/554b0fda0ebc5940ca5d68ea
Bench: 8787152
Resolves #347
2015-05-09 17:43:57 +01:00
mstembera and Joona Kiiski
36f2133df3
New formula for quiet move scoring: 3 * cmh + 1 * hist
...
STC
LLR: 2.97 (-2.94,2.94) [-1.50,4.50]
Total: 45363 W: 8759 L: 8532 D: 28072
LTC
LLR: 3.51 (-2.94,2.94) [0.00,4.00]
Total: 125092 W: 20032 L: 19468 D: 85592
Bench: 7058819
Resolves #328
2015-04-10 20:14:11 +01:00
mstembera and Gary Linscott
6661a31541
Simplification to use only one counter move.
...
STC http://tests.stockfishchess.org/tests/view/5518dca30ebc5902160ec5d0
LLR: 2.95 (-2.94,2.94) [-3.50,0.50]
Total: 18868 W: 3638 L: 3530 D: 11700
LTC http://tests.stockfishchess.org/tests/view/5518f7ed0ebc5902160ec5d4
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 69767 W: 11019 L: 10973 D: 47775
Extracted from http://tests.stockfishchess.org/tests/view/5511028a0ebc5902160ec40b
Original patch by hxim. All credit goes to him.
Bench: 7664249
Resolves #320
2015-04-03 01:16:15 +08:00
mstembera and Joona Kiiski
062ca91db5
New easy move implementation
...
Spend much less time in positions where one move is much better than all other alternatives.
We carry forward pv stability information from the previous search to identify such positions.
It's based on my old InstaMove idea but with two significant improvements.
1) Much better instability detection inside the search itself.
2) When it's time to make a FastMove we no longer make it instantly but still spend at least 10% of normal time verifying it.
Credit to Gull for the inspiration.
BIG thanks to Gary because this would not work without accurate PV!
20K
ELO: 8.22 +-3.0 (95%) LOS: 100.0%
Total: 20000 W: 4203 L: 3730 D: 12067
STC
LLR: 2.96 (-2.94,2.94) [-1.50,4.50]
Total: 23266 W: 4662 L: 4492 D: 14112
LTC
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 12470 W: 2091 L: 1931 D: 8448
Resolves #283
2015-03-12 19:49:30 +00:00
mstembera and Gary Linscott
f4136c5434
Profile build options
...
I went through all the individual compile options that differ between
-fprofile-generate/-fprofile-use and -fprofile-arcs/-fbranch-probabilities
and distilled the speed difference down to only turning off
-fno-peel-loops and -fno-tracer. Using this we still get the full speedup
(maybe a bit more because other optimizations stay on) and it's also much cleaner
because we can get rid of the "@rm -f ucioption.gc*" hack for all versions of gcc.
No functional change.
Resolves #237
2015-02-03 11:09:37 +08:00
mstembera and Joona Kiiski
58fdb84b0d
Simplify and optimize value extractors
...
Speed up results by Joona:
gcc-4.7 (1.5%)
gcc-4.8 (0.5%)
gcc-4.9 (1.0%)
Speed up results by mstembera:
gcc 474
p-value: 0.719
gcc 482
p-value: 1
gcc 492
p-value: 0.859
No functional change
Resolves #211
2015-01-16 19:03:49 +00:00
mstembera and Gary Linscott
46d5fff01f
Change profile-build options to produce 1% to 2% faster executables.
...
The "@rm ucioption.gc*" line is necessary to avoid a gcc 4.7.x bug.
Confirmed for gcc 4.7.4, 4.8.1, and 4.9.1
Suggested by Kiran Panditrao on fishcooking forum.
https://groups.google.com/forum/?fromgroups=#!topic/fishcooking/AY8gN53nG18
No functional change.
Resolves #160
2014-12-19 03:57:04 +08:00
mstembera and Joona Kiiski
14cf27e6f6
Avoid searching TT twice for the same key/position during probe() and store().
...
Just keep the pointer and remove code from tt.cpp
STC
LLR: 2.96 (-2.94,2.94) [-1.50,4.50]
Total: 13620 W: 2810 L: 2665 D: 8145
LTC
LLR: 2.97 (-2.94,2.94) [0.00,6.00]
Total: 13021 W: 2238 L: 2073 D: 8710STC http://tests.stockfishchess.org/tests/view/548436860ebc59331739b90c
STC 4MB
ELO: 2.41 +-2.2 (95%) LOS: 98.6%
Total: 40000 W: 8175 L: 7897 D: 23928
LTC 16MB
ELO: 1.78 +-2.0 (95%) LOS: 96.1%
Total: 39683 W: 6763 L: 6560 D: 26360
Resolves #151
Bench: 8116521
2014-12-13 07:22:37 +00:00
mstembera and Gary Linscott
fe07ae4cb4
Bitbase index() from ADD to OR.
...
No functional change.
Resolves #132
2014-11-26 07:56:48 +08:00
mstembera and Joona Kiiski
bc83515c9e
Removing some superfluous extern declarations
...
No functional change.
Resolves #93
2014-11-05 21:17:19 +00:00
mstembera and Joona Kiiski
2fd075d1ea
Optimize TranspositionTable::store() and TranspositionTable::probe() for speed.
...
No functional change.
Resolves #85
2014-11-03 18:40:49 +00:00
mstembera and Gary Linscott
5605cc7684
max_piece_type cleanup, and slight speed increase.
...
No functional change.
Resolves #81
2014-10-28 22:23:01 +08:00
mstembera and Marco Costalba
918c29f83a
Minor stuff scattered around
...
Just random minor stuff I found while browsing the code.
No functional change.
2014-04-28 17:07:43 +02:00
mstembera and Marco Costalba
d28ea7b518
Smaller and faster profile-build binaries
...
I have noticed that increasing the bench depth produces
progressively smaller and slightly faster executables at
the cost of longer compile times. Also using bench "time"
instead of "depth" seems to produce slightly smaller/faster
executables given comparable compile times.
I have made a new Makefile that generates smaller and
about 1% to 2% faster profile executables at only a
little extra compile time. On my mobile 2GHz i7 a
full profile build time goes from 3'48" to 4'13" and
the exe goes down by 5% from 416,310 bytes to 395,567
bytes.
No functional change.
2014-04-05 12:48:20 +02:00
mstembera and Marco Costalba
3b19ea6ae5
Speed up apply_weight
...
Speed up by about 2% this hot path function pre-calculating
midgame and endgame values of the weight.
No functional change.
2014-04-05 11:12:18 +02:00
mstembera and Marco Costalba
ffdf63ff7c
Refresh TT entries generation automatically on probe
...
And other assorted simplifications, tested with SPRT[-3, 1]
Passed both short TC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 18814 W: 3600 L: 3475 D: 11739
And long TC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 20731 W: 3217 L: 3096 D: 14418
No functional change.
2014-03-23 09:46:15 +01:00
mstembera and Marco Costalba
553ead429d
Some minor cleanup stuff
...
I came across while browsing the code.
No functional change.
2014-03-03 08:57:20 +01:00