General Category > Общий раздел

Расширенный тест на производительность.

(1/41) > >>

valexey_u:
Ну, простые тесты на производительность уже были, это уже скучно. Теперь давайте что-то более сложное, что-то более приближенное к реальности.

Если на некотором ЯП результаты этого теста будут очень плохи, значит скорее всего на этом ЯП и ядро СУБД нормально реализовать не получится (либо это потребует очень больших усилий). Т.е. этот тест для, так называемых, ЯП претендующих на звание системных. По сути, тест на профпригодность ЯП на звание системного.

Итак задача:

Есть файл input в нем содержится массив целых беззнаковых 32битных чисел (ака uint32_t) в бинарном little endian виде. После завершения выполения приложения, должен быть файл output где в том же формате был бы записан отсортированный по возрастанию этот массив.

Теперь детали:

* На машине 128 Мб памяти (и нет свопа).
* Файл большой - в ОЗУ точно не поместится
* На диске есть место для временных файлов
* Операционная система - скорее всего какой-то *nix.
* Диск SSD, не HDD
* Машина скорее всего 64битная, но может быть и 32битной
* Машина двуядерная
Теперь следствия нюансов:
Решение может быть реализовано под наиболее вероятную конфигурацию машины (64 bit'ный *nix). Но возможность писать кроссплатформенно также ценится, поэтому будет две номинации:

* Самое быстрое решение
* Самое быстрое кроссплатформенное решение
В данном случае кроссплатформенность означает, что программа должна собираться и работать как минимум под *nix и windows (в крайнем случае - под linux и windows).

Теперь про сборку: должна быть возможность собирать программу автоматически, то есть из bash/bat-скрипта либо через makefile. Если программа кроссплатформенная, то она должна под обоими платформами собираться без правки исходников руками, то есть тоже просто запуском скрипта/make. Естественно при этом на систему можно руками поставить весь, необходимый для сборки, дополнительный софт.

При тестировании программа будет запущена пять раз, первые два запуска в зачет не идут. Время трех последнийх запусков усредняется.

Этапы
Поскольку задача сложнее обычных тестов, и не очевидно какой алгоритм тут будет самый лучший, и какое решение самое замечательное (т.е. задача требует исследований и тестов), проходить всё будет в три этапа (на каждом этапе свои победители):

* Первый этап - на этом этапе каждый делает на своем любимом ЯП как может и как хочет. Любые алгоритмы, любые реализации, любые идеи. По итогам первого этапа выбираем самый быстрый алгоритм/идею.
* Второй этап - реализуем на разных ЯП (ну или разными руками на том же ЯП - без разницы) тот алгоритм и идею, что победила на первом этапе. Тут не обязательно соответствие буква к букве, просто берем за основу идею победителя и пытаемся её реализовать самостоятельно. По итогам этого этапа выбираем самую быструю реализацию реализацию идеи.
* Третий этап - берем самую быструю реализацию из второго этапа и пытаемся её воспроизвести на своем ЯП дословно, т.е. максимально близко к оригиналу. В идеале - буква к букве, настолько, насколько это возможно
Задача не проста, поэтому я не ожидаю что будет много решений, но надеюсь хотя бы на 2-3 участников. Для тестирования я выделю отдельную машину и буду там прогонять все решения раз или два раза в неделю (полный прогон тестов длится долго) в автоматическом режиме.

PS. У меня пока есть кривенькое решение на C++. Максимум что я еще смогу самостоятельно реализовать - ocaml и go. При этом за OCaml я не поручусь.
PPS. Правила проведения тестов вероятно будут дополняться.

UPD: Исходники решений слать и смотреть можно тут: https://github.com/valexey/bigbench
Правила засылки исходники такие:

Делаем бранч репозитория

Создаем папку со своим username or nickname, в ней подкаталог с названием решения (вдруг у будет несколько вариантов и захочется протестить их все), а в нём, кроме исходников, либо makefile либо build.sh чтобы собрать решение можно было в автоматическом режиме.

Затем засылаем пулреквестом в этот репозиторий: https://github.com/valexey/bigbench

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

UPD 2: Текущие результаты (картинка обновляется при каждом прогоне тестов):

valexey_u:
Дополнение: решения будем складировать на github'e (создам для этого репозиторий), добавлять решения можно будет через пулреквесты. Тестирующая машина(машины) оттуда будут забирать периодически исходники и выкладывать результаты.

Таким образом смогут поучаствовать и те, кто на данном форуме не общается.

valexey_u:
Да, а для таких ЯП и сред, как AO и BB нужно что-то придумать с автоматической сборкой консольных stand alone приложений (собственно там stdin/out и не нужны, программа тут ведь работает только с файлами).

vlad:

--- Цитата: valexey_u от Ноябрь 28, 2016, 02:03:47 pm ---Да, а для таких ЯП и сред, как AO и BB нужно что-то придумать с автоматической сборкой консольных stand alone приложений (собственно там stdin/out и не нужны, программа тут ведь работает только с файлами).

--- Конец цитаты ---

Это само по себе задача покруче оригинальной :) Оберонщики не поймут. Хотя може Zorko смогет...

Kemet:
можно ли перезаписывать исходный файл?

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии