Магические значения в шахматных программах

Discussion in 'Машинное отделение' started by Killster, 29 Aug 2011.

  1. TopicStarter Overlay

    Killster Учаcтник

    • Участник
    Member Since:
    12.05.2011
    Message Count:
    75
    Likes Received:
    0
    Репутация:
    0
    Оффлайн
    Во многих современных шахматных программах используются магические битборды. Это по сути то-же самое, что и "магические значения", которые известны, а-ля
    Code:
    0001
    0010
    0100
    1000
    
    Кто-нибудь может рассказать, так ли это работает в шахматных программах, и, если да, то достигнут ли максимум "магии" (т.е. магических значений на бит)?
  2. WinPooh В.М.

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.492
    Likes Received:
    3.122
    Репутация:
    95
    Location:
    Москва
    Онлайн
    Вот хорошее и подробное описание, по которому я разбирался: Bitboards.pdf
    Насчёт текущего состояния плотности упаковки - не в курсе. Фразу "Это по сути то-же самое, что и "магические значения", которые известны, а-ля...", если честно, до конца не понял. Как работает - смотрите, например, исходный код Греки, файлы bitboards.cpp, bitboards.h.
  3. Осипов Юрий Учаcтник

    • Участник
    Member Since:
    18.06.2007
    Message Count:
    399
    Likes Received:
    475
    Репутация:
    11
    Location:
    Правда
    Оффлайн
    Как я понял из приведенной ссылки, Грека до сих пор остается в основном 32-битной.
    В этом случае выражение для индекса в таблице атак, выполняемое через 64-битное умножение и сдвиг очень тормозит. Компилятор в таких случаях делает вызов библиотечных функций типа _allmul и _allshr, а это очень неэффективно.
    Прогрессивное человечество делает иначе: отдельно перемножает младшие и старшие части, потом их ксорит, а потом сдвигает вправо полученное 32-битное число. Получается заметно быстрее.
  4. WinPooh В.М.

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.492
    Likes Received:
    3.122
    Репутация:
    95
    Location:
    Москва
    Онлайн
    Спасибо за совет по оптимизации, надо будет как-нибудь попробовать.

    На самом деле, никакой специальной привязки к разрядности в Греке нет. Какой соберут, такая и будет. У меня система 32-битная, поэтому я компилирую только 32-битные версии. Но в CCRL участвуют и 64-битные Греки. Пунктов на 50 сильнее получаются.
  5. MS Михаил Семионенков

    • Команда форума
    Member Since:
    11.02.2006
    Message Count:
    6.542
    Likes Received:
    3.361
    Репутация:
    175
    Оффлайн
    Обалдеть. Неужели так значимо?!
  6. WinPooh В.М.

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.492
    Likes Received:
    3.122
    Репутация:
    95
    Location:
    Москва
    Онлайн
    Статистика с CCRL для GreKo

    Версия 7.2 - плюс 19 пунктов, версия 8.0 - плюс 44 пункта. Версия 8.2 в 64-битном варианте пока не тестировалась.

Share This Page