Страницы

Скорость пузырьковой сортировки на Oberon, C++, Go, Rust


Воспользовавшись тестом на производительность с форума oberspace, реализованного для разных языков, проверил свой транслятор. Тест представляет собой написанную в лоб пузырьковую сортировку.

Одним из преимуществ использования транслятора Оберона перед непосредственным написанием кода на C/C++ является лёгкая возможность добавления проверок границ массива и использования неинициализированных переменных. Современные компиляторы Си тоже не так просты и позволяют добавлять некоторые проверки (-fsanitize), впрочем, рассматриваемые авторами только как отладочная возможность. Сравним эти возможности.

Время работы с проверками границ массива
Язык:С++ vector.atС++ vector[]GoOberonRust
Опции компилятора:clang++ -O3-O3 -fsanitize=addressgo buildo7c | clang -O3rustc -O -C lto
Время сек.:1.411.081.840.540.52

Транслятор Оберона вставляет проверки с помощью стандартного для Си assert, поэтому для их отключения достаточно объявить макрос NDEBUG при компиляции.

Время работы без проверок границ массива
Язык:С++ vector[]OberonRust
Опции компилятора:clang++ -O3o7c | clang -DNDEBUG -O3rustc -opt-level=3 -C lto
Время сек.:0.530.470.52

Результаты забавные - программа на Обероне оказалась в 2-а раза быстрей С++ и лишь слегка уступила самому быстрому варианту на Rust для сортировки с проверкой границ, и оказалась самой быстрой для сортировки без проверки. С учётом того, что Оберон транслируется в Си, то это, по сути, победа Си. С той поправкой, что написание защищённой программы сразу на Си потребует от программиста бОльших усилий за счёт явного прописывания проверок и неизбежного допущения какого-то количества дополнительных ошибок при этом процессе.

Тестовая среда
OS:GNU/Linux Ubuntu 16.04
CPU:Intel i3-4160 3.60GHz
clang:3.5
go:1.6.2
rustc:1.7.0

4 комментария:

  1. Камрад, добрый совет. Увеличь время выполнения тестов для приличия, ну хотя бы раз в 20, штале :)

    ОтветитьУдалить
    Ответы
    1. Зачем ждать, если увеличение времени не меняет принципиальной картины? Соотношение по времени достаточно стабильное и при увеличении замеров на порядок и так.

      Удалить
    2. Дело хозяйское. Но, как там на счёт кэшей погреть, планировщику маленько подсказать, что этот процесс надо любить чуть сильнее?))

      Удалить
    3. Как я уже писал, картина от этого не менялась особо.

      Удалить