【问题标题】:Why does increasing the hash table size for a chess engine, also drastically increase the time it takes to reach depth 30?为什么增加国际象棋引擎的哈希表大小也会大大增加达到深度 30 所需的时间?
【发布时间】:2022-01-15 01:48:09
【问题描述】:

我正在使用 macOS 应用程序 Stockfish,它使用当前版本的 Stockfish 14.1 作为国际象棋引擎,令我惊讶的是,我的计算机 (Apple M1 Pro 10C) 达到深度 30 时所需的时间要少得多我将哈希表大小设置为 1MB,而我将其设置为 8GB。

大小为 1MB 的哈希表需要大约 18 秒才能在初始国际象棋位置上达到深度 30。 大小为 8192MB 的哈希表需要大约 85 秒才能在初始国际象棋位置达到深度 30。

这是否意味着重新计算比使用内存更快?

【问题讨论】:

    标签: performance hashtable chess


    【解决方案1】:

    这是否意味着重新计算比使用内存更快?

    我猜(对 Stockfish 内部结构一无所知);这意味着哈希表太大而无法保留在 CPU 的缓存中(使哈希表访问速度变慢);并且更大的哈希表的性能优势(“更少的冲突,具有相同哈希的事物列表更短”)与性能成本(更多的缓存未命中)相比相形见绌。

    【讨论】:

    • 很好的答案,谢谢!您提到为了获得良好的性能,哈希表应该适合 CPU 的缓存。 M1 Pro 有 12MB 的 L2 缓存,这是否意味着我最多只能使用 12MB 的哈希表?还是我最好将哈希表大小保留为 1MB?
    • @Vincent:12 MiB 的 L2 缓存将用于所有内容(不仅仅是哈希表)。如果您假设软件有一个访问(一块)散列表的循环,然后使用 10 MiB 的其他内存(然后回到循环的开头再次访问散列表的一部分);那么“太大而无法保留在 CPU 的缓存中”将是“大于 12 MiB 减去也正在使用的其他内存的 10 MiB”(或大于 2 MiB)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2018-04-07
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多