On-line: PSP, гостей 0. Всего: 1 [подробнее..]
АвторСообщение
Администратор




Пост N: 2208
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.12.11 13:43. Заголовок: Интерпретаторы


Возьмем 3 продукта: 1с 8, visual foxpro и harbour.
Назначение у них различное, коня и трепетную лань сравнивать не стоит, но есть и кое-что общее: все они имеют интерпретатор, построенный на похожем принципе: сначала делается предкомпиляция в некий промежуточный код, а затем этот код выполняется.
Поэтому возникла мысль сравнить производительность этих интерпретаторов, посмотреть, так сказать, чей движок мощнее.

Берем простенький тест:

func main
Local i, nLoops := 5000000
Local L_F := 112345.67
Local L_N := 10000
Local L_C := "0123456789ABCDEF"
Local nn, nf, cc
Local nn1 := 0
Local nf1 := 0.1
Local cc1 := ""
Local nn2, nf2

Local nSec := Seconds()

for i := 1 to nLoops
nn := L_N
nf := L_F
cc := L_C
nn := L_N + 1
nf := L_F + 1.0
cc := L_C + L_C
nn1 += L_N + 1
nf1 += L_F + 1.0
if (nn1 % 2) == 0
// cc1 += L_C + chr(nn1 % 256)
endif
if (len(cc1) % 3) == 0
nn2 := nn1 % 13
nf2 := nf1 % 13
endif
nn := (nn1 + L_N + 1)*100/15
nf := (nf1 + L_F + 1.0)*100.00/15.00
next
? Seconds() - nSec
? nn, nf, cc
? nn1, nf1, len(cc1)
? nn2, nf2
retu nil

И запускаем его, с учетом различия в синтаксисе языков, конечно.
Компьютер: Celeron 2.5 GHZ, 1GB RAM

Закомментаренный оператор - это конкатенация строк. Сразу скажу, что с конкатенацией не справился никто, кроме, естественно, харбора.
Да и на его результате конкатенация сказалась незначительно:
Время с конкатенацией 18.59 сек
Время без конкатенации 16.86 сек

foexpro показал вполне приличный результат - 48.08 сек, что всего лишь в три раза хуже харбора.

Ну а что же хваленые канадские профессионалы 1с ? Ждать пришлось долго, 330 сек, что в 20(!) раз хуже харбора.
Здесь даже не подходит аналогия сравнения двигателя Запорожца с двигателем Ламборджини, надо сравнивать с двигателем реактивного истребителя.
Как говорится, за много-много лет ничто не мешало 1с обзавестись приличным движком, да вот как-то не сложилось.
Ну а движок харбора порадовал, хорош.
Можно было протестировать продукты и на других режимах, скажем, добавить тест ООП, но, думается, смысла в этом нет, класс уже понятен и без этого.


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 33 , стр: 1 2 All [только новые]





Пост N: 344
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 23.12.11 13:53. Заголовок: Pasha пишет: Как го..


Pasha пишет:

 цитата:
Как говорится, за много-много лет ничто не мешало 1с обзавестись приличным движком, да вот как-то не сложилось.


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 83
Зарегистрирован: 11.10.11
ссылка на сообщение  Отправлено: 23.12.11 14:10. Заголовок: Pasha Мне представл..


Pasha
Мне представляется, что сравнение не совсем корректное. Для Harbour задача решалась в консольном режиме, а для 1С в графическом режиме. Причем для 1С вполне возможно имеется развитая встроенная система перехвата исключений, а в Harbour, если вы сами не используете BEGIN SEQUENSE система перехвата исключений отсутствует. А кроме того сразу же подключается режим отладки при возникновении ошибки. То есть код не идентичен в обоих случаях и не представляет собой то, что вы видите в листинге.

Что касается замечания
Pasha пишет:

 цитата:
Как говорится, за много-много лет ничто не мешало 1с обзавестись приличным движком, да вот как-то не сложилось


то оно также не совсем корректно. Тут главное, что этот язык есть. Много ли вы знаете фирм, разрабатывающих бухгалтерское программное обеспечение, у которых есть такой развитый язык? А мы видим, что в 1С их встроенный язык прошел большой путь эволюции, начиная с языка 1С 6.0 и до языка 1С 8.Х.
У них в приоритете стояла задача охватить встроенным языком все многообразие бухгалтерских задач, сделать его гибким, позволяющим настраивать и модифицировать любую часть программного комплекса, и при этом чтобы от пользователей не требовалось больших знаний в программировании. И с этой задачей они справились. То есть, как говорится, хороша ложка к обеду, то есть хорош тот продукт, который решает поставленную задачу.
Для срравнения, например, Java естественно уступает в скорости С++, но тем не менее Java превосходит С++ во многих областях применения, для которого он прредназначен.
Так что я не вишу большого смысла в таком сравнении.
Pasha , мне бы было интереснее сравнить ваш собственный язык, который вы разработали самостоятельно для своей бухгалтерской программы, с языком 1С. Вот здесь был бы предмет для сравнения.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2209
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.12.11 14:26. Заголовок: Возражения не приним..


Возражения не принимаются. Графический режим никакой роли не играет, харбор в графическом режиме показал бы тот же результат. По поводу исключений - это только домыслы. Да и какие там исключения могут быть. Отладка есть и в харборе.
Код не полностью идентичен, конечно, но представление о качестве движка дает.
По поводу встроенного движка 1с - так 1с постарше харбора будет. Могли бы движок и довести за это время.
Я уж не говорю о том, что 1с - продукт коммерческий, делается за деньги, и очень немаленькие, а харбор - свободная разработка, держится на инициативе.
А насчет смысла сравнения я написал. Я сравнивал то общее, что есть в этих продуктах.
А по поводу моего собственного языка - так этот язык и есть харбор. Настройка у меня делается через файлы hrb, которые выполняются hvm с той же производительностью, что и родной пи-код харбора. Это, собственно, он и есть. Так что я могу смело сказать, что мой собственный язык в 20 раз производительнее, чем язык 1с :)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 84
Зарегистрирован: 11.10.11
ссылка на сообщение  Отправлено: 23.12.11 14:41. Заголовок: Pasha Я не знаю ва..


Pasha

Я не знаю вашего языка для бухгалтерских программ. Вот когда вы его обнародуете, когда можно будет с его помощью работать со всякими справочниками, формами, запросами, тогда и будет предмет для разговора.
Более того у 1С имеется связь между выполняемым языком и исходным кодом в случае возниконовения ошибки. То есть при возникновении ошибки происходит перехват исключительной ситуции, запускается режим отладки, и высвечивается исходная строка кода программы с детальным указанием ошибки. То есть имеет место быть не просто язык, а целая интегрированная среда его использования. К тому же язык 1С рассчитан на многопользовательских режим работы. Поэтому там стоят различные проверки режима работы программы. Все это накладывает отпечаток на производительность. Как я уже сказал, это все равно, что сравнивать Java и С++, или С# и C++. В перрвые языки уже многие средства высоокого уровня встроены, и пользователю языка не нужно заботиться о многих вещах. А в с++ аналогичные вещи придется разрабатывать самостоятельно, как говорится, с чистого листа.
То же самое и в отношении 1С. Если бы вы решили самостоятельно разработать язык на освное Harbour для бухгалтерских задач, вы увидели бы, сколько бы вам пришлось бы надстраивать над этим базовым языком дополнительных слоев, и как производительность постепенно бы снижалась.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 85
Зарегистрирован: 11.10.11
ссылка на сообщение  Отправлено: 23.12.11 14:47. Заголовок: Добавлю еще, что ког..


Добавлю еще, что когда в Harbour вы используете локальные переменные, то Harboir не хранит о них информации, то есть об имени переменной и т.д. А потому в сулчае ошибки во время выполнения, пользователь не получит сведений об имени переменной. В 1с для переменных строится таблица, которая хранит названия этих переменных, точно также как это делается пря private или public переменных в Harbour.
То есть изначально при создании языка ставились разные приоритеты. В 1С главным приоритетом был понятность и доступнос ь пользователям- не программистам.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2210
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.12.11 15:04. Заголовок: А вот это как раз те..


А вот это как раз те самые проблемы индейцев, которые меня, шерифа, не волнуют. Наверное, много чего в движке 1с сделано плохо, раз мы имеем такой результат.
Да и покажите мне пользователя, который будет копаться в конфигурации 1с. Нет, конечно, всякое бывает, земля российская рождает платонов с невтонами, но это будет редким, редчайшим исключением.
Работа с конфигурацией = это как раз функция т.н. "программиста 1с", да и то не всякого. Большинство просто ставят готовые конфигурации.
Так что Вы цель создания встроенного языка 1с определили неверно. Конечный пользователь не знает и не должен знать о его существовании.


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2211
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.12.11 15:19. Заголовок: Смешались в кучу кон..


Смешались в кучу кони, люди. У меня, положим, тоже есть класс справочник, функции создания форм и много чего еще. Но к производительности интерпретатора это отношения не имеет.
Ттак же и в 1с. Есть предопределненные обьекты, у них какие-то свойства и методы. И есть интерпретатор, который работает с этими обьектами, но его главная функция - просто выполнять код. И он выполняет обычный код в 20 раз медленнее харбора.
В 1с есть связь с исходным кодом, и в случае ошибки можно увидеть, где она возникла ? Все это есть и в харборе, но почему-то для 1с это является оправданием, а для харбора - нет.
Многопользовательский режим работы с БД к производительности движка также не имеет отношения. То есть, этот фактор играет роль только при обращении к БД, а когда просто выполняется код - это никакого значения не имеет.
Я сравнил производительность движка, и никаких оправданий тут быть не может.

Кстати, движок харбора не всегда был таким мощным. Было время, когда харбор работал гораздо медленнее. Я имел возможность воочию наблюдать, как улучшался харбор, и даже принял в этом процессе некоторе участие, хоть и косвенное.
Почему 1с не прошел этот путь - ну кто же им доктор.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 345
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 23.12.11 15:29. Заголовок: Сыроежка пишет: У н..


Сыроежка пишет:

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


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

Сыроежка пишет:

 цитата:
Pasha , мне бы было интереснее сравнить ваш собственный язык, который вы разработали самостоятельно для своей бухгалтерской программы, с языком 1С. Вот здесь был бы предмет для сравнения.


А Вы всегда разрабатываете свой язык основываясь на другом языке, чтобы выполнить какую-то задачу? Вы профи

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2240
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.12.11 15:45. Заголовок: Clipper 5.2e :sm12:..


Clipper 5.2e

Real Mode 85.19
Protected mode 99.96

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2212
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.12.11 16:00. Заголовок: Dima пишет: Clipper..


Dima пишет:

 цитата:
Clipper 5.2e

Real Mode 85.19
Protected mode 99.96



Это мой тест ? А в сравнении с харбором как клиппер будет ? Надо же запускать на одном и том же компьютере.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2241
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.12.11 16:03. Заголовок: Pasha пишет: Это мо..


Pasha пишет:

 цитата:
Это мой тест ?


Да твой тест.
Машинка такая
Intel Pentium 4 630, 3000 MHz (15 x 200)
2GB RAM

ЗЫ
Harbour на этой машинке от 25 до 35 сек

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2213
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.12.11 16:16. Заголовок: То есть, даже интерп..


То есть, даже интерпретатор клиппера работает в разы быстрее, чем интерпретатор 1с, и это несмотря на то, что выполняется 16-ти разрядное приложение под дос-эмулятором. Прямо Феррари :)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 346
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 23.12.11 16:50. Заголовок: Version: Harbour 3.1..


Version: Harbour 3.1.0dev (Rev. 17139)
Compiler: MinGW GNU C 4.6.1 (32-bit)
Platform: Windows XP 5.1.2600 Service Pack 3
с 19.50
без15.97


clipper 5.3(b)
без 71.68
с ошибка Error BASE/1209 String overflow: +
Called from MAIN(24) cc1 += L_C + chr(nn1 % 256)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 86
Зарегистрирован: 11.10.11
ссылка на сообщение  Отправлено: 23.12.11 17:20. Заголовок: Сыроежка пишет: ц..



 цитата:
Сыроежка пишет:

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




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



Причем здесь функции? Вы что так наивно думаете, что одна функция должна решать полностью какую-то бухгалтерскую задачу? Это все равно, что сказать, что Harbour должен состоять из одной функции, которая решает любую задачу программиста. Так что, извините, но никакого смысла в вашей реплике я не вижу. Под охватом многообразия бухгалтерских задач имеется в вииду, что вы можете работать со справочниками, документами, создавать формы входных и выходных документов, делать запросы по любому критерию на встроенном языке. У них для каэжого объекта в терминах бухгалтерских категорий создан соответствующий объект в терминах объектов языка программирования. И это достаточно удобно.


 цитата:
Сыроежка пишет:

цитата:
Сыроежка пишет:

Pasha , мне бы было интереснее сравнить ваш собственный язык, который вы разработали самостоятельно для своей бухгалтерской программы, с языком 1С. Вот здесь был бы предмет для сравнения.



 цитата:
AlexMyr пишет:
А Вы всегда разрабатываете свой язык основываясь на другом языке, чтобы выполнить какую-то задачу? Вы профи



А этот ваш вопрос вообще не понятен. Причем здесь то, разрабатывал лично я свой язык, основыцваясь на другом языке или нет? Я разве какие-то выдвигаю претензии, что я сам сделал лучше 1С? Я не имею отношение ни к разработке 1С, ни к разработке Harbour.
Но если говорить о бухгалтерских программах, то очевидно, что они должны иметь встроенный язык, позволяющий пользователям самостоятельно выполнять различные запросы. Иначе программа совершенно не нибкая и для получения любой даже самой примитивной справки или отчета придется обращаться к разработчикам.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 652
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 23.12.11 19:42. Заголовок: Думается, что любой ..


Думается, что любой объект (языки программирования - не исключение) существует, пока кто-то в нём нуждается. Т.е., и 1C и Harbour существуют одновременно не для соревнования. Они в разных мирах. Есть мир 1С и есть мир Harbour. Какой смысл их сравнивать? Это все равно, что сравнить две лопаты: штыковую и для уборки снега. И та, и другая - лопата. Но каждая имеет свое предназначение, т.е. существует в своём мире. Не ломайте копья, парни...


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2214
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.12.11 20:00. Заголовок: Мне просто захотелос..


Мне просто захотелось посмотреть, насколько хорош движок харбора, вот я и сравнил его с тем, что оказалось под рукой. Еще интересно было бы сравнить с java.
А насчет 1с - я подобный нынешнему тест: огромный цикл с простейшими вычислениями - гонял лет 5-6 назад с тогдашним харбором и 1с 7.7. Результат и тогда был в пользу харбора: быстрее на 2 порядка, то есть (не удивляйтесь) в 100 раз.
Так что с тех времен у 1с наблюдается несомненный прогресс. Хотя, конечно, я взял сильное место харбора и (как оказалось) слабое место 1с.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 184
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 24.12.11 17:32. Заголовок: Ну, java вообще рабо..


Ну, java вообще работает как черепаха. И интерфейс кривой и подключение баз данных - НЕЧТО. И вообще очень запутанный язык, даже сложнее, чем Си.

1с - это как бы Visual Basic, переведенный на русский язык. Кривоватый и чересчур узконаправленный, но это единственный успешный РУССКИЙ язык программирования. Я английский знаю и по мне так лучше Visual Basic, если бы он не таскал за собой кучу DLL.

Foxpro под ДОС - это мой первый язык. Помню XT-шку с зелёным экраном, на которой и писались программы под FOXPRO. Visual Foxpro - это уже "смесь бульдога с носорогом". И туёва хуча DLLек для запуска в автономном режиме.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 347
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 24.12.11 19:26. Заголовок: Dr. Oldwarez пишет: ..


Dr. Oldwarez пишет:

 цитата:
Ну, java вообще работает как черепаха

Это да, чего стоит работа с клиент банком от бифита, надо уметь так писать

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 185
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 24.12.11 23:48. Заголовок: Непонятно только, че..


Непонятно только, чего эту жабу сейчас всюду суют. От неё только компы висят.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2216
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.12.11 21:00. Заголовок: Прогнал свой тест на..


Прогнал свой тест на java. Java оказался примерно в 5 раз быстрее харбора. Таким образом, получается, если движок харбора - это реактивный истребитель, то движок java - космическая ракета.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 350
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 26.12.11 21:08. Заголовок: Pasha пишет: Прогна..


Pasha пишет:

 цитата:
Прогнал свой тест на java

можно исходник адаптированный для java?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2242
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.12.11 21:08. Заголовок: Pasha пишет: Прогна..


Pasha пишет:

 цитата:
Прогнал свой тест на java


Пробни еще Perl , думаю он будет еще быстрее.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2217
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.12.11 21:12. Заголовок: AlexMyr пишет: можн..


AlexMyr пишет:

 цитата:
можно исходник адаптированный для java?



Да, конечно. Конкатенацию строк я опять убрал, java с ней не справляется.

package javaapplication1;

public class JavaApplication1 {

public static void main(String[] args) {

int i;
int nLoops = 5000000;
double L_F = 112345.67;
int L_N = 10000;
String L_C = "0123456789ABCDEF";
long nn;
double nf;
String cc;
long nn1 = 0;
double nf1 = 0.1;
String cc1 = "";
long nn2;
double nf2;

for( i = 1; i <= nLoops; i++ )
{
nn = L_N;
nf = L_F;
cc = L_C;
nn = L_N + 1;
nf = L_F + 1.0;
cc = L_C + L_C;
nn1 += L_N + 1;
nf1 += L_F + 1.0;
if( (nn1 % 2) == 0 )
{
// cc1 += L_C + "0";
//+ nn1.toString(256);
}
if( (cc1.length() % 3) == 0 )
{
nn2 = nn1 % 13;
nf2 = nf1 % 13;
}
nn = (nn1 + L_N + 1)*100/15;
nf = (nf1 + L_F + 1.0)*100.00/15.00;
}
System.out.println("Hello");
System.out.println(nn1);
System.out.println(nf1);
}
}


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2218
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.12.11 21:16. Заголовок: Еще пару слов о фокс..


Еще пару слов о фокспро. За примерно 10 лет от vfp6 до vfp9sp2 его движок потерял в "мощности" примерно 10%.
Тест конечно очень условный, я его набросал на скорую руку, просто для того, чтобы выстроить продукты по рангу.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 351
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 26.12.11 21:18. Заголовок: Pasha пишет: Да, ко..


Pasha пишет:

 цитата:
Да, конечно. Конкатенацию строк я опять убрал, java с ней не справляется.

спасибо, попробую.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 352
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 27.12.11 00:09. Заголовок: На домашнем ноуте та..


На домашнем ноуте такой результат:

java:
пришлось поправить первые строки
package javaapplication1;

public
class JavaApplication1 {

public static void main(String[] args) {


Hello
50005000000
5.61733349977449E11

harbour:
14.60

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1051
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 27.12.11 00:28. Заголовок: AlexMyr пишет: harb..


AlexMyr пишет:

 цитата:
harbour:
14.60


Для java добавьте в код

long nBegin = System.currentTimeMillis(), nEnd;
..
nEnd = System.currentTimeMillis();
System.out.println( (nEnd - nBegin) / 1000.0 );



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1052
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 03.01.12 00:20. Заголовок: Не знаю почему, но м..


Не знаю почему, но мне понравилась идея сравнения Java c Harbour, нет не вообще (тут все понятно - масштабы конечно не те), а именно выполнения конкретного кода.
Для начала я скачал и установил Java SE 7u2 (JDK 7) и чуть поправил код от Pasha
/*jtest.java*/ 

import static java.lang.System.out;

public class jtest {
public static void main(String[] args) {
final int nLoops = 5000000;
final double L_F = 112345.67;
final int L_N = 10000;
final String L_C = "0123456789ABCDEF";
String cc = "";
long nn = 0;
double nf = 0.0;
long nn1 = 0;
double nf1 = 0.1;
StringBuilder cc1 = new StringBuilder(65536);
long nn2 = 0;
double nf2 = 0.0;
long tB;

out.printf("%s %s %s %s %s\n", System.getProperty("java.vm.vendor"),
System.getProperty("java.vm.name"),
System.getProperty("java.version"),
System.getProperty("os.name"),
System.getProperty("os.arch"));

tB = System.currentTimeMillis();

for( int i = 1; i <= nLoops; i++ ) {
nn = L_N;
nf = L_F;
cc = L_C;
nn = L_N + 1;
nf = L_F + 1.0;
cc = L_C + L_C;
nn1 += L_N + 1;
nf1 += L_F + 1.0;

if( nn1 % 2 == 0 ) {
cc1.append(L_C).append( (char) (nn1 % 256) );
}

if( cc1.length() % 3 == 0 ) {
nn2 = nn1 % 13;
nf2 = nf1 % 13;
}

nn = (nn1 + L_N + 1) * 100/15;
nf = (nf1 + L_F + 1.0) * 100.00/15.00;

if( i % 1000000 == 0 ) {
out.printf("%d\n", nLoops-i);
}
}
out.println("");
out.printf("%.2f\n", (System.currentTimeMillis() - tB) / 1000.0);
out.printf("%d\n", nLoops);
out.println("");
out.printf("%d %.3f %s\n", nn, nf, cc);
out.printf("%d %.3f %d\n", nn1, nf1, cc1.length());
out.printf("%d %.6f\n", nn2, nf2);
}
}
А затем с помощью скрипта (будете копировать - помните о концевых пробелах, да и начальных - тоже)
rem jtest.bat 
@ECHO OFF
IF NOT DEFINED "%JDK_HOME%" SET JDK_HOME="C:\Program Files\Java\jdk1.7.0_02"

@%JDK_HOME%\bin\javac -Xlint jtest.java
@%JDK_HOME%\bin\jar -vcfe apptest.jar jtest jtest.class
@%JDK_HOME%\bin\jar -i apptest.jar

@%JDK_HOME%\bin\java -Xint -Xincgc -Xms512m -Xmx512m -jar apptest.jar
запустил его на исполнение.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1053
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 03.01.12 00:40. Заголовок: Получил такой вот ре..


Получил такой вот результат
Oracle Corporation Java HotSpot(TM) Client VM 1.7.0_02 Windows XP x86 

8,63
5000000

333366733340 3744889748827,460 0123456789ABCDEF0123456789ABCDEF
50005000000 561733349977,449 42500000
3 6,778931

Немного о параметрах запуска
-Xint - Java HotSpot VM работает в режиме интерпретатора (байт кода), режим не основной - отключает JIT и прочие фирменные ухищрения Sun
-Xincgc - включить инкрементальный сборщик мусора
-Xms512m -Xmx512m - установить начальный и максимальный размер кучи памяти равным 512 Mb (у Java апетит на память хороший ).

Если -Xint упустить или использовать -Xmixed, результат будет другой
Oracle Corporation Java HotSpot(TM) Client VM 1.7.0_02 Windows XP x86 

1,73
5000000

333366733340 3744889748827,460 0123456789ABCDEF0123456789ABCDEF
50005000000 561733349977,449 42500000
3 6,778931




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1054
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 03.01.12 00:43. Заголовок: Теперь перейдем к Ha..


Теперь перейдем к Harbour. Выполнялся вот такой код от Pasha
 
#translate printf( [<explist,...>] ) => QOut( hb_strFormat(<explist>) )
#translate println( [<explist,...>] ) => QOut( <explist> )

#define N_LOOPS 5000000
#define L_F 112345.67
#define L_N 10000
#define L_C "0123456789ABCDEF"

FUNCTION main()
LOCAL cc
LOCAL nn
LOCAL nf
LOCAL nn1 := 0
LOCAL nf1 := 0.1
LOCAL cc1 := ""
LOCAL nn2
LOCAL nf2
LOCAL tB
LOCAL i

QQOut( hb_Version(), hb_Version(11), hb_Version(1), hb_Version(21) )

tb := hb_SecondsCPU()

FOR i := 1 to N_LOOPS
nn := L_N
nf := L_F
cc := L_C
nn := L_N + 1
nf := L_F + 1.0
cc := L_C + L_C
nn1 += L_N + 1
nf1 += L_F + 1.0

IF nn1 % 2 == 0
cc1 += L_C + chr(nn1 % 256)
END

IF Len(cc1) % 3 == 0
nn2 := nn1 % 13
nf2 := nf1 % 13
END

nn := (nn1 + L_N + 1) * 100/15
nf := (nf1 + L_F + 1.0) * 100.00/15.00

IF i % 1000000 == 0
printf( "%d", N_LOOPS - i )
END
NEXT

println()
printf("%.2f", hb_SecondsCPU() - tb)
printf("%d", N_LOOPS)
println()
printf("%d %.3f %s", nn, nf, cc)
printf("%d %.3f %d", nn1, nf1, Len(cc1))
printf("%d %.6f", nn2, nf2)

RETURN NIL


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1055
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 03.01.12 00:58. Заголовок: Harbour был собран д..


Harbour был собран для компилятора MinGW 4.6.1 и VC 16 (из состава MSVC 2010) (HB_USER_CFLAGS=-DHB_GC_AUTO)
В принципе по результатам выполнения speedtst, всегда лучшим был VC. Но после выхода MinGW 4.6.x разницой в 0.25 - 1 сек можно принебречь.
Компилируем hbmk2 jtest.prg -st и запускаем. Получаем такой вот результат
Harbour 3.1.0dev (Rev. 17173) Jan  2 2012 18:44:16 MinGW GNU C 4.6.1 (32-bit) WIN 

13.16
5000000

333366733340 3744889748827.460 0123456789ABCDEF0123456789ABCDEF
50005000000 561733349977.449 42500000
3 6.778931

Harbour 3.1.0dev (Rev. 17173) Jan 2 2012 18:12:19 Microsoft Visual C++ 16.0.30319 (32-bit)
WIN

15.30
5000000

333366733340 3744889748827.460 0123456789ABCDEF0123456789ABCDEF
50005000000 561733349977.449 42500000
3 6.778931
Т.е. получается Java HotSpot(TM) где-то в 1,5-1,7 раза быстрее в режиме интерпретатора байт-кода.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1056
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 03.01.12 01:13. Заголовок: Теперь компилируем h..


Теперь компилируем hbmk2 jtest.prg -st /gc3 и снова запускаем. Смотрим результат
Harbour 3.1.0dev (Rev. 17173) Jan  2 2012 18:44:16 MinGW GNU C 4.6.1 (32-bit) WIN 

7.22
5000000

333366733340 3744889748827.460 0123456789ABCDEF0123456789ABCDEF
50005000000 561733349977.449 42500000
3 6.778931

Harbour 3.1.0dev (Rev. 17173) Jan 2 2012 18:12:19 Microsoft Visual C++ 16.0.30319 (32-bit)
WIN

9.50
5000000

333366733340 3744889748827.460 0123456789ABCDEF0123456789ABCDEF
50005000000 561733349977.449 42500000
3 6.778931

Все таки есть у HotSpot(TM) свои фишки - 4,1-5,5
Заметили, MinGW быстрее?
Что-то я расписался здесь, но ведь флейм же
Кстати, тестировалось на машине с процессором AMD Athlon X2 64 Dual 3600+ (2,01 ГГц), ОЗУ 1 Гб DDR2.


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2219
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.01.12 09:18. Заголовок: Про JIT я тоже сразу..


Про JIT я тоже сразу сообразил, что такое сравнение с харбором не совсем корректно, но как отключить его не увидел
Я пользовался netbeans. и jre6 от sun, а там такого ключика не увидел.
Получается, как интерпретаторы java и harbour находятся примерно на одном уровне, а в режиме реального кода java все-таки намного быстрее.

Резервы у harbour конечно еще есть. Я думаю, в режиме -gc3 надо исключать работу со стеком. Частично это уже сделано, это т.н. multi PCODE operations.
Я попробовал в таком же духе изменить операцию вида
Field->FName := uLocalVar
Такой тест:

Local nLoops := 5000000
Local nVar1 := 1
Local nVar1 := 2
Local nVar1 := 3
Local nVar1 := 4
for i := 1 to nLoops
Field->F1 := nVar1
Field->F1 := nVar2
Field->F1 := nVar3
Field->F1 := nVar4
next

показал увеличение производительности примерно на 5%

Можно было бы оптимизировать в таком же духе все команды HB_P_JUMP* после операций сравнения:

Вместо

if( hb_xvmGreater() ) break;
if( hb_xvmPopLogical( &fValue ) ) break;
if( !fValue )
goto lab00001;

Компилировать код в

if( hb_xvmNewGreater( &fValue ) ) break;
if( !fValue )
goto lab00001;

и так далее

Но у Przemeka в todo list есть такой пункт:

% rewrite compiler internal logic to not generate PCODE online
but use some meta code (expression list) and introduce new multiline
optimizations using above meta code.

Наверное, это какое-то радикальное решение.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 33 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 252
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет