![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Форумчанин
Регистрация: 16.05.2024
Сообщений: 200
|
![]()
>Дополнительно, для Java хотелось бы узнать полное время, включающее запуск JVM и компиляцию, а также настройки JVM, отвечающие за оную (CompileThreshold в первую очередь).
я тестировал только работу цикла по расчёту простых чисел. Запуск JVM можно узнать через программу time, то есть командой time java primes |
![]() |
![]() |
![]() |
#12 |
Форумчанин
Регистрация: 16.05.2024
Сообщений: 200
|
![]()
>Даже ваш код можно ускорить, если проверять делители только до квадратного корня числа.
дак я наоборот выбрал максимально неоптимальный алгоритм, чтобы подольше считал |
![]() |
![]() |
![]() |
#13 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,371
|
![]()
DeepFlake
Цитата:
Если получен правильный ответ, то это ещё не значит, что он получен правильным алгоритмом. Ещё в школе, при решении задачи с известным ответом, играли с данными задачи. ![]() Для того, что бы подольше считал нужны другие задачи. Например, задача: Есть два массива целых чисел. Все числа массива случайные и не повторяются. Проверить, является ли один массив подмножеством второго. Тут есть три решения. Наивное - с вложенным циклом. Перебор элементов одного массива (меньшего по длине) и поиск соответствующего элемента во втором. Если размер большего по длине массива за десяток тысяч элементов, а меньшего на порядок меньше, то считать будет долго. Да, есть и другие решения задачи, но ...
Как-то так, ...
|
|
![]() |
![]() |
![]() |
#14 |
Форумчанин
Регистрация: 16.05.2024
Сообщений: 200
|
![]()
>Не неоптимальный, а неверный
не-е, всё правильно работает. А насчёт массивов - наверное сначала отсортировать надо их. Но в этой задаче нет арифметических или математических операций, ни интенсивной работы с динамческой памятью, она для тестирования производительности не интересна. |
![]() |
![]() |
![]() |
#15 | ||
Старожил
Регистрация: 23.10.2010
Сообщений: 2,371
|
![]()
DeepFlake
Цитата:
![]() Цитата:
Математические операции - это сопроцессор. Тут что с чем сравнивать? Он у вас на компе один.
Как-то так, ...
|
||
![]() |
![]() |
![]() |
#16 |
Форумчанин
Регистрация: 16.05.2024
Сообщений: 200
|
![]()
Вот прототип программы для тестирования производительности работы с массивами на задаче, которую предложил ViktorR.
Задача такая: даны два множества, элементами множеств являются случайные целые числа, в каждом множестве элементы не повторяются. Множества представлены в машине в виде массива. Требуется определить является ли какое-либо множество (из этих двух) подмножеством другого. В реальной программе данные будут загружаться из файлов. Код:
|
![]() |
![]() |
![]() |
#17 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,371
|
![]()
Подготовить массивы можно так:
1. Формируем длинный массив из последовательно наращиваемых значений - арифметическая последовательность. Задаём размер массива, первый элемент, шаг. 2. Перемешиваем элементы массива случайным образом. Есть ли в вашем Паскале такая возможность? Если нет, то можно найти подходящий алгоритм в Сети. Тут, например: https://space-base.ru/library/algori...a-massiva-edit 3. Последовательно или с шагом выбираем элементы из первого массива для второго. 4. Перемешиваем элементы случайным образом. Поиск лучше оформить в виде функции, в которую, в виде параметров, передаются массивы в определённой последовательности. В этом случае код решения пишется один раз. Если оформить функцией, то вложенный цикл может быть иным. а) во вложенном цикле нашли подходящий элемент - break б) если сравнение выполняется для последнего элемента и нет совпадения, то return False: работа функции завершается в) После завершения внешнего цикла можно вернуть True: т.е. пишем код без использования флажков. PS: 1. Задача взята отсюда: https://www.geeksforgeeks.org/find-w...r-array-set-1/ 2. Создавать достаточно большой массив, хотя бы на 10 000 элементов, возможно будет сложно: какой Паскаль тут?. Другой путь - динамический массив, но есть ли готовая библиотека? Иначе код подрастёт ... 3. Описанный выше алгоритм предполагает, что второй массив подмножество первого. С точки зрения "подольше считал" это то самое. Но для тестов можно один элемент второго массива "поломать". Например, после изготовления второго массива последний элемент сделать заведомо большим всех элементов первого массива.
Как-то так, ...
|
![]() |
![]() |
![]() |
#18 |
Форумчанин
Регистрация: 16.05.2024
Сообщений: 200
|
![]()
to ViktorR:
Да, очень интересно, спасибо, учту. >Создавать достаточно большой массив, хотя бы на 10 000 элементов, возможно будет сложно: какой Паскаль тут?. Другой путь - динамический массив, но есть ли готовая библиотека? Иначе код подрастёт ... Я использую Free Pascal. Какая библиотека? >Поиск лучше оформить в виде функции, в которую, в виде параметров, передаются массивы в определённой последовательности. В этом случае код решения пишется один раз. А я специально не хочу использовать никакие функции. У меня задача - написать эквивалентные программы на разных языках. А если использовать вспомогательную функцию, то неизвестно как это отразится на машинном коде. Дело в том, что в разных языках массивы передаются, вообще говоря, по-разному. Вдруг в каком-нибудь языке для параметров-массивов используется дополнительное разыменование, и этот язык проиграет в тестировании на скорость. |
![]() |
![]() |
![]() |
#19 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]()
И т.к. вы используете GCC, LLVM, то получите один и тот же машинный код. Смысл ваших замеров?
Так это ж интересный вариант. Разные сборщики мусора с разными параметрами, анбоксинг и т.д. - т.е. реальные программы. |
![]() |
![]() |
![]() |
#20 |
Форумчанин
Регистрация: 16.05.2024
Сообщений: 200
|
![]()
>И т.к. вы используете GCC, LLVM, то получите один и тот же машинный код. Смысл ваших замеров?
6 языков: С++, Java, Free pascal, Go, Ada, Rust. Free Pascal, Go и Java не используют GCC и LLVM. GNU C++ сразу генерирует машинный код без промежуточного представления. хотя LTO использует (оптимизатор) >Так это ж интересный вариант. Разные сборщики мусора с разными параметрами, анбоксинг и т.д. - т.е. реальные программы. предложите алгоритм. сейчас я пытаюсь проверить на скорость только доступ к элементам массива. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Возможно ли доказать, что бывают скорости больше скорости света | 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 |