The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Пример использования средств JIT-компиляции, появившихся в G..., opennews (ok), 08-Апр-15, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


23. "Пример использования средств JIT-компиляции, появившихся в G..."  +/
Сообщение от freehckemail (ok), 08-Апр-15, 22:18 
> динамическая оптимизация программы с учетом текущего профиля выполнения (JVM);

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

24. "Пример использования средств JIT-компиляции, появившихся в G..."  +/
Сообщение от Tav (ok), 08-Апр-15, 23:00 
> Ну, это скорее её недостаток. Ей ведь надо балансировать между скоростью запуска и скоростью работы, вот и выкручиваются, как могут.

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

31. "Пример использования средств JIT-компиляции, появившихся в G..."  +/
Сообщение от Анончег (?), 09-Апр-15, 01:33 
> В чем суть отличий "того же вида" от не того?

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

Ответить | Правка | Наверх | Cообщить модератору

40. "Пример использования средств JIT-компиляции, появившихся в G..."  +/
Сообщение от freehckemail (ok), 09-Апр-15, 07:03 
>> Ну, это скорее её недостаток. Ей ведь надо балансировать между скоростью запуска и скоростью работы, вот и выкручиваются, как могут.
> На серверах, где программа перезапускается редко и работает долго, это не проблема.

А у программ скомпилированных "до конца", такой проблемы нет.

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

Суть в том, что от проектов LLVM и JVM то и дело слышны возгласы, что мол проекты позволяют достигнуть производительности компилируемых языков, и что производительность их за так сильно возросла именно за счёт JIT. Надо понимать, что JIT всё-таки хоть и может привести к повышению производительности, но вообще говоря не для неё создан, ибо "до конца" с компилированные программы по-любому дадут более оптимизированный код.

А вот что касается возможности генерации кода на лету - то это действительно очень востребовано. Во-первых любой REPL[1] на этом основан, во-вторых - очень удобно генерировать функцию на лету и возвращать её в качестве результата работы другой функции. "Да и вообще, какой смысл писать программу, которая даже не умеет модифицировать свой код?" [2]

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

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

[1] https://ru.wikipedia.org/wiki/REPL
[2] http://jim.pp.ru/chtivo/prosa/porgrammerstory.htm

Ответить | Правка | К родителю #24 | Наверх | Cообщить модератору

46. "Пример использования средств JIT-компиляции, появившихся в G..."  –1 +/
Сообщение от Tav (ok), 10-Апр-15, 18:13 
> Суть в том, что от проектов LLVM и JVM то и дело слышны возгласы...

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

47. "Пример использования средств JIT-компиляции, появившихся в G..."  +/
Сообщение от freehckemail (ok), 22-Июн-15, 15:26 
>> Суть в том, что от проектов LLVM и JVM то и дело слышны возгласы...
> Ну это не технические отличия, а вопрос позиционирования.
> И на самом деле, производительность можно улучшить за счет JIT. Например, JIT
> позволяет вызывать напрямую или даже встраивать полиморфные вызовы, если во время
> выполнения оказывается, что используется только одна реализация (может зависеть от входных
> данных — оптимизировать статически не получится).

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

Если бы Вас не затруднило предоставить примеры, где подобный подход действительно применяется и даёт выигрыш - было бы здорово.

К тому же, не стоит забывать, что такой подход подразумевает возрастающие накладные расходы для постоянного анализа входных данных, чтобы отловить случай, когда они перестанут удовлетворять выбранной по умолчанию реализации. Об этом в частности свидетельствует Ваша ссылка[1]. Окупятся ли данные расходы за счёт JIT - тоже нетривиальный вопрос.

Итого мы стоим лицом к лицу со многими неочевидными вопросами и сомнительным выигрышем в производительности. Собственно, для меня это и является причиной считать LLVM и JVM - не правильной вещью.

[1] https://wikis.oracle.com/display/HotSpotInternals/Performanc...

PS: Извиняюсь за столь длительную задержку с ответом -- меня выбила из колеи магистерская диссертация. Если у Вас будет желание, мы могли бы продолжить дискуссию по email.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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