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

22
Статистика
Статистика
22
Статистика темы
  • Популярность
    Топ-5464
  • Постов
    2,261
  • Просмотров
    174,118
  • Подписок
    22
  • Карма автора
    -45
1 85 86 87 88 114
  • Jak @ 27.09.22 

    А что проверять?

    Бейсик никогда не будет быстрей Дельфи

    А можешь код скинуть

    Картинкой или текстом без разницы

     

    провел тесты: 

    vb.net 5 мин кек

    делфи 1 мин

    с++ 16 сек

    Сообщение отредактировал c00l0ne - 27.9.2022, 21:53
    Ответить Цитировать
    546/882
    + 0
  • c# 24 сек

     

    пс учите с++ тогда

    Сообщение отредактировал c00l0ne - 27.9.2022, 22:34
    Ответить Цитировать
    547/882
    + 0
  • Легко

    procedure Coolone;
    var cc:int64; i,t1,t2,t3,m1,m2,m3,m4,m5,b1,b2,b3,b4,b5:integer; o:array[0..12] of integer;
    begin
     Tim0:=gettickcount;
     cc:=0;
     for i:=0 to 12 do o:=4;
     for t1:=0 to 12 do if o[t1]>0 then begin
       dec(o[t1]);
       for t2:=t1 to 12 do if o[t2]>0 then begin
         dec(o[t2]);
         for t3:=t2 to 12 do if o[t3]>0 then begin
           dec(o[t3]);
           for m1:=0 to 12 do if o[m1]>0 then begin
             dec(o[m1]);
             for m2:=m1 to 12 do if o[m2]>0 then begin
               dec(o[m2]);
               for m3:=m2 to 12 do if o[m3]>0 then begin
                 dec(o[m3]);
                 for m4:=m3 to 12 do if o[m4]>0 then begin
                   dec(o[m4]);
                   for m5:=m4 to 12 do if o[m5]>0 then begin
                     dec(o[m5]);
                     for b1:=0 to 12 do if o[b1]>0 then begin
                       dec(o[b1]);
                       for b2:=b1 to 12 do if o[b2]>0 then begin
                         dec(o[b2]);
                         for b3:=b2 to 12 do if o[b3]>0 then begin
                           dec(o[b3]);
                           for b4:=b3 to 12 do if o[b4]>0 then begin
                             dec(o[b4]);
                             for b5:=b4 to 12 do if o[b5]>0 then begin
                               dec(o[b5]);
                               inc(cc);
                               inc(o[b5]);
                             end;
                             inc(o[b4]);
                           end;
                           inc(o[b3]);
                         end;
                         inc(o[b2]);
                       end;
                       inc(o[b1]);
                     end;
                     inc(o[m5]);
                   end;
                   inc(o[m4]);
                 end;
                 inc(o[m3]);
               end;
               inc(o[m2]);
             end;
             inc(o[m1]);
           end;
           inc(o[t3]);
         end;
         inc(o[t2]);
       end;
       inc(o[t1]);
     end;
     Tim0:=gettickcount-Tim0; Form1.Memo.Lines.Add(Gettime(Tim0));
     Form1.Memo.Lines.Add(inttostr(cc));
    end;

    Ответить Цитировать
    155/314
    + 0
  • Jak, красивое, вечером попробую

    Освежаю знания о с++

     

     

    Скомпилировал вчера тест с помощью intel c++ compiler

    Выдал 9 секунд 

    имба получается

     

    Пс я на делфи не наезжаю, но моё почтение удобству IDE visual studio, особенно ощущаешь это когда кодишь в IDE Delphi

     

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

    o := o + 1;

    И

    Inc(o);

    Или у тебя проц топовый типа i9 12?

    Пс сорян не заметил, у меня все через continue реализовано , в этом все дело. 

     

    Форум короче багает когда тут код пишешь кек

     

    Ну а Visual Basic старая кляча которую так и не прокачали , но какой там человекоподобный красивый язык... Эх

    И ";" в конце строки не надо ставить имба

    Сообщение отредактировал c00l0ne - 28.9.2022, 13:01
    Ответить Цитировать
    548/882
    + 0
  • провел тесты: 

    vb.net 5 мин кек

    делфи 1 мин

    с++ 16 сек

     

    Что-то не верится в 4-х кратное отставание Дельфи от С++. Хотелось бы увидеть достоверных тестов при выполнении аналогичного кода.

    Ответить Цитировать
    43/52
    + 0
  • Galax, ха 4х кратное 

    70 сек против 9.5 это семи кратное Карл

    При одинаковой структуре кода

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

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

    o := o + 1;

    И

    Inc(o);

    Или у тебя проц топовый типа i9 12?

    Пс сорян не заметил, у меня все через continue реализовано , в этом все дело. 

     

    Короче все переписал 60 секунд, у тебя какая версия делфей, gettickcount в новых вроде убрали, у меня delphi 11

     

    Да и сам язык Паскаль мне как Артуру Мартиросяну не симпотичен,кек

    Пс разбираться дальше не буду, у меня консольное приложение , у тебя виндовсное, может в этом дело, где то жрёт проц

    Вот тест время старта и время завершения

    Надо ковыряться где то в настройках компилятора

    Если есть у тебя лайфхак по делфям , время его мне сообщить, а то уже подгорает 

    А вот с++ с использованием интеловского компилятора

    9.44 сек

    Это с учётом что у меня AMD) 

    Возможно на интелах ещё быстрее

    И на этом вопрос с выбором языка закрыт.

    Сиськи рулят! (c++)

    Сообщение отредактировал c00l0ne - 28.9.2022, 14:16
    Ответить Цитировать
    550/882
    + 0
  • П6: изучение с++

    1. Multithreading

    2. Classes and functions

    3. Memory management

     

    Вот и весь курс)

     

    Ну и какую то задачу давайте чтобы не скучно было:

    Подгрузить hr3 и hr5 и создать функции gethr3 gethr5, сгенерировать сэмплы для этих функций и протестировать , вывести сколько хешрейтов в сек алгоритм может переварить

    Уточню тз :

    Измерять только вызовы функций, рандомайзер не измерять:

    Псевдокод такой

    Samples(1 000 000 000) = randomgeneration

    Start_time = now

    For each item in samples

       Hrtemp = gethr5(item)

       If hrtemp>0 then cc=cc +1

    Next

    End_time =now

    Print end_time - start_time

    Print cc

     

    Решения на делфи приветствуются для сравнения )

    Если проще то :  1млрд готовых хешрейтов за сколько времени вычислить можно.

    А у нас в дереве 64 млрд НОД терминальных и по три хешрейта на ноду, станет понятно за сколько считаются терминальные ноды

     

    Пс если какой то код надо , то можете попросить.

    Сообщение отредактировал c00l0ne - 28.9.2022, 14:46
    Ответить Цитировать
    551/882
    + 0
  • Для замера времени в тестовом коде, добавь следующие строчки:

     

    var CurTime: TTime; 

     

     CurTime:= Now;

      //основной код

     CurTime:= CurTime - Now;
    Form1.Memo1.Lines.Add(TimeToStr(CurTime));

    Ответить Цитировать
    44/52
    + 0
  • c00l0ne @ 28.09.22 

    Если проще то :  1млрд готовых хешрейтов за сколько времени вычислить можно.

    Ну что первые результаты

    500 млн хешрейтов в сек

    Котэ одобряет

     

    Задачу перегнул немного ) 1млрд замените на 250 млн, иначе 20 гб рамы надо

    Сообщение отредактировал c00l0ne - 28.9.2022, 19:35
    Ответить Цитировать
    552/882
    + 0
  • В первом варианте 1ккк пятерок, во втором 10ккк.

    Повтор 1000 и 10000 по 1млн раз. Памяти много для другого в проге занято, пишет "стек переполнен".

     

    за 8 сек 10ккк. И это еще используя индексы в массивах, если брать напрямую только числа (карты)

     

    за 2,5 сек 10ккк.

     

    Убрал всякие отладчики. С ними в 10 раз медленней. 1ккк за 8 сек.

    Ответить Цитировать
    156/314
    + 0
  • Jak, Грац, отличные результаты

    Проц в студию, сколько ггерц, модель, какая версия делфи

    Но есть маленькие замечания:

    Посл вариант где m1 m2 m3 m4 m5

    Проц просто закешировал этот хеш и держит в регистре, поэтому так быстро, на практике такого не будет

    Поэтому данный перформанс мы не учитываемых 

    А вот 8 сек на 1ккк запишем

    За 1 сек 1.25млн хешей

     

    В любом случае это отличные новости, потому что терминальные ноды решаются за пару минут

    Сообщение отредактировал c00l0ne - 29.9.2022, 11:57
    Ответить Цитировать
    553/882
    + 0
  • тут не исключен вариант оптимизаций " значение не используется, операция бессмыслена, выкидываем"

    Ответить Цитировать
    6/6
    + 1
  • Yras @ 29.09.22 

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

    Все может быть

     

    Jak, А! блин ! вы условие забыли if t>0 cc=сс+1

    Поправте пожалуйста

    У меня то if (hr > 0) cc=cc+1;

    в рабочем цикле, а утебя попроще

    Сообщение отредактировал c00l0ne - 29.9.2022, 12:14
    Ответить Цитировать
    554/882
    + 0
  • Yras @ 29.09.22 

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

    Обычно все наоборот, пихается куча ненужной шелухи, такие как оверфлоу протекшин , код для дебаггера  и т.д.

    Ответить Цитировать
    555/882
    + 0
  • Yras @ 29.09.22 

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

    Согласен.

    Тк t1 дальше не используется, может выкинуть этот оператор. Ехал в машине, подумал об этом.

     

    Добавил if t1>0 then inc(cc); стало 6 сек за 1ккк.

     

    c00l0ne @ 29.09.22 

    А вот 8 сек на 1ккк запишем

    За 1 сек 1.25млн хешей

    Ну, вообще-то 1млрд/8=125млн, а не 1.25млн

    AMD Ryzen 5 3600, памяти 32Гб

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

    Согласен.

    Тк t1 дальше не используется, может выкинуть этот оператор. Ехал в машине, подумал об этом.

     

    Добавил if t1>0 then inc(cc); стало 6 сек за 1ккк.

     

    Ну, вообще-то 1млрд/8=125млн, а не 1.25млн

    AMD Ryzen 5 3600, памяти 32Гб

    У меня 3700x 

    Да я когда делил запятую не вернул, ок 

    166 млн хеш в сек фиксирую

    Сообщение отредактировал c00l0ne - 29.9.2022, 14:40
    Ответить Цитировать
    556/882
    + 0
  •  Фиксируем

    c00l0ne @ 29.09.22 

    166 млн хеш в сек фиксирую

    В с++ нашёл ошибки с кешированием, поправил 83 млн хешей в сек

    Скажи версию delphi

    Ответить Цитировать
    557/882
    + 0
  • Все же добрались рученьки посмотреть что там с vb .net в бенчмарке, оказывается c# и vb.net генерируются в IL и потом уже компилятся, должны иметь одинаковые результаты, как выяснилось я тип переменной не удачно задал и она конвертировалась там 15 млрд раз

    Итог vb.net : за 24 сек в тесте 16 млрд НОД насчитал, как и c# 

    Про с++ , я совсем забыл что тут надо следить самому за памятью, создавать геморно потоки и прочие "радости" "сисей".

    Ждём ryzen 5000 уже заказал проц и мат плату. И будем кодить. Язык vb.net все же выберу. Если что потом узкие места библиотеками на с++ залатаем. 

    Через недельку две начнём.

    Ценники на райзены можно обсудить:

    Ответить Цитировать
    558/882
    + 0
  • Пс может кому надо накодить прикладное приложение какое нибудь, писать тз в личку можно. Опыт есть, даже драйвера на асме писал... Давно правда... Но весело было, на форуме wasmA... Rip Алексею...

    Ответить Цитировать
    559/882
    + 0
1 85 86 87 88 114
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.