Здравствуйте, Denwer, Вы писали:
D>Мы свой проект сделали на С++(использовали Qt), конкуренты на Java. Теперь клиенты плюются на их софт, тормозной и жрущий память.
а что за проект, ну, примерно?
производительность в основном зависит от используемых алгоритмов.. по-настоящему талантливый быдлокодер хоть на асме напишет так, что безбожно тормозить будет.
ну раза в полтора разницу я могу еще поверить что с++ за счет нативности поимел, но не более того.
In P=NP we trust.
Re[11]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
Здравствуйте, r.kamenskiy, Вы писали:
RK>Здесь обычно выбор между ассембелом и C/C++
Я бы вычекнул ассемблер. Уже давно для всех вменяемых платформ есть как минимум С.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[9]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
Здравствуйте, DreamMaker, Вы писали:
DM>производительность в основном зависит от используемых алгоритмов.. по-настоящему талантливый быдлокодер хоть на асме напишет так, что безбожно тормозить будет.
Да, да, да, "всё в базу упираются", "мы вас на алгоритмах заборем", "сделаем быстрее на 2000%" — старые песни о главном
DM>ну раза в полтора разницу я могу еще поверить что с++ за счет нативности поимел, но не более того.
Как ты тогда объяснишь факт того, что C++ скомпилированный в ненативный JavaScript (в веб-браузере, Карл!) оказался практически в два раза быстрее кода на C#? (1
C++ быстрый не от того что нативный, а от того что даёт бесплатные, либо крайне дешёвые абстракции.
Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше, либо придётся писать кодогенераторы по сути эмулирующие работу компиляторов C++. Собственно подобной хренью
Здравствуйте, DreamMaker, Вы писали:
DM>ну раза в полтора разницу я могу еще поверить
Т.е. вы можете поверить, что только из-за использования C++ вместо Java видеофайл обрабатывается за 60 минут вместо 90 минут, нода держит 150K коннектов вместо 100K, время отклика составляет 100ms вместо 150ms... Но вот поверить в то, что просадка по производительности в 1.5 раза может кем-то восприниматься как тормознутость, уже не можете?
Re[2]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
Здравствуйте, kochetkov.vladimir, Вы писали:
AS>>Собственно, сборка мусора в Rust есть (опционально), а такого мощного статического анализатора в C# нет. KV>А где можно почитать про мощный статанализатор Rust?
Вот тут C++ код скомпированный в JavaScript и запущенный в Firefox показывает скорость близкую к native'у — 75ms, на native C++ было 60ms, на C# — 69ms.
Если на C# использовать не низкоуровневый цикл, а transform и лямбду (как было на C++) — то получается 141ms.
Она у тебя магией превращается в
C++ скомпилированный в ненативный JavaScript (в веб-браузере, Карл!) оказался практически в два раза быстрее кода на C#?
Ну да блин, _внезапно_ шарп не инлайнит делегаты, не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем). Ну так про это и надо писать, а не передёргивать.
Попробую намекнуть: в том же топике тот же самый код, скормленный компилятору 2013й студии выполнялся с Elapsed = 189.011 ms. Собсно вопрос: как я буду выглядеть, если из топика в топик буду рассказывать, что шарп быстрей плюсов в три раза (куча восклицательных знаков, му-ха-ха по выбору)?
Ну так снова то же самое — сравниваем вариант с вызовом делегата и без делегата внутри tight loop при очень дешёвом делегате. Для боль-менее тяжёлого кода (см результаты для сравнения строк) разницы не видно, для критичных мест можно не полениться и расписать вручную. Хотя правильный вариант, разумеется, пересмотреть алгоритм. Потому что утыкаться в "мы миллионы раз в секунду ищем элемент с минимальным значением поля"... Тут точно надо консерваторию править.
abstraction penalty на C#. S>Ну как сказать... вот первоначальная цитата: S>
S>Вот тут C++ код скомпированный в JavaScript и запущенный в Firefox показывает скорость близкую к native'у — 75ms, на native C++ было 60ms, на C# — 69ms.
S>Если на C# использовать не низкоуровневый цикл, а transform и лямбду (как было на C++) — то получается 141ms.
S>Она у тебя магией превращается в S>
S>C++ скомпилированный в ненативный JavaScript (в веб-браузере, Карл!) оказался практически в два раза быстрее кода на C#?
S>Ну да блин, _внезапно_ шарп не инлайнит делегаты, не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем). Ну так про это и надо писать, а не передёргивать.
Я не передёргиваю, это же как раз отличная иллюстрация тому что я написал в том же сообщении:
EP>C++ быстрый не от того что нативный, а от того что даёт бесплатные, либо крайне дешёвые абстракции.
EP>Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше
Или ты не дочитал до этого места?
То есть код на одинаковом уровне абстракций оказался медленнее почти в два раза (медленнее чем в веб-браузере, Карл!)
А вот код на C# написанный на более низком уровне, уже приблизился к высокоуровнему коду C++ по скорости. О чём и речь — на C# можно написать быстрый код, но это будет низкоуровневая лапша, на Java ситуация ещё хуже из-за отсутствия структур
S>не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем).
Думаешь JavaScript там сделал автовекторизацию и заиспользовал SIMD?
S>UPD EP>>Ты же сам намерял >8x
abstraction penalty на C#. S>Ну так снова то же самое — сравниваем вариант с вызовом делегата и без делегата внутри tight loop при очень дешёвом делегате.
Так это abstraction penalty и есть, которой нет на C++. И чем больше уровней абстрации — тем больше penalty, это были всё примеры с примитивнейшими абстракциями.
S>для критичных мест можно не полениться и расписать вручную
Так а я о чём — на C# для быстрого кода "нельзя лениться" и приходится раскорячиваться
EP>Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше
Здравствуйте, Evgeny.Panasyuk, Вы писали: EP>То есть код на одинаковом уровне абстракций оказался медленнее почти в два раза (медленнее чем в веб-браузере, Карл!)
Так, а за что тогда я извинялся за 2 раза?
Ну вот в .Net Native и будут инлайнить как в C++. Про, что тебе Sinix и говорит.
и солнце б утром не вставало, когда бы не было меня
Re[12]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
Здравствуйте, CreatorCray, Вы писали:
CC>Я бы вычекнул ассемблер. Уже давно для всех вменяемых платформ есть как минимум С.
Однако даже там крайне полезно хотя бы в общих чертах знать ассемблер этой платформы, дабы быть в состоянии разобраться, чего там такого накомпилировал компилер, что нифига не работает
Здравствуйте, Serginio1, Вы писали:
EP>>То есть код на одинаковом уровне абстракций оказался медленнее почти в два раза (медленнее чем в веб-браузере, Карл!) S> Так, а за что тогда я извинялся за 2 раза? S> Ну вот в .Net Native и будут инлайнить как в C++. Про, что тебе Sinix и говорит.
Как начнут инлайнить, так и сравним. Напоминаю что ветка началась с рассуждений о том что актуально использовать сейчас.
А в сферическом будущем могут например и для Python сделать супер оптимизатор без abstraction penalty.
Также выше был высказан очередной миф — мол C++ быстрее за счёт нативности "но не более того". Пример с компилированием C++ -> JavaScript и сравнением с аналогом на C# развеивает этот миф
Re[13]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
Здравствуйте, koandrew, Вы писали:
K>Однако даже там крайне полезно хотя бы в общих чертах знать ассемблер этой платформы
Знать — обязательно, тут даже вопроса стоять не должно.
Но писать на нём не придётся ничего в 99% случаев.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[15]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Serginio1, Вы писали:
EP>>>То есть код на одинаковом уровне абстракций оказался медленнее почти в два раза (медленнее чем в веб-браузере, Карл!) S>> Так, а за что тогда я извинялся за 2 раза? S>> Ну вот в .Net Native и будут инлайнить как в C++. Про, что тебе Sinix и говорит.
EP>Как начнут инлайнить, так и сравним. Напоминаю что ветка началась с рассуждений о том что актуально использовать сейчас. EP>А в сферическом будущем могут например и для Python сделать супер оптимизатор без abstraction penalty. EP>Также выше был высказан очередной миф — мол C++ быстрее за счёт нативности "но не более того". Пример с компилированием C++ -> JavaScript и сравнением с аналогом на C# развеивает этот миф
Еще раз С++ выигрывает за счет инлайнинга это известно всем. Шаблоны в отличие от дженериков по сути раскручиваются в исходный код с инлайнингом методов.
Вот и вся магия. Это же раскручивание можно сделать и для дженериков. Большой то разницы нет. Просто в .Net еще большие тормоза из-за рефлексии, так как при оптимизации кода нужно предоставить доступ для отображения. Поэтому в .Net Native рефлексию сильно ограничили вплоть до полного отказа.
А насчет питона, то он уже стал статически типизированным? https://habrahabr.ru/company/mailru/blog/242305/
Но на самом деле мало это кому нужно. Числодробилками мало кто занимается, а во главе угла скорость разработки.
Но возможность приблизить скорость выполнения .Net код к C++ это просто небольшой плюсик не более, что бы убрать у С++ ников их главный козырь.
и солнце б утром не вставало, когда бы не было меня
Re[16]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
Здравствуйте, Serginio1, Вы писали:
S> Но на самом деле мало это кому нужно. Числодробилками мало кто занимается, а во главе угла скорость разработки.
На скорость разработки сильно влияют наличие готовых панельных бетонных блоков — универсальных библиотек, из которых можно быстро склепать многоэтажку.
Весь этот инструментарий, который позволяет хреначить не приходя в сознание как раз для "хренак, хренак и в продакшен" подходит очень даже хорошо.
Но вот проблема в том, что generic решения все построены на компромиссах, например "универсальность в ущерб производительности". Зато каждую панельку можно найти поимённо и посмотреть какие отчества у каждого камушка в ней.
Но когда возведение 18го этажа подходит к концу и вдруг выясняется что лифт на него едет сутки то тогда весь выигрыш в скорости клепания может быть съеден временем, потраченным на обтачивание уже выстроенных плит надфилями, чтоб лифт таки ехал быстрее.
Не, ну если надо нафигачить панельку из 5 этажей, где лифт не предусмотрен (юзеры пешкарусом дойдут!), или этажей в 10 где и на верхние этажи лифт едет всего то час (потерпят!), то тогда ок.
Порой народ вынужден вспоминать старые добрые техники из unmanaged, доставать надфили, распиливать ими панели на кирпичики и собирать из этих кирпичиков полупостроенный дом заново.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[17]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
CC>Но когда возведение 18го этажа подходит к концу и вдруг выясняется что лифт на него едет сутки то тогда весь выигрыш в скорости клепания может быть съеден временем, потраченным на обтачивание уже выстроенных плит надфилями, чтоб лифт таки ехал быстрее. CC>Не, ну если надо нафигачить панельку из 5 этажей, где лифт не предусмотрен (юзеры пешкарусом дойдут!), или этажей в 10 где и на верхние этажи лифт едет всего то час (потерпят!), то тогда ок. CC>Порой народ вынужден вспоминать старые добрые техники из unmanaged, доставать надфили, распиливать ими панели на кирпичики и собирать из этих кирпичиков полупостроенный дом заново.
Тогда зачем нужен будет C++. А так, MS и разрабатывает .Net Native, где в дженериках будут инлайнится переданные делегаты (функторы,лямбды). Вот с интерфейсами уже можно и в рантайме разбираться.
Все как в С++, такм тот же компилятор. https://msdn.microsoft.com/ru-ru/library/dn584397(v=vs.110).aspx
.NET Native использует то же сервер, что и компилятор C++, который оптимизирован для статических сценариев предварительной компиляции.
.NET Native способна обеспечить повышение производительности для C++ разработчиков управляемого кода, так как она использует такие же или аналогичные средства, что и C++ за кулисами, как показано в следующей таблице.
и солнце б утром не вставало, когда бы не было меня
Re[18]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
Здравствуйте, Serginio1, Вы писали:
S> Тогда зачем нужен будет C++.
Троллинг же.
S> А так, MS и разрабатывает .Net Native, где в дженериках будут инлайнится переданные делегаты (функторы,лямбды).
Одна проблема: если не будет ничего меняться, то это дело _очень_ неблизкое, не следующего за текущим релиза — точно. Пока .native находится в стадии "мы пробуем" — нестабильно всё.
Начиная от пайплайна который крайне своеобразен, т.к. достался в наследство от исследовательского проекта и затем использовался в cloud compiling в wp8 и в предке .native — project N.
И заканчивая собственно бэкендом — старый backend msvc, новый, плюс "беспроигрышный" вариант с RyuJIT AOT + llvm для максимального охвата платформ...
В общем речь сейчас идёт не про "перфоманс любой ценой", а о том, чтобы вылезти из песочницы winRT. Вот как оно состоится — можно будет начинать предметно обсуждать, что можно сделать с производительностью.
Re[16]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
Здравствуйте, Serginio1, Вы писали:
S> Еще раз С++ выигрывает за счет инлайнинга это известно всем. Шаблоны в отличие от дженериков по сути раскручиваются в исходный код с инлайнингом методов. S>Вот и вся магия. Это же раскручивание можно сделать и для дженериков. Большой то разницы нет. Просто в .Net еще большие тормоза из-за рефлексии, так как при оптимизации кода нужно предоставить доступ для отображения. Поэтому в .Net Native рефлексию сильно ограничили вплоть до полного отказа.
MS не может добить оптимизатор VC++ до уровня gcc четырехлетней давности (нет нормальной векторизации и девиртуализации). Как можно от них ждать чего-то интересного в .net native?