У меня в программе есть вектор пар, который мне нужно отсортировать. Что-то как:
std::vector<std::pair<int, uintmax_t> > temp;
...
std::sort(temp.begin(), temp.end());
Я провел некоторые измерения и обнаружил, что для вектора размером более 16M элементов сортировка занимает 3 секунды при компиляции с помощью компилятора Intel C ++ и 25 секунд при компиляции с помощью компилятора GNU C ++. Мне кажется, это очень большая разница (более чем в 8 раз медленнее при использовании GNU).
Знаете ли вы, как сделать эту программу быстрее с GNU C ++?
Моя конфигурация — Intel 12.1.5 и GNU 4.7.1. К сожалению, у меня нет прав суперпользователя на компьютере, который я использую для запуска программы.
Спасибо за помощь заранее,
Дэниел.
РЕДАКТИРОВАТЬ: Флаг оптимизации -O3 решил эту проблему, GNU C ++ теперь занимает от 3 до 4 секунд. Спасибо за подсказку, позор мне сам не разобрался :(. Так что, надеюсь, этот пост однажды кому-нибудь поможет :).
Просто для информации, я не указал какие-либо флаги оптимизации в своих измерениях (может быть, -O2 по умолчанию для Intel и GNU?).
Добавьте флаги -Ofast, чтобы включить почти все возможные флаги оптимизации g ++.
Да, -O2 / -O3 достаточно для этой проблемы. Дополнительную информацию о флагах g ++ для оптимизации смотрите здесь https://stackoverflow.com/a/3005673/1095974.
Других решений пока нет …