powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Бенчмарки C#, C++, Java, Delphi
25 сообщений из 265, страница 9 из 11
Бенчмарки C#, C++, Java, Delphi
    #34491271
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё хочуА не трудно будет запустить opt-алгоритм на с++/дельфи? Интересно во сколько раз эти языки быстрее справятся с задачей.

Забеги новой реализации для razmer = 13.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Intel Core Duo E6600 ( 3 . 1  Ghz)

Java  1 . 6  server       13031  ms
C#                    13765  ms
Delphi  10              13800  ms
            

AMD Athlon  64   3000 + ( 2  Ghz)

C#                    18390  ms
Delphi  10              18939  ms
Java  1 . 6  server       21297  ms

INTEL M760 ( 2  Ghz)

C#                    23256  ms
Java  1 . 6  server       24203  ms
Delphi  10              26079  ms


P4 ( 2 . 6  Ghz)

Delphi  10              21125  ms
C#                    21218  ms
Java  1 . 6  server       24709  ms

Исходники + бинарники:
http://www.mycoolfotos.com/lzma/repeat_goto.zip (273 KB)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34491980
Дятел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex
http://www.mycoolfotos.com/lzma/repeat_goto.zip (273 KB)

Прогнал на своей тачке Pentium 4 3ГГц (без Java):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Intel C++    8234 
D10 goto     8859 
Dproc        9484 
BCB          9671 
Drep         9875 
VC++        10766 
C#          14672 
C#opt       27422 
Dopt        28141   

Забавно...
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34491999
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Opt версии надо сравнивать только между собой - там другие входные параметры -razmer = 13;
У всех остальных razmer = 12;
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34492038
Дятел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master AlexOpt версии надо сравнивать только между собой - там другие входные параметры -razmer = 13;
У всех остальных razmer = 12;
Пардон, не въехал сразу...
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34494867
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там чтобы всё "по честному" было, вариант С# нужно переписать на указателях. Иначе рулит проверка выхода за границы массива, что является существенным тормозом. Как я показал ранее на примере с сортировкой, C# "на указателях" не сильно отстаёт от С++...
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34494878
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте вот такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
unsafe static void Main(string[] args)
        {
            int razmer =  12 ;
            int* b = stackalloc int[ 30 ];
..........................
..........................
..........................
}
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34495123
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТам чтобы всё "по честному" было, вариант С# нужно переписать на указателях. Иначе рулит проверка выхода за границы массива, что является существенным тормозом. Как я показал ранее на примере с сортировкой, C# "на указателях" не сильно отстаёт от С++...

Давайте уже что-то другое потестируем - эти перестановки притомили малехо :) Например, реализацию HashTable (HashMap) ! Предлагайте.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34495506
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex Алексей КТам чтобы всё "по честному" было, вариант С# нужно переписать на указателях. Иначе рулит проверка выхода за границы массива, что является существенным тормозом. Как я показал ранее на примере с сортировкой, C# "на указателях" не сильно отстаёт от С++...

Давайте уже что-то другое потестируем - эти перестановки притомили малехо :) Например, реализацию HashTable (HashMap) ! Предлагайте. Ага, как дошло до оптимизации C#, так сразу "давайте задачу сменим", типа надоела... :-)))))))
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34495920
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К Master Alex Алексей КТам чтобы всё "по честному" было, вариант С# нужно переписать на указателях. Иначе рулит проверка выхода за границы массива, что является существенным тормозом. Как я показал ранее на примере с сортировкой, C# "на указателях" не сильно отстаёт от С++...

Давайте уже что-то другое потестируем - эти перестановки притомили малехо :) Например, реализацию HashTable (HashMap) ! Предлагайте. Ага, как дошло до оптимизации C#, так сразу "давайте задачу сменим", типа надоела... :-)))))))

Я вот не пойму: а какой тогда вообще смысл городить все эти managed code, кричать о супербезопасности, новых, доселе неведомых преимуществах, если потом приходится оптимизировать на указателях? Не программа, а мешанина какая-то получается.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34495980
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalekЯ вот не пойму: а какой тогда вообще смысл городить все эти managed code, кричать о супербезопасности, новых, доселе неведомых преимуществах, если потом приходится оптимизировать на указателях? Не программа, а мешанина какая-то получается. Ну почему же... Не во всех ведь задачах нужен минимум функциональности и безопасности и макимум производительности. Если скорость выполнения позволяет (типичный клиент к БД тому пример), то почему бы не использовать дополнительные контроли типов и границ массивов? В итоге код получается потенциально надёжнее. А если добавить, в данном случае, проверку выхода за границы массива в С++, уверен, скорость будет примерно одинаковая. Наоборот хорошо, что язык позволяет разработчику выбирать между safe и unsafe кодом в зависимости от решаемой задачи.

ЗЫ: и за что все так ненавидят C#... :-))
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34496614
A.V.Goncharyk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ может кому интереснее тут сравнивать ?

http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=all&lang2=csharp

http://dada.perl.it/shootout/craps.html
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34496661
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalek
Я вот не пойму: а какой тогда вообще смысл городить все эти managed code, кричать о супербезопасности, новых, доселе неведомых преимуществах, если потом приходится оптимизировать на указателях? Не программа, а мешанина какая-то получается.

иначе потенциальные потребители языка не будут платить деньги
за сертификаты по очередной версии.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34496762
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТам чтобы всё "по честному" было, вариант С# нужно переписать на указателях.
Переписать C# вариант на указателях - это примерно то же, что переписать например Delphi вариант на ассемблере. То есть "инородное содержание в формально той оболочке".
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34496894
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Алексей КТам чтобы всё "по честному" было, вариант С# нужно переписать на указателях.
Переписать C# вариант на указателях - это примерно то же, что переписать например Delphi вариант на ассемблере. То есть "инородное содержание в формально той оболочке". Не то же самое. Assembler - это уже другой язык, а тут всё в рамках спецификации C#. Там в противном случае получается, что программа на C# делает больше чем программы на C++ и Delphi. Помимо мамого алгоритма происходит дополнительная проверка границ массивов. Нужно или добавить проверку границ в C++ и Delphi, или убрать её из C#. Иначе программы получаются разные и сравнивать скорость их работы глупо.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34496896
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"мамого" следует читать как "самого"
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34497029
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К softwarer Алексей КТам чтобы всё "по честному" было, вариант С# нужно переписать на указателях.
Переписать C# вариант на указателях - это примерно то же, что переписать например Delphi вариант на ассемблере. То есть "инородное содержание в формально той оболочке". Не то же самое. Assembler - это уже другой язык, а тут всё в рамках спецификации C#.
Хм. А с каких пор ассемблерные вставки покинули спецификацию дельфи? Один в один.

Алексей КТам в противном случае получается, что программа на C# делает больше чем программы на C++ и Delphi.
Ну так это и является целью проверки. Грубо говоря, есть два типа проверок. Один тип - это состязание программистов в крутоте. Язык тут большого значения не имеет, вопрос именно в умениях, знании тонкостей, алгоритмов итп. Другой тип - это сравнение инструментов, и тут сравниваются.... типичные особенности, а не умение выжать максимум. Скажем, для примера - я могу знать, что в таком-то компиляторе цикл while реализован куда лучше цикла repeat, и таким образом ускорить программу с repeat. Это будет плюс мне как программисту - но согласись, не будет плюсом инструменту.

Указатели в C#, как ни крути, это "заштатный" инструмент - призванный примирить потребности с возможностями. И как сам знаешь, окруженный кучами оговорок "не надо", "в крайнем случае" итп - в точности как ассемблерные вставки.

Алексей КНужно или добавить проверку границ в C++ и Delphi, или убрать её из C#. Иначе программы получаются разные и сравнивать скорость их работы глупо.
Не забудь один момент - в дельфе я могу включить или отключить проверку границ, не трогая программного кода. То есть держать проверку границ в debug и отключать в release. Согласись, это не то же самое, что "для release переписать на указатели".
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34497061
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerХм. А с каких пор ассемблерные вставки покинули спецификацию дельфи? Один в один.Чё-то я уже сам засомневался... :-)) softwarerНу так это и является целью проверки. Грубо говоря, есть два типа проверок. Один тип - это состязание программистов в крутоте. Язык тут большого значения не имеет, вопрос именно в умениях, знании тонкостей, алгоритмов итп. Другой тип - это сравнение инструментов, и тут сравниваются.... типичные особенности, а не умение выжать максимум. Скажем, для примера - я могу знать, что в таком-то компиляторе цикл while реализован куда лучше цикла repeat, и таким образом ускорить программу с repeat. Это будет плюс мне как программисту - но согласись, не будет плюсом инструменту.Безусловно. Всё зависит от цели, преследуемой "забегами". Но раз уж тут привели пример "изврата" с goto на делфи, мне показалось, что для полноты картины не хватает "изврата" на С# с указателями. А дальше каждый сам для себя сделает выводы о целесообразности выбора того или иного языка и подхода при решении той или иной задачи. softwarerУказатели в C#, как ни крути, это "заштатный" инструмент - призванный примирить потребности с возможностями. И как сам знаешь, окруженный кучами оговорок "не надо", "в крайнем случае" итп - в точности как ассемблерные вставки.Даже галочку специальную в свойствах C#-проекта сделали, включающую unsafe... :-)) softwarerНе забудь один момент - в дельфе я могу включить или отключить проверку границ, не трогая программного кода. То есть держать проверку границ в debug и отключать в release. Согласись, это не то же самое, что "для release переписать на указатели".За это делфи большой плюс. Жаль что такого нет в C#. Он там пытается сам временами при оптимизации отключать эту проверку, но естественно не всегда у него это получится и галочка не помешала бы.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34497123
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЖаль что такого нет в C#.
Я бы сказал, это противоречит идеологии managed кода. Отключать ее можно только в тех случаях, когда соответствующая проверка выполнима на этапе компиляции (точнее даже, не компиляции, а загрузки сборки - иначе я подправлю пару байт в сборке и таки подсуну хакерское приложение со всеми положенными атрибутами).
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34497369
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЯ бы сказал, это противоречит идеологии managed кода.С другой стороны, если нам очень важна производительность и по каким-то причинам указанной сборке мы полностью доверяем, то почему бы эту проверку не отключить.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34499494
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К, не, то, что с# тестили с баундчеком – это совершенно правильно (в джаве это вроде не отключается?..), но изврата ради конечно можешь написать в ансейфе, скомпилить, выложить, ты тут самый большой любитель этого дела :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34503528
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оптимизировал немного :)
Athlon X2 3800+ (2ГГц)
Delphi 2007
razmer=13
Time: 13796(ms)
Код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
program D2007_new_new;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  Windows;

type
  TArr=array[ 0 .. 15 ] of integer;

const
  razmer= 13 ;

var
  Ar:TArr;
  Time1,Time2:integer;
  nomvar:integer;

function Test(var b:TArr):integer;
var
  m,min,obmen:integer;
  x,y,z:integer;
begin
  Result:= 0 ;
  repeat
    inc(Result);
    x:=b[razmer- 2 ];
    y:=b[razmer- 1 ];
    z:=b[razmer];

    b[razmer- 2 ]:=y;
    b[razmer- 1 ]:=x;
    inc(Result);

    b[razmer- 2 ]:=z;
    b[razmer]:=y;
    inc(Result);

    b[razmer- 2 ]:=x;
    b[razmer- 1 ]:=z;
    inc(Result);

    b[razmer- 2 ]:=y;
    b[razmer]:=x;
    inc(Result);

    b[razmer- 2 ]:=z;
    b[razmer- 1 ]:=y;
    inc(Result);

    obmen:=razmer- 2 ;
    repeat
      dec(obmen);
      min:=b[obmen];
    until min<b[obmen+ 1 ];
    if obmen= 0  then
      break;
    m:=razmer+ 1 ;
    repeat
      dec(m);
    until b[m]>min;
    b[obmen]:=b[m];
    b[m]:=min;
    if obmen<razmer- 1  then
      begin
        inc(obmen);
        m:=razmer;
        repeat
          min:=b[obmen];
          b[obmen]:=b[m];
          b[m]:=min;
          inc(obmen);
          dec(m);
        until obmen>m;
      end;
  until false;
end;

var
  i:integer;
begin
  //В нулевой ячейке массива должно быть записано число,
  //меньшее любого значимого элемента массива.
  //Это признак конца перестановок
  Ar[ 0 ]:= 0 ;
  for i:= 1  to  15  do
    Ar[i]:=i;
  Time1:=GetTickCount;
  nomvar:=Test(Ar);
  Time2:=GetTickCount;
  Writeln('Count: ',nomvar);
  Writeln('Time: ',Time2-Time1,'(ms)');
  Readln;
end.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34503546
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если учесть, что при лексикографической перестановке вторая половина вариантов - это зеркальное отражение первой половины, то заменив
Код: plaintext
1.
    if obmen= 0  then
      break;
на
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    if (razmer and  1 )= 0  then //четный размер
      begin
        if ((obmen shl  4 ) or min)=($ 10  or (razmer shr  1 )) then
          break;
      end
    else //нечетный размер
      begin
        if ((obmen shl  8 ) or (min shl  4 ) or b[ 1 ])=($ 200  or ((razmer shr  1 ) shl  4 ) or ((razmer shr  1 )+ 1 )) then
          break;
      end;
и
Код: plaintext
  nomvar:=Test(Ar);
на
Код: plaintext
  nomvar:= 2 *Test(Ar);
получим
Time: 7375(ms)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34503570
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл написать, что при такой замене razmer не должен превышать 15. Если надо больше, но до 255 (перестановок на много лет работы:)), то
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    if (razmer and  1 )= 0  then //четный размер
      begin
        if ((obmen shl  8 ) or min)=($ 100  or (razmer shr  1 )) then
          break;
      end
    else //нечетный размер
      begin
        if ((obmen shl  16 ) or (min shl  8 ) or b[ 1 ])=($ 20000  or ((razmer shr  1 ) shl  8 ) or ((razmer shr  1 )+ 1 )) then
          break;
      end;
Элементы массива тоже с такими же ограничениями.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34504405
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74
Код: plaintext
  nomvar:=Test(Ar);
на
Код: plaintext
  nomvar:= 2 *Test(Ar);


В таком случае алгоритм будет только СЧИТАТЬ, но не предоставлять готовые перестановки.

Тогда уж можно сделать оптимизацию сводимую к вычислению факториала от количества элементов :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34504428
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUsВ таком случае алгоритм будет только СЧИТАТЬ, но не предоставлять готовые перестановки.
ДА??? Я же написал про зеркальное отражение. после каждой перестановки получаем два варианта - с 1 по razmer и с razmer до 1.
Код: plaintext
1.
2.
3.
4.
5.
for i:= 1  to razmer do
  write(b[i],' ');
writeln;
for i:=razmer downto  1  do
  write(b[i],' ');
writeln;
Это не предоставление готовых перестановок?
...
Рейтинг: 0 / 0
25 сообщений из 265, страница 9 из 11
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Бенчмарки C#, C++, Java, Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]