Автор Тема: Расширенный тест на производительность.  (Прочитано 43066 раз)

trurl

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #45 : Декабрь 01, 2016, 08:30:07 pm »
Так есть уже.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #46 : Декабрь 01, 2016, 08:34:36 pm »
Так есть уже.

На сях и с qsort? Где? В репозитории нет такого решения.
Y = λf.(λx.f (x x)) (λx.f (x x))

trurl

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #47 : Декабрь 01, 2016, 08:38:56 pm »
На плюсах с std::sort.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #48 : Декабрь 01, 2016, 08:41:38 pm »
На плюсах с std::sort.
Это разные языки и разные алгоритмы.
Y = λf.(λx.f (x x)) (λx.f (x x))

trurl

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #49 : Декабрь 01, 2016, 08:46:04 pm »
Языки разные но компилятор один. И алгоритм тот же.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #50 : Декабрь 01, 2016, 08:50:35 pm »
Языки разные но компилятор один. И алгоритм тот же.
Ну, тогда и у них и с Адой компилятор один и алгоритм тот же.

Ещё раз - проверять надо экспериментально. То есть я может и сам сишный вариант такой сделаю, но не прямо сейчас - сейчас занят настройкой тестирующей платформы, первые кое-какие результаты будут минут через 30.

Поэтому если что-то утверждаешь - подтверди кодом. Проверим экспериментально насколько похоже сишное с mmap+qsort будет на плюсовое mmap+std::sort. Всё остальное - это просто переливание из пустого в порожнее.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #51 : Декабрь 01, 2016, 09:18:33 pm »
Доступны первые результаты тестирования (пока это все на моем десктопе, но там тоже SSD и память тоже ограничивается как надо) в виде графика:
https://github.com/valexey/bigbench



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

Методика тестирования пока не совершенна, надо делать больше прогонов, добавить нормальную верификацию результатов и детектирование крашей.

Предложения по оформлению выдачи результатов (графики там и так далее) принимаются и ведению тестирования принимаются.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #52 : Декабрь 01, 2016, 10:50:27 pm »
Последний прогон показал, что c++ std::sort mmap решение падает с out of memory error на файле в 4Гб размером.

Также происходит что-то странное с file merge решением. Будем разбираться.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #53 : Декабрь 02, 2016, 01:44:19 am »
На 512 Мб и 2048 решение files metge отработало не верно. Завтра руками запущу и посмотрю дело в решении или же в тестовом окружении.
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #54 : Декабрь 02, 2016, 07:40:09 am »
Добавил оптимизированный по скорости вариант, на больших файлах показывает прирост ~2.5 раза, исходник увеличился в 3 раза.
- буферизированные ввод/вывод (некрасиво, но быстро)
- модифицировал сам алгоритм - меньше байт читается/пишется
- заиспользовап boost - можно без него, но будет больше кода

https://github.com/valexey/bigbench/blob/master/vlad/fast/sort.cpp

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #55 : Декабрь 02, 2016, 01:34:20 pm »
Итоги последнего прогона:
  • vlad fast - отработало быстрее всех, но вылетело с out of memory на файле в 1024 Мб (на всех других размерах отработало корректно)
  • mmap решение, как обычно вылетело с out of memory error на файле в 4096 Мб
  • merge file решение выдало неверный результат на размере 1024,
  • vlad simple решение работает медленно (сложность похоже квадратичная), но верно

Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #56 : Декабрь 02, 2016, 02:03:20 pm »
Вот в этих фазах, особенно в последней, смысла совсем не вижу.
Тут еще подумалось, вот в q есть встоенная функция, умеющая быстро сотрировать большие файлы. Если вдуг оказалось бы, что она быстрее всех представленных, как бы ее переписывалт буква в букву?
Если бы в q оказалась встроенная функция которая умела бы сортировать большие файлы, и эта функция была бы написана на самом q (т.е. входила бы с стандартную библиотеку, которая пишется на самом этом языке), то да остальные тоже реализовали бы такую функцию.

std::sort писан на С++, там нет никакой магии, а qsort писан на Си, и там магии тоже нет. Не вижу ни одной причины почему нельзя реализовать частные случаи (для целых чисел) на любом другом универсальном ЯП.

Если на вашем языке нельзя написать функцию сортировки, ну тогда я не знаю.. Наверно этот язык для этого теста действительно не подходит.
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #57 : Декабрь 02, 2016, 02:24:32 pm »
Итоги последнего прогона:
  • vlad fast - отработало быстрее всех, но вылетело с out of memory на файле в 1024 Мб (на всех других размерах отработало корректно)

Странно. Там есть линейная зависимость потребляемой памяти от размера файла, но совсем небольшая - порядка 2.5Mb на каждый Gb исходного файла. Возможно плюсовые потоки в какой-то момент отжирают сколько-то. Стек есть?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #58 : Декабрь 02, 2016, 02:28:46 pm »
Итоги последнего прогона:
  • vlad fast - отработало быстрее всех, но вылетело с out of memory на файле в 1024 Мб (на всех других размерах отработало корректно)

Странно. Там есть линейная зависимость потребляемой памяти от размера файла, но совсем небольшая - порядка 2.5Mb на каждый Gb исходного файла. Возможно плюсовые потоки в какой-то момент отжирают сколько-то. Стек есть?
Более странно, что на бОльших файлах оно отработало нормально. Никакой диагностической инфы больше нет пока что. Потом подробней гляну, может под gdb запущу.
Y = λf.(λx.f (x x)) (λx.f (x x))

trurl

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Расширенный тест на производительность.
« Ответ #59 : Декабрь 02, 2016, 04:58:41 pm »
Если на вашем языке нельзя написать функцию сортировки, ну тогда я не знаю..
Почему нельзя? Можно.
sort:{x: |:'(-1 4)#6: `input; `output 6: ,/|:'x[<x]}Только как это переписать на си :-\