c# 24 сек
пс учите с++ тогда
Легко
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;
Jak, красивое, вечером попробую
Освежаю знания о с++
Скомпилировал вчера тест с помощью intel c++ compiler
Выдал 9 секунд
имба получается
Пс я на делфи не наезжаю, но моё почтение удобству IDE visual studio, особенно ощущаешь это когда кодишь в IDE Delphi
И вот в данном примере у нас код отличается атомарной операцией, ну неужели в этом все дело и компилятор не может в одно и то же откомпилировать
o := o + 1;
И
Inc(o);
Или у тебя проц топовый типа i9 12?
Пс сорян не заметил, у меня все через continue реализовано , в этом все дело.
Форум короче багает когда тут код пишешь кек
Ну а Visual Basic старая кляча которую так и не прокачали , но какой там человекоподобный красивый язык... Эх
И ";" в конце строки не надо ставить имба
провел тесты:
vb.net 5 мин кек
делфи 1 мин
с++ 16 сек
Что-то не верится в 4-х кратное отставание Дельфи от С++. Хотелось бы увидеть достоверных тестов при выполнении аналогичного кода.
Galax, ха 4х кратное
70 сек против 9.5 это семи кратное Карл
При одинаковой структуре кода
c00l0ne @ 28.09.22данном примере у нас код отличается атомарной операцией, ну неужели в этом все дело и компилятор не может в одно и то же откомпилировать
o := o + 1;
И
Inc(o);
Или у тебя проц топовый типа i9 12?
Пс сорян не заметил, у меня все через continue реализовано , в этом все дело.
Короче все переписал 60 секунд, у тебя какая версия делфей, gettickcount в новых вроде убрали, у меня delphi 11
Да и сам язык Паскаль мне как Артуру Мартиросяну не симпотичен,кек
Пс разбираться дальше не буду, у меня консольное приложение , у тебя виндовсное, может в этом дело, где то жрёт проц
Вот тест время старта и время завершения
Надо ковыряться где то в настройках компилятора
Если есть у тебя лайфхак по делфям , время его мне сообщить, а то уже подгорает
А вот с++ с использованием интеловского компилятора
9.44 сек
Это с учётом что у меня AMD)
Возможно на интелах ещё быстрее
И на этом вопрос с выбором языка закрыт.
Сиськи рулят! (c++)
П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 млрд НОД терминальных и по три хешрейта на ноду, станет понятно за сколько считаются терминальные ноды
Пс если какой то код надо , то можете попросить.
Для замера времени в тестовом коде, добавь следующие строчки:
var CurTime: TTime;
CurTime:= Now;
//основной код
CurTime:= CurTime - Now;
Form1.Memo1.Lines.Add(TimeToStr(CurTime));
В первом варианте 1ккк пятерок, во втором 10ккк.
Повтор 1000 и 10000 по 1млн раз. Памяти много для другого в проге занято, пишет "стек переполнен".
за 8 сек 10ккк. И это еще используя индексы в массивах, если брать напрямую только числа (карты)
за 2,5 сек 10ккк.
Убрал всякие отладчики. С ними в 10 раз медленней. 1ккк за 8 сек.
Jak, Грац, отличные результаты
Проц в студию, сколько ггерц, модель, какая версия делфи
Но есть маленькие замечания:
Посл вариант где m1 m2 m3 m4 m5
Проц просто закешировал этот хеш и держит в регистре, поэтому так быстро, на практике такого не будет
Поэтому данный перформанс мы не учитываемых
А вот 8 сек на 1ккк запишем
За 1 сек 1.25млн хешей
В любом случае это отличные новости, потому что терминальные ноды решаются за пару минут
тут не исключен вариант оптимизаций " значение не используется, операция бессмыслена, выкидываем"
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Гб
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 млн хеш в сек фиксирую
Все же добрались рученьки посмотреть что там с vb .net в бенчмарке, оказывается c# и vb.net генерируются в IL и потом уже компилятся, должны иметь одинаковые результаты, как выяснилось я тип переменной не удачно задал и она конвертировалась там 15 млрд раз
Итог vb.net : за 24 сек в тесте 16 млрд НОД насчитал, как и c#
Про с++ , я совсем забыл что тут надо следить самому за памятью, создавать геморно потоки и прочие "радости" "сисей".
Ждём ryzen 5000 уже заказал проц и мат плату. И будем кодить. Язык vb.net все же выберу. Если что потом узкие места библиотеками на с++ залатаем.
Через недельку две начнём.
Ценники на райзены можно обсудить:
Пс может кому надо накодить прикладное приложение какое нибудь, писать тз в личку можно. Опыт есть, даже драйвера на асме писал... Давно правда... Но весело было, на форуме wasmA... Rip Алексею...
А можешь код скинуть
Картинкой или текстом без разницы
провел тесты:
vb.net 5 мин кек
делфи 1 мин
с++ 16 сек