OSDev

для всех
Текущее время: 26 дек 2024, 17:40

Часовой пояс: UTC + 3 часа




Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: 20 дек 2014, 00:58 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 209
Почти с самого начала треда гложет мысль, да высказать некогда было: пофиг на языки, они не так уж много значат, а вот чего интересно в сравнении в первую очередь: какое время измеряем? Только время выполнения (без учёта времени компиляции) или полное время компиляции+выполнения? При использовании JIT (которые зачастую используют когда хочется быстрый старт + набор статистики профилирования + JIT генерация машинного кода для кусков программы, определённых как горячие, в то время как для вычислений на быстрый старт пофиг, зато важно чтобы на этапе компиляции было вылизано всё что можно) отделить мясо от мух не так-то просто. Да и смешивать в кучу Java и JVM нехорошо (а создалось впечатление что тут это не различают).

А если хочется языки сравнивать - это надо, наверное, брать gcj и gcc (когда компилятор один и различаются только фронтенды разбора и, быть может, библиотеки времени выполнения).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 дек 2014, 10:33 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
В той системе сравнивается процессорное время работы программы. То время, которое процессор тратил на исполнение именно запущенной программы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 дек 2014, 15:09 

Зарегистрирован: 15 апр 2014, 14:13
Сообщения: 127
Nable писал(а):
какое время измеряем? Только время выполнения (без учёта времени компиляции) или полное время компиляции+выполнения?

Это зависит от вашего желания. В принципе на любую тему можно тесты придумать. Вопрос только в относительной важности тех или иных измерений. В случае долгих математических вычислений скорость компиляции не важна, но в случае измерения скорости запуска приложения (приятно, когда запускается быстро) скорость компиляции становится важнее.
Nable писал(а):
Да и смешивать в кучу Java и JVM нехорошо (а создалось впечатление что тут это не различают).

Java это набор технологий и стандартов. Как единое целое этот набор можно сравнивать с таким же альтернативным набором. Под JVM вы видимо имели в виду компилятор, который есть единственный компонент, важный для скорости перемножения матриц. Поэтому при разборе перемножения матриц имеем по сути сравнение двух компиляторов - из среды обитания Java и из альтернативной среды. Но с точки зрения единого целого набор технологий для ускорения расчётов С позволяет использовать ассемблерные вставки, а в Java нужно отдельно писать нативные методы. В этом я вижу временное небольшое отставание, ну да его скоро ликвидируют.
Nable писал(а):
А если хочется языки сравнивать - это надо, наверное, брать gcj и gcc

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 дек 2014, 15:36 

Зарегистрирован: 15 апр 2014, 14:13
Сообщения: 127
Zealint писал(а):
Эмбрион, все эти размышления - пустые декларации.

Это не размышления, это доклад об опытных данных. Почувствуйте разницу, как говорится.
Zealint писал(а):
На C++ без ассемблера: 6 вложенных циклов (блочный алгоритм, кубическое время счёта), около 80 секунд. Никаких алгоритмов, сложнее кубического не требуется. Если брать SSE, то можно добиться 43 секунд, ещё пока не применяя более сложных алгоритмов. Это если брать 64 бита.

64 битная Java под рукой отсутствует (ибо нет ОС на 64 бита), поэтому здесь я могу только теоретически сказать - разница в производительности Java и С будет минимальной.
Zealint писал(а):
При 32 битах также можно написать кубическую версию, которая укладывается во время.

И даже выше было показано, как это сделать на 32-bit Java.
Zealint писал(а):
Решение, которое работает 28 секунд, это алгоритм Винограда-Штрассена, написанный руками из плеч на одной из версий Pascal с ассемблерными вставками

Именно о таком варианте я и говорил выше в докладе об экспериментальных данных.
Zealint писал(а):
Вы постепенно начинаете понимать, что оказывается, программисты - люди разные.

Разные-то разные, но разница в весе и росте не должна сказываться на объективности оценок при сравнении двух наборов технологий. Но вот у некоторых почему-то сказывается.
Zealint писал(а):
А Вы ошибочно (неявно) исходили из того, что язык первичен, а сознание программиста вторично. Фиг там.

Это неправильная гипотеза. Не угадали вы мои мысли :)
Zealint писал(а):
Вы не поверите, насколько сильно меня не волнует мнение "более серьёзно разбирающегося в вопросах сравнения производительности сообщества"

Это-то и печально. Когда личное мнение заслоняет от человека объективную реальность - можно закончить жизнь весьма плачевным образом.
Zealint писал(а):
Меня волнуют только любые адекватные мнения, которые обычно могут дать люди, имеющие серьёзный и нестандартный опыт.

А степень адекватности оценивается с подключением вашего личного мнения, которому плевать на мнение всех остальных людей на земле. В результате имеем задержку в развитии, застаивание в локальном экстремуме, из которого систему пока не смогла выпнуть (ну то есть - помочь продолжить развитие) объективная реальность.
Zealint писал(а):
Вы пришли в МОЮ область и намекнули, что язык Java там подходит больше. Я обещал, что ни одну простую (в МОЁМ понимании) задачу Java программист не решит на этом языке. А Вы уходите в сторону, предлагая сравнить два идентичных цикла. Не выйдет.

Вы пришли на этот форум и заявили, что в ВАШЕЙ области вы всё познали и более вам ни кто ничего не докажет. В ответ на такое смелое заявление я вам привёл пример Java, на который вы отреагировали весьма болезненно, начав разговор о том, что область-то ВАША и что все остальные в ней просто бараны и не должны вам чего-то советовать (это образное выражение вашей позиции и не имеет дословного подтверждения, естественно).

И вот в ВАШЕЙ области я вам указал, что суть вашего сравнения сводится к сравнению компиляции одного простейшего цикла. Помимо указания были приведены опытные данные. Но вы просто заявляете - не выйдет.

Можно предположить, что вы так "неформально" понимаете выражение "решить задачу". Но опять же я вам напоминаю, что решением вашей задачи будет достижение скорости перемножения матриц порядка 5000 за менее 100 секунд на 2.4 ГГц процессоре. А для достижения такой скорости нужно оптимизировать ОДИН ЕДИНСТВЕННЫЙ цикл. Конечно, в ВАШЕЙ области возможно считается, что простые решения - они для посторонних (не из вашего района :) ), но тем не менее, решение задачи именно простое и заключается именно в одном единственном цикле. То есть на лицо ваше застревание в локальном экстремуме, выход из которого для вас закрыт нежеланием посмотреть правде в глаза - задача решается через ОДИН цикл (точнее - его оптимизацию).

То есть весьма полезно иногда заглянуть в чужую область и обнаружить там застоявшееся болото :) Может всё же пробужу желание попытаться выбраться из застоя.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 дек 2014, 17:34 

Зарегистрирован: 15 апр 2014, 14:13
Сообщения: 127
Выложил сравнение производительности Java и альтернативных подходов. Вот ссылка. Без ассемблера и интринсиков С компиляторы в идеале могут быть процентов на 30-40 быстрее. Но в реальности, подозреваю, силёнок им не хватает и выдают производительность где-то на уровне Java.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 дек 2014, 19:28 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Цитата:
сообщаю о выпуске технологии удобной вставки ассемблерных

Вау, вот это я понимаю - верх удобства. Просто идеал. Всего-то 20 строк кода для умножения двух чисел через mul. А какая читаемость! Встроенному ассемблеру у сишных компиляторов такая и не снилась. :)
А по делу - java заявляется в первую очередь как кроссплатформенный язык со сборкой мусора. При использовании встроенного ассемблера полностью исчезает кроссплатформенность, и ставится под вопрос полезность и адекватность сборки мусора. В итоге остается только "язык". С очень, ОЧЕНЬ сомнительным удобством и полезностью этого ассемблера. Например, учитывая, что в Java почти всё есть объект, как на этом встроенном ассемблере удобно обращаться к полям объекта? В статье не нашел. Полагаю, что через вызовы каких-то хитрых функций, по аналогии с общением JVM и нативного кода во внешних библиотеках. А такое резку срубает пользу от ассемблера при, например, работе с массивами.
И, кстати, из этой же статейки:
Цитата:
Test time in milliseconds
size SSE2 GPR Long Java Short Java
1500 4850 10100 22000 13000

По этим результатам видно, что "ассемблерная" реализация (т.е. через эти самые дико кривые асм-вставки) с SSE работает в 3-5 раз быстрее обычной джавы.
Цитата:
It is very probable that most of C compilers will hardly perform better than the GPR only variant

Бред сивой кобылы, не имеющий ни одного факта под собой. А вернее, откровенная ложь.
Нормальные компиляторы Си гоняют SSE в хвост и в гриву везде, где только могут.
И даже если посчитать это заявление правдой, все равно получается, что чистая java на 30-40% медленней чистого Си, т.к. GPR-Only вариант (на уровне которого по заявлению автора статьи работает Си) в данном тесте тоже был написан на ассемблере, только без SSE, и все равно оказался сильно шустрее жавы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 дек 2014, 13:42 

Зарегистрирован: 15 апр 2014, 14:13
Сообщения: 127
Bargest писал(а):
Вау, вот это я понимаю - верх удобства. Просто идеал. Всего-то 20 строк кода для умножения двух чисел через mul. А какая читаемость! Встроенному ассемблеру у сишных компиляторов такая и не снилась. :)

Вы видели программу Hello World на ассемблере ?
Bargest писал(а):
java заявляется в первую очередь как кроссплатформенный язык со сборкой мусора. При использовании встроенного ассемблера полностью исчезает кроссплатформенность, и ставится под вопрос полезность и адекватность сборки мусора.

Сборка мусора и кросплатформенность есть две совершенно разные вещи. По первой замечу - как работала, так и будет продолжать отлично работать (ну если откровенную лажу в программе не писать, конечно). А по кроссплатформенности по ссылке указано, что если предполагается работа на не поддерживаемых платформах, то библиотека генерирует врапер, который на неподдерживаемой платформе просто вызывает Java-вариант вместо низкоуровневого.
Bargest писал(а):
Например, учитывая, что в Java почти всё есть объект, как на этом встроенном ассемблере удобно обращаться к полям объекта? В статье не нашел. Полагаю, что через вызовы каких-то хитрых функций, по аналогии с общением JVM и нативного кода во внешних библиотеках. А такое резку срубает пользу от ассемблера при, например, работе с массивами.

Вы вроде пишете, что про сравнение производительности читали, но тут же заявляете, что в пользе ассемблера сильно сомневаетесь. Может стоит ещё немного подумать ?
Bargest писал(а):
Цитата:
Test time in milliseconds
size SSE2 GPR Long Java Short Java
1500 4850 10100 22000 13000

По этим результатам видно, что "ассемблерная" реализация (т.е. через эти самые дико кривые асм-вставки) с SSE работает в 3-5 раз быстрее обычной джавы.

О да, главное указать, что Java всё равно хуже, ведь сам автор признаёт, что она не идеальна :)
Bargest писал(а):
Цитата:
It is very probable that most of C compilers will hardly perform better than the GPR only variant

Бред сивой кобылы, не имеющий ни одного факта под собой. А вернее, откровенная ложь.
Нормальные компиляторы Си гоняют SSE в хвост и в гриву везде, где только могут.

Вы, конечно же готовы предоставить результаты тестирования С-компиляторов на предмет опровержения бреда сивой кобылы ? Или просто треплетесь без минимального обоснования фактами ?
Bargest писал(а):
все равно получается, что чистая java на 30-40% медленней чистого Си, т.к. GPR-Only вариант (на уровне которого по заявлению автора статьи работает Си) в данном тесте тоже был написан на ассемблере, только без SSE, и все равно оказался сильно шустрее жавы.

Так вот и покажите нам чистый С, который хотя бы на 30-40% быстрее чистой Java. А то заявления делать все умеют, а вот доказать что-то - мало способных.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 дек 2014, 15:15 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
Тов. эмбрион, Вы всё ещё не понимаете в чём смысл данной темы. Я сказал, что ни один жава программист не решит на жаве задачи, которые я считаю простыми. Совершенно не интересует сравнение компиляторов жавы с другими языками, и так ясно, то она проигрывает без всяких сравнений. Интересует сравнение полного комплекса: программист + язык. Не важно, какой программист и не важно какой язык в отдельности друг от друга. Но важно, что по моим наблюдениям любители (ярые приверженцы) жавы совершенно не способны решать простые задачи (и сложные тем более), потому что есть чёткая корреляция между способностями решать задачи и способностями мыслить. Неспособность мыслить широко выражается разными способами: от яростной любви к жаве, до неумения решать простые задачи. Вот именно это никто до сих пор мне не опроверг в моей практике.

Цитата:
There are many matrix multiplication algorithms, but for our case it is not important how quick a particular algorithm is

Вот это одна из ошибок. Нам как раз важно, чтобы задачу можно было решать. Представьте, вам говорят: постройте проект здания. Вы отвечаете: ну, пожалуйста, это займет 2 миллиона лет, нам же не важна эффективность. А на самом деле важна. И поверьте, все Ваши рассуждения о том, что кто-то там на 30-40 процентов медленнее - это лишь фантазии, основанные на одном единственном примере бездарно реализованного метода. На другом примере будет другое расхождение и человек, который претендует на умение сравнивать компиляторы, должен это знать.

Цитата:
One important thing here is the Java Language Specification constraints, that require us to perform all operations with the 64-bit long numbers, while the input values are 32-bit long. If we try to write 32-bit multiplication operation in Java, then it's result can exceed 32 bit. In such case Java Language Specification dictates us to forget about overflow and to use just lowest 32-bit value, that is interpreted as a signed integer and distorts resulting value even more than if there was an overflow only. That's why another test was performed when the result exactness was not taken into account.

- А если попытаться забить более длинный гвоздь с помощью жавы? - спросил рабочий.
- Тогда он будет забит только до половины, - спокойно ответил эмбрион, - но зато почти так же быстро, как Вы сможете сделать это молотком!
- А что произойдёт со второй половиной, так и будет торчать из доски?
- Нет, она просто исчезнет без всякого следа! - гордо ответил эмбрион.
- По-моему, чешуя какая-то эта ваша жава. - решительно заявил строитель.
- Конечно, - обиделся эмбрион, - главное сказать, что жава плохая, и доказывать ничего не надо, исследования проводить не умеете, вот и всё!

Короче, эмбрион, результатов, полученных на правильном решении задачи пока не видно. Правильным решением я считаю то, которое проходит неизвестные вам тесты на сайте указанного мной проекта. Я, честно говоря, устал доказывать что-либо фанатикам, поэтому последнее время просто даю задачи и спокойно забываю про человека, так как я знаю заранее, что задачи решены не будут. Очень удобно : )


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 дек 2014, 16:11 

Зарегистрирован: 15 апр 2014, 14:13
Сообщения: 127
Zealint писал(а):
Неспособность мыслить широко выражается разными способами: от яростной любви к жаве, до неумения решать простые задачи. Вот именно это никто до сих пор мне не опроверг в моей практике.

Какая у вас интересная жизнь ! Она полна разнообразия, каждый день на вас сыплется что-то новое, но, как и подобает настоящему мыслителю, вы, слегка нахмурив брови, заявляете - всё это суета, я знаю толк в делах, отстаньте от меня, досадливые мухи, я всё познал давно, и вы мне не чета, чтоб к замку подойти, моей большой науки !
Zealint писал(а):
Правильным решением я считаю то, которое проходит неизвестные вам тесты на сайте указанного мной проекта. Я, честно говоря, устал доказывать что-либо фанатикам, поэтому последнее время просто даю задачи и спокойно забываю про человека, так как я знаю заранее, что задачи решены не будут. Очень удобно : )

Да, замок создаёт иллюзию неприступности. Но вот летающий над вами на вертолётах народ об этом, почему-то, не подозревает ...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 дек 2014, 16:52 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
Эмбрион, то, о чём я говорю, это не наука, это минимальный набор знаний, который должен быть у школьника, поступающего в вуз на специальность, связанную с информатикой (с настоящей, а не той, где только web-дизайн изучают). Наука начинается со сложных задач, обсуждать которые я не буду даже пытаться начинать без особой для этого причины. Ваши эмоциональные нападки и попытки наводить тень на плетень излишним многословием - это и есть суета. Пока выходит так, что мне придётся поставить ещё одну галочку в столбце безуспешно пытающихся меня в чём-то переубедить в отношении жавы.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB