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

Discussion in 'Машинное отделение' started by Chemer, 30 Nov 2006.

  1. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    У меня perft 6 выполняется за 11.91 сек на Sempron c частотой 2296.
    ProstoTak можешь взять WildCat 7 и проверить сколько времени он будет считать на твоей машине.
  2. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Member Since:
    24.05.2006
    Message Count:
    1.084
    Likes Received:
    38
    Репутация:
    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 Старожил

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

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.491
    Likes Received:
    3.118
    Репутация:
    95
    Location:
    Москва
    Оффлайн
    Экзешник называется 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 Старожил

    • Ветеран
    • Старожил
    Member Since:
    12.02.2006
    Message Count:
    5.479
    Likes Received:
    123
    Репутация:
    1
    Оффлайн
    Пух ты СУПЕР. Я тебя абажаю :)
  6. ProstoTak Старожил

    • Ветеран
    • Старожил
    Member Since:
    12.02.2006
    Message Count:
    5.479
    Likes Received:
    123
    Репутация:
    1
    Оффлайн
    Кажись всё поисправлял. Теперь могу сказать, что perft 6 считаю за 92 секунды. По сравнению с "Грекой" это хуже в 1.3 раза (72 секунды).
    Есть ещё над чем работать. Будем дерзать :)

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

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

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Ничего такого. В Yace совсем другой perft. И мерятся с ним скоростями совсем не имеет смысла.
  9. ProstoTak Старожил

    • Ветеран
    • Старожил
    Member Since:
    12.02.2006
    Message Count:
    5.479
    Likes Received:
    123
    Репутация:
    1
    Оффлайн
    Что значит "другой perft"? На другой позиции что ли? И почему это нет смысла меряться скоростями? Я вот намерен кошке надрать задницу. Дайте мне только добраться до движка всерьез. :)
  10. WinPooh В.М.

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.491
    Likes Received:
    3.118
    Репутация:
    95
    Location:
    Москва
    Оффлайн
    Например, если кэшировать промежуточные результаты, то для глубины 5 или 6 можно получить ускорение чуть ли не в 10 раз. Во всяком случае, у меня "эффективная скорость" такого perft легко доходила до 30-40 тысяч knps.
  11. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Member Since:
    24.05.2006
    Message Count:
    1.084
    Likes Received:
    38
    Репутация:
    6
    Оффлайн
    у меня кошка выдает Рerft 6 за 8.4 сек. значит мой генератор всего на 1 сек. хуже :) а если еще оптимизировать? хотя надо проверять...да и можно так наоптимизировать, что лучше ненадо :D
  12. Booot Учаcтник

    • Участник
    Member Since:
    05.06.2006
    Message Count:
    140
    Likes Received:
    0
    Репутация:
    0
    Оффлайн
    А смысл? Оно, конечно, скорость мож никогда и не лишняя, но у меня движок с перфомансом ниже грекиного играет в практически силу кошки. Все таки надо где-то еще копать :).
  13. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Yace не выводит сколько он увидел позиций во время peft. Как определить его скорость?
  14. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Если еще оптимизировать, то скорее всего это будет очень мало сказываться на общей скорости движка.
  15. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Member Since:
    24.05.2006
    Message Count:
    1.084
    Likes Received:
    38
    Репутация:
    6
    Оффлайн
    WildCat на общей да, а на локальной скажется :)
  16. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    На какой еще локальной?
  17. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Member Since:
    24.05.2006
    Message Count:
    1.084
    Likes Received:
    38
    Репутация:
    6
    Оффлайн
    WildCat т.е. местной..например только генератор ускориться, но сила игры не увеличится (т.е. общая)
  18. ProstoTak Старожил

    • Ветеран
    • Старожил
    Member Since:
    12.02.2006
    Message Count:
    5.479
    Likes Received:
    123
    Репутация:
    1
    Оффлайн
    Кот, признавайся ты кешируешь или нет?
  19. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    bankuss, ну тогда ладно, если скорость генератора для тебя фетиш, то борись за нее :D
    ProstoTak, у меня именно стандартных perft без каких-либо ухищрений. Могу даже код показать :p
  20. ProstoTak Старожил

    • Ветеран
    • Старожил
    Member Since:
    12.02.2006
    Message Count:
    5.479
    Likes Received:
    123
    Репутация:
    1
    Оффлайн
    Ты на словах скажи какие меры принял, что так быстро получилось. Всё равно в чужом коде только мозги свихнуть можно :)
  21. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Че там свихать? У меня perft из 7 строчек.
    А быстрый потому что генератор такой.
  22. WinPooh В.М.

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.491
    Likes Received:
    3.118
    Репутация:
    95
    Location:
    Москва
    Оффлайн
    Расскажи тогда в двух словах про генератор :)
  23. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    1. майлбоксовский
    2. списки фигур int Plist[type][n];

    остальное все элементарно.
  24. ProstoTak Старожил

    • Ветеран
    • Старожил
    Member Since:
    12.02.2006
    Message Count:
    5.479
    Likes Received:
    123
    Репутация:
    1
    Оффлайн
    Что значит "1. майлбоксовский" ?
  25. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    значит при генерации ходов не проверяем выход за границы массива. Поэтому быстро работает.
  26. WinPooh В.М.

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.491
    Likes Received:
    3.118
    Репутация:
    95
    Location:
    Москва
    Оффлайн
    но _когда-то_ нам всё равно их придётся проверять?
  27. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
  28. WinPooh В.М.

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.491
    Likes Received:
    3.118
    Репутация:
    95
    Location:
    Москва
    Оффлайн
    Два коня - один на e4, второй на a1.
    У первого - надо сгенерировать и записать в список восемь ходов, у второго - два.
    В какой момент отбраковываются шесть ходов коня a1 за пределы доски?
  29. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Нет проверки на выход за пределы доски. Просто поля за пределами доски заняты другими фигурами, поэтому конь туда не пойдет.
  30. ProstoTak Старожил

    • Ветеран
    • Старожил
    Member Since:
    12.02.2006
    Message Count:
    5.479
    Likes Received:
    123
    Репутация:
    1
    Оффлайн
    Тю, разве не один хрен как это назвать? У меня за пределами доски -1 стоит, но её же (минус единицу) надо проверить.
  31. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Эту проверку ты все равно делаешь. Суть в том, что не надо делать дополнительных проверок на выход за границу массива.
  32. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    В 0x88 лишние проверки, поэтому по моим тестам на современных компах мэйлбокс чуть быстрее. Если что-то стоит за пределами доски то это майл-Бокс. в 0x88 за пределами доски ничего нет, выход за пределы определяется по самой координате.
  33. ProstoTak Старожил

    • Ветеран
    • Старожил
    Member Since:
    12.02.2006
    Message Count:
    5.479
    Likes Received:
    123
    Репутация:
    1
    Оффлайн
    С доской получается что я тоже границ не проверяю.
    Так, шо это за зверь список фигур? И в чём там скорость?
  34. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
  35. ProstoTak Старожил

    • Ветеран
    • Старожил
    Member Since:
    12.02.2006
    Message Count:
    5.479
    Likes Received:
    123
    Репутация:
    1
    Оффлайн
    Поубирал явные затормозки. Теперь perft 6 считаю за 80 секунд (а было 92). Чтобы догнать Греку нужно ещё 8 секунд сбросить. Потом возьмусь за Кошку :p

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

Share This Page