The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Реализация оптимизации для GCC, учитывающей связь между файлами сборки

21.11.2008 14:52

Разработчики компании Google представили начальную реализацию нового механизма оптимизации для набора компиляторов GCC - WHOPR (WHOle Program optimizeR). Традиционная реализация GCC оперирует только единичными файлами, компиляция которых производится независимо друг от друга, после чего производится связывание готовых объектных файлов в единый исполняемый файл. Данный подход имеет преимущество в том, что процесс сборки легко может быть распараллелен в несколько потоков, одновременно могут компилироваться несколько файлов. Но метод раздельной сборки имеет проблемы в плане оптимизации использования функций, которые, в случае определения в другом файле исходных текстов, не могут быть оптимизированы в зависимости от текущих условий их вызова.

Проект WHOPR реализует альтернативную схему LTO (Link-Time Optimization) оптимизации для GCC, не требующую в отличии от LTO больших объемов оперативной памяти для сборки, и пригодную для использования в больших проектах. WHOPR использует три фазы:

  1. При компиляции каждого файла, сохраняется промежуточное представление кода (GIMPLE). Связь между файлами на этом этапе не анализируется и сборка может происходить в несколько потоков, ничем не отличаясь от традиционной модели;
  2. После завершения сборки всех файлов, запускается процесс целостного анализа программы, который строит суммарные карты вызова функций, на основе сохраненных GIMPLE-дампов. Используя построенные карты, компилятор строит план проведения будущей оптимизации, определяя в каких местах имеет смысл проводить дополнительную оптимизацию.
  3. На основании подготовленных в предыдущих шагах данных, компилятор проводит логическую трансформацию (LTRANS), применяя ранее подготовленный для каждого файла план оптимизации. Логическая трансформация может производиться для каждого файла в параллельном режиме.


  1. Главная ссылка к новости (http://google-opensource.blogs...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/19027-gcc
Ключевые слова: gcc, lto, optimization, code, compile
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (16) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, sndev (?), 15:15, 21/11/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    useful
     
  • 1.2, pavlinux (ok), 15:23, 21/11/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что-то это напоминает :  

    1. этап
    # gcc -fprofile-generate -o hello hello.c
    2. этап
    # sh ./hello  

    3 этап
    # gcc -fprofile-use

    :)


    И в чём отличие?!


     
     
  • 2.3, const (??), 15:55, 21/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    На правах бреда:

    -fprofile-use не даёт возможности компилятору, например, подставить функцию из другого модуля в место вызова (inline) или "сократить" какие-нибудь ненужные параметры...

    LTO в общем виде позволяет это сделать. Например, так делают icc с ключиком -ipo и llvm. Делает ли подобные фокусы gcc с гуглевскими патчами - вопрос. Надо идти по ссылке ;)

     
     
  • 3.4, pavlinux (ok), 16:06, 21/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    extern inline int блах-блах-блах(){;}
     
     
  • 4.5, Алексей (??), 16:19, 21/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    И так для всех функций. Прогрессивный подход.
     
  • 4.6, const (??), 16:55, 21/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Правильно, в проекте куча хедеров и один main.c. Только вот тут как раз компилятору будет требоваться куча памяти, а в топике сказано, что вроде как от этого избавились.
     
     
  • 5.7, pavlinux (ok), 18:09, 21/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    А Вы пробовали Linpak для Cell собрать
    На самом дохлом Cell ( на 5.7GHz и 16Gb RAM) занимает около 12 часов.

    http://www.netlib.org/benchmark/hpl/IBM_README.txt
    > Note: the "make" takes a *long* time! (e.g. 12 hours)

    Сколько время займет на Google GCC, и возможно ли это вообще.  

     
     
  • 6.8, Алексей (??), 19:04, 21/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Ну возьмите и проверьте :) А то странное какое-то замечание. Вообще я подозреваю, что эту фичу лучше юзать для релизов, а при разработки собирать обычной версией GCC.
     
  • 6.9, const (??), 19:18, 21/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Может, это целл такой волшебный, но у меня на amd64 атлас-3.8 собирается 3 часа, а атлас-3.9 - полчаса. И у него там внутри свои очень суровые оптимизации, так что вряд ли от смены компилятора можно получить выигрыш.
     
     
  • 7.12, User294 (??), 21:27, 21/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    > Может, это целл такой волшебный

    Запросто - он как процессор приложений ничего такого крутого из себя не представляет.Если не используются SPE (а gcc когда-то умел ими пользоваться?) - ничего интересного Cell не продемонстрирует.Резонно слив обычным многоядерникам.А вот если софт SPE юзать будет - ну удачи его обогнать, ага.

     
     
  • 8.13, pavlinux (ok), 23:08, 21/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Обсобенно круть, когда пароли подбирает 8 потоков, да на 5 7GHz m Кстати,... текст свёрнут, показать
     
     
  • 9.14, vitek (??), 19:13, 22/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    а тут переделка софта не требуется -D поживём-увидим как только nvidia под... текст свёрнут, показать
     
     
  • 10.15, pavlinux (ok), 20:15, 22/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Да, но сколько стоит GF8800 и скока Целлка ... текст свёрнут, показать
     
  • 9.16, User294 (ok), 21:28, 22/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Да, какойнить MD5 на таком брутить - одно удовольствие и никакой 4-ядерник его п... текст свёрнут, показать
     
  • 2.17, izard (?), 05:47, 24/11/2008 [^] [^^] [^^^] [ответить]  
  • +/
    В терминах компилятора Интел - различие между IPO и PGO
     

  • 1.10, pavlinux (ok), 19:38, 21/11/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А где скачать-то, не найду никак....
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру