The OpenNET Project / Index page

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



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

Оглавление

Для Python предложен JIT-компилятор, использующий технику copy-and-patch, opennews (??), 26-Дек-23, (0) [смотреть все]

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


6. "Для Python предложен JIT-компилятор, использующий технику co..."  +7 +/
Сообщение от Аноним (6), 26-Дек-23, 14:55 
>При работе JIT в процессе выполнения программы осуществляется перебор созданных интерпретатором инструкций байткода и копирование для каждой инструкции заранее скомпилированного машинного кода в область памяти с исполняемым кодом, а также изменение на лету инструкций для подстановки в них обрабатываемых данных (JIT копирует готовые шаблоны уже скомпилированных функций и подставляет в них необходимые значения, такие как аргументы и константы). При загрузке объектных файлов также осуществляется копирование машинного кода в память и подстановка внешних символов.

Стековая машина что-ли? Я писал jit-компищятор на основе техники copy and patch. Было quick and dirty. Кончилось тем, что я это выкинул и написал x86-специфичный аллокатор регистров + энкодер инструкций (constexpr функции!) + constant size структуру для хранения инструкций + двухпроходный компилятор + кучу кода в inline assembly для интеграции отжитенного кода в остальную программу - все функции, вызываемые из горячего цикла пришлось в виде ассемблера в программу всунуть.

Пoтому что сишный и плюсовый код норовили заюзать регистры, которые я заюзал в jitе, зарезервировать их оказалось невозможно ни в gcc, ни в шланге (register type varName asm ("regName") не резервирует регистр!), сохранять на стеке перед каждым вызовом ВСЕ РЕГИСТРЫ (потому что компиляторы не имеют интерфейса, чтобы им сообщить свою calling convention для каждой функции и/или блока кода отдельно) ОЧЕНЬ тормознуто, при этом компилеро-сгенерированный код (по подстановкам в asm-блоках, не буду же я регистры напрямую юзать, это неудобно) не гнушался портить %rbp, поэтому пришлось всунуть его в clobber-list, теперь компилер орёт, что это deprecated.

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

7. "Для Python предложен JIT-компилятор, использующий технику co..."  +5 +/
Сообщение от Аноним (7), 26-Дек-23, 15:06 
Все регистры пришлось сохранять ещё потому, что на максимальных флагах защиты от всех микроархитектурных уязвимостей компилер всё нулил при выходе из функции, не анализируя, откуда функция вызывается. Ещё очень неудобно вызывать функции из асм-кода. Приходртся самому всё класть на стэк. Изменяется прототип - всё насмарку, уследить за этим трудно. Зато у меня одна из самых быстрых программ. К сожалению пока неопубликована. У меня есть кое-какие идеи как этот джит выкинуть, сгенерировав экспоненциально много (а для этого нужно будет произвести большой поиск в графе состояний ветвями и границами, при этом результат гарантированно даст не очень большой показатель экспоненты, так что будет feasible) функций силами компилятора, шаблонов, constexpr и хардкода, а потом выбрав нужную. Если покажет производительрость наравне или выше джита - вообще джит выкину. Тогда и зарелижу.
Ответить | Правка | Наверх | Cообщить модератору

9. "Для Python предложен JIT-компилятор, использующий технику co..."  +8 +/
Сообщение от Аноним (9), 26-Дек-23, 15:11 
Ты =очень= крутой, аноним.

Но пользоваться твоей программой я, конечно, не буду.

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

13. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Аноним (13), 26-Дек-23, 15:17 
А никто и не заставляет :). Кушайте Растишку.
Ответить | Правка | Наверх | Cообщить модератору

42. "Для Python предложен JIT-компилятор, использующий технику co..."  +1 +/
Сообщение от Аноним (9), 26-Дек-23, 18:02 
Чем больше я понимаю ЯП и учу Схему, тем больше пишу на баше.
Ответить | Правка | Наверх | Cообщить модератору

14. "Для Python предложен JIT-компилятор, использующий технику co..."  +1 +/
Сообщение от Аноним (14), 26-Дек-23, 15:19 
И я не крутой. Я просто перфекционист.
Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

43. "Для Python предложен JIT-компилятор, использующий технику co..."  +1 +/
Сообщение от YetAnotherOnanym (ok), 26-Дек-23, 18:05 
Я так понимаю, если тебя вовремя не остановить, ты дойдёшь до того, что всю computationslly-heavy функциональность запихнёшь в fpga'шку.
Ответить | Правка | Наверх | Cообщить модератору

76. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от x3who (?), 27-Дек-23, 00:29 
> Я так понимаю, если тебя вовремя не остановить, ты дойдёшь до того, что всю computationslly-heavy функциональность запихнёшь в fpga'шку.

Чот вот это не пахнет даже минимизацией и переводом в базис FPGA-шкинскиких LU: "сгенерировав экспоненциально много функций силами компилятора"

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

38. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Вы забыли заполнить поле Name (?), 26-Дек-23, 17:40 
> Ты =очень= крутой, аноним.
> Но пользоваться твоей программой я, конечно, не буду.

Если она есть вообще.

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

25. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Аноним (25), 26-Дек-23, 16:01 
а что делает твой софт?
Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

31. "Для Python предложен JIT-компилятор, использующий технику co..."  +7 +/
Сообщение от Аноним (31), 26-Дек-23, 16:34 
Когда доделаю - на опеннете может появиться анонс. А пока - "ничего".
Ответить | Правка | Наверх | Cообщить модератору

32. "Для Python предложен JIT-компилятор, использующий технику co..."  +5 +/
Сообщение от pavlinux (ok), 26-Дек-23, 16:58 
Приз за лучший "Коммент Года 2023"!  
Ответить | Правка | Наверх | Cообщить модератору

70. "Для Python предложен JIT-компилятор, использующий технику co..."  +3 +/
Сообщение от Аноним (70), 26-Дек-23, 22:44 
Тогда подождём. А пока - "НЕ НУЖНО".
Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

115. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Аноним (115), 27-Дек-23, 12:50 
"На словах я Лев Толстой, а не деле..."
Всё как обычно)
Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

10. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Аноним (10), 26-Дек-23, 15:14 
>сохранять на стеке

Вообще сохранять на стеке очень тормознуто, горячий обрамляющий цикл сделан так, что стэк код вообще редко трогает и оптимизирован с помощью llvm-mca. Отjitенный код стек вообще не трогает, переходы туда и обратно jmpами, все аргументы в регистрах.

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

79. "Для Python предложен JIT-компилятор, использующий технику co..."  –1 +/
Сообщение от Аноньимъ (ok), 27-Дек-23, 00:39 
И как оно работает в многопотоке?
Ответить | Правка | Наверх | Cообщить модератору

90. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Аноним (90), 27-Дек-23, 02:55 
Отлично.
Ответить | Правка | Наверх | Cообщить модератору

22. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Проходил мимо (?), 26-Дек-23, 15:57 
Судя по описанию, вами была проделана впечатляющая работа. Но у меня, после прочитанного, создалось впечатление, что проще было бы критичное по скорости ядро "движка" сразу писать на ассемблере, а на всем остальном делать только высокоуровневую обвязку.
Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

30. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Аноним (30), 26-Дек-23, 16:13 
Не, clang генерит быстрый код, когда часть из входных данных захардкодожена.
Ответить | Правка | Наверх | Cообщить модератору

28. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Пряник (?), 26-Дек-23, 16:04 
Это та самая борьба с компилятором, которую вылечили в расте?
Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

36. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Витюшка (?), 26-Дек-23, 17:37 
Выглядит очень интересно, как минимум много умных услов)

А что за проект? Язык программирования? Что он вообще делает?

Хобби? Работа? Наука?
Публикации есть?

Я в этом не силён. Но Zig позволяет тебе выбирать calling convention для каждой функции.

callconv(WINAPI)
callconv(.Inline)
callconv(.Naked)
callconv(.C)

Наверное ещё что-то. Много оптимизаций встроено в язык.

Писать compile time код - это просто песня. Generic код тоже.

Есть ассемблерные вставки в языке (из коробки).

Можно вызывать С код и С++.
Можно даже С++ код компилировать компилятором Zig! Те просто берёшь и компилируешь свой С++, а потом добавляешь Zig потихоньку. Переписывать всё не нужно.

Для твоей задач подходит идеально.
Быстрее чем на Zig уже не будет.

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

47. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Аноним (47), 26-Дек-23, 18:29 
>Но Zig позволяет тебе выбирать calling convention для каждой функции.

Да де-факто стандартные расширения сишки тоже позволяют, но из приведённого вами списка. При этом компилятор сгенерирует ненужные перебросы из одних регистров в другие с сохранениями состояния caller-saved на стеке. Мой код же стека касается в редких случаях - когда нужно выделить память. Тогда уже гулять-так гулять. Остальная свистопляска идёт в регистрах и кэше.

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

78. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Аноньимъ (ok), 27-Дек-23, 00:37 
Стек типо в кеше не присутствует?
Ответить | Правка | Наверх | Cообщить модератору

92. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Аноним (90), 27-Дек-23, 03:03 
Присутствует, так как иногда приходится дёргать. Но основные обращения к памяти - это считывание данных и запись результатов.
Ответить | Правка | Наверх | Cообщить модератору

80. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от x3who (?), 27-Дек-23, 00:39 
> ненужные перебросы из одних регистров в другие с сохранениями состояния caller-saved на стеке.

Если такое есть без причины - то это копулятор лучше чинить.. Это же его сфера ответственности!

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

95. "Для Python предложен JIT-компилятор, использующий технику co..."  +/
Сообщение от Аноним (90), 27-Дек-23, 03:20 
У компилятора есть причины её не инлайнить - она виртуальная. Остаётся thiscallом её вызывать. А thiscall - это конкретная конвенция, а поддержки кастомных конвенций увы нет.
Ответить | Правка | Наверх | Cообщить модератору

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

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




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

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