|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.08.2024, 16:02 | #1 |
Пользователь
Регистрация: 16.05.2024
Сообщений: 92
|
Сравнение языков по скорости
В книгах и интернете можно прочитать разные мнения насчёт скорости работы программ на разных языках программирования. Например, говорят, что код на Go очень медленный, что самые быстрые языки (то есть машинный код, генерируемый компиляторами этих языков) - С++ и Rust, что программы на Free Pascal и Ada значительно отстают по скорости работы от С++ и т.д. В одной книге про Java я прочитал, что программа на Java где есть расчёты легко уделывает по скорости неоптимизированный C++-код, а оптимизированный C++-код, конечно, быстрее Java-овского, но когда расчёты идут долго, то у Java включается внутренний оптимизатор и Java-программа вполне может сравниться по скорости с C++-кодом. и так далее.
Решил сам сравнить разные языки по скорости работы программ на них. Взял 6 языков, написал для каждого программу подсчёта количества простых чисел в заданном диапазоне от 2 до n. Задал n=500000 (пятсот тысяч), для каждой программы сделал несколько запусков, из последовательности значений времени расчёта удалил эксцесс (максимальное значение), из оставшихся значений подсчитал среднее арифметическое. Оказалось, что все 6 программ (на разных языках) справились с расчётом практически за одно и то же время - за 46 секунд (на другом компьютере конкретная цифра будет другая). Разница между самым быстрым и самым медленным языком не превышает полпроцента. Если тестировать производительность на другом алгоритме (например где обработка текста), я думаю, разница между языками тоже будет небольшой. Получается, что все компиляторы производят хорошо оптимизированный код и разница между ними несущественная. Вот результаты на моём компьютере времени подсчёта количества простых чисел в диапазоне от 2 до 500000 в секундах. Чем меньше значение - тем лучше: Ada - 46.31405 C++ - 46.31438 Free Pascal - 46.3195 Rust - 46.3232 Java - 46.3939 Go - 46.5212 Исходный текст программ - в архиве в прикреплении к сообщению. Однако, всё же видно, что новые языки (Java, Go, Rust) немного медленнее "старичков" C/C++, Pascal и Ada. |
11.08.2024, 16:06 | #2 |
Пользователь
Регистрация: 16.05.2024
Сообщений: 92
|
Вот такой алгоритм расчёта:
На языке Free Pascal: компилировать командой fpc -O3 -Mobjfpc primes.pas Код:
|
12.08.2024, 08:09 | #3 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,009
|
DeepFlake, нет смысла сравнивать какую-то скорость на каких-то языках. Каждый язык - под свою задачу.
Искусственными тестами можно на любом языке обогнать любой другой. Не учитывая кеши, потоки Ещё есть такое понятие, как скорость разработки. Иногда нужен компромисс между скоростью разработки и скоростью работы. А иногда сочетают - GUI накидали на питоне, а расчёты сделали на C++ |
12.08.2024, 09:44 | #4 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,329
|
Алексей1153
Цитата:
Возьмите, например, задачи с ООП. Сколько избыточного кода и памяти используется в их решениях. Даже ваш код можно ускорить, если проверять делители только до квадратного корня числа. Код:
Как-то так, ...
|
|
12.08.2024, 11:27 | #5 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,617
|
|
12.08.2024, 11:49 | #6 | |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,828
|
Цитата:
Кроме того, методика подсчета затраченного времени не вызывает доверия из-за неиспользования механизма счетчиков производительности. В данном тесте это обязательно. Дополнительно, для Java хотелось бы узнать полное время, включающее запуск JVM и компиляцию, а также настройки JVM, отвечающие за оную (CompileThreshold в первую очередь). Аналогично — для других языков, что требует сооружения тестовой среды. Вот она-то и должна считать в реальном времени, поскольку нагрузка будет распределяться на разные процессы, и значение имеет суммарное время выполнения, включающее накладные расходы ОС. Ожидается, что Java должна с треском проиграть, да. Короче, должно быть две колонки:
Тогда и можно будет предметно говорить. А сейчас — баловство.
В разработке: воспроизводственный контур ИТ
|
|
12.08.2024, 12:21 | #7 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,758
|
+ надо указывать компиляторы, а то окажется, что ada использует GCC со всеми оптимизациями от С/С++, Rust - LLVM, а Java - прогретый код JIT и т.д.
+ надо брать набор задач, а не одну тупую молотилку + надо сбрасывать кэша + ... а так мерять можно любой результат намерять |
12.08.2024, 12:27 | #8 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,758
|
посмотрел бенч - так там меряется один и тот же цикл, скорее всего даже машинный код сгенерированный будет один - что меряли?
|
12.08.2024, 15:11 | #9 |
Пользователь
Регистрация: 16.05.2024
Сообщений: 92
|
>там меряется один и тот же цикл, скорее всего даже машинный код сгенерированный будет один - что меряли?
измерял вот этот цикл while. Какой компилятор какой код генерирует на задаче где арифметические расчёты и ветвления. Оказалось что все компиляторы генерируют почти одинаковый машинный код . Все языки хороши |
12.08.2024, 15:13 | #10 |
Пользователь
Регистрация: 16.05.2024
Сообщений: 92
|
>+ надо брать набор задач, а не одну тупую молотилку
подскажите на какой ещё задаче протестировать |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Возможно ли доказать, что бывают скорости больше скорости света | challengerr | Свободное общение | 96 | 09.08.2015 08:08 |
Вопрос о скорости PDO ? | Haroutweb | PHP | 1 | 25.08.2012 12:35 |
оптимизация по скорости sin | Medved.tolik | Помощь студентам | 0 | 14.12.2011 23:43 |
График скорости как в DM | dmitriegorovih | Общие вопросы Delphi | 5 | 30.01.2011 08:22 |
Сравнение скорости компиляторов | Umen | Обсуждение статей | 13 | 05.10.2009 19:48 |