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

Тема в разделе "Машинное отделение", создана пользователем Killster, 29 авг 2011.

  1. Killster
    Оффлайн

    Killster Учаcтник

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

    WinPooh В.М. Команда форума

    Репутация:
    95
    Вот хорошее и подробное описание, по которому я разбирался: Bitboards.pdf
    Насчёт текущего состояния плотности упаковки - не в курсе. Фразу "Это по сути то-же самое, что и "магические значения", которые известны, а-ля...", если честно, до конца не понял. Как работает - смотрите, например, исходный код Греки, файлы bitboards.cpp, bitboards.h.
     
  3. Осипов Юрий
    Оффлайн

    Осипов Юрий Учаcтник

    Репутация:
    11
    Как я понял из приведенной ссылки, Грека до сих пор остается в основном 32-битной.
    В этом случае выражение для индекса в таблице атак, выполняемое через 64-битное умножение и сдвиг очень тормозит. Компилятор в таких случаях делает вызов библиотечных функций типа _allmul и _allshr, а это очень неэффективно.
    Прогрессивное человечество делает иначе: отдельно перемножает младшие и старшие части, потом их ксорит, а потом сдвигает вправо полученное 32-битное число. Получается заметно быстрее.
     
  4. WinPooh
    Оффлайн

    WinPooh В.М. Команда форума

    Репутация:
    95
    Спасибо за совет по оптимизации, надо будет как-нибудь попробовать.

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

    MS Михаил Семионенков

    Репутация:
    175
    Обалдеть. Неужели так значимо?!
     
  6. WinPooh
    Оффлайн

    WinPooh В.М. Команда форума

    Репутация:
    95
    Статистика с CCRL для GreKo

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