Еще раз, потому что я пишу на джаве стабильный безопасный код, а вы в попытке угнаться за джавой в скорости уже теряете в этом аспекте.Интеррапт wrote:Непонятно, почему я должен отказываться от оптимизаций и играть по правилам Джавы, где заведомо аллокация/удаление обьектов намного быстрее (за счет пожирания намного больше памяти).
Переквалификация c#-> ??
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
In vino Veritas!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Ес-но. Код я напишу. Даже попробую прикрутить свой аллокатор, который я использую со времен Qualcomm BREW.crypto5 wrote: Вот если бы можно было ключем прикрутить алокатор который преалоцирует указанное количество памяти и на new не дергает *alloc, это другое дело. Есть такое?
С какой это радости? References будут вполне безопасные в контекстах вашего теста. Иначе пишите другой тест, чтобы имитировать небезопасный код.crypto5 wrote:б) вы начинаете писать небезопасный код
Просто JIT делает кучу оптимизаций, собственно в этом и сила Джавы. Непонятно, почему я должен отказываться от оптимизаций и играть по правилам Джавы, где заведомо аллокация/удаление обьектов намного быстрее (за счет пожирания намного больше памяти).
(UPDATE: сорри за репост сообщения)
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Используя референсы? Совершенно не теряю.crypto5 wrote:Еще раз, потому что я пишу на джаве стабильный безопасный код, а вы в попытке угнаться за джавой в скорости уже теряете в этом аспекте.Интеррапт wrote:Непонятно, почему я должен отказываться от оптимизаций и играть по правилам Джавы, где заведомо аллокация/удаление обьектов намного быстрее (за счет пожирания намного больше памяти).
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Да и за Джавой в скорости никто не гонится. Мы тут рассматриваем какие-то искусственные тесты, собственно то, что можно назвать подгонкой задачи под сильные стороны Джавы. Вот если бы вы какой-то real life алгоритм привели, который я не мог бы реализовать быстрее на С++, то тогда действительно, пришлось бы признать поражение. Есть у вас такая задачка?
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
В данном конкретном случае не теряете, потому что алгоритм тривиальный, но если предположить что программа большая, и вы взором можете зацепить только ее часть, то уже нет такой уверенности что ваш current ссылается на обьект который не потерли.Интеррапт wrote:Используя референсы? Совершенно не теряю.crypto5 wrote:Еще раз, потому что я пишу на джаве стабильный безопасный код, а вы в попытке угнаться за джавой в скорости уже теряете в этом аспекте.Интеррапт wrote:Непонятно, почему я должен отказываться от оптимизаций и играть по правилам Джавы, где заведомо аллокация/удаление обьектов намного быстрее (за счет пожирания намного больше памяти).
In vino Veritas!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
Блин, ну я же уже писал, что я вполне охотно верю, что на ц++ можно путем определенных страданий достичь и даже превзойти производительность джавы. Спор был про АРК вс ГЦ.Интеррапт wrote:Да и за Джавой в скорости никто не гонится. Мы тут рассматриваем какие-то искусственные тесты, собственно то, что можно назвать подгонкой задачи под сильные стороны Джавы. Вот если бы вы какой-то real life алгоритм привели, который я не мог бы реализовать быстрее на С++, то тогда действительно, пришлось бы признать поражение. Есть у вас такая задачка?
In vino Veritas!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
В этом случае очень даже можно предположить, что и JIT не будет таким же шустрым в оптимизации.crypto5 wrote:В данном конкретном случае не теряете, потому что алгоритм тривиальный, но если предположить что программа большая, и вы взором можете зацепить только ее часть, то уже нет такой уверенности что ваш current ссылается на обьект который не потерли.Интеррапт wrote:Используя референсы? Совершенно не теряю.crypto5 wrote:Еще раз, потому что я пишу на джаве стабильный безопасный код, а вы в попытке угнаться за джавой в скорости уже теряете в этом аспекте.Интеррапт wrote:Непонятно, почему я должен отказываться от оптимизаций и играть по правилам Джавы, где заведомо аллокация/удаление обьектов намного быстрее (за счет пожирания намного больше памяти).
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
Можно конечно, но мы меряем один единственный аспект - оверхед выделения и освобождения памяти, и данный тест отлично его демонстрирует.Интеррапт wrote:В этом случае очень даже можно предположить, что и JIT не будет таким же шустрым в оптимизации.crypto5 wrote:В данном конкретном случае не теряете, потому что алгоритм тривиальный, но если предположить что программа большая, и вы взором можете зацепить только ее часть, то уже нет такой уверенности что ваш current ссылается на обьект который не потерли.Интеррапт wrote:Используя референсы? Совершенно не теряю.crypto5 wrote:Еще раз, потому что я пишу на джаве стабильный безопасный код, а вы в попытке угнаться за джавой в скорости уже теряете в этом аспекте.Интеррапт wrote:Непонятно, почему я должен отказываться от оптимизаций и играть по правилам Джавы, где заведомо аллокация/удаление обьектов намного быстрее (за счет пожирания намного больше памяти).
In vino Veritas!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Так я и не спорю, что в каких-то базовых случаях (как в случае вашего теста) GC будет быстрее. А вот в более сложных случаях - еще вопрос.crypto5 wrote:Блин, ну я же уже писал, что я вполне охотно верю, что на ц++ можно путем определенных страданий достичь и даже превзойти производительность джавы. Спор был про АРК вс ГЦ.Интеррапт wrote:Да и за Джавой в скорости никто не гонится. Мы тут рассматриваем какие-то искусственные тесты, собственно то, что можно назвать подгонкой задачи под сильные стороны Джавы. Вот если бы вы какой-то real life алгоритм привели, который я не мог бы реализовать быстрее на С++, то тогда действительно, пришлось бы признать поражение. Есть у вас такая задачка?
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Это мы пока еще не меряем. А на самом деле в С++ можно точно так же заалокировать эти самые 256 мегабайт памяти, как это Джава любит делать и размещать там все эти Data классы без отдельной аллокации и будет уж точно побыстрее, чем Джава.crypto5 wrote: Можно конечно, но мы меряем один единственный аспект - оверхед выделения и освобождения памяти, и данный тест отлично его демонстрирует.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
Ну приведите более адекватный на ваш взгляд тест/алгоритм.Интеррапт wrote:Так я и не спорю, что в каких-то базовых случаях (как в случае вашего теста) GC будет быстрее. А вот в более сложных случаях - еще вопрос.crypto5 wrote:Блин, ну я же уже писал, что я вполне охотно верю, что на ц++ можно путем определенных страданий достичь и даже превзойти производительность джавы. Спор был про АРК вс ГЦ.Интеррапт wrote:Да и за Джавой в скорости никто не гонится. Мы тут рассматриваем какие-то искусственные тесты, собственно то, что можно назвать подгонкой задачи под сильные стороны Джавы. Вот если бы вы какой-то real life алгоритм привели, который я не мог бы реализовать быстрее на С++, то тогда действительно, пришлось бы признать поражение. Есть у вас такая задачка?
In vino Veritas!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Я подумаю над более real-life алгоритмом.crypto5 wrote:Ну приведите более адекватный на ваш взгляд тест/алгоритм.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
Ну я вот пытаюсь нагуглить как это можно просто сделать, и не получается, может вы дадите подсказку?Интеррапт wrote:Это мы пока еще не меряем. А на самом деле в С++ можно точно так же заалокировать эти самые 256 мегабайт памяти, как это Джава любит делать и размещать там все эти Data классы без отдельной аллокации и будет уж точно побыстрее, чем Джава.crypto5 wrote: Можно конечно, но мы меряем один единственный аспект - оверхед выделения и освобождения памяти, и данный тест отлично его демонстрирует.
In vino Veritas!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
А что ты именно гуглить пытаешься?crypto5 wrote: Ну я вот пытаюсь нагуглить как это можно просто сделать, и не получается, может вы дадите подсказку?
Вообщем ладно, обязуюсь побороть лень и переписать этот твой тест с использованием placement new (ну или кастом аллокатора), чтобы убрать overhead аллокирования памяти из уравнения.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
В идеале хотелось бы ключ, который встраивал какой нибудь клевый алокатор из какой нибудь проверенной библиотеки, который бы преалоцировал 500мб и не вызывал alloc.Интеррапт wrote:А что ты именно гуглить пытаешься?crypto5 wrote: Ну я вот пытаюсь нагуглить как это можно просто сделать, и не получается, может вы дадите подсказку?
Вообщем ладно, обязуюсь побороть лень и переписать этот алгоритм с использованием placement new (ну или кастом аллокатора), чтобы убрать overhead аллокирования памяти из уровнения.
In vino Veritas!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Теоретически такое возможно, глобально переопределив new/delete. Как я уже говорил, я такое делал для BREW, с алгоритмом, который отслеживал маленькие аллокейшены и аллокировал из специального пула (при чем там было множество пулов, потому что выделить один большой кусок память в мобильном BREW не всегда было возможно). Так же там была возможность напоминающая Objective-C autorelease pool - когда ты знаешь, что будешь работать с большим кол-вом мелких блоков и потом хочешь их целиком сразу из памяти выгрузить. Но в реальном мире, особенно для desktops и servers вряд ли нужно такие дженерик решения. Особенно если подключать сторонние (уже откомпилированные) библиотеки, то такое решение с переопределением new/delete работать не будет. Так что я могу, конечно, заоптимизировать свое приложение, что оно будет в большинстве случаев намного быстрее, чем аналогичный Джава код, но при этом не смогу влиять на имплементацию 3rd party кода, который будет в виде библиотек подключаться в мое приложение.crypto5 wrote:В идеале хотелось бы ключ, который встраивал какой нибудь клевый алокатор из какой нибудь проверенной библиотеки, который бы преалоцировал 500мб и не вызывал alloc.Интеррапт wrote:А что ты именно гуглить пытаешься?crypto5 wrote: Ну я вот пытаюсь нагуглить как это можно просто сделать, и не получается, может вы дадите подсказку?
Вообщем ладно, обязуюсь побороть лень и переписать этот алгоритм с использованием placement new (ну или кастом аллокатора), чтобы убрать overhead аллокирования памяти из уровнения.
---
Тут ведь еще что самое важно, не пытаться транслировать 1:1 функциональность Джавы в C++. Например, во многих случаях мне вообще будет достаточно использовать unique_ptr вместо shared_ptr (и иметь выигрыш в скорости в раза 3).
-
- Уже с Приветом
- Posts: 64661
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Переквалификация c#-> ??
иногда я думаю, что лучше мне остаться в манагерах...
-
- Уже с Приветом
- Posts: 9035
- Joined: 25 Oct 2011 19:02
- Location: SVO->ORD->SFO
Re: Переквалификация c#-> ??
Объсните, каким боком ваш пример иллюстрирует премущество GC над ARC? К слову, многие считают ARC частным видом GC, но эту терминологическую кашу мы оставим за кадром. Как демонстрация memory preallocation'а ваш пример подходит. В Си++ для этого никаких библиотек не надо, достаточно также аллоцировать память, как это делает JVM. Наивно полагать, что надстройка на аллокатором libc будет работать всегда лучше и оптимальнее любой другой надстройки над libc, сделанной ручками, автоматом, пулетом или согласно тезиса очередного PhD.crypto5 wrote: Блин, ну я же уже писал, что я вполне охотно верю, что на ц++ можно путем определенных страданий достичь и даже превзойти производительность джавы. Спор был про АРК вс ГЦ.
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Блин, вот именно. Вместо того, чтобы ломать голову, какой алгоритм даст выигрыш в несколько секунд (или миллисекунд), ты просто прикажешь рабу-программисту с этим вопросом разобраться.Komissar wrote:иногда я думаю, что лучше мне остаться в манагерах...
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
Расскажите как, желательно с примерами кода.dotcom wrote:В Си++ для этого никаких библиотек не надо, достаточно также аллоцировать память, как это делает JVM.
In vino Veritas!
-
- Уже с Приветом
- Posts: 9035
- Joined: 25 Oct 2011 19:02
- Location: SVO->ORD->SFO
Re: Переквалификация c#-> ??
MySmallChunk *mySmallChunks[COUNT];crypto5 wrote:Расскажите как, желательно с примерами кода.dotcom wrote:В Си++ для этого никаких библиотек не надо, достаточно также аллоцировать память, как это делает JVM.
char *myBigChunk= new char[sizeof(MySmallChunk * COUNT)]; // or whatever size > MySmallChunk * COUNT
for (int i = 0; i < COUNT; ++i) {
mySmallChunks = new(myBigChunk + sizeof(MySmallChunk) * i) MySmallChunk;
}
ЗЫ: А ответить на вопрос?
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
А о каких примерах идет речь? Не могу же я выложить сюда весь фреймворк, который я написал под свой аллокатор, который я уверен, намного более performant чем GC в джаве для аллокирования мелких обьектов (впрочем сходу я сравнить не могу, т.к. он использует BREW API, поэтому проверить это под десктопом я не смогу). Уверен, что мог бы спортировать на тот же iOS, но не было такой надобности.crypto5 wrote:Расскажите как, желательно с примерами кода.dotcom wrote:В Си++ для этого никаких библиотек не надо, достаточно также аллоцировать память, как это делает JVM.
На 100% уверен, что GC не может побить специализированные аллокаторы под C++. Но с другой стороны готов признать, что в 90% случаях это и не нужно. Чего уж там - память дешевая, процессорные ресурсы тоже.
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
dotcom wrote:MySmallChunk *mySmallChunks[COUNT];crypto5 wrote:Расскажите как, желательно с примерами кода.dotcom wrote:В Си++ для этого никаких библиотек не надо, достаточно также аллоцировать память, как это делает JVM.
char *myBigChunk= new char[sizeof(MySmallChunk * COUNT)]; // or whatever size > MySmallChunk * COUNT
for (int i = 0; i < COUNT; ++i) {
mySmallChunks = new(myBigChunk + sizeof(MySmallChunk) * i) MySmallChunk;
}
ЗЫ: А ответить на вопрос?
Во-во. Placement new Ну какой GC может быть быстрее?
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Переквалификация c#-> ??
dotcom wrote:MySmallChunk *mySmallChunks[COUNT];crypto5 wrote:Расскажите как, желательно с примерами кода.dotcom wrote:В Си++ для этого никаких библиотек не надо, достаточно также аллоцировать память, как это делает JVM.
char *myBigChunk= new char[sizeof(MySmallChunk * COUNT)]; // or whatever size > MySmallChunk * COUNT
for (int i = 0; i < COUNT; ++i) {
mySmallChunks = new(myBigChunk + sizeof(MySmallChunk) * i) MySmallChunk;
}
ЗЫ: А ответить на вопрос?
А потом вы напишите логику что бы отдавать и возвращать чанки, потом что бы обеспечить поддержку многопоточности, потом что бы отдавать память назад, что бы остальным частям программы хватало, и не факт что получится быстрее jvm gc.
In vino Veritas!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Переквалификация c#-> ??
Для generic solution - вы правы, вряд-ли получится быстрее, все-таки GC и прочие Hotspot не дураки писали. А вот для того, чтобы обеспечить оптимизацию какой-то части программы - то очень даже быстрее. Что собственно имеет смысл делать - выяснить где затыки и провести оптимизацию. И в С++ всегда возможность оптимизровать что-либо - на порядок больше чем для Java.crypto5 wrote: А потом вы напишите логику что бы отдавать и возвращать чанки, потом что бы обеспечить поддержку многопоточности, потом что бы отдавать память назад, что бы остальным частям программы хватало, и не факт что получится быстрее jvm gc.
И грамотное использование ARC в совокупности с другими инструментами - даст намного больше производительность С++ приложения по сравнению с Java.