Основные принципы генератора ходов (Bitboard и 0x88)

Тема в разделе "Машинное отделение", создана пользователем Chemer, 30 ноя 2006.

  1. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    У меня perft 6 выполняется за 11.91 сек на Sempron c частотой 2296.
    ProstoTak можешь взять WildCat 7 и проверить сколько времени он будет считать на твоей машине.
     
  2. bankuss
    Оффлайн

    bankuss Александр баннер

    Репутация:
    6
    про свой напишу... без списков фигур, и соответственно - неоптимизированный детектор шаха и проверка на легальность, выдает на С2D 2.7 Ггц perft 6 за 9.9 сек. (32 бита, без МП) компил. VS2005 express
    все циферки выводит верно :)
    еще для тестов делаю проверку на этих позах:
    ("r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1")
    ("n1n5/PPPk4/8/8/8/8/4Kppp/5N1N b - - 0 1")
    кол-во узлов в инете найдете.
     
  3. ProstoTak
    Оффлайн

    ProstoTak Старожил

    Репутация:
    1
    Народ, я задрался искать ошибки. Всё правильно, а цифири не сходятся. Может в этих цифирях что в инете ошибки? :)
    Может кто даст экзешник в который в качестве параметра можно передавать фен и чтобы он считал perft 6
    Я тогда попробую посовать ему и себе разные позиции.
     
  4. WinPooh
    Оффлайн

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

    Репутация:
    95
    Экзешник называется GreKo.exe :)
    http://greko.chess.googlepages.com

    Консольные команды, которые тебе помогут:

    board - показать доску
    e2e4 - сделать ход e2e4
    force - отключить автоматический ответ на введённый ход
    list - список легальных ходов из данной позиции
    load <filename> - загрузить из FEN-файла
    new - всё заново
    perft <N> - посчитать perft
    setboard <fen> - установить из FEN
    undo - взять ход назад

    Выводится статистика с разбиением по всем ходам из корня. Если ты сделаешь такое разбиение у себя, то легко шаг за шагом дойдёшь до позиции, в которой у тебя неверное значение принимает perft 1.
     
  5. ProstoTak
    Оффлайн

    ProstoTak Старожил

    Репутация:
    1
    Пух ты СУПЕР. Я тебя абажаю :)
     
  6. ProstoTak
    Оффлайн

    ProstoTak Старожил

    Репутация:
    1
    Кажись всё поисправлял. Теперь могу сказать, что perft 6 считаю за 92 секунды. По сравнению с "Грекой" это хуже в 1.3 раза (72 секунды).
    Есть ещё над чем работать. Будем дерзать :)

    Тем более, что ДикийКот_7 вааще за 32 секунды посчитал.
     
  7. Booot
    Оффлайн

    Booot Учаcтник

    Репутация:
    0
    Классно вы тут перфомансом меряетесь :). Со своей стороны похвастаться нечем: на моей машине (подозреваю и что на остальных тоже) booot уступает в этой категории и греко и кошке :). Причем кошке - катастрофически. Чемпионом в этой номинации оказался Yace Padeborn, разорвавший даже кошку. Так что есть над чем работать, учитывая, что в реальных шахматах у последнего booota все далеко не так плохо :).
     
  8. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Ничего такого. В Yace совсем другой perft. И мерятся с ним скоростями совсем не имеет смысла.
     
  9. ProstoTak
    Оффлайн

    ProstoTak Старожил

    Репутация:
    1
    Что значит "другой perft"? На другой позиции что ли? И почему это нет смысла меряться скоростями? Я вот намерен кошке надрать задницу. Дайте мне только добраться до движка всерьез. :)
     
  10. WinPooh
    Оффлайн

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

    Репутация:
    95
    Например, если кэшировать промежуточные результаты, то для глубины 5 или 6 можно получить ускорение чуть ли не в 10 раз. Во всяком случае, у меня "эффективная скорость" такого perft легко доходила до 30-40 тысяч knps.
     
  11. bankuss
    Оффлайн

    bankuss Александр баннер

    Репутация:
    6
    у меня кошка выдает Рerft 6 за 8.4 сек. значит мой генератор всего на 1 сек. хуже :) а если еще оптимизировать? хотя надо проверять...да и можно так наоптимизировать, что лучше ненадо :D
     
  12. Booot
    Оффлайн

    Booot Учаcтник

    Репутация:
    0
    А смысл? Оно, конечно, скорость мож никогда и не лишняя, но у меня движок с перфомансом ниже грекиного играет в практически силу кошки. Все таки надо где-то еще копать :).
     
  13. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Yace не выводит сколько он увидел позиций во время peft. Как определить его скорость?
     
  14. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Если еще оптимизировать, то скорее всего это будет очень мало сказываться на общей скорости движка.
     
  15. bankuss
    Оффлайн

    bankuss Александр баннер

    Репутация:
    6
    WildCat на общей да, а на локальной скажется :)
     
  16. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    На какой еще локальной?
     
  17. bankuss
    Оффлайн

    bankuss Александр баннер

    Репутация:
    6
    WildCat т.е. местной..например только генератор ускориться, но сила игры не увеличится (т.е. общая)
     
  18. ProstoTak
    Оффлайн

    ProstoTak Старожил

    Репутация:
    1
    Кот, признавайся ты кешируешь или нет?
     
  19. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    bankuss, ну тогда ладно, если скорость генератора для тебя фетиш, то борись за нее :D
    ProstoTak, у меня именно стандартных perft без каких-либо ухищрений. Могу даже код показать :p
     
  20. ProstoTak
    Оффлайн

    ProstoTak Старожил

    Репутация:
    1
    Ты на словах скажи какие меры принял, что так быстро получилось. Всё равно в чужом коде только мозги свихнуть можно :)
     
  21. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Че там свихать? У меня perft из 7 строчек.
    А быстрый потому что генератор такой.
     
  22. WinPooh
    Оффлайн

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

    Репутация:
    95
    Расскажи тогда в двух словах про генератор :)
     
  23. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    1. майлбоксовский
    2. списки фигур int Plist[type][n];

    остальное все элементарно.
     
  24. ProstoTak
    Оффлайн

    ProstoTak Старожил

    Репутация:
    1
    Что значит "1. майлбоксовский" ?
     
  25. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    значит при генерации ходов не проверяем выход за границы массива. Поэтому быстро работает.
     
  26. WinPooh
    Оффлайн

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

    Репутация:
    95
    но _когда-то_ нам всё равно их придётся проверять?
     
  27. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
  28. WinPooh
    Оффлайн

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

    Репутация:
    95
    Два коня - один на e4, второй на a1.
    У первого - надо сгенерировать и записать в список восемь ходов, у второго - два.
    В какой момент отбраковываются шесть ходов коня a1 за пределы доски?
     
  29. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Нет проверки на выход за пределы доски. Просто поля за пределами доски заняты другими фигурами, поэтому конь туда не пойдет.
     
  30. ProstoTak
    Оффлайн

    ProstoTak Старожил

    Репутация:
    1
    Тю, разве не один хрен как это назвать? У меня за пределами доски -1 стоит, но её же (минус единицу) надо проверить.
     
  31. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Эту проверку ты все равно делаешь. Суть в том, что не надо делать дополнительных проверок на выход за границу массива.
     
  32. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    В 0x88 лишние проверки, поэтому по моим тестам на современных компах мэйлбокс чуть быстрее. Если что-то стоит за пределами доски то это майл-Бокс. в 0x88 за пределами доски ничего нет, выход за пределы определяется по самой координате.
     
  33. ProstoTak
    Оффлайн

    ProstoTak Старожил

    Репутация:
    1
    С доской получается что я тоже границ не проверяю.
    Так, шо это за зверь список фигур? И в чём там скорость?
     
  34. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Если что непонятно, то спрашивай тут: http://www.kasparovchess.crestbook.com/viewtopic.php?id=1778
     
  35. ProstoTak
    Оффлайн

    ProstoTak Старожил

    Репутация:
    1
    Поубирал явные затормозки. Теперь perft 6 считаю за 80 секунд (а было 92). Чтобы догнать Греку нужно ещё 8 секунд сбросить. Потом возьмусь за Кошку :p

    Доска 0x88 от 10х12 чем то принципиально отличается? Может Кошка именно там порылась?