The OpenNET Project / Index page

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



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

Оглавление

Основанные на GCC проекты JIT-компилятора и расширения, испо..., opennews (??), 04-Окт-13, (0) [смотреть все]

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


21. "Основанные на GCC проекты JIT-компилятора и расширения, испо..."  +/
Сообщение от Аноним (-), 04-Окт-13, 08:39 
Вы вообще нихрена не понимаете. И гентушники тут ни о чем.

Что есть у гентушников для того чтобы, например, вгрузить шейдер в GPU, предварительно скомпилив его, ась? И да, драйверу GPU например несколько не комильфо стартовать новые процессы с компилером. Функцию библы позвать - еще куда ни шло. Ну а программа (OpenGL/OpenCL/...) не может заранее знать какой там у вас GPU и как под него шейдеры генерить. Поэтому все что оно может - попросить "а скомпильте мне это и запустите", ну а дальше уже драйвер и бэкэнд кодогенерации будут разбираться как "это" превратить в команды понимаемые "вон тем" GPU, который в системе есть.

Аналогично - везде где надо скрипты или байткод выполнять, они тормозят если их интерпретировать, т.к. полезная логика всегда сильно разбавлена логикой интерпретатора. А если все заранее в нативный машинный код перегнать и выполнять его - можно сочетать достоинства компиляторов и интерпретаторов. От интерпретаторов - не надо заранее знать какая платформа + нет видимой програмеру фазы компиляции под каждую конкретную платформу. От компиляторов - скорость выполнения типичная для компилированного кода. Просто фазу окончательной компиляции в нативный код снесли на юзеря. Это чем-то похожа на гентушников :))) но совсем не в том виде каком они себе это представляли.

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

64. "Основанные на GCC проекты JIT-компилятора и расширения,..."  +1 +/
Сообщение от arisu (ok), 04-Окт-13, 15:01 
> И да, драйверу GPU например несколько не комильфо стартовать новые процессы
> с компилером. Функцию библы позвать — еще куда ни шло.

действительно, то ли дело — прямо в драйвер вкорячить немеряных размеров библиотеку компилятора. это же так секурно, а память вообще экономит прямо влёт: пользователь же каждую наносекунду какой-нибудь шэйдер компилирует!

намного разумней как раз отдельные процессы, стандартизованый язык и универсальный способ вызова компилятора. и не нужно таскать с собой костыли: большинство софта будет вызывать оный компилятор при установке, заранее собирая шейдеры под GPU, который на борту. и оставшаяся небольшая часть — вызывать по мере необходимости. that's all, folks!

> Аналогично — везде где надо скрипты или байткод выполнять, они тормозят если
> их интерпретировать, т.к. полезная логика всегда сильно разбавлена логикой интерпретатора.
> А если все заранее в нативный машинный код перегнать и выполнять
> его — можно сочетать достоинства компиляторов и интерпретаторов. От интерпретаторов —
> не надо заранее знать какая платформа + нет видимой програмеру фазы
> компиляции под каждую конкретную платформу. От компиляторов — скорость выполнения типичная
> для компилированного кода. Просто фазу окончательной компиляции в нативный код снесли
> на юзеря. Это чем-то похожа на гентушников :))) но совсем не
> в том виде каком они себе это представляли.

а этот пассаж вообще офигительно смешон. сразу видно человека, который проблематику JIT-компиляторов для «динамических» языков не понимает вообще. максимум — что-то там слышал краем уха, и уверен, что AOT-компилятор завсегда лучше JIT в любой области. и что полновесный AOT-компилятор типа GCC — это такая мелочь, оверхэд от которой вообще не стоит упоминания.

ещё раз отправляю тебя внимательно смотреть на LuaJIT2. и на то, как происходит кодогенерация в GCC и сколько все его фазы весят (как в плане памяти, так и в плане скорости). это для начала.

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

72. "Основанные на GCC проекты JIT-компилятора и расширения,..."  +/
Сообщение от Vkni (ok), 04-Окт-13, 18:16 
> а память вообще экономит прямо влёт:
> пользователь же каждую наносекунду какой-нибудь шэйдер компилирует!

Меня, если честно, беспокоит вопрос времени - gcc -O2 значительно тормознее gcc -O0. Т.е. фаза оптимизации занимает очень существенное время. А JIT должен быть всё-таки достаточно быстр. Ну, либо придётся ограничиться предкомпиляцией с сохранением результатов (но это и есть вариант Gentoo).

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

73. "Основанные на GCC проекты JIT-компилятора и расширения,..."  +1 +/
Сообщение от arisu (ok), 04-Окт-13, 18:24 
да и памяти оно тоже кушает. при этом libjit — если выкинуть вливы — весит значительно меньше, работает сильно быстрее и выдаёт достаточно неплохой код. вдобавок имеет интерпретатор для архитектур, где нет кодогенерации.
Ответить | Правка | Наверх | Cообщить модератору

86. "Основанные на GCC проекты JIT-компилятора и расширения,..."  +/
Сообщение от Аноним (-), 05-Окт-13, 11:55 
> да и памяти оно тоже кушает.

В gcc 4.8 вроде как потребление памяти заметно скостили, правда там в основном на LTO вроде непирали.

> при этом libjit — если выкинуть вливы —

Гыгы, действительно, нафиг надо генерить код под GPU? Отдадим шлангу на откуп? :)

> весит значительно меньше, работает сильно быстрее и выдаёт достаточно
> неплохой код. вдобавок имеет интерпретатор для архитектур, где нет кодогенерации.

Звучит довольно вкусно.

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

89. "Основанные на GCC проекты JIT-компилятора и расширения,..."  +/
Сообщение от arisu (ok), 05-Окт-13, 12:06 
>> при этом libjit — если выкинуть вливы —
> Гыгы, действительно, нафиг надо генерить код под GPU?

jit-компилятором? однозначно не надо, jit-ы не для этого совсем придуманы.

>> весит значительно меньше, работает сильно быстрее и выдаёт достаточно
>> неплохой код. вдобавок имеет интерпретатор для архитектур, где нет кодогенерации.
> Звучит довольно вкусно.

оно ещё вкуснее, на самом деле, потому что на вход libjit'у подаётся почти классический SSA. то есть, распределением регистров, уничтожением лишних временных переменных и прочей «низкой» механикой занимается сама libjit. и это действительно удобно.

и ещё там есть плюшки для перекомпиляции уже раз отджитеной функции, при этом с поддержкой многопоточности. то есть, сам компилятор только в одном потоке может работать, но: пока мы упорно занимаемся перекомпиляцией, другие потоки спокойно используют старую версию функции. а потом libjit заменит её на новую. при этом позаботившись о том, чтобы ничего не упало и не сглючило, если какой-то другой поток в это время всё ещё находится в старом варианте.

«из коробки» оно умеет x86, x86_64 и arm. то есть, подавляющее большинство устройств, где может понадобиться, охвачено. да и создание нового бэкэнда не ракетная наука.

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

120. "Основанные на GCC проекты JIT-компилятора и расширения,..."  –1 +/
Сообщение от annulen (ok), 07-Окт-13, 18:37 
> «из коробки» оно умеет x86, x86_64 и arm.

Мда, и кто-то еще заикается про малое количество архитектур, поддерживаемых LLVM.

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

139. "Основанные на GCC проекты JIT-компилятора и расширения,..."  +/
Сообщение от Аноним (-), 10-Окт-13, 11:49 
> jit-компилятором? однозначно не надо, jit-ы не для этого совсем придуманы.

Оно достаточно близко по смыслу имхо - код для GPU генерится на лету, по ходу выполнения программы. Обычный компилер на такое дергать - полное извращение.

> спокойно используют старую версию функции. а потом libjit заменит её на
> новую. при этом позаботившись о том, чтобы ничего не упало и
> не сглючило, если какой-то другой поток в это время всё ещё
> находится в старом варианте.

Хорошо придумано, не отнять.

> «из коробки» оно умеет x86, x86_64 и arm. то есть, подавляющее большинство устройств,

А как насчет MIPS и PPC?

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

150. "Основанные на GCC проекты JIT-компилятора и расширения,..."  +/
Сообщение от arisu (ok), 10-Окт-13, 12:15 
>> jit-компилятором? однозначно не надо, jit-ы не для этого совсем придуманы.
> Оно достаточно близко по смыслу имхо — код для GPU генерится на
> лету, по ходу выполнения программы. Обычный компилер на такое дергать —
> полное извращение.

оно совершенно далеко и по смыслу, и по целям, и по требованиям. и вот ты как раз предлагаешь «дёргать обычный компилер», только через задницу.

> А как насчет MIPS и PPC?

они ждут своих героев. изначально libjit делаласть для DotGNU, чего там на мипсах ловить? но оно и ARM не умело тоже. потом научили. а MIPS и PPC пока никому не понадобились, видимо. научи — будет круто. иначе, как понимаешь — интерпретатор.

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

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

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




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

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