У меня есть два алгоритма, написанных на С++. Насколько я знаю, обычным является компиляция с помощью -O0 -NDEBUG (g++) при сравнении производительности двух алгоритмов (асимптоматически они одинаковы). Но я думаю, что уровень оптимизации несправедлив по отношению к одному из них, потому что он использует STL в каждом случае. Программа, которая использует простой массив, превосходит алгоритм STL-heavy в 5 раз быстрее, скомпилированный с параметрами -O0. Но разница в производительности немного отличается при компиляции с -O2 -NDEBUG.
Есть ли способ получить наилучшее из STL (я получаю сильный удар производительности в vector []) на уровне оптимизации -O0?
Какой уровень оптимизации (и, возможно, переменные, такие как -NDEBUG) вы используете при сравнении двух алгоритмов?
Это также будет большой помощью, если кто-то может дать некоторое представление о тенденции в академических исследованиях относительно сопоставления производительности алгоритмов, написанных на С++?
EDIT:
Хорошо, Чтобы изолировать проблему уровня оптимизации, я использую один алгоритм, но теперь выполняю две разные реализации.
Я изменил одну из функций с необработанными указателями (int и boolean) на std::vector и std::vector... С -O0 -NDEBUG показатели - 5.46s (необработанный указатель) и 11.1s (std::vector). И с -O2 -NDEBUG, показатели 2.02s (необработанный указатель) и 2.21s (std::vector). Один и тот же алгоритм, одна реализация использует 4/5 динамических массивов int и boolean. А другой использует вместо этого std::vector и std::vector. Они одинаковы в каждом другом случае
Вы можете видеть, что в -O0 std::vector превосходит два раза быстрее указателей. В -O2 они почти одинаковы.
Но я действительно смущен, потому что в академических областях, когда они публикуют результаты алгоритмов во время работы, они скомпилируют программы с -O0.
Есть ли какие-то параметры компилятора, которые мне не хватает?