LINUX.ORG.RU

Всё решает кэш, всё остальное - понты?

 , , , ,


1

1

Прочитав статьи ( http://rus-linux.net/lib.php?name=/MyLDP/hard/memory/memory.html http://www.es.ele.tue.nl/premadona/files/akesson01.pdf http://www.freescale.com/files/training_pdf/WBNR_FTF10_NET_F0686.pdf?lang_cd=en и http://www.freescale.com/files/training_pdf/WBNR_FTF11_NET_F0686.pdf?lang_cd=en ) у меня сложилось впечатление, что память - это основной botlneck после подгрузки данных с накопителя (PCI-e SSD). Получается, что если процесс часто не попадает в кэш (в нашем сегодняшнем мире браузеров, явы, огромных БД, компиляции и виртуализации сложно запихнуть в 8-16Мб памяти все данные приложения), то он будет сильно тормозить, при этом мы никак это не сможем увидеть (или, таки, есть средства?): он просто будет показывать 100% загрузки, тогда как реально процессор 90% времени ожидает память.

Получается, что для всех современных (т.е. «жирных») задач - всё решается кэш (и DDR4), а всё остальное - понты?

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

P.S. И я сейчас не рассматриваю случай, когда мы занимаемся математикой, а у нас есть крутой векторный модуль в процессоре и метакомманды с чейнингом. Обычно оно не используется.

Тут может и тролли но я реально в жизни встречал двух полностью одеревенеллых придурков, оба что характерно были жабаводами. Справедливости ради нужно сказать что второй не только молился на жабу но и согласился устроить тест. Я писал на C/C++ час, он сдался после трех недель оптимизаций и просто не верил что жаба все равно позорнейше сливает - повернулся на этом просто. Жаба калечит людей. Дети завязывайте с наркотой!

anonymous
()
Ответ на: комментарий от devl547

А он тебе про маняфантазии жабомакак. Не обращай внимания.

anonymous
()
Ответ на: комментарий от anonymous

Я писал на C/C++ час

Зачем потратил столько времени? Замерил бы просто одиночный цикл с инкрементом, польза была бы таже.

Когда я говорил о java на уровне сpp, подразумевались долго живущие процессы с реальными задачами. В БД за данными сходить, обработать их на fork-join-pool, сгенерировать UI, с диска почитать и т.д. Фактически подразумевался прикладной или серверный софт.

Такой софт пишется неделю, минимум, перед этим неделю продумываешь, что будешь писать. Вот это уже реальный тест, на котором java будет близка с cpp.

P.S. Про что хоть твой тест был, что именно задействовалось в ЯП?

foror ★★★★★
()
Ответ на: комментарий от foror

Зачем потратил столько времени?

Получил удовольствие) я просто отдал ему свой код и каждый день три недели приходил на работу и наблюдал его просто яростные попытки хоть немного приблизиться к C/C++ вместо работы. Я ему даже не говорил ничего - просто смотрел как он целыми днями себе в лютой злобе волосы везде рвет))) Реальное было шоу - три недели каждый день.

anonymous
()
Ответ на: комментарий от foror

Вот это уже реальный тест, на котором java будет близка с cpp.

Ты прав и спорить с этим могут только те кто не знает правило 80/20. Потому люди и пишут на php, а не на asm потому что все упираются в базу. Однако если мы берем задачу которая не упирается во что-то то с вероятностью 98% в лоб написанный на C/C++ код уделает жабу как стоячую (а ведь есть еще и оптимизации и платформозависимые трюки).

anonymous
()
Ответ на: комментарий от foror

Про что хоть твой тест был, что именно задействовалось в ЯП

Конкретно у меня обработка данных. Любая объемная задача не ожидающая чего-то (базы данных или еще какие-то внешние факторы).

anonymous
()

На C/C++ то-же нужно уметь писать. Много людей писать не умеют) Я в большинстве случаев напишу код за время сопоставимое с написанием кода на жабе. Не всегда. Но часто. В худшем случае не медленней чем в 10 раз. В лучшем быстрее. При этом с C/C++ у меня будет океан возможностей для оптимизаций. С жабой с этим полная труба, весь ее рефакторинг это смешно. В результате люди остаются с кучей жабоговнокода и убивают свою фирму этой заразой.

anonymous
()
Ответ на: комментарий от anonymous

Локальность не страдает т.к. деревья создаются целиком, а не вперемешку,

С какой радости? Вперемешку и создаются, с добавлением по одному элементу в каждую ветку, в случайном порядке. Да еще и с ребалансировкой время от времени.

anonymous
()
Ответ на: комментарий от foror

Зачем потратил столько времени? Замерил бы просто одиночный цикл с инкрементом, польза была бы таже.

Для простого одиночного цикла с инкрементами сишка и жаба генерирует вообще одинаковый код, если что.

Вот это уже реальный тест, на котором java будет близка с cpp.

На таком тесте джава будет _обгонять_ сишка. Иногда - на порядки. Как это видно из того же шутаута, где нету _ни одной_ задачи на которой сишка бы обогнала жабу. Как ты объясняешь такое чудесное совпадение?

anonymous
()
Ответ на: комментарий от anonymous

Получил удовольствие) я просто отдал ему свой код и каждый день три недели приходил на работу и наблюдал его просто яростные попытки хоть немного приблизиться к C/C++ вместо работы.

Давай ты перестанешь пиздеть и напишешь на сишке аналог этого кода:

http://benchmarksgame.alioth.debian.org/u64q/program.php?test=binarytrees&amp...

Чтобы сишка хотя бы вдвое не слила.

anonymous
()
Ответ на: комментарий от anonymous

С какой радости? Вперемешку и создаются, с добавлением по одному элементу в каждую ветку, в случайном порядке.

Нет. Ты код-то посомтри.

Да еще и с ребалансировкой время от времени.

Нету никакой ребалансировки там.

anonymous
()
Ответ на: комментарий от Erfinder

Ты не то сравниваешь, вот вариант на си, который соответствует варианту на джаве (тот самый код «в лоб», о котором мы говорим):

http://benchmarksgame.alioth.debian.org/u64q/program.php?test=binarytrees&amp...

Выполняется 37 секунд. А то, что ты выложил - совершенно другой алгоритм, к тому же противоречащий условиям бенчмарка, которые запрещают тьюнить гц или использовать самописные аллокаторы/арены:

As a practical matter, the myriad ways to tune GC will be ignored.
As a practical matter, the myriad ways to custom allocate memory will be ignored - use per node allocation or a library memory pool.
Please don't implement your own custom «arena» or «memory pool» or «free list».

anonymous
()
Ответ на: комментарий от anonymous

сливает всего-навсего в 6 раз

Ну ты клоун. Давай две ссылки на жабасурс и на сишный сурс. Давай если жаба сольет то ты отсосешь у бомжа и выложишь это на ютуб вместе со своим паспортом и обзором аппартмена?

anonymous
()
Ответ на: комментарий от anonymous

Please don't implement your own custom «arena» or «memory pool» or «free list».

С чего бы это? Это типа мы вас будем бить а вы пожалуйста не сопротивляйтесь? С такими заявками они сразу идут нахер! Либо реализуем одну и туже задачу любыми возможностями языка (без вызова сторонних библиотек) либо участвуйте в своей специальной олимпиаде сами!

anonymous
()
Ответ на: комментарий от anonymous

Тут проблема абсолютна прозрачна и ясна, нужно сделать мемори пул и жаба сольет, авторы этого недотеста понимают и запрещают обгонять жабу))))

anonymous
()
Ответ на: комментарий от anonymous

С чего бы это? Это типа мы вас будем бить а вы пожалуйста не сопротивляйтесь?

С того, что это тест на скорость стандартных средств работы с памятью. А так тебе, конечно, никто не мешает прикрутить к своей сишке гц жабы (который вобщем на сишке и написан) и тогда сишка будет работать так же быстро как жабка (с-но, в оптимизированном варианте сишки это и сделано).

Либо реализуем одну и туже задачу любыми возможностями языка (без вызова сторонних библиотек)

Да я только за. И, коненчо, для менеджмент-языков разрешить тьюнинг гц. А то у них там в заоптимайзенной реализации на сишке вообще arp_pool без падла юзают.

anonymous
()
Ответ на: комментарий от anonymous

Тут проблема абсолютна прозрачна и ясна, нужно сделать мемори пул и жаба сольет

Во-первых, речь шла о «коде в лоб». Вот тебе конкретный пруф - на одном и том же написаном коде «в лоб» сишка сливает в 6 раз. Да, можно сделать мемори пулы, тогда сишка будет работать _так же быстро_ как и жабка. Но не быстрее - потому что у жабки внутри гц _те же самые_ мемори пулы. Только они работают сразу и не требуют от программиста переизобретать велосипед каждый раз. С-но заоптимайзенный вариант сишки с мемори пулами как раз это и демонстрирует - обий cpu-time как у жабки. Жабка правда хуже распараллеливает, но это ожидаемо - ведь распараллеливание в жабке происходит автоматически, а в сишке пришлось код руками выдрачивать.

anonymous
()
Ответ на: комментарий от anonymous

Да я только за. И, коненчо, для менеджмент-языков разрешить тьюнинг гц.

А тебе кто-то запрещает это делать? Пока что только жабамакаки запрещают жабу обгонять)))

anonymous
()
Ответ на: комментарий от anonymous

А тебе кто-то запрещает это делать?

Ты слепой?

As a practical matter, the myriad ways to tune GC will be ignored.

Пока что только жабамакаки запрещают жабу обгонять)))

Автор вообще-то упоровшийся сишник и по-этому принял неудовлетворяющее условиям бенча решение на сишке с пулами. Как раз чтобы скрыть тот факт, что жабка без оптимизаций в 6 раз быстрее сишки без оптимизаций.

anonymous
()
Ответ на: комментарий от anonymous

Во-первых кто тебе сказал что это код «влоб»? Да даже замена malloc на calloc все изменит. Во-вторых это так уморительно как ты веришь что си будет так же но не быстрее)))) Святая вера в волшебные жабьи оптимизации)))

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

Автор вообще-то упоровшийся сишник

Ага рассказывай))) Сишник придумавший правило теста по которому нельзя обгонять жабу)))))

anonymous
()
Ответ на: комментарий от anonymous

Во-первых кто тебе сказал что это код «влоб»?

Потмоу что это код влоб. Он 1в1 соответствует коду на жабке. Просто берем и делаем то, что написано в бенче, идиоматически, не занимаясь оптимизациями (код в лоб = без оптимизаций).

Во-вторых это так уморительно как ты веришь что си будет так же но не быстрее))))

Ты идиот? Причем тут вера, там лежит реализация сишки на пулах. И она не быстрее. И не может быть быстрее, потому что, еще раз для особо одаренных, в жабе _те же самые написанные на сишке пулы_. Написанные на сишке пулы не могут работать быстрее, чем написанные на сишке пулы, неужели это так трудно понять?

Да даже замена malloc на calloc все изменит.

Смысл бенча в том, чтобы выделять объекты по одному. Этот бенч измеряет с какой скоростью можно выделять в реализации языка Х память под большое количество мелких объектов. Если ты выделишь один кусок, то это уже будет совершенно другой бенч.

anonymous
()
Ответ на: комментарий от anonymous

Ага рассказывай))) Сишник придумавший правило теста по которому нельзя обгонять жабу)))))

Но для реализации кода на си он эти правила «забыл» допустив код на си, который использует пулы и нарушает правила. При этом тьюнить гц на жабе как было запрещено так и осталось, прикинь. Это не подыгрывание сишкЕ, по-твоему?

anonymous
()
Ответ на: комментарий от anonymous

Обосрался - свали. Все правильно.

Все правильно. Давай ты будешь моим рабом? Соглашайся! Что не согласен? Ну раз обосрался - свали. Малыш себе я все уже давно доказал, а доказывать всяким пеньками типа тебя это тупо тратить время. Жизнь тебе все докажет - будь терпеливей)))

anonymous
()
Ответ на: комментарий от anonymous

Выбхоть подписывались. Ява-нонимус, Си-нонимус. а то хер вас отличишь. Чо порешали то? Ява рулит и запедаливает сишку, так? Ну в принципе не удивительно.

// Мимокрокодил-нонимус

anonymous
()
Ответ на: комментарий от anonymous

Чо порешали то? Ява рулит и запедаливает сишку, так? Ну в принципе не удивительно.

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

Короче все и так ясно для любого адекватного человека.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.