VB vs C vs Delphi

Windows лучше чем Linux! Чем? Ясно же написано — чем Linux!
Раздуй свой холивар сегодня, потому что завтра это может сделать уже кто-то другой!
tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.08.2006 (Чт) 17:36

Mikle писал(а):vladgri времени даром не теряет! Еще бы на сях кто-нибудь сделал.

Ну, меряйте.
Сразу дизклеймер: я на сях не мастак, так что просто топорно перевёл бейсиковский код. Может, кто сможет потвикать.
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 03.08.2006 (Чт) 18:02

tyomitch
А EXEшник?

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 03.08.2006 (Чт) 19:12

Mikle, Спасибо!
#define ROFL 0xDDDD

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.08.2006 (Чт) 22:02

EXE тут.
Почему-то к посту не аттачится.
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 05.08.2006 (Сб) 9:41

В последнем Дельфи варианте обычные числовые константы были заменены на именные, и это таинственным образом ускорило работу. Но все три варианта (Дельфи, ВБ и СИ) пока делают не совсем одно и то же, по крайней мере PrintScreen и сравнение в Фотошопе показывают, что результаты разные. Но, впрочем, очень близки. Сейчас впереди Дельфи, а позади СИ :!:
Асм не рассматривался, так как результат работы сильно отличается от остальных.
Это была игра "на поле" Дельфи - алгоритм, активно использующий рекурсию, если у кого-то есть желание продолжить сравнение, я подумаю над следующим тестом, постараюсь сделать его проще.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.08.2006 (Сб) 22:22

Для интереса переписал свой сишный код в нерекурсивный цикл.
Вышло ещё медленнее.
Сишник из меня никакой... :-(
Изображение

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 06.08.2006 (Вс) 5:59

Сравните плз скорость хэширования по алгоритму MD5: VB,C,Delphi,PHP.
К сожелению, сам помочь в этом не смогу, но на результаты посмотрю с удовольстввием.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 06.08.2006 (Вс) 9:45

tyomitch
Две ошибки:
Код: Выделить всё
limit = (int)vP2.y;
for (y = (int)vP1.y; y < limit; y++)

Для соответствия с VB вместо INT нужно ставить CINT (или как там это в СИ называется), но, впрочем, это не изменит среднее кол-во проходов цикла, только картинку.
Но вместо
Код: Выделить всё
y < limit
должно быть
Код: Выделить всё
y <= limit.

А это еще замедлит СИ код.
AjaxVS
А что такое "хэширование"? :roll:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.08.2006 (Вс) 10:28

Mikle писал(а):Но вместо
Код: Выделить всё
y < limit
должно быть
Код: Выделить всё
y <= limit.

А это еще замедлит СИ код.

Не соглашусь. В исходном коде:
Код: Выделить всё
While y < vP2.y


Mikle писал(а):А что такое "хэширование"? :roll:

Посмотри, например, http://bbs.vbstreets.ru/viewtopic.php?t=23676
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 06.08.2006 (Вс) 14:42

tyomitch
Я думал ты переводишь первый вариант, с FOR.
Пример качаю.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.08.2006 (Вс) 14:57

Я тоже перевёл в сишный код... таки медленнее VB.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 06.08.2006 (Вс) 16:54

tyomitch писал(а):
Mikle писал(а):А что такое "хэширование"? :roll:

Посмотри, например, http://bbs.vbstreets.ru/viewtopic.php?t=23676

Вот это я и имел в виду. Слабо перегнать С-аналог? =)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.08.2006 (Вс) 18:01

Кстати, предлагаю Денису Победре в оправдание своего флуда в этом топике перевести фрактал на Смолток, и сравнить скорость с представленными вариантами.
Изображение

Денис Победря
Мегобойанист
Мегобойанист
 
Сообщения: 1037
Зарегистрирован: 03.01.2005 (Пн) 21:29
Откуда: Из Москвы

Сообщение Денис Победря » 06.08.2006 (Вс) 18:22

tyomitch
В чисто математических операциях он конечно проигрывает.
[Место cдаётся]

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.08.2006 (Вс) 18:40

Превосходно. В каких операциях он чисто выигрывает? с примером кода, пожалуйста.
Изображение

vladgri
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.07.2006 (Ср) 14:52

Сообщение vladgri » 07.08.2006 (Пн) 7:12


Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 07.08.2006 (Пн) 8:38

Видимо важно не то, на скольких операциях компилятор обгоняет или отстает, а то, как он ведет себя на операциях, наиболее характерных для выбранной задачи. Я, хоть и явно об этом не написал, имел ввиду разработку комп. игр. В них наибольшее время занимают (не считая графики, которую обрабатывают ВНЕШНИЕ API, напр. DirectX) различные рекурсивные обходы, типа ок- и квадтри, поиск пути, генерация шумов и т. п. Кроме того большое время тратится на различные сортировки. А, например, скорость обработки строк не имеет большого значения даже в RPG и квестах с большим количеством диалогов. Если писать парсер или текстовый процессор - тут уже важна скорость обработки строк.
Поэтому я предлагаю следующий тест, сортировка массива. В тесте применены наиболее типичные для геймдева типы - Long и Single. Перед сортировкой массив заполняется не случайными значениями, а синусами, чтобы не зависеть от возможно различной реализации RND в различных языках. Тест гораздо проще предыдущего, даже не создается форма, так что жду варианты для D и C, можно и Асм, вот где он должен вырваться вперед!
Тест для VB6:
http://tuapse-mikle.narod.ru/SortVB6.rar
ЗЫ. Посмотрел тему про хэш, скачал пример, но не понял, для чего это нужно :roll: класс представляет из себя набор каких-то обработчиков строк, это что, шифрация? Некоторые моменты действительно на VB делать очень неэффективно, например циклический битовый сдвиг чисел.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.08.2006 (Пн) 8:45

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

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 07.08.2006 (Пн) 9:15

tyomitch
Я выбрал пузырек за простоту. можно сделать и другой тест, главное с общим для всех компилеров алгоритмом. Так что придумаешь свое - давай исходник. Вполне может оказаться, что для разных компилеров оптимальными будут разные алгоритмы - тоже сравним.

Денис Победря
Мегобойанист
Мегобойанист
 
Сообщения: 1037
Зарегистрирован: 03.01.2005 (Пн) 21:29
Откуда: Из Москвы

Сообщение Денис Победря » 07.08.2006 (Пн) 10:56

tyomitch
Он опережает Си++ в проектах со сложной ООП структурой. Код? Самому писать лень, нагуглил.
http://www.smalltalk.ru/articles/cpp-is-faster.html
[Место cдаётся]

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 08.08.2006 (Вт) 15:46

Проведем втрой тест - можно приняться за что-нибудь насквозь объектно ориентированное.
А в первом тесте все же выигрывает VB6, моло того, что Дельфи выиграл после сомнительной замены констант на именные (что, там нет суффиксов для обозначений типов числовых констант?), я перенес код из формы в нативный модуль, ничего не меняя - и бейсик вышел в лидеры, причем ощутимо.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.08.2006 (Вт) 15:49

Это как раз предсказуемо. В классах (включая формы) вокруг каждого метода ставится SEH-кадр; в модулях -- нет.
Изображение

vladgri
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.07.2006 (Ср) 14:52

Сообщение vladgri » 09.08.2006 (Ср) 7:56

Mikle писал(а):А в первом тесте все же выигрывает VB6, моло того, что Дельфи выиграл после сомнительной замены констант на именные (что, там нет суффиксов для обозначений типов числовых констант?),

Почему сомнительная? В Delphi неименованная константа с плавающей точкой всегда "Extended". Суффиксов нет. Таким образом, чтобы получить "Single" константу, пришлось ее заименовать.
Mikle писал(а):я перенес код из формы в нативный модуль, ничего не меняя - и бейсик вышел в лидеры, причем ощутимо.

Можно тест?.
tyomitch писал(а):Это как раз предсказуемо. В классах (включая формы) вокруг каждого метода ставится SEH-кадр; в модулях -- нет.

Только не в приватных методах.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.08.2006 (Ср) 8:12

vladgri писал(а):
Mikle писал(а):А в первом тесте все же выигрывает VB6, моло того, что Дельфи выиграл после сомнительной замены констант на именные (что, там нет суффиксов для обозначений типов числовых констант?),

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

А что, если я напишу single(3.14), делфи её будет в рантайме к single приводить?
Изображение

vladgri
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.07.2006 (Ср) 14:52

Сообщение vladgri » 09.08.2006 (Ср) 8:20

tyomitch писал(а):А что, если я напишу single(3.14), делфи её будет в рантайме к single приводить?

Нет. Будет ошибка "Invalid typecast"

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.08.2006 (Ср) 10:22

vladgri писал(а):
Mikle писал(а):я перенес код из формы в нативный модуль, ничего не меняя - и бейсик вышел в лидеры, причем ощутимо.

Можно тест?.

Я попробовал так же: у меня от переноса скорость не изменилась.

vladgri писал(а):
tyomitch писал(а):Это как раз предсказуемо. В классах (включая формы) вокруг каждого метода ставится SEH-кадр; в модулях -- нет.

Только не в приватных методах.

Ну, в них всё равно приходится лишним параметров передавать Me, и вызывать на нём AddRef на входе и Release на выходе.
Изображение

vladgri
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.07.2006 (Ср) 14:52

Сообщение vladgri » 09.08.2006 (Ср) 11:29

vladgri писал(а):
tyomitch писал(а):Это как раз предсказуемо. В классах (включая формы) вокруг каждого метода ставится SEH-кадр; в модулях -- нет.

Только не в приватных методах.

Ну, в них всё равно приходится лишним параметров передавать Me, и вызывать на нём AddRef на входе и Release на выходе.[/quote]
Ничего вышесказанного в в методах DrawFractal и DrawLine нет, может правильней их назвать локальными процедурами.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 10.08.2006 (Чт) 19:21

http://tuapse-mikle.narod.ru/FrVB6.rar
Это мой тест с кодом в модуле. Результаты:
Код: Выделить всё
      vb   d   c
Athlon64-3650   0.053   0.057   0.062
Celeron-1330   0.113   0.092   0.144
AMD K6-2 400   0.758   0.772   0.808

На Celeron Дельфи все же впереди остался.
vladgri
чтобы получить "Single" константу, пришлось ее заименовать.

Это недостаток! :wink: Холивар у нас, или что?
Но даже и без этого, я попробовал в VB6 вместо Single подставить Double константы - потери производительности практически нет.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 10.09.2006 (Вс) 15:52

vladgri
Bоrland умирает! Мелкософт рулит!
#define ROFL 0xDDDD

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.09.2006 (Вс) 16:22

DirectXManiac, к чему этот некрофлуд? :evil:
Изображение

Пред.След.

Вернуться в Holy Wars@VBStreets

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList