Добрый день, уважаемые!
Недавно для интереса решили проверить скорострельность C# по сравнению с С++. Результаты оказались вполне ожидаемые, а вот когда попробовали сравнить C# с Delphi, очень даже удивились . С# оказался значительно быстрее.
Проверяли на простеньком примере вычислений с плавающей точкой.
Что скажите?
Здравствуйте, OdinDoma, Вы писали:
OD>Добрый день, уважаемые! OD>Недавно для интереса решили проверить скорострельность C# по сравнению с С++. Результаты оказались вполне ожидаемые, а вот когда попробовали сравнить C# с Delphi, очень даже удивились . С# оказался значительно быстрее. OD>Проверяли на простеньком примере вычислений с плавающей точкой. OD>Что скажите?
Тоже ожидаемый результат. Ты дизасемблируй дельфячий код и глянь в него — сразу все ясно станет.
Нафиг, нафиг, нафиг...
что шарп, что дельфи, когда нынче столько всего хорошего есть
хочешь пошустрее можно OCaml взять, хочешь попроще — Python
Здравствуйте, OdinDoma, Вы писали:
OD>Добрый день, уважаемые! OD>Недавно для интереса решили проверить скорострельность C# по сравнению с С++. Результаты оказались вполне ожидаемые, а вот когда попробовали сравнить C# с Delphi, очень даже удивились . С# оказался значительно быстрее. OD>Проверяли на простеньком примере вычислений с плавающей точкой. OD>Что скажите?
Не вижу смысла сравнивать г... с д...
Отупляют они. И хотя шарп еще вроде как держится (ассемблей еще ненаделали столько сколько компеонентов у делфей) то делфи отупляет сострашной силой.
[RSDN@Home][1.1.4][beta 7][501]
[Winamp is shutdown.]
<...>
S>Не вижу смысла сравнивать г... с д... S>Отупляют они. И хотя шарп еще вроде как держится (ассемблей еще ненаделали столько сколько компеонентов у делфей) то делфи отупляет сострашной силой.
Ну если считать отуплением потерю навыка в решении головоломных выражений с указателями — то да — отупляет.
Здравствуйте, OdinDoma, Вы писали:
...
Зачем сравнивать с Delphi? Чтобы потом ругать?
В документации к Delphi указано, что ее не рекомендуется использовать для математических расчетов, где требуется высокая производительность.
Здравствуйте, ZevS, Вы писали:
ZS>Ну если считать отуплением потерю навыка в решении головоломных выражений с указателями — то да — отупляет.
А мне например тяжко без указателей.
[RSDN@Home][1.1.4][beta 7][501]
[Winamp is shutdown.]
Здравствуйте, Sheridan, Вы писали:
S>Здравствуйте, ZevS, Вы писали:
ZS>>Ну если считать отуплением потерю навыка в решении головоломных выражений с указателями — то да — отупляет. S>А мне например тяжко без указателей.
Ну так это ж программирование, а не вышивание. Тяжелый труд для суровых людей — придется сжать челючти и терпетеь.
Здравствуйте, OdinDoma, Вы писали:
OD>Добрый день, уважаемые! OD>Недавно для интереса решили проверить скорострельность C# по сравнению с С++. Результаты оказались вполне ожидаемые, а вот когда попробовали сравнить C# с Delphi, очень даже удивились . С# оказался значительно быстрее. OD>Проверяли на простеньком примере вычислений с плавающей точкой. OD>Что скажите?
Скажу, что баян.
new RSDN@Home(1.1.4, 303) << new Message(); std::head::ear << "Metallica — Enter Sandman";
Здравствуйте, ansi, Вы писали:
A>Здравствуйте, OdinDoma, Вы писали:
OD>>Добрый день, уважаемые! OD>>Недавно для интереса решили проверить скорострельность C# по сравнению с С++. Результаты оказались вполне ожидаемые, а вот когда попробовали сравнить C# с Delphi, очень даже удивились . С# оказался значительно быстрее. OD>>Проверяли на простеньком примере вычислений с плавающей точкой. OD>>Что скажите?
A>Скажу, что баян.
Да нет не баян. Только, смотри выделенное, не совсем верно.
Здравствуйте, vlad_gri, Вы писали:
_>Да нет не баян. Только, смотри выделенное, не совсем верно.
Почему же неверно. Процентов на 10-20 Delphi медленнее оказался.
Если посмотреть в Asm, то после каждой операции с плавающей точкой Delphi wait навставлял. В Майкрософтовском коде waitов вообще нет.
Здравствуйте, OdinDoma, Вы писали:
OD>Здравствуйте, vlad_gri, Вы писали:
_>>Да нет не баян. Только, смотри выделенное, не совсем верно.
OD>Почему же неверно. Процентов на 10-20 Delphi медленнее оказался. OD>Если посмотреть в Asm, то после каждой операции с плавающей точкой Delphi wait навставлял. В Майкрософтовском коде waitов вообще нет.
Приведи свой тест для проверки.
У меня разница 1-5 процентов
Насчет fwait твоя правда, отьедает гад 4 такта процессора, оставлен якобы для совместимости с i486
Но давай проведем тесты на Pentium.
Если кто-либо скажет, что таких процессоров уже не существует, милости прошу из 80 компов 8 они и есть.
Здравствуйте, vlad_gri, Вы писали:
_>Приведи свой тест для проверки. _>У меня разница 1-5 процентов _>Насчет fwait твоя правда, отьедает гад 4 такта процессора, оставлен якобы для совместимости с i486 _>Но давай проведем тесты на Pentium. _>Если кто-либо скажет, что таких процессоров уже не существует, милости прошу из 80 компов 8 они и есть.
Насчет 20% я действительно загнул. На моем примере до 7 получилось.
Пример, самый, что ни на есть примитивный, поэтому ни факт, что он показательный.
double d=0;
int t=Environment.TickCount;
for (int i=1;i<=50000000;i++)
{
d=d+Math.Sqrt(i);
if (d>100000)
d=d/2;
}
int g=Environment.TickCount;
Console.WriteLine(g-t);
Console.WriteLine(d);
С++ — 4015 мс
С# — 4672 мс
Delphi — от 4890 до 5046 мс (нестабильно)
Интересно было бы APIшными вызовами разбавить, да и расчеты посложнее.
Здравствуйте, OdinDoma, Вы писали:
OD>Насчет 20% я действительно загнул. На моем примере до 7 получилось. OD>Пример, самый, что ни на есть примитивный, поэтому ни факт, что он показательный. OD> double d=0; OD> int t=Environment.TickCount; OD> for (int i=1;i<=50000000;i++) OD> { OD> d=d+Math.Sqrt(i); OD> if (d>100000) OD> d=d/2; OD> } OD> int g=Environment.TickCount; OD> Console.WriteLine(g-t); OD> Console.WriteLine(d); OD>С++ — 4015 мс OD>С# — 4672 мс OD>Delphi — от 4890 до 5046 мс (нестабильно)
OD>Интересно было бы APIшными вызовами разбавить, да и расчеты посложнее.
Нашел интересную фишку.
У Microsoft в С++ и C# в 8087CW стоит PrecissionMode=DOUBLE а
у Borland в 8087CW стоит PrecissionMode=EXTENDED.
Попробуй протестировать Delphi с установленным PrecissionMode=DOUBLE, мне интересно ,что получиться.
Здравствуйте, vlad_gri, Вы писали:
_>Здравствуйте, OdinDoma, Вы писали:
OD>>Интересно было бы APIшными вызовами разбавить, да и расчеты посложнее.
_>Мои тесты. _>http://rsdn.ru/File/41945/floatTest.rar
Успел только запустить exe-шники.
Все почти одинаково (c Double Precission), но C# чуть-чуть обогнал.
Завтра еще посмотрю
Здравствуйте, Sheridan, Вы писали:
S>Здравствуйте, ZevS, Вы писали:
ZS>>Ну если считать отуплением потерю навыка в решении головоломных выражений с указателями — то да — отупляет. S>А мне например тяжко без указателей.
Ну если хватает тупости не использовать указатели в Delphi, когда они нужны, то это не проблема языка Delphi.
Здравствуйте, vlad_gri, Вы писали:
_>Нашел интересную фишку. _>У Microsoft в С++ и C# в 8087CW стоит PrecissionMode=DOUBLE а _>у Borland в 8087CW стоит PrecissionMode=EXTENDED. _>Попробуй протестировать Delphi с установленным PrecissionMode=DOUBLE, мне интересно ,что получиться.
Не должно влиять на скорость. AFAIK сопроцессор работает всегда с десятибайтовым представлением.
Здравствуйте, Sheridan, Вы писали:
S>Здравствуйте, OdinDoma, Вы писали:
OD>>Добрый день, уважаемые! OD>>Недавно для интереса решили проверить скорострельность C# по сравнению с С++. Результаты оказались вполне ожидаемые, а вот когда попробовали сравнить C# с Delphi, очень даже удивились . С# оказался значительно быстрее. OD>>Проверяли на простеньком примере вычислений с плавающей точкой. OD>>Что скажите?
S>Не вижу смысла сравнивать г... с д... S>Отупляют они. И хотя шарп еще вроде как держится (ассемблей еще ненаделали столько сколько компеонентов у делфей) то делфи отупляет сострашной силой.
Молодой человек, а Вы никгда не задумывались за что вам платят деньги, за С++ или все же за конечный продук, и заказчика не волнует на чем Вы его писали? У меня всегда второе, на чем писал конечно интересуются, но это на втором месте, на первом месте стоимость продукта. А по стоимости продукта (времени разработки, т.к. мне пофигу чем заниматься, час работы = ХХХ) дельфи явно рвет С++, и гдето на равных с С#. Со сременем С# сметет и Дельфи, это когда для него сбороко будет столько же, сколько для Дельфы.
ЗЫ. И, на всяки случай, не надо орать что дельфисты тупые и т.д., да писать свое там как правило не надо, все уже написали. Но те кому надо рисуют свои компоненты. Вопрос в смысле их рисования. И что такое ООП и с чем его едят они тоже знают как и "супер" сишники
wraithik wrote:
> Молодой человек, а Вы никгда не задумывались за что вам платят деньги, > за С++ или все же за конечный продук, и заказчика не волнует на чем Вы > его писали? У меня всегда второе, на чем писал конечно интересуются, > но это на втором месте, на первом месте стоимость продукта. А по > стоимости продукта (времени разработки, т.к. мне пофигу чем > заниматься, час работы = ХХХ) дельфи явно рвет С++
Это где это??? Дельфи упрощает создание формочек — но в нормальных
программах это лишь десятая часть функциональности.
> ЗЫ. И, на всяки случай, не надо орать что дельфисты тупые и т.д., да > писать свое там как правило не надо, все уже написали. Но те кому надо > рисуют свои компоненты. Вопрос в смысле их рисования. И что такое ООП > и с чем его едят они тоже знают как и "супер" сишники
>> стоимости продукта (времени разработки, т.к. мне пофигу чем >> заниматься, час работы = ХХХ) дельфи явно рвет С++
C>Это где это??? Дельфи упрощает создание формочек — но в нормальных C>программах это лишь десятая часть функциональности.
Учти, что среди всех разрабатываемых программ лишь десятая часть "нормальные".
Здравствуйте, OdinDoma, Вы писали:
OD>Последние цифры по твоему примеру (голые факты без эмоций ): OD>StrangeAttractr OD>С# — 3 сек OD>C++ — 1,2 сек (c полной оптимизацией) OD>Delphi — 4,73 сек
Уважаемый OdinDoma ну всем же известен оптимизатор C++, но к имено этим тестам он ни какого отношения не имеет.
В данном случае он просто раскрутил цикл, и обрезал вызова.
По C# в примере ошибка в Ctimer, Ну не очень у меня с C#.
Исправленный тест http://rsdn.ru/File/41945/floattest.rar
Статистика :
Каждый тест запускался по 10 раз, вычислялось среднее значение.
VC7 (без оптимизации)
FloatTest(1000000000) 15,96 сек.
StrangeAttractr(50000000) 4,12 сек.
Delphi (Prec=Extended)
FloatTest(1000000000) 18,15 сек.
StrangeAttractr(50000000) 4,75 сек.
Delphi (Prec=Double)
FloatTest(1000000000) 15,96 сек.
StrangeAttractr(50000000) 4,38 сек.
C#
FloatTest(1000000000) 16 сек.
StrangeAttractr(50000000) 4,03 сек.
Здравствуйте, Axc, Вы писали:
Axc>Здравствуйте, vlad_gri, Вы писали:
_>>Нашел интересную фишку. _>>У Microsoft в С++ и C# в 8087CW стоит PrecissionMode=DOUBLE а _>>у Borland в 8087CW стоит PrecissionMode=EXTENDED. _>>Попробуй протестировать Delphi с установленным PrecissionMode=DOUBLE, мне интересно ,что получиться.
Axc>Не должно влиять на скорость. AFAIK сопроцессор работает всегда с десятибайтовым представлением.
Еще как влияет.
Здравствуйте, Cyberax, Вы писали:
C>wraithik wrote:
>> Молодой человек, а Вы никгда не задумывались за что вам платят деньги, >> за С++ или все же за конечный продук, и заказчика не волнует на чем Вы >> его писали? У меня всегда второе, на чем писал конечно интересуются, >> но это на втором месте, на первом месте стоимость продукта. А по >> стоимости продукта (времени разработки, т.к. мне пофигу чем >> заниматься, час работы = ХХХ) дельфи явно рвет С++
C>Это где это??? Дельфи упрощает создание формочек — но в нормальных C>программах это лишь десятая часть функциональности.
Я сам БД програмиирую и могу сказать, что рисовать интерфейс не намного проще, чем создавать бизнес логику. Бизнес логику рисовать что в Дельфи, что в С++, что в С# почти одинакоко, субъективно С# лучше. А вот интерфейс рисовать в Дельфе однозначно проще чем в С++. А еще чаще его приходится во время разрабюотки ПО переделыывать по несколько раз, так что время затрачивоемое на разарботку интерфейса иногда превосходит время затрачивоемое на разаработку структуры БД + бизнес-ппроцессов.
Если ПО = какой-нить сложный расчет, то спору нет интефейс стоит на 2 месте, если же бух.программа, то на 1. Если не сделаете так, вас бухгалтера разорвут на части
>> ЗЫ. И, на всяки случай, не надо орать что дельфисты тупые и т.д., да >> писать свое там как правило не надо, все уже написали. Но те кому надо >> рисуют свои компоненты. Вопрос в смысле их рисования. И что такое ООП >> и с чем его едят они тоже знают как и "супер" сишники
C>Не похоже, так как считают VСL верхом творения.
Да. VCL — очень хорашая вещь. Если бы MFC хотя бы приблизилась к ней по свое мощи рисования интрефейсов, то на С++ тоже забыли про наследование визульных контролов, пропал бы смылс.
Единственное что мне нравится в с#/c++, так это их способ работы с БД, дельфи своим автоматизмом зачастую только мешает, подэтому C# я считаю более удобным языыком программирования чем Дельфи.
Здравствуйте, vlad_gri, Вы писали:
Axc>>Не должно влиять на скорость. AFAIK сопроцессор работает всегда с десятибайтовым представлением. _>Еще как влияет.
Та ой.
typedef float MYFLOAT;
//typedef long double MYFLOAT;
MYFLOAT d = 0.0;
MYFLOAT c100000 = 100000;
MYFLOAT c12 = 0.5;
DWORD t = GetTickCount();
__asm fldz
for (int i = 1; i <= 50000000; i++)
{
__asm
{
fild i
fsqrt
faddp ST(1),ST
fcom c100000
sahf
jne diviz
fld c12
fmulp ST(1),ST
diviz:
}
}
__asm fstp d
DWORD g = GetTickCount();
Результаты гуляют (в основном два значения 1218 и 1234, но бывает и 1260). Но когда MYFLOAT определен как long double — мат. ожидание времени выполнения скорее меньше.
Здравствуйте, Axc, Вы писали:
Axc>Здравствуйте, vlad_gri, Вы писали:
Axc>>>Не должно влиять на скорость. AFAIK сопроцессор работает всегда с десятибайтовым представлением. _>>Еще как влияет.
Axc>Та ой.
Попробуй так.
// Макрос для установки PRECISSIONMODE в EXTENDED #define SET_CW_PRECISSION_TO_EXTENDED \
__asm push 0000037FH \
__asm fldcw dword ptr [esp] \
__asm add esp,4
// Макрос для установки PRECISSIONMODE в DOUBLE #define SET_CW_PRECISSION_TO_MS_DEFAULT \
__asm push 0000027FH \
__asm fldcw dword ptr [esp] \
__asm add esp,4typedef float MYFLOAT;
//typedef long double MYFLOAT;
MYFLOAT d = 0.0;
MYFLOAT c100000 = 100000;
MYFLOAT c12 = 0.5;
DWORD t = GetTickCount();
SET_CW_PRECISSION_TO_EXTENDED__asm fldz
for (int i = 1; i <= 50000000; i++)
{
__asm
{
fild i
fsqrt
faddp ST(1),ST
fcom c100000
sahf
jne diviz
fld c12
fmulp ST(1),ST
diviz:
}
}
__asm fstp d
SET_CW_PRECISSION_TO_MS_DEFAULT
DWORD g = GetTickCount();
А на 1С всякую булгахтерско-складскую фигню делать еще быстрее => Делфи сакс, 1С рулез, так? Просто для каждого круга задач существует своя "серебряная пуля". Для клепания отчетов к какой-нить систиме "СуперСклад" годится Делфи (только не надо рассказывать про жутко навороченную бизнес-логику — сам в этом гуане ковыряюсь). Но стоит лишь задаче выйти за пределы "расчет зарплаты", как сразу появляются проблемы. Да и множество компонентов Делфи конечно (причем большая часть криатиффа написана кривыми ручонками). А насчет ГУЯ, так далеко не в каждой задаче ГУЙ является пупом земли. Делать ГУЙ на С++ не так уж и сложно/медленно — все зависит от привычки
ЗЫ: кстати, о булгахтерах: у меня сложилось впечатление, что им и ГУЙ и юзабилити глубоко пофигу... главное чтоб отчет, который руками 3 дня делать, на компе за 3 минуты проскочил (а сэкономленное время идет на распитие чаев/кофеев, болтовню и т.д.). Хотя может мне "правильные" булгахтера не попадались
Т.е. в макросе SET_CW_PRECISSION_TO_EXTENDED константа 0000007FH (кстати, а почему 7? по ссылке эти биты описаны как зарезервированные). Если поставить 0000007FH, то выполняется сильно быстрее! (735-750)
Здравствуйте, loki1000, Вы писали:
L>Здравствуйте, wraithik, Вы писали:
L>А на 1С всякую булгахтерско-складскую фигню делать еще быстрее => Делфи сакс, 1С рулез, так? Просто для каждого круга задач существует своя "серебряная пуля". Для клепания отчетов к какой-нить систиме "СуперСклад" годится Делфи (только не надо рассказывать про жутко навороченную бизнес-логику — сам в этом гуане ковыряюсь). Но стоит лишь задаче выйти за пределы "расчет зарплаты", как сразу появляются проблемы. Да и множество компонентов Делфи конечно (причем большая часть криатиффа написана кривыми ручонками). А насчет ГУЯ, так далеко не в каждой задаче ГУЙ является пупом земли. Делать ГУЙ на С++ не так уж и сложно/медленно — все зависит от привычки
Ты прав, я так и поступаю, где уджобно юзать 1С там ее и юзаю, если надо то C# (раньше Дельфи)
L>ЗЫ: кстати, о булгахтерах: у меня сложилось впечатление, что им и ГУЙ и юзабилити глубоко пофигу... главное чтоб отчет, который руками 3 дня делать, на компе за 3 минуты проскочил (а сэкономленное время идет на распитие чаев/кофеев, болтовню и т.д.). Хотя может мне "правильные" булгахтера не попадались
Правильные тебе попадались. Интефейсы бываю двух ыидов красивые и удобные, так вот некторым нужен красивый с ними и геморой.
Axc>Т.е. в макросе SET_CW_PRECISSION_TO_EXTENDED константа 0000007FH (кстати, а почему 7? по ссылке эти биты описаны >как зарезервированные). Если поставить 0000007FH, то выполняется сильно быстрее! (735-750)
0000007FH это PRECISSIONMODE=SINGLE и не удивительно что вычисления с таким PRECISSIONMODE гораздо
быстрее.При изменении от EXTENDED до SINGLE скорасть возрастает почти в двое, но теряется точность
вычислений.
loki1000 пишет: > А на 1С всякую булгахтерско-складскую фигню делать еще быстрее => Делфи > сакс, 1С рулез, так?
1С отстой по дефолту. Как только требуется что-нибудь сложнее зряплаты
как в стену головой бъешься.
> Просто для каждого круга задач существует своя > "серебряная пуля". Для клепания отчетов к какой-нить систиме > "СуперСклад" годится Делфи (только не надо рассказывать про жутко > навороченную бизнес-логику — сам в этом гуане ковыряюсь).
Для клепания отчетов, ИМХО, лучше годится Crystal Report/
> ЗЫ: кстати, о булгахтерах: у меня сложилось впечатление, что им и ГУЙ и > юзабилити глубоко пофигу... главное чтоб отчет, который руками 3 дня > делать, на компе за 3 минуты проскочил (а сэкономленное время идет на > распитие чаев/кофеев, болтовню и т.д.). Хотя может мне "правильные" > булгахтера не попадались
Правильные бухи тратят свободное время на lines.
А юзабилити им действительно пофигу. Зато не пофигу операторам и
дирекции, особенно когда товар по неделе не может попасть на прилавок
из-за того, что операторы его слишком долго ставят.
Posted via RSDN NNTP Server 1.9
Всё, что нас не убивает, ещё горько об этом пожалеет.
Здравствуйте, Axc, Вы писали:
Axc>Здравствуйте, vlad_gri, Вы писали:
_>>0000007FH это PRECISSIONMODE=SINGLE
Axc>Ссылку в студию.
_>> не удивительно что вычисления с таким PRECISSIONMODE гораздо быстрее
Axc>Меня это как-то тоже несколько смущает :-j
Здравствуйте, rbrunets, Вы писали:
R>loki1000 пишет: >> А на 1С всякую булгахтерско-складскую фигню делать еще быстрее => Делфи >> сакс, 1С рулез, так?
R>1С отстой по дефолту. Как только требуется что-нибудь сложнее зряплаты R>как в стену головой бъешься.
Да. Меня ввели в заблуждение. Причем — не единожды. Не читайте советских газет!
Даже Intel тоже говорит.
Do not use too much precision when it is not necessary. Single precision (32-bits) is faster on some operations and consumes only half the memory space as double precision (64-bits) or double extended (80-bits).