Ускорение времени компиляции и компоновки HipHop

После некоторой работы мне удалось запустить HipHop на моем сервере. Но по мере того, как я изучаю и отлаживаю процесс переноса моего кода во что-то, что хорошо работает с преобразователем HipHop, я обнаружил, что мне приходится часто перекомпилировать его... Тем не менее, создание моей кодовой базы из 130 файлов занимает более 10 минут. Это кажется необычно длинным в свете недавних сообщений в блоге Facebook об улучшении времени компиляции.

Кому-нибудь повезло улучшить время компиляции? Это может быть просто общее незнание аргумента, который мне не хватает... Я больше разбираюсь в PHP, чем в C++.

Информация из Facebook, а также моя команда и журналы приведены ниже.

Фейсбук

В сообщении в блоге Facebook они говорят, что могут довольно быстро скомпилировать огромный двоичный файл.

Помимо оптимизации скомпилированного кода, много усилий было потрачено на улучшение самого компилятора. Несколько фаз компилятора, включая синтаксический анализ, оптимизацию и генерацию кода, теперь распараллелены. Хайвс внес изменения в сгенерированный код C++, чтобы ускорить его компиляцию без потери эффективности во время выполнения. Мы можем собрать двоичный файл размером более 1 ГБ (после удаления отладочной информации) примерно за 15 минут с помощью distcc. Хотя более быстрая компиляция напрямую не способствует эффективности во время выполнения, она помогает улучшить процесс развертывания.

http://www.facebook.com/notes/facebook-engineering/hiphop-for-php-more-optimizations-for-efficient-servers/10150121348198920

Журнал компиляции

$HPHP_HOME/src/hphp/hphp --input-list=files.list -k 1 --log=3 --include-path="." -v "AllDynamic=true" -o /root/stocks_hphp/

running hphp...
creating temporary directory /tmp/hphp_h3vCKc ...
parsing inputs...

#parsing inputs took 0'00" (330 ms) wall time
pre-optimizing...
pre-optimizing took 0'00" (150 ms) wall time
inferring types...
inferring types took 0'00" (160 ms) wall time
post-optimizing...
post-optimizing took 0'00" (100 ms) wall time
creating CPP files...
creating CPP files took 0'00" (590 ms) wall time
saving code errors...
compiling and linking CPP files...

compiling and linking CPP files took 11'50" (710315 ms) wall time

person Nathan P    schedule 13.04.2011    source источник


Ответы (1)


Ответ прямо в цитате, которую вы процитировали:

Мы можем создать двоичный файл размером более 1 ГБ (после удаления отладочной информации) примерно за 15 минут с помощью distcc.

distcc — это распределенный компилятор. У них есть большой набор машин, которые они используют для параллельной компиляции. Вероятно, вы не получите такой же производительности на одном компьютере.

person Frank Farmer    schedule 13.04.2011
comment
А, это имеет смысл. Я видел эту ссылку и предположил, что это особая конфигурация или что-то в этом роде. Спасибо! Я научусь быть терпеливым со временем компиляции. - person Nathan P; 13.04.2011