Разница между LLVM, GCC 4.2 и компилятором Apple LLVM 3.1

В чем основные различия между LLVM GCC 4.2 и Apple LLVM compiler 3.1?

Я новичок в компиляторах, поэтому приветствую любую помощь. Также меня особенно интересует, как два компилятора могут повлиять на производительность игры.


person SundayMonday    schedule 18.08.2012    source источник


Ответы (2)


Разница заключается как в технологии, так и в скорости.

CLANG был еще молод и имел ошибки, когда Apple начала переход от компилятора и инструментальной цепочки GCC, поэтому LLVM был построен как бэкэнд для GCC, чтобы облегчить его возможную замену. Итак, код вошел и был скомпилирован GCC в некую промежуточную форму, но был отправлен в LLVM для предоставления окончательного машинного кода и упаковки.

В конце концов, LLVM и особенно CLANG стали достаточно зрелыми, чтобы полностью заменить GCC, что обеспечило поразительный прирост скорости компиляции и повышение качества вывода машинного кода (хотя многие утверждают, что GCC по-прежнему производит код более высокого качества за счет скорости) .

Но чтобы решить вашу озабоченность по поводу производительности игры: хотя CLANG может обеспечить «лучший» опыт компиляции, производительность - это не задача компилятора. Хотя оптимизация и упрощения являются частью процесса компиляции, тот факт, что люди по-прежнему пишут медленные игры или создают бесконечные циклы, которые наносят ущерб стеку, показывает, что производительность - это ваша работа. Компилятор может делать только определенное количество операций, остальное зависит от вас. Тип или поставщик компилятора также не повлияют на вашу игру и не повлияют на частоту кадров или удобство использования. Вы должны прочитать об оптимизации нижнего уровня для архитектуры ARM. Несколько статей о NEON и instruments принесет вам гораздо больше пользы, чем изучение «оптимизации для компилятора».

person CodaFi    schedule 18.08.2012
comment
На самом деле все наоборот - LLVM-GCC использует интерфейс GCC, но генераторы кода LLVM. Когда проект LLVM стартовал, его целью было предоставить только генераторы внутреннего кода и другую инфраструктуру компилятора, но не полный компилятор C. Позднее Apple инициировала проект clang для создания полноценного компилятора поверх инфраструктуры LLVM. - person Sven; 19.08.2012
comment
Я не согласен с тем, что «производительность - это не задача компилятора». Производительность - это огромная часть того, что делает компилятор хорошим. В идеале пользователь должен иметь возможность просто писать читаемый, поддерживаемый код и полагаться на компилятор, чтобы сделать его быстрым. Clang - не самый зрелый компилятор и часто демонстрирует недостатки в производительности по сравнению с другими современными компиляторами. Иногда он также очень хорошо сравнивается, но чаще - нет. Большая сила Clang с точки зрения пользователя заключается в высоком качестве диагностики и соответствия. С точки зрения разработчика компилятора, с Clang очень легко работать, и он очень быстро распространяется. - person bames53; 19.08.2012
comment
@Sven Вы абсолютно правы, и я отредактировал, чтобы отразить это. @ barnes53: Я только сказал, что, хотя компиляторы действительно оптимизируют, они часто не делают ничего внутреннего без явных инструкций для этого. Прекрасным примером может служить старый fsel() PPC, который позволял функции отказываться от ветвления с возвратами с плавающей запятой. Компилятор не знал, как сворачивать ветки в fsel, вы должны были сказать ему об этом. Кроме того, он спросил о компиляторах, а не об отладчиках, поэтому я счел обсуждение LLDB неуместным. - person CodaFi; 19.08.2012

Еще одно отличие: Clang поддерживает большую часть C ++ 11. GCC 4.2-Apple не поддерживает C ++ 11.

person justin    schedule 18.08.2012