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

За основу взял LZMA SDK (от 7Zip) http://www.7-zip.org/sdk.html

Тестилось все на 4 компах под Windows XP SP2. Запускалось тестовое приложение lzmaalone c ключом b.
Вот выхлоп:

Код: 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.
         Compression Speed           Decompression Speed  

P4  2 .6GHz
~~~~~~~~~~
C++       1361  KB/s    1603  MIPS        19009  KB/s    1916  MIPS
Java  1 . 6    888  KB/s    1046  MIPS        10972  KB/s    1078  MIPS
Delphi7    775  KB/s     913  MIPS         9466  KB/s     930  MIPS
C#  	   757  KB/s     892  MIPS        13870  KB/s    1398  MIPS

AMD64  3000 +
~~~~~~~~~~~
C++       1346  KB/s    1585  MIPS        18831  KB/s    1898  MIPS
Java  1 . 6    867  KB/s    1021  MIPS        11067  KB/s    1087  MIPS
Delphi7    770  KB/s     906  MIPS         9466  KB/s     930  MIPS
C#         757  KB/s     891  MIPS        13833  KB/s    1394  MIPS

INTEL M760  2000  Ghz
~~~~~~~~~~~~~~~~~~~
C++       1346  KB/s    1585  MIPS        18831  KB/s    1898  MIPS
Java  1 . 6    873  KB/s     1028  MIPS        9888  KB/s     971  MIPS
Delphi7    820  KB/s      966  MIPS        7895  KB/s     775  MIPS
C#         784  KB/s      924  MIPS       12307  KB/s    1240  MIPS

Core Duo  2 .4GHz
~~~~~~~~~~~~~~~
C++       2068  KB/s    2436  MIPS        22677  KB/s    2286  MIPS 
Java  1 . 6   1270  KB/s    1495  MIPS        13721  KB/s    1348  MIPS
C#        1126  KB/s    1326  MIPS        15984  KB/s    1611  MIPS
Delphi7   1123  KB/s    1322  MIPS        10078  KB/s     990  MIPS


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

За основу взял LZMA SDK (от 7Zip) http://www.7-zip.org/sdk.html

Тестилось все на 4 компах под Windows XP SP2. Запускалось тестовое приложение lzmaalone c ключом b.
Вот выхлоп: Круто! КоркаДу порвал всех как тузик грелку:)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34426835
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
Core Duo  2 .4GHz
~~~~~~~~~~~~~~~
C++       2068  KB/s    2436  MIPS        22677  KB/s    2286  MIPS 
Java  1 . 6   1270  KB/s    1495  MIPS        13721  KB/s    1348  MIPS
C#        1126  KB/s    1326  MIPS        15984  KB/s    1611  MIPS
Delphi7   1123  KB/s    1322  MIPS        10078  KB/s     990  MIPS

Хм.. вы не ошиблись с последними двумя строками? Почему-то мне кажется, что Delphi должен быть хоть чуть быстрее.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34426904
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм...
Мне кажется что что-то не так в консерватории насчет Дельфи. Я сомневаюсь, что он оказался медленнее языков с виртуальной машиной
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34426947
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Хм.. вы не ошиблись с последними двумя строками? Почему-то мне кажется, что Delphi должен быть хоть чуть быстрее.
Перемерил:
Код: plaintext
1.
2.
C#        1094  KB/s     1289  MIPS       15557  KB/s     1568  MIPS   
Delphi7   1094  KB/s     1288  MIPS        9927  KB/s      975  MIPS
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34426994
LMM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Master Alex
Ты бы еще Делфи 1 или 2 взял.
P.S.
Для чистоты эксперемента надо D2006 брать, у него более оптимизированный компилятор.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34427296
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А шина какая? А память? А диск? Или диск не участвует?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34427739
mrDOS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ужос жаба быстрее делфи
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34427848
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMMДля чистоты эксперемента надо D2006 брать, у него более оптимизированный компилятор.
Интересная идея. Т.е. есть уверенность, что в D2006 полностью переписали компилятор?

maXmoА шина какая? А память? А диск? Или диск не участвует?
Диск не участвует.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34428229
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex LMMДля чистоты эксперемента надо D2006 брать, у него более оптимизированный компилятор.
Интересная идея. Т.е. есть уверенность, что в D2006 полностью переписали компилятор?


Нет, не полностью. Но довольно существенно.
Можешь попробовать сам, будет действительно интересно.

Тем более, ты, похоже не оригинальный LZMA SDK под Delphi тестируешь, а некий порт, о качестве портирования которого - можно только догадываться.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34428244
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А судя по коду этого порта - качество там (мозгов) - ниже плинтуса.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34428303
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grexhideА судя по коду этого порта - качество там (мозгов) - ниже плинтуса.

Впрочем, вот тебе и результаты (машинка Pentim M 1.2 L3 2Mb)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Delphi7      493  KB/s      581  MIPS        4262  KB/s      418  MIPS
Delphi10     527  KB/s      620  MIPS        4591  KB/s      451  MIPSMIPS

С включенными FastMM4, FastCode

Delphi7    516  KB/s      608  MIPS        4496  KB/s      441  MIPS
Delphi10   533  KB/s      628  MIPS        4929  KB/s      484  MIPS

Учитывая, что на худшем результате Delphi7 лишь достиг паритета с C#, то можно смело говорить
что в боевых условиях даже кое-как портированный (читай - неоптимизированный) базовый
код Delphi будет быстрее C# на 757/755 * 544/493 на ~10% ("просад" на декомпрессии и вовсе выглядит весьма странно).

Впрочем, можешь поставить тесты и сам. Delphi10 (Turbo Explorer) - доступен на http://www.turboexplorer.com/downloads

FastCode, FastMM на http://sf.net
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34428443
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И в догонку.. Для чистоты эксперимента убив все лишнее, и запуская не из IDE, а готовые
сборки.

Код: plaintext
1.
2.
3.
4.
5.
С++       930  KB/s    1095  MIPS       10233  KB/s    1031  MIPS 
С#        518  KB/s     610  MIPS        7717  KB/s     777  MIPS
Delphi10
(FastCode, 
FastMM)   586  KB/s     690  MIPS        5389  KB/s     529  MIPS   


В принципе, что и требовалось доказать

586/518 = 1,131... Сиречь, 13% (родная реализация с какой то левой портянкой)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34428673
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grexhideИ в догонку.. Для чистоты эксперимента убив все лишнее, и запуская не из IDE, а готовые сборки.
- а что Java не сумел запустить?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34428828
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov grexhideИ в догонку.. Для чистоты эксперимента убив все лишнее, и запуская не из IDE, а готовые сборки.
- а что Java не сумел запустить?

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

Для себя я сделал вполне известные и так выводы: последние JIT компиляторы Java и C# - уже вполне приличны, хоть и пресловутая "оптимизация" под платформу - чаще не более, чем пустой трёп (на практике).

А результаты по Delphi рассматривать (в силу крайне низкого качества откровенно левого кода, участвовавшего в сравнении) нет смысла в принципе, тем более, результаты там должны были быть близки к C++, но никак не к "компилируемо/интерпретируемым" JIT-ам.

Тем не менее, речь шла больше о Delphi10 и Delphi7 в сравнении (качестве компиляторов 2005 и 2002 года выпуска).
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34428841
daevaorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
grexhide
А результаты по Delphi рассматривать (в силу крайне низкого качества откровенно левого кода, участвовавшего в сравнении) нет смысла в принципе, тем более, результаты там должны были быть близки к C++, но никак не к "компилируемо/интерпретируемым" JIT-ам.

ну конечно. как проявляется слабость Delphi, так сразу нет смылса. С закрытыми глазами легче живется?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34428848
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daevaorn grexhide
А результаты по Delphi рассматривать (в силу крайне низкого качества откровенно левого кода, участвовавшего в сравнении) нет смысла в принципе, тем более, результаты там должны были быть близки к C++, но никак не к "компилируемо/интерпретируемым" JIT-ам.

ну конечно. как проявляется слабость Delphi, так сразу нет смылса. С закрытыми глазами легче живется?
В чем слабость? Какие еще глаза? Ты код "порта" по ссылке скачай, да посмотри.

По поводу же C++ - да, силы в его оптимизатор вложены не в пример большие, чем в делфийский.
Это объективный и давно известный факт (Delphi - это именно UI RAD среда, и для UI RAD имеет очень приличный, хоть и весьма делекий от совершенства компилятор).

Вопрос же в другом - в JIT вложены просто огромные деньги. И что мы видим в результате?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34428920
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grexhideВ чем слабость? Какие еще глаза? Ты код "порта" по ссылке скачай, да посмотри.


grexhide, а в чем слабость порта? Уверены, что если перепишите, он заработает быстрее? Cильно сомневаюсь - там каждая строчка переписана влоб в лоб.
PS. Перекомпилил пример на Delphi 10 + FastMM+FastCode+FastMove - разница с Delphi7 без ничего абсолютно не поражает :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
AMD64  3000 +  2  Ghz
~~~~~~~~~~~~~~~~~
C++        1369  KB/s    1612  MIPS        18505  KB/s    1865  MIPS
Java  1 . 6     890  KB/s    1048  MIPS        11013  KB/s    1082  MIPS
Delphi10F   796  KB/s     937  MIPS         9961  KB/s     978  MIPS
Delphi7     770  KB/s     906  MIPS         9466  KB/s     930  MIPS
C#          757  KB/s     891  MIPS        13833  KB/s    1394  MIPS

Core Duo E6600  2 . 4  GHz -  1  Core
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C++        1970  KB/s     2320  MIPS       20490  KB/s    2065  MIPS 
Java  1 . 6    1224  KB/s     1442  MIPS       13315  KB/s    1308  MIPS
Delphi10F  1142  KB/s     1345  MIPS       10745  KB/s    1055  MIPS
C#         1087  KB/s     1280  MIPS       15465  KB/s    1559  MIPS
Delphi7    1063  KB/s     1252  MIPS        9817  KB/s     964  MIPS

...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429013
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все ниже перечисленное имхо

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

но даже весело не то, что делфи проигрывает яве, а то, что си рвет си_диез и делфи практически вдвое.

и доказывать тут нечего. это и так ясно - си язык быстрый, удобный, мощный. ява - упрощенный си. (стоит еще добавить его переносимость). что же такое делфи я сказать не могу, но вот си_диез(некоторые еще называют его шарпом) - это полное фуфло. ибо это и виртуальная машины (FW) и привязка к винде. и как видно, отсутствие качества выходной программы.

аффтопитезь: объект либо именован, либо не существует
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429031
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автору - большой респект за проделанный объем работ. Но у меня возникают сомнения по поводу полноты и всеобъемственности вышеуказанного теста. Посудите сами - мы взяли какой-то узкий алгоритм архивации (Lempel-Ziv-Markov algorithm), прогнали его на компилляторах, и пытаемся сходу делать выводы об эффективности того или иного ЯП.

Я отнюдь не защищаю Delphi, просто мне любоапытено появление падения перформанса, для тривиальных целочисленных операций. Совершенно очевидно, что необходим профайлинг для выявления бутылочного горла.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429054
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton


автору респект однозначно

по поводу горла: алгоритм одинаков на всех языках. суть не в узких местах, а в том, что делфи медленнее.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429080
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonи пытаемся сходу делать выводы об эффективности того или иного ЯП.

Цель данного теста - не повесить ярлык, это, вот рулез, а это - suxx, а прежде всего для себя (меня :) выяснить, как ведет себя Java на подобных задачах (конвертирование, архивация). Сейчас я пишу на Delphi, но активно изучаю Java, так что такой тест очень кстати :) Мне кажется, что было бы еще интересно прогнать Java тест на одной и той же машине под Win и Linux - чтобы сравнить и скорость платформ.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429084
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было бы неплохо посмотреть на исходники бенчмарка.
Хотя в бенчмарке не вижу смысла.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429109
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErVБыло бы неплохо посмотреть на исходники бенчмарка.
Хотя в бенчмарке не вижу смысла.
Линк на исходники был в первом посте :)
http://www.mycoolfotos.com/lzma/lzma443_test.zip
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429135
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex.

Я обратил внимание, что исходники Delphi присутствуют в двух вариантах. Delphi и Delphi.FAST с различными оптимизациями под MMX и SSE. Та статистика Delphi, которую вы приводите, какому бинарнику соответсвтует?

У себя тестировать пока не хочу, потому-что необходима поправка на усреднённое процентное соотношение ВСЕХ тестов, иначе я получу заведомо другие цифры.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429151
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonMaster Alex.

Я обратил внимание, что исходники Delphi присутствуют в двух вариантах. Delphi и Delphi.FAST с различными оптимизациями под MMX и SSE. Та статистика Delphi, которую вы приводите, какому бинарнику соответсвтует?

Во вчерашних забегах
Delphi10F - это сборка Delphi 10 с Fast юнитами (FastMem+FastCode+FastMove)
Delphi7 - это сборка на Delphi 7 без Fast юнитов.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429251
sopromat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex
Цель данного теста - не повесить ярлык, это, вот рулез, а это - suxx, а прежде всего для себя (меня :) выяснить, как ведет себя Java на подобных задачах (конвертирование, архивация).
Спасибо за тесты. Если не сложно, можете привести сколько памяти отъедается в каждом тесте? Интересно, какой ценой достигаются эти результаты в каждом случае.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429309
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master AlexCильно сомневаюсь - там каждая строчка переписана влоб в лоб.К сожалению, портирование LZMA на Delphi не оптимизировано, о чем уже говорил Grexhide .
Код: 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.
Byte DecodeNormal(NRangeCoder::CDecoder *rangeDecoder)
  {
    UInt32 symbol =  1 ;
    RC_INIT_VAR
    do
    {
      // symbol = (symbol << 1) | _decoders[0][symbol].Decode(rangeDecoder);
      RC_GETBIT(kNumMoveBits, _decoders[symbol].Prob, symbol)
    }
    while (symbol < 0x100);
    RC_FLUSH_VAR
    return (Byte)symbol;

#define RC_GETBIT2(numMoveBits, prob, mi, A0, A1) \
  { UInt32 bound = (range >> NCompress::NRangeCoder::kNumBitModelTotalBits) * prob; \
  if (code < bound) \
  { A0; range = bound; \
    prob += (NCompress::NRangeCoder::kBitModelTotal - prob) >> numMoveBits; \
    mi <<=  1 ; } \
  else \
  { A1; range -= bound; code -= bound; prob -= (prob) >> numMoveBits; \
    mi = (mi + mi) +  1 ; }} \
  RC_NORMALIZE

#define RC_GETBIT(numMoveBits, prob, mi) RC_GETBIT2(numMoveBits, prob, mi, ; , ;)

#define RC_FLUSH_VAR \
  rangeDecoder->Range = range; \
  rangeDecoder->Code = code;
  }
Код: 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.
 function  TLZMADecoder2.DecodeNormal( const  rangeDecoder:TRangeDecoder):byte;
 var  symbol:integer;
 begin 
symbol :=  1 ;
 repeat 
  symbol := (symbol  shl   1 )  or  rangeDecoder.DecodeBit(m_Decoders, symbol);
   until   not  (symbol < $ 100 );
result:=symbol;
 end ;

 function  TRangeDecoder.DecodeBit( var  probs:  array   of  smallint; const  index:integer):integer;
 var  prob,newbound:integer;
 begin 
prob:=probs[index];
newbound:=(Range  shr  kNumBitModelTotalBits) * prob;
 if  (integer((integer(Code)  xor  integer($ 80000000 ))) < integer((integer(newBound)  xor  integer($ 80000000 ))))  then   begin 
   Range := newBound;
   probs[index] := (prob + ((kBitModelTotal - prob)  shr  kNumMoveBits));
    if  ((Range  and  kTopMask) =  0 )  then   begin 
      Code := (Code  shl   8 )  or  ReadByte(stream);
      Range := Range  shl   8 ;
       end ;
   result:= 0 ;
    end   else   begin 
       Range := Range - newBound;
       Code := Code - newBound;
       probs[index] := (prob - ((prob)  shr  kNumMoveBits));
        if  ((Range  and  kTopMask) =  0 )  then   begin 
          Code := (Code  shl   8 )  or  ReadByte(stream);
          Range := Range  shl    8 ;
           end ;
       result:= 1 ;
        end ;
 end ;

Посмотрите еще
Код: 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.
 function  ReadByte( const  stream:TStream):byte;
 begin 
stream.Read(result, 1 );
 end ;

 function  TBufferedFS.Read( var  Buffer; Count: Longint): Longint;
 var  p:PByteArray;
    bytestoread:integer;
    b:integer;
 begin 
 if  Mode=BFMWrite  then  flush;
mode:=BFMRead;
result:= 0 ;
 if  count<=bytesinbuffer  then   begin 
    //all data already in buffer 
   move(membuffer[bufferpos],buffer,count);
   bytesinbuffer:=bytesinbuffer-count;
   bufferpos:=bufferpos+count;
   result:=count;
    end   else   begin 
       bytestoread:=count;
        if  (bytestoread<> 0 ) and (bytesinbuffer<> 0 )  then   begin 
           //read data remaining in buffer and increment data pointer 
          b:=Read(buffer,bytesinbuffer);
          p:=PByteArray(@(TByteArray(buffer)));
          bytestoread:=bytestoread-b;
          result:=b;
           [b]end   else  p:=@buffer;
        if  bytestoread>=BufferSize  then   begin 
           //data to read is larger than the buffer, read it directly 
          result:=result+ inherited  Read(p^,bytestoread);
           end   else   begin 
               //refill buffer 
              ReadBuffer;
               //recurse 
              result:=result+Read(p^,math.Min(bytestoread,bytesinbuffer));
               end ;
        end ;
 end ;
и соответственно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  bool ReadByte(Byte &b)
  {
    if(_buffer >= _bufferLimit)
      if(!ReadBlock())
        return false;
    b = *_buffer++;
    return true;
  }
Теперь понятно, о чем говорил уважаемый Grexhide ?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429329
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, господа, мы убедились, что лобового переписывания алгоритма - недостаточно. Требуется оптимизация. Я думаю такое скажет, бия себя в грудь каждый приверженец того или иного ЯП/технологии. Ибо везде есть свои нюансы, tips, tricks и т.п.

Думаю, что после того, как Delphi-йский порт немного причешут и пригладят он займёт своё достойное место в чарте рядом с нативными компиллерами.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429336
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OracleXК сожалению, портирование LZMA на Delphi не оптимизировано, о чем уже говорил Grexhide .
по сравнению с Java и C#? ;) про С++ - никто не спорит - там и так все со скоростью ясно.
смотрим код на Delphi еще раз:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
function TLZMADecoder2.DecodeNormal(const rangeDecoder:TRangeDecoder):byte;
var symbol:integer;
begin
symbol :=  1 ;
repeat
  symbol := (symbol shl  1 ) or rangeDecoder.DecodeBit(m_Decoders, symbol);
  until not (symbol < $ 100 );
result:=symbol;
end;

Смотрим сорцы на Java:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	
		
			public byte DecodeNormal(SevenZip.Compression.RangeCoder.Decoder rangeDecoder) throws IOException
			{
				int symbol =  1 ;
				do
					symbol = (symbol <<  1 ) | rangeDecoder.DecodeBit(m_Decoders, symbol);
				while (symbol < 0x100);
				return (byte)symbol;
			}


смотрим еще раз:
Код: 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.
function TRangeDecoder.DecodeBit(var probs: array of smallint;const index:integer):integer;
var prob,newbound:integer;
begin
prob:=probs[index];
newbound:=(Range shr kNumBitModelTotalBits) * prob;
if (integer((integer(Code) xor integer($ 80000000 ))) < integer((integer(newBound) xor integer($ 80000000 )))) then begin
   Range := newBound;
   probs[index] := (prob + ((kBitModelTotal - prob) shr kNumMoveBits));
   if ((Range and kTopMask) =  0 ) then begin
      Code := (Code shl  8 ) or ReadByte(stream);
      Range := Range shl  8 ;
      end;
   result:= 0 ;
   end else begin
       Range := Range - newBound;
       Code := Code - newBound;
       probs[index] := (prob - ((prob) shr kNumMoveBits));
       if ((Range and kTopMask) =  0 ) then begin
          Code := (Code shl  8 ) or ReadByte(stream);
          Range := Range shl   8 ;
          end;
       result:= 1 ;
       end;
end;

Смотрим сорцы на Java:
Код: 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.
	public int DecodeBit(short []probs, int index) throws IOException
	{
		int prob = probs[index];
		int newBound = (Range >>> kNumBitModelTotalBits) * prob;
		if ((Code ^ 0x80000000) < (newBound ^ 0x80000000))
		{
			Range = newBound;
			probs[index] = (short)(prob + ((kBitModelTotal - prob) >>> kNumMoveBits));
			if ((Range & kTopMask) ==  0 )
			{
				Code = (Code <<  8 ) | Stream.read();
				Range <<=  8 ;
			}
			return  0 ;
		}
		else
		{
			Range -= newBound;
			Code -= newBound;
			probs[index] = (short)(prob - ((prob) >>> kNumMoveBits));
			if ((Range & kTopMask) ==  0 )
			{
				Code = (Code <<  8 ) | Stream.read();
				Range <<=  8 ;
			}
			return  1 ;
		}
	}

Найди 10 различий :)

OracleX
Посмотрите еще
Код: plaintext
1.
 function  TBufferedFS.Read( var  Buffer; Count: Longint): Longint;


В бенчмарке файлового чтения нет - так что этот код не используется.

OracleX
Теперь понятно, о чем говорил уважаемый Grexhide ?
Неа :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429341
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИтак, господа, мы убедились, что лобового переписывания алгоритма - недостаточно. Требуется оптимизация.


А зачем - интересно же сравнить одинаковый код (без оптимизации) на разных языках -
вот есть C#, есть Java и Delphi - код один в один - производительность разная.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429344
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используется этот код, такой же дубовый :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 function  TMyInputStream.Read( var  Buffer; Count: Longint): Longint;
 var  b:int64;
 begin 
 try 
b:=_size-_pos;
 if  b>count  then  b:=count;
result:=b;
move(_buffer^[_pos],buffer,b);
_pos:=_pos+b;
 except  writeln('inread error');
 end ;
 end ;
Java и C# меня не волнуют.
Ищите сами в них 10 различий.

Зато код на C++ (опытный прогер поймет) оптимальнее,
чем код, портированный на Delphi, причем в ключевых с т.зрения производительности местах.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429349
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OracleX
Java и C# меня не волнуют.
Ищите сами в них 10 различий.

Так портировали код, скорее всего с Java на Delphi, а не с оптимизированного Си, так что сравнивать интересно сравнимое.

OracleX
Зато код на C++ (опытный прогер поймет) оптимальнее,
чем код, портированный на Delphi, причем в ключевых с т.зрения производительности местах.
Так тут никто и не спорит - еще и сам компилятор C++ мощнее, чем компилятор Delphi - тут сразу были разные весовые категории :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429366
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton прав насчет ущербности портирования без учета особенностей.

Кроме того, подскажите, адекватно ли сравнивать по скорости вызов
ReadByte(stream) в коде Delphi и
Stream.read() в коде Java?

Причем, код Java совсем не похож на код Delphi :)
Код: 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.
 static   class  MyInputStream  extends  java.io.InputStream
	{
		 byte [] _buffer;
		 int  _size;
		 int  _pos;
		
		 public  MyInputStream( byte [] buffer,  int  size)
		{
			_buffer = buffer;
			_size = size;
		}
		
		 public   void  reset()
		{ 
			_pos =  0 ; 
		}
		
		 public   int  read()
		{
			 if  (_pos >= _size)
				 return  - 1 ;
			 return  _buffer[_pos++] & 0xFF;
		}
	};
Сделайте весь код более похожим (и Java и Delphi), тогда посмотрим.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429384
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OracleXСделайте весь код более похожим (и Java и Delphi), тогда посмотрим.

Согласен, как автор порта соптимизирует, тогда и посмотрим :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429402
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Другими словами, анализ исходников показал,
что Alan Birtles проделал огромную и полезную работу,
портировал LZMA на Delphi.

Есть очевидные направления оптимизации его кода.

Все остальные выводы, сделанные по приведенным бенчмаркам, не корректны.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429413
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OracleXЕсть очевидные направления оптимизации его кода.

Oki, щас попробую профайлер напустить на это творение ;)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429436
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Другой вариант исходников LZMA
Страна ждет новых героев :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429447
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OracleX Другой вариант исходников LZMA
Страна ждет новых героев :)

Там нет модуля бенчмарков :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429450
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Они и не нужны, и так видны не оптимальные места.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429466
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OracleXОни и не нужны, и так видны не оптимальные места.

Ну, вот когда будет бенчмарк модуль, тогда и можно будет сравнивать. А пока LZMA бенчмарки дельфи порт продувает, так кривой, а прямого нет. Даже Рассел (автор InnoSetup) не стал заморачиваться с портированием LZMA упаковщика под Delphi - просто собрал сишную dll и радуется жизни.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429523
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master AlexА пока LZMA бенчмарки дельфи порт продуваетТут Вы правы.
Проведенная Вами работа по сравнению разноязычных вариантов портирования
полезна, в основном, для тех, кто может заглянуть в "черный ящик".

Я за 3 мин сделал декодирование на 4.3% быстрее в Delphi7.
Будет время, продолжу оптимизацию, чтобы обогнать Java-реализацию.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429536
LMM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Master Alex
Однозначно, нужна оптимизация под каждую среду и язык программирования, пример - пузырьковая сортировка, C/C++ сосет и у Дельфи и у C#(/topic/241745&pg=27)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429610
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMMto Master Alex
Однозначно, нужна оптимизация под каждую среду и язык программирования, пример - пузырьковая сортировка, C/C++ сосет и у Дельфи и у C#(/topic/241745&pg=27)

это чтоле?
Код: plaintext
int arr[ 200000 ];\nfor (int i =  0 ; i <  200000 ; i++)\n    arr[i] = (int)((i %  9 ) *  sinf(i));\n\ntm t1;\n_getsystime(&t1);\nprintf( "%d:%d:%d", t1.tm_hour, t1.tm_min, t1.tm_sec);\n\nbool exit;\nint buf;\ndo\n{\n    exit = true;\n    for (int i =  1 ; i <  200000 ; i++)\n    if (arr[i -  1 ] > arr[i])\n    {\n          buf = arr[i -  1 ];\n          arr[i -  1 ] = arr[i];\n          arr[i] = buf;\n          exit = false;\n     }\n}\nwhile (!exit);\n\ntm t2;\n_getsystime(&t2);\nprintf( "\\n%d:%d:%d", t2.tm_hour, t2.tm_min, t2.tm_sec);\n\nscanf("%d");

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

ИТАК. вот мой пример -
Код: plaintext
#include <iostream.h>\n#include <time.h>\n#include <stdlib.h>\n\n#define SIZE  200000 \n\nvoid main()\n{\n\tint i, j, k;\n\tint a[SIZE];\n\tlong l;\n\tfor (i= 0 ; i<SIZE; i++)\n\t{\n\t\ta[i] = (clock() <<  16 ) + rand();\n\t}\n\n\tl = clock();\n\tfor (i= 0 ; i<SIZE; i++)\n\t{\n\t\tfor (j=i+ 1 ; j<SIZE; j++)\n\t\t{\n\t\t\tif (a[i]>a[j])\n\t\t\t{\n\t\t\t\tk = a[i];\n\t\t\t\ta[j] = a[i];\n\t\t\t\ta[j] = k;\n\t\t\t}\n\t\t}\n\t}\n\n\tcerr << (clock()-l)/ 1000 . 0  << "s.";\n}

тот тест делфи со своими 140 секундами сосет конкретно: 83 секунды.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429613
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
п.с. это только VS6

аффтопитезь: объект либо именован, либо не существует
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429624
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinВ Вашем коде есть не понятное место:
Код: plaintext
1.
2.
a[j] = a[i];
a[j] = k;
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429640
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex OracleXОни и не нужны, и так видны не оптимальные места.
Даже Рассел (автор InnoSetup) не стал заморачиваться с портированием LZMA упаковщика под Delphi - просто собрал сишную dll и радуется жизни.

Да ради бога. Никто не запрещает слинковать .obj в проект на Delphi.

Но за "продувание" слив таки засчитан (в который раз).

-

P.S. Прямо дети
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429759
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grexhideНо за "продувание" слив таки засчитан (в который раз).

Еще раз - тестируются _готовые_ порты lzma, взятые с сайта 7zip, т.е. то что можно взять и не обрабатывая напильником (что 99% программистов скорее всего делать не будет) вставить в приложение.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429791
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда нужно было называть тему по другому:
Бенчмарки LZMA на C++, C#, Java, Delphi
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429843
LMM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Aklin

А че ты алгоритм весь переделал, в том топике тестировался один алгоритм для 3 сред(c#, delphi и c++)?
Если уж и написал свой, то и писал бы и для c# и для дельфи...
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429862
LMM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А здесь исходники и постановка задачи для делфи и c#
/topic/241745&pg=18
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429922
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Раз здесь тема про бенчмарки, спрошу:
Кто-нибудь может объяснить, почему следующий код, скомпилированный в Delphi 4,5,6 работает ровно в 2 (два) раза быстрее, чем этот же код, скомпилированный в Delphi 7 и 2006.
Например, на Athlon X23800+ на номинале время выполнения соответственно 930 и 1860 мсек для razmer=11.
Кстати, может кто перепишет его на C, интересно сравнить. Это алгоритм перебора всех возможных перестановок элементов массива.
Код: 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.
program Test;
{$APPTYPE CONSOLE}
uses
  Sysutils, Windows;

var
  razmer:integer;
  b:array[ 1 .. 20 ] of integer;
  Time1,Time2,nomvar,d,m,kl,min,obmen:integer;
begin
  razmer:= 11 ;
  for d:= 1  to  20  do
    b[d]:=d;
  nomvar:= 0 ;
  Time1:=GetTickCount;
  while True do
    begin
      nomvar:=nomvar+ 1 ;
      for m:=razmer downto  2  do
        if b[m]>b[m- 1 ] then
          break;
      if m= 1  then
        Break;
      obmen:=m- 1 ;
      for min:=obmen+ 1  to razmer do
        if (b[min]<b[m]) and (b[min]>b[obmen]) then
          m:=min;
      min:=b[obmen];
      b[obmen]:=b[m];
      b[m]:=min;
      for d:=obmen+ 1  to razmer- 1  do
        begin
          m:=d;
          for kl:=d+ 1  to razmer do
            if b[kl]<b[m] then
              m:=kl;
          min:=b[m];
          b[m]:=b[d];
          b[d]:=min;
        end;
    end;
  Time2:=GetTickCount;
  Writeln('Count: '+IntToStr(nomvar));
  Writeln('Time: '+IntToStr(Time2-Time1)+'(ms)');
  Readln;
end.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429950
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Yuric74]Кто-нибудь может объяснить, почему следующий код, скомпилированный в Delphi 4,5,6 работает ровно в 2 (два) раза быстрее, чем этот же код, скомпилированный в Delphi 7 и 2006.
Например, на Athlon X23800+ на номинале время выполнения соответственно 930 и 1860 мсек для razmer=11.
[/quit]
Юра, приведи статистику для времени хотя-бы на три порядка больше. А то непонятно, что мы вообще замеряем: время работы алгоритма, или какие-то инерционные процессы в ОС/Железе.

И полный перечень опций компиллятора для обоих случаев приведи.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34429973
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
приведи статистику для времени хотя-бы на три порядка больше
Привожу: (снято только что)
Для razmer=12
Delphi 5 - Count: 479001600 Time: 10812(ms)
Delphi 2006 - Count: 479001600 Time: 21406(ms)

Для razmer=13
Delphi 5 - Count: 1932053504 Time: 142782(ms)
Delphi 2006 - Count: 1932053504 Time: 277125(ms)

Для бОльших значений ждать неприлично долго.

Опции из .cfg?
Если да, то вот они

Delphi 5
-$A+ -$B- -$C+ -$D+ -$E- -$F- -$G+ -$H+ -$I+ -$J+ -$K- -$L+ -$M- -$N+ -$O+ -$P+ -$Q- -$R- -$S- -$T- -$U- -$V+ -$W- -$X+ -$YD -$Z1 -cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+ -W+ -M
-$M16384,1048576
-K$00400000

Delphi 2006
-$A4 -$B- -$C+ -$D+ -$E- -$F- -$G+ -$H+ -$I+ -$J- -$K- -$L+ -$M- -$N+ -$O+ -$P+ -$Q- -$R- -$S- -$T- -$U- -$V+ -$W+ -$X+ -$YD -$Z1 -cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+ -W+ -M
-$M16384,1048576
-K$00400000
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34430060
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OracleX AklinВ Вашем коде есть не понятное место:
Код: plaintext
1.
2.
a[j] = a[i];
a[j] = k;


епта, просто ошибся, суть мало меняется.

7% прибавить к тому, что было
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34430150
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinРезультат для C++ получен на той же машине, где производился delphi-тест?
Yuric74Ваш тест у меня для Delphi5 тоже быстрее на 30%, чем для Delphi7.
Причина - генерируется код, который лучше использует регистры :(
Оптимизация включена, но компилятор D7 делает такой же код,
что и при отключенной оптимизации.
Вот не ожидал от D7 такого, а от D2006 (сам не тестил) и подавно .

На Вашем тесте D7 без оптимизации делает код чуть лучше, чем D5 без оптимизации.

Парадоксально, но тест с LZMA для Delphi5 выполняется с той же скоростью, что и для Delphi7.
Для D7 разница с оптимизатором и без него заметна (с оптимизатором быстрее на 20%).
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34430153
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74Раз здесь тема про бенчмарки, спрошу:
Кто-нибудь может объяснить, почему следующий код, скомпилированный в Delphi 4,5,6 работает ровно в 2 (два) раза быстрее, чем этот же код, скомпилированный в Delphi 7 и 2006.


Sysutils напиши вот так - SysUtils и заработает на той же скорости!
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34430164
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OracleXВаш тест у меня для Delphi5 тоже быстрее на 30%, чем для Delphi7.
У меня на D7 работал в 2 раза медленнее, чем в D5. Но у меня на D7 не стояли сервис-паки (это было несколько лет назад).
OracleXПарадоксально, но тест с LZMA для Delphi5 выполняется с той же скоростью, что и для Delphi7.
Да, и в D2006 тоже.
Кстати, если отключить оптимизацию, то код выполняется примерно одинаково по времени, правда еще медленнее.
Master AlexSysutils напиши вот так - SysUtils и заработает на той же скорости!
Попробовал - не помогло :)

А на С, может, кто перепишет, а то я в нем не силен. Интересно сравнить.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34430169
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OracleXДля D7 разница с оптимизатором и без него заметна (с оптимизатором быстрее на 20%).
Для моего кода разница в D5 с оптимизацией и без составляет почти 2,68 раза.
В D2006 - всего 1,33.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34430178
LMM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to OracleX
Не обращай внимания на Aklin, у него свои алгоритмы, да и по-моему не втыкает что здесь проиcходит, потому как его любимый форум - http://sql.ru/forum/actualtopics.aspx?bid=16

P/S
Для Aklin
1) Оптимизация алгоритма и кода - это не одно и тоже!
2) какого хрена ты туда прописал
Код: plaintext
1.
2.
3.
4.
for (i= 0 ; i<SIZE; i++)
	{
		a[i] = (clock() <<  16 ) + rand();
	}

а не
Код: plaintext
1.
2.
for (int i =  0 ; i <  200000 ; i++)
    arr[i] = (int)((i %  9 ) *  sinf(i));
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34430516
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OracleX AklinРезультат для C++ получен на той же машине, где производился delphi-тест?


у меня нет делфей, т.к. я не считаю нормальными продукты борланда после BC 3. на случай делфи я использую VB. на случай серьезных программ - си. (ну и сипп, если кто-то считает, что надо два плюса все время приписывать).

если вы пришлете EXE который укажет время (ЧЕСТНО ТОЛЬКО) что вывешу то, что он мне показал.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34430610
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, разработчики Delphi сознательно не напрягаются
по поводу оптимизации работы с массивами чисел.
Как показал тест, даже убирают дорогостоящую оптимизацию из новых версий.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34430643
mrDOS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из всей дискуссии понял только одно все Delphi после 6-й версии - кака
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34430721
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrDOS
Поясните, чем Delphi 6 лучше, чем Delphi 2007 ?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34430729
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master AlexМне кажется, что было бы еще интересно прогнать Java тест на одной и той же машине под Win и Linux - чтобы сравнить и скорость платформ.и под вайном проверить :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34430820
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас попробовал свой код на Intel. Celeron D 2,53ГГц, разогнанный до 3,16ГГц (шина 166).
Для razmer=12
D6 - Count: 479001600 Time: 11125(ms)
В2006 - Count: 479001600 Time: 14593(ms)
Получается, что код D2006 оптимизирован на Intel?

Если в коде переменную kl заменить на min в последнем цикле, то получим еще небольшой выигрыш во времени выполнения.
И я не возьмусь утверждать, что Delphi после 6 версии стал хуже. Просто код очень специфичный. Постоянный доступ к одному массиву через три переменные - достаточно редко, ИМХО.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34432082
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OracleX
Yuric74Ваш тест у меня для Delphi5 тоже быстрее на 30%, чем для Delphi7.
Причина - генерируется код, который лучше использует регистры :(


Да, я тоже посмотрел в окне CPU на генерируемый компилятором код. Сравнивал D6 и D2006. Ну что тут можно сказать... выходит, ребята из Borland/CodeGear просто забили на оптимизацию аж в 2002-м году:( Понятно, почему дела у них идут неважно - вместо того, чтобы сосредоточиться на чем-то одном и основательно развивать флагманский продукт, начинаются метания и эксперименты: Delphi for PHP, Delphi for Piton и т.д. Видимо, не за горами появление Delphi for 1C Оно-то конечно понятно, бабла бы срубить по-быстрому, но как можно сознательно ухудшать изделие - вообще в голове не укладывается. Зато сколько было криков при выходе Delphi 7: компилятор переписали и т.д. Действительно, переписали... Писатели, блин:(
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34432104
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalekДействительно, переписали... Писатели, блин:(

Расслабился, ей богу. Тебе сильно ведомы причины, почему они сделали именно так?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34432159
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grexhide vitalekДействительно, переписали... Писатели, блин:(

Расслабился, ей богу. Тебе сильно ведомы причины, почему они сделали именно так?
Не понял... Кто расслабился?
И каковы же, интересно, причины по которым они сделали так? Трудно было оставить как есть? Надо было шаловливыми ручонками там поковырять? Причина по ходу одна: в 8-й версии они вообще собрались Win32 похоронить и забросить развитие соответствующего компилятора. Вспомните, как они .NET пропихивали и удивлялись на семинарах, чего это народ по-прежнему на Win32 сидит. Потом же, когда опомнились, времени что-то сильно улучшать уже не было - речь зашла чуть ли не о продаже всего подразделения, тут лишь бы на плаву удержаться. Видимо основная причина в этом.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34432255
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, попробовал запустить последний тест под Lazarus - так он вообще тихо завис(зациклился по ходу) Может я что делаю не так? Попробуйте, кто дружит с Лазарем/FPC - а то у меня эта самоделка только сплошное разочарование вызывает. Или просто руки кривые и бубен для священных танцев мне не подвластен
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34432377
Lexogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalek grexhide vitalekДействительно, переписали... Писатели, блин:(

Расслабился, ей богу. Тебе сильно ведомы причины, почему они сделали именно так?
Не понял... Кто расслабился?
И каковы же, интересно, причины по которым они сделали так? Трудно было оставить как есть? Надо было шаловливыми ручонками там поковырять? Причина по ходу одна: в 8-й версии они вообще собрались Win32 похоронить и забросить развитие соответствующего компилятора. Вспомните, как они .NET пропихивали и удивлялись на семинарах, чего это народ по-прежнему на Win32 сидит. Потом же, когда опомнились, времени что-то сильно улучшать уже не было - речь зашла чуть ли не о продаже всего подразделения, тут лишь бы на плаву удержаться. Видимо основная причина в этом.

ИМХО. Delphi был сделан для быстрой разработки приложений, с этой задачей они справились. А вот если бы все пользователи Delphi на постсоветском пространстве купили лицензионную весию, то у борланда хватило бы средств на оптимизацию компилятора. :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34432395
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lexogen vitalek grexhide vitalekДействительно, переписали... Писатели, блин:(

Расслабился, ей богу. Тебе сильно ведомы причины, почему они сделали именно так?
Не понял... Кто расслабился?
И каковы же, интересно, причины по которым они сделали так? Трудно было оставить как есть? Надо было шаловливыми ручонками там поковырять? Причина по ходу одна: в 8-й версии они вообще собрались Win32 похоронить и забросить развитие соответствующего компилятора. Вспомните, как они .NET пропихивали и удивлялись на семинарах, чего это народ по-прежнему на Win32 сидит. Потом же, когда опомнились, времени что-то сильно улучшать уже не было - речь зашла чуть ли не о продаже всего подразделения, тут лишь бы на плаву удержаться. Видимо основная причина в этом.

ИМХО. Delphi был сделан для быстрой разработки приложений, с этой задачей они справились. А вот если бы все пользователи Delphi на постсоветском пространстве купили лицензионную весию, то у борланда хватило бы средств на оптимизацию компилятора. :)

А как быть тем, у кого лицензия?
И потом, речь идёт не об отсутствии улучшений, а об ухудшении, а это ведь не одно и тоже:(
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34432613
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalekА как быть тем, у кого лицензия?
И потом, речь идёт не об отсутствии улучшений, а об ухудшении, а это ведь не одно и тоже:(

Поверь, в среде разработки Delphi - масса других, более актуальных проблем (для пользователей систем в том числе), чем отдельно взятая оптимизация.

Если сильно интересно - зайди на qc.borland.com и посмотри на количество нерешённых вопросов.
Уверен, на 100%, что "финт с оптимизацией" сняли именно в очередной борьбе с каким то другим багом.

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

--

А по поводу лицензирования - да, все верно. Более чем уверен, 90% инсталляций Delphi и поныне - нелегальные, а из оставщихся 10% - 80% - куплены один раз в незапамятные времена, с тех пор с "чистой" совестью обновляемые за "спасибо" (даже учитывая резко упавшую цену на те же последние редакции Turbo).
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34432628
Константин Заровный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalekКстати, попробовал запустить последний тест под Lazarus - так он вообще тихо завис(зациклился по ходу) Может я что делаю не так? Попробуйте, кто дружит с Лазарем/FPC - а то у меня эта самоделка только сплошное разочарование вызывает. Или просто руки кривые и бубен для священных танцев мне не подвластен

Скомпилил lzma на FreePascal, кое как запустил, но результаты почти в 2 раза медленнее, чем в Delphi7.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34432631
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalekКстати, попробовал запустить последний тест под Lazarus - так он вообще тихо завис(зациклился по ходу) Может я что делаю не так? Попробуйте, кто дружит с Лазарем/FPC - а то у меня эта самоделка только сплошное разочарование вызывает. Или просто руки кривые и бубен для священных танцев мне не подвластен
Попробовал, нашел причину зацикливания. В программе использован побочный эффект цикла for - переменная цикла после выхода из него имеет значение на 1 больше или меньше конечного значения (соответственно цикл to и downto). В Lazarus такое не прокатывает.
Измени первый цикл
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
      for m:=razmer downto  1  do
        begin
          if m= 1  then
            break;
          if b[m]>b[m- 1 ] then
            break;
        end;
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34432637
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Заровный
Скомпилил lzma на FreePascal, кое как запустил, но результаты почти в 2 раза медленнее, чем в Delphi7.

;) А ты еще попробуй скомпилировать C++ пример на разных версиях C++ (к примеру - GNU C/C++ vs Intel C++). Будешь приятно удивлён тем фактом, как на таком убогом компиляторе миру свободного софта удается делать более производительные и менее ресурсоемкие конечные решения.. ;))))
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34433002
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grexhide Константин Заровный
Скомпилил lzma на FreePascal, кое как запустил, но результаты почти в 2 раза медленнее, чем в Delphi7.

;) А ты еще попробуй скомпилировать C++ пример на разных версиях C++ (к примеру - GNU C/C++ vs Intel C++). Будешь приятно удивлён тем фактом, как на таком убогом компиляторе миру свободного софта удается делать более производительные и менее ресурсоемкие конечные решения.. ;))))

чего-то я вас не понимаю. сначала вы говорите, что каомплиятор убогий, а потом - что он лучше.
похоже вы путаете компилятор со средой разработки. (ведь в стандартном виде у GCC нет его как такового)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434367
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обратился за помощью к коллегам с www.delphikingdom.com , порекомендовали такую штуку:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
В приведённом примере заменил for на while во внутреннем цикле
//     for kl:=d+ 1  to razmer do
//     if b[kl]<b[m] then m:= kl;
      kl:= d +  1 ;
      while kl <= razmer do begin
        if b[kl]<b[m] then m:= kl;
        Inc(kl);
      end;
Результат значительно улучшился - на Athlon XP 2000+ на исходном варианте BDS 2006 дает 2047 ms, после замены for на while - 1641 ms, но тем не менее, до скорости старых версий всё равно не дотягивает:(
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434488
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalekОбратился за помощью к коллегам
Интересная замена. А если еще поменять
Код: plaintext
while kl <= razmer do begin
на
Код: plaintext
while kl < razmer+ 1  do begin
и переменную kl поменять на min,
то получаем еще выигрыш (по крайней мере на Celeron 3,16ГГц)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434525
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще поменял
Код: plaintext
1.
2.
3.
      for min:=obmen+ 1  to razmer do
        if (b[min]<b[m]) and (b[min]>b[obmen]) then
          m:=min;
на
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
      min:=obmen+ 1 ;
      while min<razmer+ 1  do
        begin
          if (b[min]<b[m]) and (b[min]>b[obmen]) then
            m:=min;
          inc(min);
        end;
и вплотную приблизился к D6 с циклами for:
при razmer=12
D6 - Time: 11157(ms)
D2006 - Time: 11469(ms)
Это что же получается? Плохая реализация цикла for?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434569
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поменял все циклы for на while
Результат на D2006 - Time: 9875(ms)
Это на Celeron 3,16ГГц
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434578
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, я в шоке!!!
От первоначальных 14,8 сек получил 9,8 простой заменой for на while!!!
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434583
vlgri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще поменяй
Код: plaintext
1.
2.
3.
4.
while true do
begin
....
end;
на
Код: plaintext
1.
2.
3.
repeat
...
until false;

переменную razmer на константу и вынеси тело в процедуру
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure Test;
....
begin
....
end;

begin
   Test;
end.

...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434652
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlgriЕще поменяй
Код: plaintext
1.
2.
3.
4.
while true do
begin
....
end;
на
Код: plaintext
1.
2.
3.
repeat
...
until false;

переменную razmer на константу
D2006 - Time: 8657(ms) !!!
Ну с переменной и константой понятно.
А вот вынос в процедуру затормозил до 9016.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434660
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74
Это что же получается? Плохая реализация цикла for?

Ситуация проясняется - оказывается в D7 Update1 в кодогенератор был внесён баг:
http://www.delphikingdom.com/asp/talktopic.asp?ID=195&ref=msg&msg=290#msg291
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434667
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalek Yuric74
Это что же получается? Плохая реализация цикла for?

Ситуация проясняется - оказывается в D7 Update1 в кодогенератор был внесён баг:
http://www.delphikingdom.com/asp/talktopic.asp?ID=195&ref=msg&msg=290#msg291

Sorry, ссылка
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434687
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итоговый код
Код: 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.
program Test;
{$APPTYPE CONSOLE}
uses
  Sysutils,
  Windows;

const
  razmer:integer= 12 ;

var
  b:array[ 1 .. 20 ] of integer;
  Time1,Time2,nomvar,d,m,min,obmen:integer;
begin
  for d:= 1  to  20  do
    b[d]:=d;
  nomvar:= 0 ;
  Time1:=GetTickCount;
  repeat
    begin
      nomvar:=nomvar+ 1 ;
      m:=razmer;
      while m> 1  do
        begin
          if b[m]>b[m- 1 ] then
            break;
          dec(m);
        end;
      if m= 1  then
        Break;
      obmen:=m- 1 ;
      min:=obmen+ 1 ;
      while min<razmer+ 1  do
        begin
          if (b[min]<b[m]) and (b[min]>b[obmen]) then
            m:=min;
          inc(min);
        end;
      min:=b[obmen];
      b[obmen]:=b[m];
      b[m]:=min;
      d:=obmen+ 1 ;
      while d<razmer do
        begin
          m:=d;
          min:=d+ 1 ;
          while min<razmer+ 1  do
            begin
              if b[min]<b[m] then
                m:=min;
              Inc(min);
            end;
          min:=b[m];
          b[m]:=b[d];
          b[d]:=min;
          inc(d);
        end;
    end;
  until false;
  Time2:=GetTickCount;
  Writeln('Count: '+IntToStr(nomvar));
  Writeln('Time: '+IntToStr(Time2-Time1)+'(ms)');
  Readln;
end.
Результаты для razmer=12 на Celeron 3,16ГГц для вышеприведенного кода
D6 - Time: 8640(ms)
D2006 - Time: 8625(ms)
Все встало на свои места, паритет!!!
Приду домой, проверю на Athlon Х2 3800+
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434711
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74Результаты для razmer=12 на Celeron 3,16ГГц для вышеприведенного кода
D6 - Time: 8640(ms)
D2006 - Time: 8625(ms)
Все встало на свои места, паритет!!!
Приду домой, проверю на Athlon Х2 3800+

Но, согласитесь, - это ведь полумера. Совсем отказаться от использования for - не очень-то красиво.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434716
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalekСитуация проясняется - оказывается в D7 Update1 в кодогенератор был внесён баг
Почитал, успокоился. Буду учитывать, что при подобном коде лучше использовать while.
Кстати, в D6 скорость от замены for на while тоже повысилась.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34434723
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalekСовсем отказаться от использования for - не очень-то красиво.
А куда деваться при критичном ко времены выполнения коде. А совсем отказываться смысла нет. По крайней мере на моей работе точно нет смысла отказываться. У нас нет кода, настолько критичного ко времени.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34435250
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74Итоговый код


Попробовал заменить все циклы while на repeat, получилось не только быстрее, но и компактнее за счёт изъятия begin end :) :
Код: 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.
program Test;

{$APPTYPE CONSOLE}
uses
  SysUtils,
  Windows;

const
  razmer:integer =  12 ;

var
  b: array[ 1 .. 20 ] of integer;
  Time1, Time2, nomvar, d, m, min, obmen: Integer;
begin
  for d:=  1  to  20  do
    b[d]:= d;
  nomvar:=  0 ;
  Time1:= GetTickCount;
  repeat
    nomvar:= nomvar+ 1 ;
    m:= razmer;
    repeat
      if b[m] > b[m- 1 ] then
        break;
      Dec(m);
    until m <=  1 ;
    if m =  1  then
      Break;
    obmen:= m- 1 ;
    min:= obmen+ 1 ;
    repeat
      if (b[min] < b[m]) and (b[min] > b[obmen]) then
        m:= min;
      Inc(min);
    until min >= razmer+ 1 ;
    min:= b[obmen];
    b[obmen]:= b[m];
    b[m]:= min;
    d:= obmen+ 1 ;
    repeat
      m:= d;
      min:= d+ 1 ;
      repeat
        if b[min] < b[m] then
          m:= min;
        Inc(min);
      until min >= razmer+ 1 ;
      min:= b[m];
      b[m]:= b[d];
      b[d]:= min;
      Inc(d);
    until d >= razmer;
  until false;
  Time2:= GetTickCount;
  Writeln('Count: '+IntToStr(nomvar));
  Writeln('Time: '+IntToStr(Time2-Time1)+'(ms)');
  Readln;
end.

Athlon XP 2000+ 1,66 ГГц
Итоговые результаты:

------------------------------Delphi 2006-------------Delphi 6

исх. тест for---------------24578 ms-------------13781 ms

замена на while---------15188 ms-------------18328 ms

замена на repeat--------13860 ms-------------13766 ms
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34435343
mrDOS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если еще вместо
until min >= razmer+1;
понаписать
Код: plaintext
1.
2.
3.
4.
5.
var
tmp:integer;
..
tmp:=razmer+ 1 ;
...
until min >= tmp;
то будет исчо на 1% быстрее, вне зависимости от вида цикла выражение стоящее в условии на каждой итерации вычисляется заново.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34435483
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И для сравнения поэкспериментировал с FPC 2.0.2/Lazarus 0.9.14 и настройками оптимизации, которых там побольше, чем в Делфе.
Всё тот же Athlon XP 2000+ 1,66 ГГц:
Результаты по уровням оптимизации:

----------------------------------Level 1------------------Level 2-------------------Level 3

исх. тест for---------------34235 ms-------------33844 ms--------------34125 ms

замена на while---------34266 ms-------------33844 ms---------------34188 ms

замена на repeat--------34250 ms-------------33813 ms---------------34156 ms

Как видим, сильного разброса нет, но общая скорость до делфийской не тянет. По ходу, это плата за кроссплатформенность.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34435490
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex Yuric74Раз здесь тема про бенчмарки, спрошу:
Кто-нибудь может объяснить, почему следующий код, скомпилированный в Delphi 4,5,6 работает ровно в 2 (два) раза быстрее, чем этот же код, скомпилированный в Delphi 7 и 2006.


Sysutils напиши вот так - SysUtils и заработает на той же скорости!

Улыбнуло:)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34435582
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Провел тесты на Athlon X2 3800+ (частота номинал 2ГГц) для razmer=12
Цикл for
D6 - 11156(ms)
D2006 - 21593(ms)

Цикл while
D6 - 15203(ms)
D2006 - 13219(ms)

Цикл repeat
D6 - 10094(ms)
D2006 - 10719(ms)

Прикладываю исходники и exe'шники для D6
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34435583
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И исходники и exe'шники для D2006
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34435595
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И вдогонку тесты на D5
Цикл for - 10906(ms)
Цикл while - 14609(ms)
Цикл repeat - 10187(ms)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34435963
Доброго времени суток!

To vitalek

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

min >= razmer+1 эквивалентно min > razmer
nomvar:= nomvar+1; - Inc(nomvar)

У меня после этих замен на D5 время выполнения уменьшилось с 17359 до 14500

С уважением, Евгений
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34437632
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кузнецов ЕвгенийВ целях оптимизации можно использовать нумерацию элементов массива с 0нууу настоящие паскалисты так делать не должны :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34438992
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поигрался в оптимизацию.
Просьба сильно не пинать :)
Код: 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.
program D6_goto;
{$APPTYPE CONSOLE}
uses
  SysUtils, Windows;

const
  razmer:integer= 12 ;

label
  M0,M1,M3,M5,M8,M9,M11,M41,M61,M71;

var
  b:array[ 1 .. 20 ] of integer;
  Time1,Time2,nomvar,d,m,min,obmen:integer;
begin
  for d:= 1  to  20  do
    b[d]:=d;
  nomvar:= 0 ;
  Time1:=GetTickCount;
  goto M0;
M3:
    obmen:=m- 1 ;
    min:=m;
M41:
    if (b[min]>b[obmen]) and (b[min]<b[m]) then m:=min;
    Inc(min);
    if min<=razmer then goto M41;
M5:
    min:=b[obmen];
    b[obmen]:=b[m];
    b[m]:=min;
    d:=obmen+ 1 ;
    if d=razmer then goto M0;
M61:
    m:=d;
    min:=d+ 1 ;
    if min>razmer then goto M8;
M71:
    if b[min]<b[m] then m:=min;
    Inc(min);
    if min<=razmer then goto M71;
M8:
    min:=b[m];
    b[m]:=b[d];
    b[d]:=min;
    inc(d);
    if d<razmer then goto M61;
M0:
    Inc(nomvar);
    m:=razmer;
M11:
    if b[m]>b[m- 1 ] then goto M3;
    Dec(m);
    if m> 1  then goto M11;
M9:
  Time2:=GetTickCount;
  Writeln('Count: '+IntToStr(nomvar));
  Writeln('Time: '+IntToStr(Time2-Time1)+'(ms)');
  Readln;
end.
Время выполнения на Athlon X2 3800+ для razmer=12
D6 - 8031(ms)
D2006 - 8750(ms)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34457963
***@***
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nick Bradbury, создатель HomeSite, TopStyle and FeedDemon.
рассуждает почему он выбрал Delphi для разработки.
http://nick.typepad.com/blog/2004/06/how_microsoft_l.html
(на англ)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34458219
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так понимаю, последние две страницы люди выяснили, что делфи проигрывает си в 2 раза и рассуждают, какой из делфей тормознутей. (хотя все проигрывают си в 2 раза примерно)

аффтопитезь: объект либо именован, либо не существует
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34458329
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinя так понимаю, последние две страницы люди выяснили, что делфи проигрывает си в 2 раза и рассуждают, какой из делфей тормознутей. (хотя все проигрывают си в 2 раза примерно)
Неправильно понимаете. Код на С так никто и не перевел. Я сделал это сам, хоть и не очень хорошо его знаю. Результаты: код на С выполняется с такой же скоростью, как и аналогичный код на D5, код на D6 работает чуть медленнее (3-4%). Я переводил код с циклами for. Использовал Visual C++ 2005 Express Edition + Platform SDK. А код на Delphi с goto я на С не смог догнать.
Если кому реально интересно, выложу код на С. Может кто-нибудь его оптимизирует.
Мне самому интересно сравнить, разобраться в причинах тормозов. И я не собираюсь спорить, что лучше, Delphi или C. Сам пишу на Delphi уже много лет, начинал со 2 версии, а до этого был TurboPascal. Delphi меня устраивает на 100%, позволяя мне решать абсолютно все задачи, стоящие передо мной.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34458371
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinдавай.
Что давай?
Aklinкак уже говорилось, на делфях пишет тот, кто не знает или не понимает си
Знаю и понимаю, могу написать что-нибудь простое, разобраться в С-шных примерах, но пишу на Delphi :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34460894
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74 Aklinя так понимаю, последние две страницы люди выяснили, что делфи проигрывает си в 2 раза и рассуждают, какой из делфей тормознутей. (хотя все проигрывают си в 2 раза примерно)
Неправильно понимаете. Код на С так никто и не перевел. Я сделал это сам, хоть и не очень хорошо его знаю. Результаты: код на С выполняется с такой же скоростью, как и аналогичный код на D5, код на D6 работает чуть медленнее (3-4%). Я переводил код с циклами for. Использовал Visual C++ 2005 Express Edition + Platform SDK. А код на Delphi с goto я на С не смог догнать.
Если кому реально интересно, выложу код на С. Может кто-нибудь его оптимизирует.
Мне самому интересно сравнить, разобраться в причинах тормозов. И я не собираюсь спорить, что лучше, Delphi или C. Сам пишу на Delphi уже много лет, начинал со 2 версии, а до этого был TurboPascal. Delphi меня устраивает на 100%, позволяя мне решать абсолютно все задачи, стоящие передо мной.

Если не трудно, выложите, пожалуйста, код теста на С и результаты. Я тоже попробую поковырять разные варианты на его основе. Вобщем, всё как в дельфовом тесте :).
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34460922
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74Что давай?



Знаю и понимаю, могу написать что-нибудь простое, разобраться в С-шных примерах, но пишу на Delphi :)

исходники давай

я же говорил: знает и понимает. в простых разберется каждый. в проектах какого объема ВЫ можете разобраться ???
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34460926
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, еще: выложите (или скиньте) еще и EXE- файл для делфей, который выводил бы результаты имеется ввиду:
1) честность, что результат тот же, а не деленный на 2
2) компы разные, и цифры, что вы напишите, будут не совпадать.

аффтопитезь: объект либо именован, либо не существует
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34460945
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklinда, еще: выложите (или скиньте) еще и EXE- файл для делфей, который выводил бы результаты имеется ввиду:
1) честность, что результат тот же, а не деленный на 2
2) компы разные, и цифры, что вы напишите, будут не совпадать.

аффтопитезь: объект либо именован, либо не существует

Рыдаю. Исходники примеров полностью приведены на предыдущей странице. Что мешает скомпилировать консольное приложение самостоятельно? Или Вы не программировали, а как сами говорили, "работали" в Delphi, т.е. занимались кнопкоформошлёпством?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34461069
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalek Aklinда, еще: выложите (или скиньте) еще и EXE- файл для делфей, который выводил бы результаты имеется ввиду:
1) честность, что результат тот же, а не деленный на 2
2) компы разные, и цифры, что вы напишите, будут не совпадать.

аффтопитезь: объект либо именован, либо не существует

Рыдаю. Исходники примеров полностью приведены на предыдущей странице. Что мешает скомпилировать консольное приложение самостоятельно? Или Вы не программировали, а как сами говорили, "работали" в Delphi, т.е. занимались кнопкоформошлёпством?

я игрался в делфях давно, недавно сидел в борладне и фигел. это УЖАСТНАЯ среда разработки.
про делфи скажу, что знаю VB и суть та же, т.е. делфями пользуются (далее - в поиск)

делфей нет, поэтому я говорю пришпинделить EXE шник , который время покажет.
на предыдущей странце только делфийские тесты, ни одного сишного.

так что ваш рыд похож больше на слив
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34461226
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalekЕсли не трудно, выложите, пожалуйста, код теста на С и результаты
Код один к одному, как в Delphi. Если что не так - сорри. Я на С последний раз писал в 2001 году.
Код: 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.
#include "stdafx.h"
#include "windows.h"

#define razmer  12 

int _tmain(int argc, _TCHAR* argv[])
{
  int b[ 30 ];
  DWORD Time1,Time2;
  int d,m,min,obmen;
  int nomvar;
  char *ch;

  for (d= 1 ;d<= 20 ;d++)
    b[d]=d;
  nomvar= 0 ;
  Time1=GetTickCount();
  while (true)
  {
    nomvar=nomvar+ 1 ;
    for (m=razmer; m> 1 ; m--)
      if (b[m]>b[m- 1 ]) 
        break;
    if (m== 1 ) 
      break;
    obmen=m- 1 ;
    for (min=obmen+ 1 ;min<=razmer;min++)
	    if ((b[min]<b[m]) && (b[min]>b[obmen])) 
        m=min;
    min=b[obmen];
    b[obmen]=b[m];
    b[m]=min;
    for (d=obmen+ 1 ;d<razmer;d++)
      {
        m=d;
        for (min=d+ 1 ;min<=razmer;min++)
          if (b[min]<b[m]) 
            m=min;
        min=b[m];
        b[m]=b[d];
        b[d]=min;
      };
  };
  Time2=GetTickCount();
  printf("Count: %d\n",nomvar);
  printf( "Time: %d (ms)\n", Time2-Time1);
  ch=" ";
  scanf_s(ch);
  return  0 ;
}
Проц Athlon X2 3800+ на номинале. Условия тестов такие же, как в Delphi.
Компиляция естественно Release.
Результат для razmer=12
Count: 479001600 Time: 10375 (ms)

Aklinв проектах какого объема ВЫ можете разобраться ???
Сейчас на работе поддерживаю 3 проекта (написанные с 50% моего участия) и дописываю 4-ый (уже полностью сам), каждый в сотни тысяч строк. Достаточно?
Aklinвыложите (или скиньте) еще и EXE- файл для делфей, который выводил бы результаты
И исходники, и ЕХЕ-шники уже выложены в этой ветке. Все скомпилировано с одинаковыми опциями компилятора для Delphi 5, 6 и 2006.
Если не верите мне, берите исходники и компилируйте, благо что для этого достаточно запустить Delphi, открыть проект (файл с расширением dpr) и выбрать в меню Project пункт Build.
Aklinна предыдущей странце только делфийские тесты, ни одного сишного.
так что ваш рыд похож больше на слив
Я в самом первом своем посте просил кого-нибудь переписать мой код на С. Никто не откликнулся. Так что больше похоже на ваш слив :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34461240
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklin
Извиняюсь, немного некорректно ответил на вопрос в проектах какого объема ВЫ можете разобраться ???
По поводу разобраться в С-шном коде я писал могу написать что-нибудь простое, разобраться в С-шных примерах
В С-шных проектах в сотни тысяч строк не разбирался, не было такой необходимости . Приспичит, разберусь.
В основном, разбирательство в виде понимания хелпа по Windows API, он ведь для С, а также портирования нужных API с C на Pascal.
А по необходимости на прошлой неделе разбирался с OpenOffice с целью использования Calc (аналог Excel) для генерации отчетов из своих проектов (генерация в Excel уже была, надо было добавить генерацию в OpenOffice Calc). Там (в SDK на OpenOffice) почти все вообще на Java. Ничего страшного, разобрался, интернет помог.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34461354
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСейчас на работе поддерживаю 3 проекта (написанные с 50% моего участия) и дописываю 4-ый (уже полностью сам), каждый в сотни тысяч строк. Достаточно?

вполне. теперь вопрос: причина выбора делфей?

кстати, объясните, чего за тест такой странный, это сортировка 12 числе чтоли ???

аффтопитезь: объект либо именован, либо не существует
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34461369
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinтеперь вопрос: причина выбора делфей?
Не скажу, не знаю. Знаю только, что до Delphi писали на турбопаскале. Да и я там работаю, потому что Delphi, нравится он мне :) У нас связка Delphi+Oracle. Основная работа - с БД.
Aklinкстати, объясните, чего за тест такой странный, это сортировка 12 числе чтоли ???
Это алгоритм всех возможных перестановок элементов массива. Число перестановок равно факториалу количества элементов массива. В коде количество элементов задается константой razmer.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34461378
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74Не скажу, не знаю. Знаю только, что до Delphi писали на турбопаскале. Да и я там работаю, потому что Delphi, нравится он мне :) У нас связка Delphi+Oracle. Основная работа - с БД.

понятно, скорость +- */ 2 вам не важна...

Yuric74Это алгоритм всех возможных перестановок элементов массива. Число перестановок равно факториалу количества элементов массива. В коде количество элементов задается константой razmer.

фигня тогда. количество перестановок - квадрат, а у вас в коде - третья степень.
так что как ни смотрите, но мой квадрат (если вы именно это имеете ввиду) будет быстрее.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34461481
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinпонятно, скорость +- */ 2 вам не важна...
Я об этом и говорил
Delphi меня устраивает на 100%, позволяя мне решать абсолютно все задачи, стоящие передо мной
И тем не менее, интерес есть. И как я убедился, в данном примере Delphi в скорости не проигрывает.
Aklinфигня тогда. количество перестановок - квадрат, а у вас в коде - третья степень.
так что как ни смотрите, но мой квадрат (если вы именно это имеете ввиду) будет быстрее.
Не понял. Выражайтесь яснее.
Количество перестановок - факториал.
Распишем для трех элементов
123
132
213
231
312
321
Получили 6 вариантов. Никаким квадратом и не пахнет. Аналогично можно расписать для 4, 5 и т.д. Для 4 элементов количество перестановок - 24, для 5 - 120 и т.д.
И где в коде третья степень? Там одни сравнения, инкремент, декремент и обмен местами элементов массива.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34461672
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin vitalek Aklinда, еще: выложите (или скиньте) еще и EXE- файл для делфей, который выводил бы результаты имеется ввиду:
1) честность, что результат тот же, а не деленный на 2
2) компы разные, и цифры, что вы напишите, будут не совпадать.

аффтопитезь: объект либо именован, либо не существует

Рыдаю. Исходники примеров полностью приведены на предыдущей странице. Что мешает скомпилировать консольное приложение самостоятельно? Или Вы не программировали, а как сами говорили, "работали" в Delphi, т.е. занимались кнопкоформошлёпством?

1. я игрался в делфях давно , недавно сидел в борладне и фигел. это УЖАСТНАЯ среда разработки .
2. про делфи скажу, что знаю VB и суть та же, т.е. делфями пользуются (далее - в поиск)
3. делфей нет, поэтому я говорю пришпинделить EXE шник , который время покажет.
4.на предыдущей странце только делфийские тесты, ни одного сишного.
так что ваш рыд похож больше на слив

1. Вот это ключевая фраза. Какого, извиняюсь, хрена Вы пытаетесь тут с умным видом что-то доказывать, если имеете лишь отдалённое представление о предмете обсуждения? Впрочем, статистика Вашей "активности на форуме" всё объясняет.
Одно дело когда свою точку зрения высказывают ErV или Gluk(Kazan) , но Вы то куда лезете? "Сам Пастернака не читал, но осуждаю"?(с)
2. Это следует понимать, что VB Вы знаете, но не знаете Delphi. Это банальный слив. См. п.1.
3. А как Вы "недавно" работали в BDS2006? В состав пакета Delphi вообще-то входит. И если при установке соответствующую галку сняли, то её всегда можно вернуть на место и доставить недостающие части пакета. Это раз. На предыдущей странице к постам Yuric74 прикреплены исходные коды и екзешники для различных версий Delphi в виде zip-архивов. Это два. Вы писатель, а не читатель, что-ли?
4. А что мешает программисту C++ написать эти несложные тесты самостоятельно?
Так что, боюсь, пока сливаете Вы. Причём, по всем пунктам.


Модератор:
настоятельные рекомендации:

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

Высказывать свою точку зрения на форуме, даже если она ошибочная, правилами не запрещено.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34462103
JЛоботряс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OracleX
Теперь понятно, о чем говорил уважаемый Grexhide ?Так, давайте оптимизированный бинарник на дельфи в студию. Перемеряем
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34462160
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю финальную компиляцию второго теста:

Результаты:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Intel Core Duo E6600 ( 3 . 1  Ghz)

VC++  2005  	 4469  ms
Delphi10 goto	 4519  ms
Delphi10 repeat  5172  ms


Athlon AMD  64   3000 + ( 2  Ghz)

Delphi10 goto	  9157  ms
VC++  2005  	 10656  ms
Delphi10 repeat  11391  ms


INTEL M760 ( 2  Ghz)

Delphi10 goto	  7344  ms
Delphi10 repeat   8500  ms
VC++  2005  	  8640  ms

Исходники + бинарники:
http://www.mycoolfotos.com/lzma/repeat_goto.zip (86 KB)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34462165
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хммммм. Очень интересный результат. Теперь интересно насколько можно разогнать С++ версию. Хотя сравнимые(а местами и опережающие результаты Дельфи подтвердили мою гипотезу о кривизне порта)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34462957
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalek

с делфями я игрался.
под 2006 пытался поработать (пришлось). УЖАСТНЫЕ ощущения. у меня даже локалсы не заработали нормально. причина, почему я просил прикрепить EXE. У меня НЕТ борланд студии НИОДНОЙ из них. поэтому я и просил прикрепить EXE шник.
а еще это супер - фича под название м "ребилд" вместо компиляции или билда... это полный п.

также очень странная подстведка и выравнивание. сложный доступ к файлам/папкам/проектам/классам в конце концов. короче, за 2 часа работы негативных ощущений море. на GCC и то проще было под edit писать, хотя бы понятно, кто откуда растет.

количество перестановок - факториал, но код для этого по-моему будет меньше, т.е. не 3я степень, как у автора.
последнее имхо.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463060
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zloy denХммммм. Очень интересный результат.

Добавлены забеги на P4 2.6 GHz.

Код: 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.
Intel Core Duo E6600 ( 3 . 1  Ghz)

VC++  2005  	 4469  ms
Delphi10 goto	 4519  ms
Delphi10 repeat  5172  ms


AMD Athlon  64   3000 + ( 2  Ghz)

Delphi10 goto	  9157  ms
VC++  2005  	 10656  ms
Delphi10 repeat  11391  ms

INTEL M760 ( 2  Ghz)

Delphi10 goto	  7344  ms
Delphi10 repeat   8500  ms
VC++  2005  	  8640  ms

P4 ( 2 . 6  Ghz)

Delphi10 goto	  8125  ms
Delphi10 repeat   9953  ms
VC++  2005  	 12172  ms
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463287
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinколичество перестановок - факториал, но код для этого по-моему будет меньше, т.е. не 3я степень, как у автора.
Код сделан так, что начинать и продолжать перестановки можно с любой начальной комбинации. Перестановка идет именно в том порядке, как я приводил выше для 3 элементов. Если расписать для 4, то закономерность будет более понятна.
Возможно, существует и более эффективный алгоритм, не искал.
Master Alex
Добавлю результаты для CeleronD 3.16ГГц (133@166х19)
Delphi_goto 6359(ms)
Delphi_repeat 7500(ms)
VC++ 7594 (ms)
EXE-шники отсюда http://www.mycoolfotos.com/lzma/repeat_goto.zip
Интересное отличие от Р4. Он на каком ядре?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463319
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinне 3я степень, как у автора.
Кажется до меня дошло :) 3 степень - это 3 вложенных цикла?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463328
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74 vitalekЕсли не трудно, выложите, пожалуйста, код теста на С и результаты
Код один к одному, как в Delphi. Если что не так - сорри. Я на С последний раз писал в 2001 году.
Код: 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.
#include "stdafx.h"
#include "windows.h"

#define razmer  12 

int _tmain(int argc, _TCHAR* argv[])
{
  int b[ 30 ];
  DWORD Time1,Time2;
  int d,m,min,obmen;
  int nomvar;
  char *ch;

  for (d= 1 ;d<= 20 ;d++)
    b[d]=d;
  nomvar= 0 ;
  Time1=GetTickCount();
  while (true)
  {
    nomvar=nomvar+ 1 ;
    for (m=razmer; m> 1 ; m--)
      if (b[m]>b[m- 1 ]) 
        break;
    if (m== 1 ) 
      break;
    obmen=m- 1 ;
    for (min=obmen+ 1 ;min<=razmer;min++)
	    if ((b[min]<b[m]) && (b[min]>b[obmen])) 
        m=min;
    min=b[obmen];
    b[obmen]=b[m];
    b[m]=min;
    for (d=obmen+ 1 ;d<razmer;d++)
      {
        m=d;
        for (min=d+ 1 ;min<=razmer;min++)
          if (b[min]<b[m]) 
            m=min;
        min=b[m];
        b[m]=b[d];
        b[d]=min;
      };
  };
  Time2=GetTickCount();
  printf("Count: %d\n",nomvar);
  printf( "Time: %d (ms)\n", Time2-Time1);
  ch=" ";
  scanf_s(ch);
  return  0 ;
}
Проц Athlon X2 3800+ на номинале. Условия тестов такие же, как в Delphi.
Компиляция естественно Release.
Результат для razmer=12
Count: 479001600 Time: 10375 (ms)



Сделал, как и в делфийском тесте варианты for, while и do while:
VC++ 6.0
for 35094 ms
while 31390 ms
do while 32344

Borland C++ 2006
for 15406 ms
while 15406 ms
do while 12 484 ms

Везде, естественно, компиляция Release.
Athlon XP 2000+(1,66 ГГц)
Исходники, настройки проекта и екзешники прилагаю.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463332
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463338
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463352
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для билдера 2006
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463357
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463361
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463366
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalek
Sorry.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463367
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74Интересное отличие от Р4. Он на каком ядре?
Intel Pentium 4 2.6 GHz Northwood
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463381
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, удивила разница между VC++ 6.0 и 2006-м Builder'ом. Может, делаю чего не так? Но вроде всё в релизе...
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463384
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalek
Ни фига себе, а что так медленно в VC6? И ЕХЕ-шники великоваты, 50к. У меня в VC2005 размер ЕХЕ-шника 6к.
Попробовал на CeleronD 3,16 цикл for - 19250мс
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463391
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74 vitalek
Ни фига себе, а что так медленно в VC6? И ЕХЕ-шники великоваты, 50к. У меня в VC2005 размер ЕХЕ-шника 6к.
Попробовал на CeleronD 3,16 цикл for - 19250мс

Может, из-за AMD?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463398
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalekМожет, из-за AMD?
Так я на интеле попробовал ваш код, тоже медленно, см.выше.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463402
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74 vitalekМожет, из-за AMD?
Так я на интеле попробовал ваш код, тоже медленно, см.выше.

Странно, конечно. VC++ 6.0 Standart Edition Service Pack 5. Может, у меня в настройках билда чего не так? Посмотрите незамыленным взглядом.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463409
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74 vitalekМожет, из-за AMD?
Так я на интеле попробовал ваш код, тоже медленно, см.выше.

А в VC2005 те же исходники более быстрый код дают?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463415
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalekА в VC2005 те же исходники более быстрый код дают?
Ну так я и компилировал код, который приводил выше. Скорость выше.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463429
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalekМожет, у меня в настройках билда чего не так? Посмотрите незамыленным взглядом.
Посмотреть не смогу, у меня нет VC6. Не установился, пришлось 2005 качать с SDK.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463434
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalek vitalek
Sorry.
А можно попросить exe из Builder2006_do.zip без cc3270.dll в импорте собрать?
Спасибо.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463508
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex vitalek vitalek
Sorry.
А можно попросить exe из Builder2006_do.zip без cc3270.dll в импорте собрать?
Спасибо.

ОК. Только вечером, на работе нет билдера:)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34463878
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex vitalek vitalek
Sorry.
А можно попросить exe из Builder2006_do.zip без cc3270.dll в импорте собрать?
Спасибо.

Кстати, а что за проблемы там возникли? Требует наличия dll-ки, а builder не установлен?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34464236
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сортировка "пузырём" на указателях... С++ vs C#... VS 2005 SP1...

Код: 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.
#define SIZE  100000 

int _tmain(int argc, _TCHAR* argv[])
{
    int buf[SIZE];
    for (int i =  0 ; i < SIZE; i++)
        buf[i] = SIZE - i;

    cout << "Started..." << endl;
    DWORD started = GetTickCount();
		
    int* pStart = buf;
    int* pEnd = buf + SIZE -  1 ;
    while (pStart < pEnd)
    {
        int* p = pEnd;
        int* pm1 = p -  1 ;
        while (p > pStart)
        {
            if (*pm1 > *p)
            {
                int tmp = *p;
                *p = *pm1;
                *pm1 = tmp;
            }
            p--;
            pm1--;
        }
        pStart++;
    }
	
    DWORD elapsed = GetTickCount() - started;

    cout << "Elapsed: " << elapsed << " miliseconds" << endl;
    getchar();

    return  0 ;
}
Код: 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.
    class Program
    {
        const int SIZE =  100000 ;

        unsafe static void Main(string[] args)
        {
            int* buf = stackalloc int[SIZE];
            for (int i =  0 ; i < SIZE; i++)
                buf[i] = SIZE - i;

            Console.WriteLine("Started...");
            Stopwatch sw = new Stopwatch();
            sw.Start();

            int* pStart = buf;
            int* pEnd = buf + SIZE -  1 ;
            while (pStart < pEnd)
            {
                int* p = pEnd;
                int* pm1 = p -  1 ;
                while (p > pStart)
                {
                    if (*pm1 > *p)
                    {
                        int tmp = *p;
                        *p = *pm1;
                        *pm1 = tmp;
                    }
                    p--;
                    pm1--;
                }
                pStart++;
            }

            int elapsed = (int)sw.Elapsed.TotalMilliseconds;
            Console.WriteLine("Elapsed: " + elapsed.ToString() + " miliseconds");
            Console.ReadLine();
        }
    }

Итого:
C++ ~12 секунд
C# ~13 секунд

ЗЫ: Если на C# переписать через массив с обращением по индексу, то результат ~19 секунд. Проверка выхода за границы массива рулит... :-)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34464364
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КИтого:
C++ ~12 секунд
C# ~13 секунд
Какой проц? А то у меня на CeleronD 3,16 и Delphi2006 за 5031мс.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34464470
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ноутбук Fujitsu-Siemens P4 2.8 ГГц. Я бы на Delphi тоже сделал бы, но нету её под рукой :-(
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34466713
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИтого:
C++ ~12 секунд
C# ~13 секундтак для ансейфа вроде нативный код генерится.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34467196
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoтак для ансейфа вроде нативный код генерится.

Да нет, вроде "обычный". Результат ILDasm-а в приложенном файле.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34468918
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex vitalek vitalek
Sorry.
А можно попросить exe из Builder2006_do.zip без cc3270.dll в импорте собрать?
Спасибо.

ОК. Просьбу выполнил. Правда, на результат это всё равно не влияет.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34469661
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin
1. под 2006 пытался поработать (пришлось). УЖАСТНЫЕ ощущения. у меня даже локалсы не заработали нормально.
2. а еще это супер - фича под название м "ребилд" вместо компиляции или билда... это полный п.

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

1. Что имеется ввиду под "локалсами"?
2. В смысле? Где там "ребилд"? Компиляция и билд на своих местах(см. прикреплённое изображение)
3. Ну, в таких случаях обычно говорят ИМХО. Мне вот, например, борландовский интерфейс(в т.ч. подсветка) нравится гораздо больше, нежели у продукции Майкрософт.
А вообще, выравнивание и подсветка меняются в настройках. Особо страждущим можно использовать подсветку в стиле Визуальной студии.

И вообще, что сравниваем-то? Языки, их реализацию или IDE? А то навалили всего в кучу.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34469672
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalek Aklin
1. под 2006 пытался поработать (пришлось). УЖАСТНЫЕ ощущения. у меня даже локалсы не заработали нормально.
2. а еще это супер - фича под название м "ребилд" вместо компиляции или билда... это полный п.

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

1. Что имеется ввиду под "локалсами"?
2. В смысле? Где там "ребилд"? Компиляция и билд на своих местах(см. прикреплённое изображение)
3. Ну, в таких случаях обычно говорят ИМХО. Мне вот, например, борландовский интерфейс(в т.ч. подсветка) нравится гораздо больше, нежели у продукции Майкрософт.
А вообще, выравнивание и подсветка меняются в настройках. Особо страждущим можно использовать подсветку в стиле Визуальной студии.

И вообще, что сравниваем-то? Языки, их реализацию или IDE? А то навалили всего в кучу.

Чего-то скриншот в jpg не цепляется к сообщению:(
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34470781
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КСортировка "пузырём" на указателях... С++ vs C#... VS 2005 SP1...

...src...

Итого:
C++ ~12 секунд
C# ~13 секунд

ЗЫ: Если на C# переписать через массив с обращением по индексу, то результат ~19 секунд. Проверка выхода за границы массива рулит... :-)

Мои 5 копеек, не "супер" железо: Athlon XP 2600; VC++6 sp6
27.3 секунды.
Ни Delphi, ни C# у меня не стоит :(
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34471204
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalekОК. Просьбу выполнил. Правда, на результат это всё равно не влияет.

Спасибо! Вот новая версия теста - добавлены C++Builder и Intel C++

Код: 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.
Intel Core Duo E6600 ( 3 . 1  Ghz)

Intel C++	  3531  ms
C++Builer         4360  ms
VC++  2005  	  4469  ms
Delphi10 goto	  4519  ms
Delphi10 repeat   5172  ms



AMD Athlon  64   3000 + ( 2  Ghz)

Intel C++	  8328  ms
Delphi10 goto	  9157  ms
C++Builer         9400  ms
VC++  2005  	 10656  ms
Delphi10 repeat  11391  ms



INTEL M760 ( 2  Ghz)

Intel C++	  7187  ms
Delphi10 goto	  7344  ms
Delphi10 repeat   8500  ms
C++Builer         8550  ms
VC++  2005  	  8640  ms



P4 ( 2 . 6  Ghz)

C++Builer         7953  ms
Delphi10 goto	  8125  ms
Intel C++	  8578  ms
Delphi10 repeat   9953  ms
VC++  2005  	 12172  ms


Исходники + бинарники:
http://www.mycoolfotos.com/lzma/repeat_goto.zip (243 KB)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34471222
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Master Alex
Добавьте, плиз, Delphi6 с goto, прикладываю. Это самый быстрый код из D5, D6 и D2006 (на Athlon)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34471230
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, если у кого установлена триальная Delphi 2007, выполните, пожалуйста все 4 теста(for, while, repeat, go to). Интересно посмотреть, насколько далеко продвинулся экс-борланд по пути ухудшения кодогенератора
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34471269
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74Добавьте, плиз, Delphi6 с goto, прикладываю. Это самый быстрый код из D5, D6 и D2006 (на Athlon)
Delphi goto, как мне кажется надо вообще выкинуть, т.к. его ценность для данного теста сравнения сомнительна - т.к. это уже попытка оптимизации оригинального кода, при отсутствии оптимизации у других компиляторов :) Интереснее добавить реализации на Java и C#.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34471312
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Master AlexDelphi goto, как мне кажется надо вообще выкинуть, т.к. его ценность для данного теста сравнения сомнительна...Интереснее добавить реализации на Java и C#.
Я думаю, выкидывать не надо, пусть будет как ориентир (типа максимум для компиляторов Delphi). А вот Java и C# было бы интересно. К сожалению, не знаю ни того, ни другого.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34471325
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда можно написать на встроенном в Delphi ассемблере - читаемость кода будет похожей :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34471602
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Master AlexНу тогда можно написать на встроенном в Delphi ассемблере - читаемость кода будет похожей :)
Пробовал, скорость та же, как и у Delphi6_goto :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34472022
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74 Master AlexНу тогда можно написать на встроенном в Delphi ассемблере - читаемость кода будет похожей :)
Пробовал, скорость та же, как и у Delphi6_goto :)
Ну, не может быть! Достаточно посмотреть код, который генерит текущий победитель Intel C++ и оптимизировать его :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34472286
vlgri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мой вариант Delphi 2006

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Intel Core Duo E6300 (1.86 Ghz)

Intel C++	 5781 ms
C++Builer        7109 ms
VC++ 2005 	 7360 ms
Delphi10 goto	 7407 ms
Delphi10 repeat  8219 ms

 Delphi10         5890 ms 
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34472375
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlgriМой вариант Delphi 2006

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Intel Core Duo E6300 (1.86 Ghz)

Intel C++	 5781 ms
C++Builer        7109 ms
VC++ 2005 	 7360 ms
Delphi10 goto	 7407 ms
Delphi10 repeat  8219 ms

 Delphi10         5890 ms 


Delphi10 5890 ms - это что за вариант??
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34472384
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на D2007 так ни кому и не удалось замерять?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34472467
vlgri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalek
Delphi10 5890 ms - это что за вариант??
http://]http://www.sql.ru/forum/actualfile.aspx?id=4041544
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34472524
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlgriМой вариант Delphi 2006

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Intel Core Duo E6300 (1.86 Ghz)

Intel C++	 5781 ms
C++Builer        7109 ms
VC++ 2005 	 7360 ms
Delphi10 goto	 7407 ms
Delphi10 repeat  8219 ms

 Delphi10         5890 ms 

Вот это другое дело! Delphi 10 goto выкидываем!
PS. У меня тоже была идея перенести код в процедуру, чтобы поменялись регистры при доступе к элементам массива, но руки не дошли :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34472540
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalekА на D2007 так ни кому и не удалось замерять?
Вечером померю :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34472686
vlgri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Master Alex

Вот это другое дело! Delphi 10 goto выкидываем!
PS. У меня тоже была идея перенести код в процедуру, чтобы поменялись регистры при доступе к элементам массива, но руки не дошли :)[/quot]
Смотри мое сообщение от 3 апр 07, 15:36
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34473014
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlgriМой вариант Delphi 2006

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Intel Core Duo E6300 (1.86 Ghz)

Intel C++	 5781 ms
C++Builer        7109 ms
VC++ 2005 	 7360 ms
Delphi10 goto	 7407 ms
Delphi10 repeat  8219 ms

 Delphi10         5890 ms 


Любопытно. for в процедуре является самым быстрым вариантом. Выходит, что for всё-таки работает нормально..., когда НЕ находится в основном блоке программы. Это напоминает ситуацию с подсчётом интерфейсных ссылок:)
Впрочем, потеря невелика - мало кто размещает такие вещи в основном блоке.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34473044
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlgri vitalek
Delphi10 5890 ms - это что за вариант??
http://]http://www.sql.ru/forum/actualfile.aspx?id=4041544

Единственное, что не понял - почему в исходнике стоит комментарий не убирать SysUtils? Я убрал - результат почти не изменился, даже незначительно улучшился.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34473063
vlgri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalek vlgri vitalek
Delphi10 5890 ms - это что за вариант??
http://]http://www.sql.ru/forum/actualfile.aspx?id=4041544

Единственное, что не понял - почему в исходнике стоит комментарий не убирать SysUtils? Я убрал - результат почти не изменился, даже незначительно улучшился.
На каком процессоре?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34473091
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlgri vitalek vlgri vitalek
Delphi10 5890 ms - это что за вариант??
http://]http://www.sql.ru/forum/actualfile.aspx?id=4041544

Единственное, что не понял - почему в исходнике стоит комментарий не убирать SysUtils? Я убрал - результат почти не изменился, даже незначительно улучшился.
На каком процессоре?

AMD Athlon XP 2000+ (1,66 ГГц)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34473169
vlgri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalek

AMD Athlon XP 2000+ (1,66 ГГц)
Похоже разное поведение процессоров при переходах.
Интересно как на 32 разрядных(AMD и Pentium).
Может кто проверит?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34473231
vlgri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм, действительно на AMD Athlon 64 3000+ 2.0 Ghz практически разницы нет.
на Intel Core Duo E6300 (1.86 Ghz)

Код: plaintext
1.
с SysUtils  5890 ms
без         6360 ms
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34481125
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то процесс измерения заглох сам собой...
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34481469
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalekЧто-то процесс измерения заглох сам собой...

Так вроде, все ясно - цифры то перед глазами :) По LZMA тесту сошлись во мнении, что Delphi всех, теоретически, порвет, только надо все переписать грамотно, но делать этого желающих нет. По второму тестсту, тоже вроде, все понятно - Intel C++ компилятор всех заборол.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34481943
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex vitalekЧто-то процесс измерения заглох сам собой...

Так вроде, все ясно - цифры то перед глазами :) По LZMA тесту сошлись во мнении, что Delphi всех, теоретически, порвет, только надо все переписать грамотно, но делать этого желающих нет. По второму тестсту, тоже вроде, все понятно - Intel C++ компилятор всех заборол.

Была робкая надежда увидеть цифры по второму тесту для D2007, C# и Java:) Но желающих, видимо, нет. Самому качать D2007 ради одного теста - тоже жаба душит
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34482346
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitalekБыла робкая надежда увидеть цифры по второму тесту для D2007, C# и Java:) Но желающих, видимо, нет. Самому качать D2007 ради одного теста - тоже жаба душит
У меня сегодня D2007 докачается, поставлю, прогоню тесты, отпишусь.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34485019
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalekБыла робкая надежда увидеть цифры по второму тесту для D2007, C# и Java:) Но желающих, видимо, нет.
Да, не густо, прямо скажем. Итак, вечерние забеги. В них добавлена новая версия Delphi 10 (call procedure) + Java + С#.
Код: 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.
Intel Core Duo E6600 ( 3 . 1  Ghz)

Intel C++	   3531  ms
Delphi10 proc	   3625  ms
C++Builer          4360  ms
VC++  2005  	   4469  ms
Delphi10 goto	   4519  ms
Delphi10 repeat    5172  ms
C#                 5300  ms
Java  1 . 6           10234  ms


AMD Athlon  64   3000 + ( 2  Ghz)

Intel C++	   8328  ms
Delphi10 proc	   8875  ms
Delphi10 goto	   9157  ms
C++Builer          9400  ms
VC++  2005  	  10656  ms
C#                11375  ms
Delphi10 repeat   11391  ms
Java  1 . 6           16000  ms


INTEL M760 ( 2  Ghz)

Intel C++	   7187  ms
Delphi10 goto	   7344  ms
Delphi10 proc	   8046  ms
Delphi10 repeat    8500  ms
C++Builer          8550  ms
VC++  2005  	   8640  ms
C#                12156  ms
Java  1 . 6           20900  ms


P4 ( 2 . 6  Ghz)

Intel C++	  7484  ms
Delphi10 goto	  7813  ms
C++Builer         7907  ms
Delphi10 proc	  9141  ms
Delphi10 repeat   9422  ms
VC++  2005  	 10344  ms
C#               12031  ms
Java  1 . 6          17312  ms
Исходники + бинарники:
http://www.mycoolfotos.com/lzma/repeat_goto.zip (371 KB)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34485640
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master AlexИсходники + бинарники:
http://www.mycoolfotos.com/lzma/repeat_goto.zip (371 KB)

А что делают все эти программы? Ссылочку на сообщение с описанием задания хотя бы.

У меня с фантазией вроде не плохо, но понять, что нужно делать c массивом, чтобы получить в результате из набора чисел
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0}
набор
{0, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 13, 14, 15, 16, 17, 18, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0}
(причём потратив на это 25 секунд на java на 3ггц пне) я не смог :(
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34485671
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsА что делают все эти программы? Ссылочку на сообщение с описанием задания хотя бы.

Боже мой. Да это же генерация перестановок...
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34486007
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs

Боже мой. Да это же генерация перестановок...

Предалгаю использовать такой вариант решения для java )
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34486318
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsПредалгаю использовать такой вариант решения для java )
Спасибо! Сейчас перезапущу и выложу результаты.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34486847
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex NotGonnaGetUsПредалгаю использовать такой вариант решения для java )
Спасибо! Сейчас перезапущу и выложу результаты.

Не обратил внимание на ещё одну оптимизацию, после которой всё бегает в 2 раза быстрее.

Код прилагается.

У меня получились следующие результаты на п4, 3ггц:

java 6:

Count: 479001600
Time: 5628 (ms)

с# 2 (release, код в один один из java):

Count: 479001600
Time: 00:00:08.9028016 (ms)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34486849
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsКод прилагается.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34486974
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задело, трудно остановиться :)

Прилагается код на java, который бегает быстрее решения на C++, собранного компилятором от интел.

java 1.6:

Count: 479001600
Time: 2874 (ms)

c#:

Count: 479001600
Time: 00:00:04.6667104 (ms)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34487158
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихо, сам с собою...
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34487221
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsТихо, сам с собою...

Просто убил :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34487240
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUsТихо, сам с собою...
Вот уж точно :)
Вопрос не в том, чтобы написать оптимальный алгоритм перестановок, а в сравнении одного и того же алгоритма на разных языках.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34487271
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74 NotGonnaGetUsТихо, сам с собою...
Вот уж точно :)
Вопрос не в том, чтобы написать оптимальный алгоритм перестановок, а в сравнении одного и того же алгоритма на разных языках.

А я этим и занимаюсь :) Сравниваю Java и С#.

Результат самый что ни на есть увлекательный. Смотрим:

Есть два алгоритма А1 и А2. Оба без изменений пускаются на java/c#.
Для одного получаем, что с# выигрывает у java, для другого - в точности наоборот (в полтора раза).
Примечательно, что А1 и А2 решаеют ОДНУ И ТУЖЕ задачу.


О чём это говорит? Только о том, что эффективный алгоритм решения одной и той же задачи для разных языков будет разным.

Следствием данного наблюдения является бессмысленность замеров, которые проводятся в этом топике вот уже 8 старниц :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34487316
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUsА я этим и занимаюсь :) Сравниваю Java и С#.
Это правильно :)
NotGonnaGetUsО чём это говорит? Только о том, что эффективный алгоритм решения одной и той же задачи для разных языков будет разным.
Не всегда, в данном конкретном случае - да.
NotGonnaGetUsСледствием данного наблюдения является бессмысленность замеров, которые проводятся в этом топике вот уже 8 старниц :)
В результате этих замеров выяснилось, что в Delphi эффективность компиляции разных циклов - разная. Скорость выполнения for меньше, чем repeat, например. Так что замеры далеко не бессмыслены.
И если прочитаете ветку целиком, то мой первый пост - это вопрос о том, почему один и тот же код выполняется на разных версиях Delphi с разной скоростью.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34487340
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74В результате этих замеров выяснилось, что в Delphi эффективность компиляции разных циклов - разная. Скорость выполнения for меньше, чем repeat, например.
Ну этот результат легко было предсказать и без замеров. Вот если бы замеры показали одинаковое время, тогда стоило бы удивляться.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34487350
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74

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

Вас интересуют циклы дельфи, Master Alex'a скорость работы одних и тех же алгоритмов (причём не обязательно один в один похожих), меня - почему вдруг java оказалась тормознутее c# %)

В итоге то, что интересному одному из нас (циклы в дельфи), вовсе не обязательно полезный выход для другого :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34487372
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerНу этот результат легко было предсказать и без замеров.
Как, если не секрет? Я думал, что цикл for на асме (после компиляции) - это проверка условия выхода из цикла, затем тело цикла, инкремент регистра счетчика и jmp обратно на проверку. И while можно скомпилить так же. Почему тогда разница между for и while? Надо дома еще раз посмотреть дизассемблированный код.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34487382
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUsВ итоге то, что интересному одному из нас (циклы в дельфи), вовсе не обязательно полезный выход для другого :)
Вот это я точно мог предсказать :)
Но мне интересны не только результаты Delphi, но и все остальные тоже.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34487451
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74Как, если не секрет?
Циклы while/repeat, равно как и сишный цикл for, вычисляют свои аргументы на каждом шаге цикла. В отличие от них, паскалевский for вычисляет свои аргументы только один раз. Сводить второй случай к первому - неэффективно. Проверять, не сводится ли первый случай ко второму - весьма трудно. Таким образом, есть все основания предполагать разную реализацию кодогенерации для этих случаев.

Yuric74Я думал, что цикл for на асме (после компиляции) - это проверка условия выхода из цикла, затем тело цикла, инкремент регистра счетчика и jmp обратно на проверку.
Ну это зависит от. Например, компилятор попытается заменить инкремент декрементом, а проверку перенести в конец цикла.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34487989
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
О чём это говорит? Только о том, что эффективный алгоритм решения одной и той же задачи для разных языков будет разным.

Чтобы это доказать, надо на всех языках использовать реализацию одного и того же алгоритма - а у тебя оптимизированная версия и только для Java. Типа мы тут замеряем реализацию пузырьковой сортировки, а ты на Java реализовал QuickSort :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34488299
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
У меня получились следующие результаты на п4, 3ггц:

java 6:

Count: 479001600
Time: 5628 (ms)

с# 2 (release, код в один один из java):

Count: 479001600
Time: 00:00:08.9028016 (ms)

У меня вышло чуть по другому:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Intel Core Duo E6600 ( 3 . 1  Ghz)

Java (opt)  1 . 6  server   1000  ms
C#(opt)                 1062  ms                


AMD Athlon  64   3000 + ( 2  Ghz)

Java(opt)  1 . 6  server    1750  ms
C#(opt)                 1760  ms


INTEL M760 ( 2  Ghz)

Java(opt)  1 . 6  server    1800  ms
C#(opt)                 1828  ms    


P4 ( 2 . 6  Ghz)

C#(opt)                 1703  ms
Java(opt)  1 . 6  server    1875  ms
Исходники + бинарники:
http://www.mycoolfotos.com/lzma/repeat_goto.zip (371 KB)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34489096
vitalek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex vitalekБыла робкая надежда увидеть цифры по второму тесту для D2007, C# и Java:) Но желающих, видимо, нет.
Да, не густо, прямо скажем. Итак, вечерние забеги. В них добавлена новая версия Delphi 10 (call procedure) + Java + С#.


В смысле? 10-я версия - это вроде как D2006. А самая свежая - это D2007. Если имеется ввиду всё-таки 2007-я, то ускорения по сравнению с D10 нет...
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34489121
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex NotGonnaGetUs
О чём это говорит? Только о том, что эффективный алгоритм решения одной и той же задачи для разных языков будет разным.

Чтобы это доказать, надо на всех языках использовать реализацию одного и того же алгоритма - а у тебя оптимизированная версия и только для Java. Типа мы тут замеряем реализацию пузырьковой сортировки, а ты на Java реализовал QuickSort :)

Ну не правда. Я сравнивал java и c# на _одинаковых_ алгоритмах и пришёл к выводу, что пузырьковую сортировку с# делает быстрее, а java делает быстрее quicksort.

Кстати, мои результаты действительно не корректны получились.
Я запускал и java, и c# программики из IDE (Idea, VS2005). Idea никак не влияет на скорость выполнение, а vs2005, оказалось, замедляет выполнение в полтора раза.
Перезапуски без IDE показали, что java и с# работают одинаково быстро.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34489239
ещё хочу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Master AlexУ меня вышло чуть по другому:
А не трудно будет запустить opt-алгоритм на с++/дельфи? Интересно во сколько раз эти языки быстрее справятся с задачей.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34489608
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё хочу Master AlexУ меня вышло чуть по другому:
А не трудно будет запустить opt-алгоритм на с++/дельфи? Интересно во сколько раз эти языки быстрее справятся с задачей.
Естественно, потестируем и Delphi и C++ с новым алгоритмом :)
...
Рейтинг: 0 / 0
Бенчмарки 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
Бенчмарки C#, C++, Java, Delphi
    #34504471
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74Это не предоставление готовых перестановок?
Ну так добавте это (создание зеркального массива) в ваш код и оцените время работы.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34504498
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUs
А зачем создавать зеркальный массив? Мы же не храним все варианты перестановок. Обычно в таких задачах целью ставится вывести все варианты на экран или в файл. Эта цель достигается, что еще надо?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34505034
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74 NotGonnaGetUs
А зачем создавать зеркальный массив? Мы же не храним все варианты перестановок. Обычно в таких задачах целью ставится вывести все варианты на экран или в файл. Эта цель достигается, что еще надо?

Для того, чтобы вариант вывести на экран или в файл, его нужно сформировать. В каком месте предложенного кода формируются "зеркальные" перестановки? Ни в каком. А на это требуется время.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34505068
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUsДля того, чтобы вариант вывести на экран или в файл, его нужно сформировать. В каком месте предложенного кода формируются "зеркальные" перестановки? Ни в каком. А на это требуется время.
Вы что, издеваетесь? Вариант перестановки уже в массиве. Еще раз
Код: 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
Бенчмарки C#, C++, Java, Delphi
    #34505331
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74
Вы что, издеваетесь? Вариант перестановки уже в массиве. Еще раз


Ещё раз, ок, хотя это становится уже глупо.

В массиве b появляется только половина возможных перестановок. Вы предалагаете остальные получать при печати (на экран/в файл), но т.к. этого не происходит (печати), то алгоритм спокойно перебирает только половину вариантов. Если вставить код печати, то кроме времени на саму распечатку, добавится время на переворачивания массива, чтобы его подготовить к печати.
Вы это время игнорируете, что не правильно.

Рассуждая способом аналогичным вашему, я мог бы предложить решение перебирающее числа от 1 до 13!, и добавить процедуру печати, которая получая номер перестановки формирует саму перестановку и затем выводит её. Это был бы самый быстрый алгоритм перебора перестановок :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34505408
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUsЕсли вставить код печати, то кроме времени на саму распечатку, добавится время на переворачивания массива, чтобы его подготовить к печати.
Вы это время игнорируете, что не правильно.
Значит, если есть задание вывести элементы массива на экран, начиная с конца массива, то Вы сначала перевернете массив, затем выведете его на экран, начиная с 1 элемента. Я правильно понял?

NotGonnaGetUs
Рассуждая способом аналогичным вашему, я мог бы предложить решение перебирающее числа от 1 до 13!, и добавить процедуру печати, которая получая номер перестановки формирует саму перестановку и затем выводит её. Это был бы самый быстрый алгоритм перебора перестановок :)
Было бы интересно увидеть алгоритм получения перестановки из ее номера, например, в лексикографическом порядке.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34506791
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoАлексей К, не, то, что с# тестили с баундчеком – это совершенно правильно (в джаве это вроде не отключается?..), но изврата ради конечно можешь написать в ансейфе, скомпилить, выложить, ты тут самый большой любитель этого дела :)И после этого вы щитаете меня извращенцем. :-)) Просто подумалось, раз уж извратились на делфи, почему-бы не извратиться на С#. :-))
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34506882
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КИ после этого вы щитаете меня извращенцем. :-))
Хотя и не мне...
Я ж просил сильно не пинать :) Изврат специально для данного теста, ни в одной своей проге не использовал goto. Хотя он до сих пор в спецификации Delphi :)
С другой стороны, никто не пинает asm за его jmp и условные переходы :) И asm\'овые вставки на Delphi будут активно использовать jmp, jne и т.д.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34506908
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUs
Попробую описать подробнее.
Допустим, что стоит задача вывести на экран все возможные перестановки.
Тогда я в свой код после каждой строчки
Код: plaintext
inc(Result);
добавлю 2 подряд вызова процедуры
Код: plaintext
1.
WorkProc(b,true);
WorkProc(b,false);
где второй параметр - направление выборки из массива (true - от 1 до razmer, false - от razmer до 1)
Сама процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure WorkProc(p1:TArr; p2:boolean);
var
  i:integer;
begin
  if p2 then
    begin
      for i:= 1  to razmer do
        write(p1[i],' ');
      writeln;
    end
  else
    begin
      for i:=razmer downto  1  do
        write(p1[i],' ');
      writeln;
    end;
end;
Таким образом на экран будут выведены все возможные перестановки, причем в два раза быстрее , чем если перебирать все варианты перестановок.
Соответственно, вместо вывода на экран можно производить любые действия с элементами массива.
Если не нравится два цикла, то можно проверкой p2 задать начальный индекс(1 или razmer), конечный (razmer или 1) индекс и шаг (+1 или -1), а затем сделать один цикл while.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34509006
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74 NotGonnaGetUs
Попробую описать подробнее.


Не переживайте, я прекрасно понимаю о чём вы пишете.

Yuric74
Было бы интересно увидеть алгоритм получения перестановки из ее номера, например, в лексикографическом порядке.


Пусть к-номер перестановки, a[0..N-1] - набор уникальных значений.
Найдём i[0...N-1] из формулы:
к = (N-1)!*i(0) + (N-2)!*i(1) + ... + 1!*i(N-2) + 0*i(N-1),
где 0 <= i(p) <= N - 1 - p;

По a и i можно построить к-ую перестановку.

Пример:
a = [1 2 3 4];
k = 4;

4 = 6*0 + 2*2 + 1*0 + 0*0;
i = [0 2 0 0];

b[0] = a[0] ; // = 1;
a.remove[0]; // a = [2 3 4];

b[1] = a[2]; // = 4;
a.remove[2]; // a = [2 3];

b[2] = a[0]; //= 2;
a.remove[0]; // a = [3];

b[3] = a[0]; // = 3;
a.remove[0]; // a = [];

b = [1 4 2 3];

Проверяем:
1 2 3 4 , k = 0
1 2 4 3 , k = 1
1 3 2 4 , k = 2
1 3 4 2 , k = 3
1 4 2 3 , k = 4 - ok.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34511409
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUs
Да я и не переживаю.
Вечером дома попробую ваш алгоритм на практике. Можно узнать источник алгоритма?

Кстати, я немного лажанулся :)
Вторая половина перестановок не будет зеркальной по отношению к первой половине. Поэтому придется считать все перестановки.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34511970
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИ после этого вы щитаете меня извращенцем. :-))ну вариант с репитом тоже сильно смахивает на извращение :)

Алексей КПросто подумалось, раз уж извратились на делфи, почему-бы не извратиться на С#. :-))ну я и сказал: сделай :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34512443
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuric74 NotGonnaGetUs
Можно узнать источник алгоритма?

Я его в девятом или десятом классе придумал. Уже не помню в связи с чем :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34515188
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo Алексей КПросто подумалось, раз уж извратились на делфи, почему-бы не извратиться на С#. :-))ну я и сказал: сделай :)Да я давно уже сделал. Там только одну строчку в исходниках надо поменять. :-))
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34588287
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, что пофлеймим дальше? :)

Предлагаю обсудить известный тест SciMark2a http://math.nist.gov/scimark2/

Разница почти в два раза по Composite Score между Java и С# впечатляет.

Тестировалось на WinXPSP2 (P4 2.4 GHz)

Код: 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.
--------------------------------------------------------------------------------------------
c:\Projects\Java\SciMark2\benchmarks\new>c:\Programme\Java\jdk1. 6 . 0 \bin\java.exe -server jnt.scimark2.commandline

SciMark  2 .0a

Composite Score:  500 . 4790187699658 
FFT ( 1024 ):  283 . 3399287019464 
SOR (100x100):    629 . 3125359875736 
Monte Carlo :  140 . 21178180591943 
Sparse matmult (N= 1000 , nz= 5000 ):  403 . 29846153846154 
LU (100x100):  1046 . 2323858159282 

java.vendor: Sun Microsystems Inc.
java.version:  1 . 6 . 0 
os.arch: x86
os.name: Windows XP
os.version:  5 . 1 

--------------------------------------------------------------------------------------------

c:\Projects\Java\SciMark2\benchmarks\new\c#>scimark
**                                                               **
** SciMark2a Numeric Benchmark, see http://math.nist.gov/scimark **
**                                                               **
Mininum running time =  2  seconds

Composite Score:  284 , 09  MFlops
FFT            :  184 , 82  - ( 1024 )
SOR            :  364 , 87  - (100x100)
Monte Carlo    :   13 , 34 
Sparse MatMult :  451 , 00  - (N= 1000 , nz= 5000 )
LU             :  406 , 42  - (100x100)
--------------------------------------------------------------------------------------------
Исходники, бинарники брать тут (69 KB)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34588549
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(задумчиво)
Мдя... впечатляет. Возму-ка я сорсы. Посмотрю. Наверное есть какая-то недооптимизация со стороны C#.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34589774
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил тесты для VC++ и Intel C++

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
P4  2 . 4  GHz

SciMark2 Composite Scores:

VC C++			 521 
Java  1 . 6  server 	 513 
Intel C++                497 
C#			 284 
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34590928
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На Core 2 Duo разница уменьшается, но все равно составляет 34%
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Core  2  Duo E6600  2 . 4  GHz

SciMark2 Composite Scores:

VC C++		        1042 
Intel C++                920 
Java  1 . 6  server 	 912 
C#			 603 

...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34591068
mrbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код C, переделаем на C++?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34591078
mrbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно, уже начал, выложу как буит...
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34591903
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrbusКод C, переделаем на C++?

А смысл?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34592304
mrbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Master Alex
А смысл?
А сравним C и C++ :)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34593415
mrbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот на C++ с использованием auto_ptr, vector. Безопаснее :), но медленнее :( вдвое
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34593457
mrbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А теперь пару махинаций, и получаем вот что (!!!)

---- С++ ---
** SciMark2 Numeric Benchmark, see http://math.nist.gov/scimark **
** for details. (Results can be submitted to pozo@nist.gov) **
** **
Using 2.00 seconds min time per kenel.
FFT stopwatch 3.328000 flops 53230.000000 cycles 16384
FFT stopwatch 0.000003 flops 872120320.000000 cycles 262.055385
Composite Score: 2364.79
FFT Mflops: 262.06 (N=1024)
SOR Mflops: 346.45 (100 x 100)
MonteCarlo: Mflops: 89.96
Sparse matmult Mflops: 693.14 (N=1000, nz=5000)
LU Mflops: 10432.35 (M=100, N=100)


---- C ----
** SciMark2 Numeric Benchmark, see http://math.nist.gov/scimark **
** for details. (Results can be submitted to pozo@nist.gov) **
** **
Using 2.00 seconds min time per kenel.
FFT stopwatch 3.062000 flops 53230.000000 cycles 16384
FFT stopwatch 0.000003 flops 872120320.000000 cycles 284.820483
Composite Score: 497.09
FFT Mflops: 284.82 (N=1024)
SOR Mflops: 513.85 (100 x 100)
MonteCarlo: Mflops: 68.44
Sparse matmult Mflops: 630.76 (N=1000, nz=5000)
LU Mflops: 987.58 (M=100, N=100)
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34593458
mrbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вместо vector используется рукописный класс auto_array + и немного оптимизации
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #34803127
justsomenick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что новенького?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #35373722
MasterAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bump!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Бенчмарки C#, C++, Java, Delphi
    #36746379
corejava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SciMark 2.0a

Composite Score: 781.6788129802871
FFT (1024): 601.4623193240948
SOR (100x100): 1178.205393751718
Monte Carlo : 158.6029286595437
Sparse matmult (N=1000, nz=5000): 801.1736342964851
LU (100x100): 1168.9497888695944

java.vendor: Sun Microsystems Inc.
java.version: 1.7.0-ea
os.arch: x86
os.name: Windows 7
os.version: 6.1
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #36746380
corejava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
C

LZMA 4.43 Copyright (c) 1999-2006 Igor Pavlov 2006-06-04

Compressing Decompressing

3792 KB/s 4465 MIPS 35628 KB/s 3591 MIPS
3758 KB/s 4426 MIPS 35496 KB/s 3578 MIPS
3780 KB/s 4451 MIPS 35622 KB/s 3591 MIPS
3792 KB/s 4465 MIPS 35416 KB/s 3570 MIPS
3799 KB/s 4474 MIPS 35692 KB/s 3598 MIPS
3792 KB/s 4465 MIPS 35599 KB/s 3588 MIPS
3778 KB/s 4449 MIPS 35471 KB/s 3575 MIPS
3759 KB/s 4426 MIPS 35543 KB/s 3583 MIPS
3765 KB/s 4434 MIPS 35424 KB/s 3571 MIPS
3765 KB/s 4434 MIPS 35547 KB/s 3583 MIPS
---------------------------------------------------
3778 KB/s 4449 MIPS 35543 KB/s 3583 MIPS Average
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #36746383
corejava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Java

java -server SevenZip.LzmaAlone b

LZMA (Java) 4.42 Copyright (c) 1999-2006 Igor Pavlov 2006-05-15


Compressing Decompressing

2243 KB/s 2641 MIPS 29467 KB/s 2895 MIPS
2248 KB/s 2647 MIPS 29897 KB/s 2937 MIPS
2255 KB/s 2655 MIPS 30117 KB/s 2959 MIPS
2257 KB/s 2658 MIPS 29897 KB/s 2937 MIPS
2255 KB/s 2655 MIPS 29897 KB/s 2937 MIPS
2257 KB/s 2658 MIPS 30117 KB/s 2959 MIPS
2257 KB/s 2658 MIPS 29897 KB/s 2937 MIPS
2260 KB/s 2661 MIPS 29897 KB/s 2937 MIPS
2262 KB/s 2664 MIPS 29897 KB/s 2937 MIPS
2260 KB/s 2661 MIPS 30117 KB/s 2959 MIPS
---------------------------------------------------
2255 KB/s 2656 MIPS 29919 KB/s 2939 MIPS Average
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #36746385
corejava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Delphi.Fast

LZMA (Pascal) 4.42 Copyright (c) 1999-2006 Igor Pavlov 2006-05-15


Compressing Decompressing

2187 KB/s 2576 MIPS 21903 KB/s 2152 MIPS
2226 KB/s 2621 MIPS 20177 KB/s 1982 MIPS
2226 KB/s 2621 MIPS 20177 KB/s 1982 MIPS
2226 KB/s 2621 MIPS 20177 KB/s 1982 MIPS
2226 KB/s 2621 MIPS 21903 KB/s 2152 MIPS
2187 KB/s 2576 MIPS 20177 KB/s 1982 MIPS
2187 KB/s 2576 MIPS 20177 KB/s 1982 MIPS
2223 KB/s 2618 MIPS 21903 KB/s 2152 MIPS
2187 KB/s 2576 MIPS 21903 KB/s 2152 MIPS
2187 KB/s 2576 MIPS 20277 KB/s 1992 MIPS
---------------------------------------------------
2206 KB/s 2598 MIPS 20844 KB/s 2048 MIPS Average

Модератор: отредактировано
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #36747055
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новый C# догнал старый байткод явы.
Добавлены несколько Си-компиляторов и D-компилятор.

Watcom C 1.9 rc5
Composite Score: 475.38
FFT Mflops: 175.83 (N=1024)
SOR Mflops: 620.80 (100 x 100)
MonteCarlo: Mflops: 78.93
Sparse matmult Mflops: 477.49 (N=1000, nz=5000)
LU Mflops: 1023.87 (M=100, N=100)

Digital Mars 8.52
Composite Score: 401.44
FFT Mflops: 98.43 (N=1024)
SOR Mflops: 633.45 (100 x 100)
MonteCarlo: Mflops: 67.23
Sparse matmult Mflops: 196.33 (N=1000, nz=5000)
LU Mflops: 1011.73 (M=100, N=100)

Visual C++ 9
Composite Score: 717.53
FFT Mflops: 519.12 (N=1024)
SOR Mflops: 801.56 (100 x 100)
MonteCarlo: Mflops: 88.97
Sparse matmult Mflops: 819.46 (N=1000, nz=5000)
LU Mflops: 1358.54 (M=100, N=100)

D 2.047 (plain translation from C)
Composite Score: 356.29
FFT Mflops: 175.83 (N=1024)
SOR Mflops: 386.01 (100 x 100)
MonteCarlo: Mflops: 81.54
Sparse matmult Mflops: 201.96 (N=1000, nz=5000)
LU Mflops: 936.12 (M=100, N=100)

Java (old bytecode)
Composite Score: 406.1161582127729
FFT (1024): 319.8094318335123
SOR (100x100): 627.6726546910978
Monte Carlo : 80.27375833886593
Sparse matmult (N=1000, nz=5000): 405.0432556483688
LU (100x100): 597.7816905520197

java.vendor: Sun Microsystems Inc.
java.version: 1.6.0_18
os.arch: x86
os.name: Windows Vista
os.version: 6.0

C# 2008 .NET 3.5
Composite Score: 413,67 MFlops
FFT : 344,98 - (1024)
SOR : 593,64 - (100x100)
Monte Carlo : 25,69
Sparse MatMult : 430,45 - (N=1000, nz=5000)
LU : 673,57 - (100x100)

...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #36747066
eee-pc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

1) можно по каждому тесту написать: "больше - лучше" или "меньше - лучше"
2) vc9 устаревший давно уже. плюс интел где ?
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #36747100
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня вот другая задачка стоит. Там вообще перформанс не нужен. Нужен шаблон обработки AST или просто дерева. Крутил я и так и эдак языки C# и Java.. ну никак неудобны они концептуально для этой задачи. Теоретически подходит xPath, но это слишком синтетическая технология. Прослойка. А мне нужно с базами непрерывно работать. А подкручивать гайки в xPath добавляя поддержку Oracle мне никак неохота. Идеальный вариант - Lisp, но я в нем - как слон в фарфоровой лавке.

Короче брался я за эту задачку раз 10 и десять раз бросал.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #36747123
eee-pc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИдеальный вариант - Lisp, но я в нем - как слон в фарфоровой лавке.
на каком основании вы это определили, что лисп идеальное решение ???
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #36747135
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё ядро алгоритма - это беготня по дереву и применение к нему поисковых шаблонов. А поскольку Lisp наиболее полно и плотно отображает работу с деревом у меня возникла мысль что Lisp - наиболее удачный выбор. Возможно существует и альтернатива в виде каких-то Caml-ов и прочих F-sharp-ов но судить не буду т.к. с теми знаком еще меньше.
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #36747139
eee-pc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВсё ядро алгоритма - это беготня по дереву и применение к нему поисковых шаблонов. А поскольку Lisp наиболее полно и плотно отображает работу с деревом у меня возникла мысль что Lisp - наиболее удачный выбор. Возможно существует и альтернатива в виде каких-то Caml-ов и прочих F-sharp-ов но судить не буду т.к. с теми знаком еще меньше.
обычно в таких случаях делаются тестовые примеры, наиболее близко отражающие поставленную задачу, а не просто на основании ОБС...
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #36747142
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если-б я делал тестовый пример для каждой задачи...
...
Рейтинг: 0 / 0
Бенчмарки C#, C++, Java, Delphi
    #36747154
eee-pc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсли-б я делал тестовый пример для каждой задачи...
зачем для каждой?

для большой и для задачи требующей высокой производительности...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Бенчмарки C#, C++, Java, Delphi
    #37405229
VanoPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересная очень дискуссия у Вас о том, какой язык лучше. Но все же советую всем, кто хочет разобраться, какой компилятор лучше Delphi или C++: быстрее компилирует и лучше оптимизирует код, сделать это СОБСТВЕННОРУЧНО и не верить никаким тестам.
...
Рейтинг: 0 / 0
265 сообщений из 265, показаны все 11 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Бенчмарки C#, C++, Java, Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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