Время компиляции с clang в Linux против Mac OSX

#c #linux #macos #c 11

#c #linux #macos #c 11

Вопрос:

Я работаю над кроссплатформенным проектом с использованием C 11, Boost, Qt и некоторых небольших библиотек.

Тестируя сборку на Mac OSX, я понял, что clang занимает всего около 66% времени по сравнению с clang в Linux Mint 17 на той же машине. Отладочная сборка на основе Qmake (-j8) с теми же настройками.

Версии лишь немного отличаются:

  • Clang: 3.4
  • Повышение: 1.55.0
  • Qt: 5.3 против 5.2.1

Переход на libc в Linux также не имел никакого значения.

Откуда такая огромная разница во времени компиляции?
Могу ли я достичь такой же скорости в Linux?

Комментарии:

1. Как был скомпилирован сам clang?

2. Я использовал тот, который был отправлен с помощью XCode на Mac, и тот, который был получен из репозиториев в Linux, так что с моей стороны ничего особенного. Я бы предположил, что они отправляют оптимизированные версии?

3. Вы измеряете прогоны qmake или прогоны clang? Как вы измеряете?

4. Просто общее время, так что time make -j8

Ответ №1:

В OS X Clang всегда встроен 64-разрядный AMD64, но может быть 32-разрядным x86 в зависимости от вашей сборки Mint. 64-разрядная версия по сравнению с 32-разрядной может определенно повлиять на производительность компилятора.

Комментарии:

1. В Linux Mint я получаю get для clang --version : Target: x86_64-pc-linux-gnu

2. @MikeM Используется file /path/to/clang для просмотра архитектуры, в которой он построен, а не цели, которую он создает.

3. @MikeM Вы также можете попробовать удалить -j8 из make, чтобы устранить возможные различия в отправке процессов между операционными системами.

4. @trojanfoe Извините, я не видел цель… это /usr/bin/clang . @eightycc Есть ли другая возможность параллельной компиляции, если я удаляюсь -j8 ?

5. @MikeM Я думаю, что это именно цель: не компилировать параллельно. Это устраняет возможные различия в расписании ОС, как сказал eightycc. Но есть много других возможных причин, связанных с ОС (например, управление памятью, если ваш код достаточно большой, чтобы требовать много памяти). Если вам не очень повезет, я бы подумал, что будет очень сложно определить точную причину.