Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

⚡ Force TT array to have a power of two length #349

Merged
merged 12 commits into from Aug 16, 2023
Merged

Conversation

eduherminio
Copy link
Member

@eduherminio eduherminio commented Aug 16, 2023

Force TT array to have a power of two length

This allows replacing TT index calculation, from zobrist % length -> zobrist & length -1

Score of Lynx 1254 - pow-of-two vs Lynx 1247 - main: 2386 - 2337 - 1487  [0.504] 6210
...      Lynx 1254 - pow-of-two playing White: 1419 - 945 - 742  [0.576] 3106
...      Lynx 1254 - pow-of-two playing Black: 967 - 1392 - 745  [0.432] 3104
...      White vs Black: 2811 - 1912 - 1487  [0.572] 6210
Elo difference: 2.7 +/- 7.5, LOS: 76.2 %, DrawRatio: 23.9 %
SPRT: llr 0.0815 (2.8%), lbound -2.94, ubound 2.94

Windows benchmark results (similar to macOS ones):

 *  | Method |       size |      Mean |     Error |    StdDev | Ratio | Allocated | Alloc Ratio |
 *  |------- |----------- |----------:|----------:|----------:|------:|----------:|------------:|
 *  | Modulo |    2097152 | 97.429 us | 1.8213 us | 1.7036 us |  1.00 |         - |          NA |
 *  |    And |    2097152 |  7.107 us | 0.1393 us | 0.1710 us |  0.07 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |    4194304 | 95.984 us | 0.9829 us | 0.8713 us |  1.00 |         - |          NA |
 *  |    And |    4194304 |  7.024 us | 0.1348 us | 0.1261 us |  0.07 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |    8388608 | 98.313 us | 1.9542 us | 1.9192 us |  1.00 |         - |          NA |
 *  |    And |    8388608 |  7.031 us | 0.0797 us | 0.0707 us |  0.07 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |   16777216 | 96.734 us | 0.8187 us | 0.6392 us |  1.00 |         - |          NA |
 *  |    And |   16777216 |  7.051 us | 0.0885 us | 0.0828 us |  0.07 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |   33554432 | 97.209 us | 1.0735 us | 1.0041 us |  1.00 |         - |          NA |
 *  |    And |   33554432 |  7.214 us | 0.1191 us | 0.1114 us |  0.07 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |   67108864 | 97.015 us | 1.4319 us | 1.3394 us |  1.00 |         - |          NA |
 *  |    And |   67108864 |  6.979 us | 0.0889 us | 0.0742 us |  0.07 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |  134217728 | 96.075 us | 1.2594 us | 1.1164 us |  1.00 |         - |          NA |
 *  |    And |  134217728 |  6.979 us | 0.0808 us | 0.0756 us |  0.07 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |  268435456 | 96.507 us | 1.6562 us | 1.5492 us |  1.00 |         - |          NA |
 *  |    And |  268435456 |  6.941 us | 0.0405 us | 0.0316 us |  0.07 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |  536870912 | 95.550 us | 0.7486 us | 0.6636 us |  1.00 |         - |          NA |
 *  |    And |  536870912 |  6.987 us | 0.1078 us | 0.1008 us |  0.07 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo | 1073741824 | 95.537 us | 0.9683 us | 0.8584 us |  1.00 |         - |          NA |
 *  |    And | 1073741824 |  7.036 us | 0.0775 us | 0.0687 us |  0.07 |         - |          NA |

Linux ones

 *  BenchmarkDotNet v0.13.7, Ubuntu 22.04.3 LTS (Jammy Jellyfish)
 *  Intel Xeon Platinum 8370C CPU 2.80GHz, 1 CPU, 2 logical and 2 physical cores
 *  .NET SDK 8.0.100-preview.7.23376.3
 *    [Host]     : .NET 8.0.0 (8.0.23.37506), X64 RyuJIT AVX2
 *    DefaultJob : .NET 8.0.0 (8.0.23.37506), X64 RyuJIT AVX2
 *
 *
 *  | Method |       size |      Mean |     Error |    StdDev | Ratio | Allocated | Alloc Ratio |
 *  |------- |----------- |----------:|----------:|----------:|------:|----------:|------------:|
 *  | Modulo |    2097152 | 40.179 us | 0.0344 us | 0.0287 us |  1.00 |         - |          NA |
 *  |    And |    2097152 |  7.164 us | 0.0010 us | 0.0009 us |  0.18 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |    4194304 | 40.163 us | 0.0057 us | 0.0054 us |  1.00 |         - |          NA |
 *  |    And |    4194304 |  7.166 us | 0.0035 us | 0.0033 us |  0.18 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |    8388608 | 40.179 us | 0.0248 us | 0.0220 us |  1.00 |         - |          NA |
 *  |    And |    8388608 |  7.164 us | 0.0014 us | 0.0011 us |  0.18 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |   16777216 | 40.166 us | 0.0038 us | 0.0036 us |  1.00 |         - |          NA |
 *  |    And |   16777216 |  8.040 us | 0.0006 us | 0.0006 us |  0.20 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |   33554432 | 40.166 us | 0.0054 us | 0.0046 us |  1.00 |         - |          NA |
 *  |    And |   33554432 |  7.165 us | 0.0034 us | 0.0028 us |  0.18 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |   67108864 | 40.180 us | 0.0256 us | 0.0227 us |  1.00 |         - |          NA |
 *  |    And |   67108864 |  7.164 us | 0.0012 us | 0.0010 us |  0.18 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |  134217728 | 40.169 us | 0.0093 us | 0.0082 us |  1.00 |         - |          NA |
 *  |    And |  134217728 |  7.169 us | 0.0015 us | 0.0013 us |  0.18 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |  268435456 | 40.163 us | 0.0050 us | 0.0042 us |  1.00 |         - |          NA |
 *  |    And |  268435456 |  8.041 us | 0.0013 us | 0.0011 us |  0.20 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo |  536870912 | 40.159 us | 0.0037 us | 0.0031 us |  1.00 |         - |          NA |
 *  |    And |  536870912 |  7.168 us | 0.0008 us | 0.0007 us |  0.18 |         - |          NA |
 *  |        |            |           |           |           |       |           |             |
 *  | Modulo | 1073741824 | 40.167 us | 0.0137 us | 0.0114 us |  1.00 |         - |          NA |
 *  |    And | 1073741824 |  8.040 us | 0.0011 us | 0.0010 us |  0.20 |         - |          NA |

@eduherminio eduherminio changed the title Force TT array to have a power of two length ⚡ Force TT array to have a power of two length Aug 16, 2023
@eduherminio eduherminio marked this pull request as ready for review August 16, 2023 19:26
@eduherminio eduherminio merged commit 21399bb into main Aug 16, 2023
18 checks passed
@eduherminio eduherminio deleted the perf/tt-size-pow-2 branch August 16, 2023 19:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant