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

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #30 : Сентябрь 15, 2016, 06:36:22 pm »
gcc на данном варианте тормоз, лучше щупать clang++.
Действительно, clang даёт результат 1.35
Выходит, что твой кросскомпилер Оберон->C более эффективен, чем компилятор Блекбокса? Тебе надо срочно перевести Блекбокс на твой компилятор ))) Всё русское оберон-сообщество тебе огромное спасибо скажет. Правда, не заплатит ни копейки )))
Ну, тут же нет проверки индексов!
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #31 : Сентябрь 16, 2016, 01:43:17 pm »
Выходит, что твой кросскомпилер Оберон->C более эффективен, чем компилятор Блекбокса? Тебе надо срочно перевести Блекбокс на твой компилятор ))) Всё русское оберон-сообщество тебе огромное спасибо скажет. Правда, не заплатит ни копейки )))
Ценю Ваш юмор.
Но если серьёзно, то, по-моему, лучше создать новую ОС-среду, полностью написанную сообществом и лишённую недостатков Блэкбокса.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #32 : Сентябрь 16, 2016, 04:55:23 pm »
Но если серьёзно, то, по-моему, лучше создать новую ОС-среду, полностью написанную сообществом и лишённую недостатков Блэкбокса.
Такой вариант уж точно не взлетит. Оберонщики и так уже разобщены кучей версий трансляторов, сред, ещё одна новая среда без библиотек и с несовместимым ни с кем транслятором -- этого никто не оценит...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #33 : Сентябрь 16, 2016, 08:53:19 pm »
Ну, тут же нет проверки индексов!
Как ни смешно, но не совсем правда. Поскольку транслируется  в Си, то проверка индексов может быть дана сишным компилятором.
Сейчас проверил с опциями -fsanitize=address -fsanitize=undefined.
gcc  2.5
clang 3.6

Выход за границы массива срабатывает.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #34 : Сентябрь 16, 2016, 08:55:25 pm »
Ну, тут же нет проверки индексов!
Как ни смешно, но не совсем правда. Поскольку транслируется  в Си, то проверка индексов может быть дана сишным компилятором.
Сейчас проверил с опциями -fsanitize=address -fsanitize=undefined.
gcc  2.5
clang 3.6

Выход за границы массива срабатывает.

Да, я знаю. Относительно недавняя фича в плане отлова UB в рантайме.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #35 : Сентябрь 17, 2016, 05:37:43 pm »
Попробовал в трёх браузерах выполнить оберон-жс вариант этого теста https://gist.github.com/valexey/e559764622f1b35ce9da799dbcc9e286
У файрфокса действительно какой-то аномально быстрый интерпретатор яваскрипта, скорость лучше чем у GCC и хаскеля:

Firefox 45.3.0 (Tor 6.0.4): 1.4 сек
Iron 52.0.2750.0 (на базе Chrome): 6.3 сек
Opera 12.18: 31 сек
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #36 : Сентябрь 17, 2016, 06:33:50 pm »
А если убрать вывод в с++? У меня при перенаправлении вывода в /dev/null время сокращалось раза в 3

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #37 : Сентябрь 17, 2016, 07:36:42 pm »
Проверил у себя на Blackbox 1.6. Собрать без проверок границ не получилось, но с проверкой получилось 3.35 секунд, что подозрительно, так как у меня все теcты, кроме этого, проходят медленней, чем у Алексея.

Процессор: Intel Core i3-4160
Вывод в консоль: отключён.

g++ -fsanitize=address -O3         : 1.6 сек
clang++ -fsanitize=address -O3 : 1.8 сек
Go                                                    : 1.8 сек
BlackBox                                         : 3.4 сек

Нет ли тут злого умысла  ;D?

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #38 : Сентябрь 17, 2016, 08:06:50 pm »
А если убрать вывод в с++? У меня при перенаправлении вывода в /dev/null время сокращалось раза в 3
Проверил с GCC -- разница всего в 11% (делал вывод в файл, а не в /dev/null).
На хаскелле практически не было разницы между выводом в файл и без вывода -- разница в пределах погрешности измерения.

c++ с выводом в файл: 1.6 сек
c++ без вывода в файл: 1.4 сек
хаскель с выводом в файл: 1.7 сек
хаскель без вывода в файл: 1.7 сек
« Последнее редактирование: Сентябрь 17, 2016, 08:10:59 pm от Geniepro »
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #39 : Сентябрь 17, 2016, 08:11:33 pm »
Проверил у себя на Blackbox 1.6. Собрать без проверок границ не получилось, но с проверкой получилось 3.35 секунд, что подозрительно, так как у меня все теcты, кроме этого, проходят медленней, чем у Алексея.

Процессор: Intel Core i3-4160
Вывод в консоль: отключён.

g++ -fsanitize=address -O3         : 1.6 сек
clang++ -fsanitize=address -O3 : 1.8 сек
Go                                                    : 1.8 сек
BlackBox                                         : 3.4 сек

Нет ли тут злого умысла  ;D?

Конечно есть! Я, как истинный злодей, запускал BB под Wine в линухе. Ну и система у меня 64битная. О чем и указал в ридмишке.

А какая конфигурация у тебя?
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #40 : Сентябрь 17, 2016, 08:15:56 pm »
Да, до кучи у меня ББ версии 1.7.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #41 : Сентябрь 17, 2016, 09:06:46 pm »
Ubuntu 16.04 64 bit
wine 1.6.2
Blackbox 1.6

Но в GNU/Linux 64 разрядной версии Blackbox - http://oberon.molpit.com/packs/bbcb_1.7~a1.8_amd64.deb у меня получился тот же результат.

Как выяснилось, вывод у меня тормозил из-за того, что я использую Terminator в качестве эмулятора терминала. В стандартном гномовском вывод не имеет весомой доли.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #42 : Сентябрь 17, 2016, 09:12:29 pm »
Ubuntu 16.04 64 bit
wine 1.6.2
Blackbox 1.6

Но в GNU/Linux 64 разрядной версии Blackbox - http://oberon.molpit.com/packs/bbcb_1.7~a1.8_amd64.deb у меня получился тот же результат.

Как выяснилось, вывод у меня тормозил из-за того, что я использую Terminator в качестве эмулятора терминала. В стандартном гномовском вывод не имеет весомой доли.

Дык ББ вроде 64битной версии не бывает. Компилятор не умеет 64бита делать. То есть один фиг бинарь исполняется 32битный.

Все тесты (кроме ББшного) тестируются как time ./program > /dev/null

Вообще же вывод сделан для того, чтобы:

1) Проверить алгоритм на корректность (и это, кстати, окупилось - одна окамловая версия гнала пургу из за моей невнимательности и незнания языка).

2) Чтобы шибко умный компилятор не выкинул цикл с рассчетом.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #43 : Сентябрь 17, 2016, 09:29:45 pm »
Тогда всё сходится. Без вывода остальные программы работают быстрей, не только в ББ.

clang (o7 -> c) - 0.49 сек
clang++ (cpp)  - 0.53 сек

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #44 : Сентябрь 17, 2016, 09:44:03 pm »
Тогда всё сходится. Без вывода остальные программы работают быстрей, не только в ББ.

clang (o7 -> c) - 0.49 сек
clang++ (cpp)  - 0.53 сек

Корректней это назвать "с выводом" с т.з. программы, просто вывод перенаправлен в /dev/null. Но программа то честно пишет в stdout и не в курсе, что можно было бы ничего не писать, ничего не считать, и никто этого не заметил бы :-)

Просто /dev/null это очень быстрое устройство вывода, в отличие от вывода на консоль например. Или вывода в обычный файл.
Y = λf.(λx.f (x x)) (λx.f (x x))