The OpenNET Project / Index page

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

08.04.2015 20:01  Пример использования средств JIT-компиляции, появившихся в GCC 5

Разработчики из компании Red Hat опубликовали интересную заметку с примером использования библиотеки libgccjit, которая входит в состав набора компиляторов GCC 5, релиз которого ожидается через несколько недель. В GCC 5 генератор кода может быть собран в виде разделяемой библиотеки, встроен в другие процессы и использован для упреждающей AOT-компиляции (Ahead-of-time) или JIT-компиляции байткода в машинный код. В заметке показано как построить компилятор для гипотетического языка программирования, используя Python-биндинг к libgccjit для JIT-компиляции кода в Python-скрипте.

  1. Главная ссылка к новости (http://developerblog.redhat.co...)
Лицензия: CC-BY
Тип: английский / Практикум
Ключевые слова: gcc, jit
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.1, nc (ok), 20:09, 08/04/2015 [ответить] [показать ветку] [···]    [к модератору]
  • +3 +/
    Компиляторы из промежуточного представления в бинарное имеют смысл при инсталляции кроссплатформенных программ из единого источника на разные аппаратные платформы. Это то что гугл сделал в виде art. А JIT как компиляция каждый раз при запуске программы - а нафиг это нужно?
     
     
  • 2.2, A.Stahl (ok), 20:21, 08/04/2015 [^] [ответить]    [к модератору]
  • –5 +/
    Писать скрипты в сишном коде не на lua или, избавь Ктулху, на JavaScript, а на Си.
    Звучит офигительно.
     
     
  • 3.3, Аноним (-), 20:25, 08/04/2015 [^] [ответить]    [к модератору]
  • +5 +/
    Что-то я не вижу ничего хорошего в скриптах на Си.
    Если же вы думаете, что это поднимет средний уровень скриптов, то я скорее предположу, что это понизит средний уровень программистов на Си.
     
     
  • 4.4, A.Stahl (ok), 20:28, 08/04/2015 [^] [ответить]    [к модератору]
  • +/
    Есть программа на Си. Нужно в ней что-то скриптовое. Разумеется лучше чтобы этот скрипт будет написан на Си, чем сишник будет ещё разбираться с lua или ещё чем похуже.
     
     
  • 5.6, Сергей (??), 20:44, 08/04/2015 [^] [ответить]    [к модератору]
  • +/
    Какой кусок кода в гипотетической, но уже написанной C-шной программе "разумеется лучше" не компилировать для конечного использования?
     
     
  • 6.10, A.Stahl (ok), 20:49, 08/04/2015 [^] [ответить]    [к модератору]  
  • –1 +/
    Скриптовый. Т.е. часто изменяемый. Возможно даже пользователем.
     
     
  • 7.14, Сергей (??), 20:53, 08/04/2015 [^] [ответить]    [к модератору]  
  • +2 +/
    Пользоветель скорее умрет, но попросит сделать поддержку LUA вместо С.
     
  • 7.15, Сергей (??), 20:54, 08/04/2015 [^] [ответить]    [к модератору]  
  • –1 +/
    "Частоизменяемый" не проблема компилировать при разработке.
     
     
  • 8.19, Вулх (?), 21:09, 08/04/2015 [^] [ответить]    [к модератору]  
  • +/
    В том то и дело, что изменяемый при эксплуатации, а не при разработке.
     
     
  • 9.34, Сергей (??), 03:21, 09/04/2015 [^] [ответить]    [к модератору]  
  • +/
    Смотри пост 7.14
     
  • 5.7, Сергей (??), 20:46, 08/04/2015 [^] [ответить]    [к модератору]  
  • +/
    Чем лучше писать скрипты на C по сравнению с LUA?
     
     
  • 6.11, A.Stahl (ok), 20:50, 08/04/2015 [^] [ответить]    [к модератору]  
  • –1 +/
    > Чем лучше писать скрипты на C по сравнению с LUA?

    Тем, что зная Си ты уже автоматичемски знаешь Си. Круто, да?
    А вот знание Си никак не обеспечивает знание Lua.
    :)


     
     
  • 7.17, Сергей (??), 20:58, 08/04/2015 [^] [ответить]    [к модератору]  
  • +6 +/
    Знание C/C++/Tcl/BASH мне тут же обеспечило знание LUA. Попробуй под пытками заставить человека, знающего только LUA,Tcl и BASH хоть что-то написать на C/C++ -- человек погибнет. ;-)
     
  • 7.37, Vkni (ok), 06:09, 09/04/2015 [^] [ответить]    [к модератору]  
  • +/
    > Тем, что зная Си ты уже автоматичемски знаешь Си. Круто, да?
    > А вот знание Си никак не обеспечивает знание Lua.
    > :)

    Все знают Бейсик, но это же не повод писать на нём абсолютно всё.

     
     
  • 8.42, cmp (ok), 08:45, 09/04/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    да ну
     
  • 5.9, Аноним (-), 20:48, 08/04/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    Обычно что-то скриптовое в программе нужно для расширения функциональности пользователем, а не программистом.
     
     
  • 6.43, cmp (ok), 08:56, 09/04/2015 [^] [ответить]     [к модератору]  
  • +/
    О чем речь, если оно поддерживает си, то и луа автоматом, кому надо луа пусть ег... весь текст скрыт [показать]
     
  • 5.12, Сергей (??), 20:52, 08/04/2015 [^] [ответить]     [к модератору]  
  • +2 +/
    Я всего один раз написал на LUA, но с полпинка небольшой скрипт без предваритель... весь текст скрыт [показать]
     
  • 3.8, Аноним (-), 20:47, 08/04/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    Lua божественнен. Один из самых шустрых скриптовых языков, очень малые затраты на выполнение и встаривание.  
     
     
  • 4.13, A.Stahl (ok), 20:52, 08/04/2015 [^] [ответить]    [к модератору]  
  • –1 +/
    Ну никто и не утверждает обратного.
    Но сишникам приятней будет использовать Си уже потому, что он Си. На родном языке всегда проще.
     
     
  • 5.16, Аноним (-), 20:56, 08/04/2015 [^] [ответить]    [к модератору]  
  • +/
    Проще что?

    На самолёте проще чем на троллейбусе.

     
     
  • 6.18, A.Stahl (ok), 21:04, 08/04/2015 [^] [ответить]    [к модератору]  
  • –1 +/
    >Проще что?

    всё

     
     
  • 7.45, arisu (ok), 17:57, 09/04/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    >>Проще что?
    > всё

    хэш‐таблицы, например. куда уж несчастным скриптовикам до няшности и удобства использования хэш‐таблиц в си…

     
  • 5.26, Crazy Alex (ok), 00:03, 09/04/2015 [^] [ответить]     [к модератору]  
  • +/
    Для скриптовых нужд у C уж больно слабо в плане синтаксиса и высокоуровневых кон... весь текст скрыт [показать]
     
     
  • 6.28, Led (ok), 00:05, 09/04/2015 [^] [ответить]    [к модератору]  
  • –3 +/
    > Для скриптовых нужд у C уж больно слабо в плане синтаксиса и
    > высокоуровневых конструкций.

    Начал "за здравие"...

    > Вообще - для скриптов есть питон.

    ... а закончил "за упокой".

     
     
  • 7.33, Crazy Alex (ok), 02:34, 09/04/2015 [^] [ответить]     [к модератору]  
  • +/
    И в чём проблема Для скриптов нужно что-то, где, как минимум, можно автоматом у... весь текст скрыт [показать]
     
  • 6.30, Анончег (?), 01:29, 09/04/2015 [^] [ответить]    [к модератору]  
  • –1 +/
    >... [b]На плюсах - тоже можно[/b] хотя бы сделать по-человечески, спрятав всё управление временем жизни, ресурсами, памятью. [b]Хотя, конечно, скорость компиляции[/b] ...

    Precompiled Headers ?! Нет, не слышал.

    https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html

     
     
  • 7.32, Crazy Alex (ok), 02:29, 09/04/2015 [^] [ответить]    [к модератору]  
  • +/
    Их хватает, чтобы компиляция не занимала вечность, но не для того, чтобы компилировать плюсы на лету.
     
  • 6.38, Vkni (ok), 06:11, 09/04/2015 [^] [ответить]    [к модератору]  
  • –1 +/
    > На плюсах - тоже можно хотя бы сделать по-человечески

    Нельзя.

     
  • 5.35, Сергей (??), 03:25, 09/04/2015 [^] [ответить]    [к модератору]  
  • +3 +/
    > На родном языке всегда проще.

    Запатентуй компилятор мата -- обогатишься. ;-)

     
  • 3.44, Аноним (-), 11:34, 09/04/2015 [^] [ответить]     [к модератору]  
  • –1 +/
    Вообще-то, libgccjit - это всего лишь backend, т е генератор машинного кода А ... весь текст скрыт [показать]
     
  • 2.5, Tav (ok), 20:30, 08/04/2015 [^] [ответить]    [к модератору]  
  • +4 +/
    Для разного нужно:
    - динамическая оптимизация программы с учетом текущего профиля выполнения (JVM);
    - модификация программы во время выполнения (Лисп, Смолток и др.);
    - предметно-ориентированные языки, являющиеся частью интерфейса пользователя.
     
     
  • 3.23, freehck (ok), 22:18, 08/04/2015 [^] [ответить]    [к модератору]  
  • +/
    > динамическая оптимизация программы с учетом текущего профиля выполнения (JVM);

    Ну, это скорее её недостаток. Ей ведь надо балансировать между скоростью запуска и скоростью работы, вот и выкручиваются, как могут.

    > модификация программы во время выполнения (Лисп, Смолток и др.);

    Вот. Именно для этого JIT и нужен в первую очередь. Но упаси боже, не в том же виде, в каком предлагают его LLVM и JVM.

    > предметно-ориентированные языки, являющиеся частью интерфейса пользователя.

    А вот тут я бы попросил объяснить, что имеется в виду.

     
     
  • 4.24, Tav (ok), 23:00, 08/04/2015 [^] [ответить]    [к модератору]  
  • +/
    > Ну, это скорее её недостаток. Ей ведь надо балансировать между скоростью запуска и скоростью работы, вот и выкручиваются, как могут.

    На серверах, где программа перезапускается редко и работает долго, это не проблема.

    > Но упаси боже, не в том же виде, в каком предлагают его LLVM и JVM.

    В чем суть отличий "того же вида" от не того?

    > А вот тут я бы попросил объяснить, что имеется в виду.

    Различные системы, предоставляющие пользователю специализированный язык для решения его задач: Маткады всякие, статистические пакеты типа R или Incanter, шеллы, приложения с поддержкой макрокоманд, мало ли что еще. JIT в них не всегда оправдан, но бывают случаи, когда объем вычислений значителен и JIT окупается.

     
     
  • 5.31, Анончег (?), 01:33, 09/04/2015 [^] [ответить]    [к модератору]  
  • +/
    > В чем суть отличий "того же вида" от не того?

    Да, да, поддерживаю, пускай расскажет нам про "Ъ-виды" и "НЕ-Ъ-виды".

     
  • 5.40, freehck (ok), 07:03, 09/04/2015 [^] [ответить]     [к модератору]  
  • +/
    А у программ скомпилированных до конца , такой проблемы нет Суть в том, что от... весь текст скрыт [показать]
     
     
  • 6.46, Tav (ok), 18:13, 10/04/2015 [^] [ответить]    [к модератору]  
  • –1 +/
    > Суть в том, что от проектов LLVM и JVM то и дело слышны возгласы...

    Ну это не технические отличия, а вопрос позиционирования.

    И на самом деле, производительность можно улучшить за счет JIT. Например, JIT позволяет вызывать напрямую или даже встраивать полиморфные вызовы, если во время выполнения оказывается, что используется только одна реализация (может зависеть от входных данных — оптимизировать статически не получится). А встраивание делает возможными дальнейшие оптимизации. Если что-то меняется, что может нарушить сделанные допущения, оптимизация отменяется. Обзор оптимизаций, которые выполняет HotSpot: https://wikis.oracle.com/display/HotSpotInternals/PerformanceTechniques

    Но возможность динамически менять код — более важное применение, с этим согласен.

    > Ну, это всё же частные случаи второго пункта, про модификацию программы во время выполнения.

    Можно считать и так. Выделил отдельно, чтобы обратить внимание на то, что технология может быть непосредственно полезна не только разработчикам, но и конечным пользователям.

     
     
  • 7.47, freehck (ok), 15:26, 22/06/2015 [^] [ответить]     [к модератору]  
  • +/
    Да, это может дать прирост производительности Однако я не очень представляю, ка... весь текст скрыт [показать]
     
  • 2.21, Аноним (-), 21:43, 08/04/2015 [^] [ответить]    [к модератору]  
  • +/
    > А JIT как компиляция каждый раз при запуске программы - а нафиг это нужно?

    Как-то так шейдеры в GPU вгружают например. Хотя иногда скомпиленое и кэшируют.

     
  • 2.22, КарМер (?), 22:17, 08/04/2015 [^] [ответить]    [к модератору]  
  • +/
    "Разные аппаратные платформы " - это и разное число ядер, в том числе ...
     
     
  • 3.29, Crazy Alex (ok), 00:07, 09/04/2015 [^] [ответить]    [к модератору]  
  • +/
    Тогда не JIT,  а просто сборка на клиенте. Но вообще-то разное число ядер в коде спокойно обрабатывается. Пул потоков, очередь заданий,да и всё
     
  • 2.25, Qld (?), 23:38, 08/04/2015 [^] [ответить]    [к модератору]  
  • –1 +/
    JIT-компиляция может учесть все экстенжены текущего процессора, что приведет к заметному бусту высоко нагруженных длительных вычислений.
     
     
  • 3.27, Crazy Alex (ok), 00:05, 09/04/2015 [^] [ответить]    [к модератору]  
  • +/
    Так здесь не JIT,  а вполне себе нормальная AOT-компиляция нужна - при первом запуске собрал (или до него - привет Гента), закешировал и пусть лежит.
     
  • 1.20, Аноним (-), 21:28, 08/04/2015 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    >библиотеки libgccjit, которая входит в состав набора компиляторов GCC 5, релиз которого ожидается через несколько недель

    GCC 5 начинает догонять старые версии LLVM :)

     
     
  • 2.36, MaMoHT (?), 05:05, 09/04/2015 [^] [ответить]    [к модератору]  
  • +4 +/
    > GCC 5 начинает догонять старые версии LLVM :)

    Забавность ситуации заключается в том, что у gcc намного более богатые возможности по расширению - от легкого расширения ast дерева (в llvm это можно сделать только на  интринсиках) до распараллеливания на GPU "из коробки". И открыв функциональность по jit они не догоняют "старые версии llvm" а уходят в далекий-предалекий отрыв. Порог вхождения в gcc выше, и новичку намного легче написать frontend на llvm, но когда узнаешь все возможности gcc, то llvm перестает казаться даже адекватной альтернативой.

    Однако это не умаляет достоинства llvm, они дали очень хороший "пинок" для развития gcc. Конкуренция это всегда хорошо. И может быть они когда нибудь догонят gcc по возможностям...

     
     
  • 3.41, freehck (ok), 07:09, 09/04/2015 [^] [ответить]    [к модератору]  
  • +1 +/
    > Однако это не умаляет достоинства llvm, они дали очень хороший "пинок" для
    > развития gcc. Конкуренция это всегда хорошо. И может быть они когда
    > нибудь догонят gcc по возможностям...

    Это вряд ли. Они ведь компилируются только в одну архитектуру, а потом на лету пытаются перекомпилироваться в машинные коды. Трижды ха. Это конечно определённо даёт фору в реализации новых стандартов ЯП, но жутко демпингует их по качеству сгенерированного кода. JIT относительно хорош для многих вещей, но не для оптимизации же.

    Однако конкуренция - таки да, это хорошо.

     

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


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