Пилю программку по обсчёту китайского покера

22
Статистика
Статистика
22
Статистика темы
  • Популярность
    Топ-309
  • Постов
    2,261
  • Просмотров
    173,605
  • Подписок
    22
  • Карма автора
    -45
1 105 106 107 108 114
  • Jak, мозги под остыли, можно продолжить) 

    Есть пара мыслей)

    Но они пока не готовы, в виде алгоритма

    Выше падаван правильно заметил что до реальных циферок далеко, но

    Против фантазии то можно посчитаться уже... Нужно взять весь объём фантазий и в терминальных считаться против него... 

    Как это сделать быстро для проца надо репу погреть...

     

    Горы берут идущие

    Сообщение отредактировал c00l0ne - 7.4.2023, 21:32
    Ответить Цитировать
    780/882
    + 0
  • есть два подхода,

    прямой и в "черный ящик" сыграть 

    прямой понятное дело медленный, но имеет всю статистику, потом ее можно посчитать и выдать 

    "черный ящик" 

    это нейросеть 

     

    предлагаю совместить эти два метода и решать через линейный перцептерон ... 

    там еще какая информация останется в виде линейных весов ... 

    в итоге можно собрать статистику  по весам... 

    но и вычисления линейные и выполняются со скоростью пули ... 

    нужен дата сет для тренировки 

    на вход подавать комбы 

    на выходе сводить  

    к известному ев

     

    достаточно объемная работа как обычно

    пойду ubuntu ставить )

    Ответить Цитировать
    781/882
    + 0
  • Так у тебя все есть. 

    Идея есть, программа для дата сет есть, считай, формируй, обучай.

    Ответить Цитировать
    265/314
    + 0
  • Jak, эх

     

    Ответить Цитировать
    782/882
    + 0
  • Jak, верните плз задержку в софт, чтобы его как рта не использовали... Зачем убрали? (

     

    Ответить Цитировать
    783/882
    + 0
  • Задержка есть, просто она плавающая, от 15 до 40 сек, чтобы ее было трудно найти.

    Или ее прямо нет совсем?

    Ответить Цитировать
    266/314
    + 0
  • Jak @ 10.04.23 

    Задержка есть, просто она плавающая, от 15 до 40 сек, чтобы ее было трудно найти.

    Или ее прямо нет совсем?

    да вроде нету : 

     

    Ответить Цитировать
    784/882
    + 0
  • когда нет, должно быть так

    значит ты попал на случай, когда задержка получилась маленькой. 

    так будет не всегда. 

    за то ее сложно убрать.

    Ответить Цитировать
    267/314
    + 0
  • Jak @ 10.04.23 

    за то ее сложно убрать.

    Jak, это вызов)))

    Ответить Цитировать
    785/882
    + 0
  • Нет, это зов )))

    Ответить Цитировать
    268/314
    + 0
  • Jak @ 11.04.23 

    Нет, это зов )))

    попозже ) в джунгли побегу ) 

     

    в дневнике инфа есть как выжимают из SIMD инструкций 1.5 Тфлопс 

    это обычно нужно для нейросетей 

    но как прикрутить к МК умножение матриц

    матчасть: 

    где результат вычисляется по след формуле : 

    сумма произведений элементов строки на элементы столбца

    для покера мы можем заюзать это для вычисления например ЕВ: 

    у нас в матрице А содержаться ряды вероятностей для различных ситуаций , а в матрице B определенные награды для этих же ситуаций ... 

    матрица C будет содержать евшки для разных ситуаций ... 

    одним умножением покрывается достаточно большая часть дерева ... 

    таким образом ускориться ...

     

    так же можем максимумы вычислять, одна матрица испытуемые ряды чисел , а вторая матрица содержит 1 или 0 , где 1 если число является максимумом в ряде ... из плюсов параллельно матрице второй можно бахать бинарное число и битом указывать какое число максимальное и транспанировать его в матрицу и обратно ... 

    ускорение будет при перемножении матрицы , где нам нужен например вектор максимальных значений... да и использование бинарных операций это чистое компьютерное время... 

    вообщем надо алгоритм переводить в такого рода вычисления... тогда и ТераФлопсы появятся ...

     

    скринте пророчество: CPU переходят в SIMD режим ... еще 5 лет и мы забудем об архитектуре x86 x64, где то заплакал один маленький билли убилли гейтс

    Пока что это невероятно сложно запустить операционную систему в видеокарте например, но GPT нам во всем поможет ) виндовс в ту же секунду станет не нужна ... акции обрушатся ... падет очередная суперкорпорация монстров ) ... а вместо нее очередной проект опен сорс займет свое законнопочетное место ... ) my dream freedom

    Сообщение отредактировал c00l0ne - 13.4.2023, 5:38
    Ответить Цитировать
    786/882
    + 0
  • Насчет пустых рук еще есть обдумка... пока подумаю

    Ответить Цитировать
    787/882
    + 0
  • c00l0ne @ 13.04.23 

    но как прикрутить к МК умножение матриц

    у меня нет МК

    c00l0ne @ 13.04.23 

    так же можем максимумы вычислять, одна матрица испытуемые ряды чисел , а вторая матрица содержит 1 или 0 , где 1 если число является максимумом в ряде

    а как во второй матрице появится 1? заранее ведь не ясно, где максимум. а если ясно, нахрена тогда умножать, сразу бери его.

    Ответить Цитировать
    269/314
    + 0
  • Jak, затеял большой эксперимент: обсчет полностью раздачи с учётом раскладки оппонента:

     

    Код  gpt 4 писала кекв 

    Максимум чудесным образом берет 

    Через векторные инструкции процессора 🤔

     

     

    20% 2 часа))) первая сдача в ха в позе 

    Часов через 10-12 напишу о результатах 

    Это самое большое дерево за всю мою жизнь... Даже не представляю сколько там ветвей и узлов

    Сообщение отредактировал c00l0ne - 28.4.2023, 12:16
    Ответить Цитировать
    788/882
    + 0
  • Молодец.

     

    Я затеял обсчет на видеокарте.

     

    Разобрался как все работает. Сначала научился считать просто 13 карт. Фактически разбирался как записывать на видюху массивы, считать там и забирать назад в память CPU.

     

    Потом сделал расчет 11 карт. Уже на карте перебирал все варианты.

     

    Потом расчет 9 карт. Два уровня перебирал. Все работало мгновенно. Причем все это полным перебором без всяких ухищрений, тупо от 0 до 51 каждый цикл. Разумеется проверял на наличие карт в колоде.

    Все расчеты совпадают с расчетами на CPU.

     

    Надеялся, что и для 5-7 карт будет быстро.

     

    Пару дней назад сделал вариант для 7 карт. Вот тут уже есть время. а я раскатал губу, что и тут будет мало и 5 карт будет считать неск сек.

    На CPU в один поток 15 сек (если многопоток, то 1,5сек), на GPU 32 сек. GPU проверял, занят 100%, там и так многопоток.

    На 9,11 карт - всегда было 0%, те так быстро, что незаметно.

     

    Надо теперь оптимизировать все уровни и наверно можно добить до 1-2 сек.

    Ответить Цитировать
    270/314
    + 0
  • Jak, круто, спеца надо по гпу, оптимизации запилить должно шустро бегать , но сложность алгоритма это сложность алгоритма и никуда от нее не денешься , упрется на какой то грани в железо ... Загрузка/выгрузка долго занимает из памяти в видеопамять? Не bottleneck?

    Я если все получится датасет буду делать оч точный и тренить нейронку... Летом много времени будет свободного...

    Ответить Цитировать
    789/882
    + 0
  • В начале, компиляция и загрузка программы и всех массивов для GPU (программа получилась большой) занимает ~2-3 сек.

    Это делается только 1 раз в начале. Сразу стало заметно, прога выскакивает гораздо позже, чем раньше. Задержку заметно.

     

    Потом при обсчете, загрузка и выгрузка данных занимает примерно 0,2-0,3 сек.

    Ответить Цитировать
    271/314
    + 0
  • Jak, динамически там в видеопамяти  не получается разворачивать деревья? Только по готовым считает?

    По факту то что надо: HR массив , да борд передать стартовый, все остальное динамически алгоритмом развернуть , ниточки обсчитывать в клубочек сматывать ... Сами знаете... Гпу как я понимаю может тысячу ниточек считать своими тысячами cuda ядер ... Просто их надо разделить так чтобы не пересекались ... Мое представление такое, спрошу ещё у gpt 4 потом про алгоритмы на gpu

    Ответить Цитировать
    790/882
    + 0
  • Не получится.

    c00l0ne @ 28.04.23 

    Гпу как я понимаю может тысячу ниточек считать своими тысячами cuda ядер ... Просто их надо разделить так чтобы не пересекались

    Все ниточки будут одинаковые. 1000 ядер считают все по одной программе. Если какое-то ядро хочет пропустить часть кода, ну типа нет такой карты, не считаем. Оно все равно будет занято и ждать пока другие посчитают свою часть. Все ядра работают параллельно по одной программе.

    Если на CPU при многопотоках, каждый поток считает свою часть общей работы. То тут они все считают одинаково. 

    Если написано А= В + С, то это будут считать все, даже если кому-то не надо и бессмысленно.

     

    Программа одна, только входные данные разные.

     

    Мало того, что они считают по одному алгоритму они еще ждут друг друга чтобы считать дальше.

     

    Аналогия.

    У нас есть 12 человек с лопатами (наши 12 ядер CPU). Им надо выкопать картошку с 1 га.

     

    Вот они вышли в поле и начали каждый сам по себе копать картошку по полю где есть свободное место, один пошел вправо, другой влево. И пашут пока всю картошку не выкопают. Каждый сам по себе, не глядя на других, копает, смотрит, если есть картошка, поднимает ее и кладет в ведро. Если нет - дальше копает.

    Главное - они выкапывают картошку каждый по своей программе и траектории.

     

    На GPU не так.

    Есть 2048 (у меня на карте столько ядер) человек. Вот они встали в одну линию и одновременно и одинаково машут лопатами. Кто-то зацепил картошку, кто-то просто по пустому месту копнул. Не важно попалась при твоем движении лопатой картошка или нет, каждый нагибается и что-то берет из ямки и кладет в ведро. Если там есть картошка, хорошо, если нет, ты просто в пустую махнул лопатой и ничего не положил в ведро. Потом если у кого-то ведро заполнилось, он бросает работу и идет выкинуть ведро в машину. И ВСЕ 2048 копщиков бросают свои лопаты и идут с ним выкидывать ведро. Потом все идут на свои места и по команде продолжают копать.

     

    Вот как-то так.

    Сообщение отредактировал Jak - 28.4.2023, 12:51
    Ответить Цитировать
    272/314
    + 0
  • Jak, ну а что нужно то ? Я знаю как работает cuda , курс прослушал...

    Передаем стартовые узлы каждой ниточке свои и погнали, стартовые узлы на одном уровне 

    Все 1000 потоков например стартуют с первой сдачи, стандартно распараллелив их по парам карт, работа у них одна и та же, сначала наверх поставить 2-2 потом 3-3 и ТД, понятно те кто не смогут поставить наверх две карты покурят в сторонке(асу курение)

    Память нужна на длину ветки , там копейки, я чё то не понимаю в чём загвоздка, к массиву HR можно же параллельно обращаться? Всем ядрам сразу на чтение... По-любому можно ... Больше потоки нигде не пересекаются...

    Грузим boards [2048][3][6] byte = 36 кбайт, два HR3 HR5 30 мбайт, lookup таблицу как  делать ходы и какие типы ходов (1 кбайт)

    Запускаем код который проводит генерацию новых узлов и считает евшку параллельно для этих досочек, единственное там никакой рекурсии не получится сделать , придется выпрямлять код в линейный и шпарить по прямой, но это дело техники for i1i2 for type dostep for i1i2 for type dostep for i1i2 isend? Return royalty backprop 

    Пс я кажется понял в чем проблема , у тебя в алгоритме доска одна? Или там целый массив катается индексированных, в одном потоке одной доской можно обойтись board[3][6] и массивом outs[14]  этого , достаточно чтобы полностью описать узел , потоков 2048 допустим, значит нам нужно досок 2048 : boards[2048][3][6] outs[2048][14] по id thread их заполнять и не нужно никаких битовых ухищрений и прочей ерунды, перед тобой конвейер из тысячи ядер, ускоряться тут не нужно ... Наоборот максимально упростить алгоритм... Лопату нужно побольше)

    Сделай сначала упрощенку , зачем пыжиться на фуловую колоду 

    Стартер должно считать за 1-2 сек) загрузка памяти 200-300 мбайт...

    Сообщение отредактировал c00l0ne - 28.4.2023, 13:21
    Ответить Цитировать
    791/882
    + 0
1 105 106 107 108 114
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.