Низкая производительность компилятора GNU C ++ при сортировке вектора пар по сравнению с Intel

У меня в программе есть вектор пар, который мне нужно отсортировать. Что-то как:

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?).

0

Решение

Добавьте флаги -Ofast, чтобы включить почти все возможные флаги оптимизации g ++.

Да, -O2 / -O3 достаточно для этой проблемы. Дополнительную информацию о флагах g ++ для оптимизации смотрите здесь https://stackoverflow.com/a/3005673/1095974.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]